001 package com.mockrunner.struts;
002
003 import java.io.File;
004 import java.io.FileInputStream;
005 import java.util.HashMap;
006 import java.util.Locale;
007 import java.util.Map;
008 import java.util.Properties;
009
010 import org.apache.commons.logging.Log;
011 import org.apache.commons.logging.LogFactory;
012 import org.apache.struts.util.MessageResources;
013 import org.apache.struts.util.MessageResourcesFactory;
014
015 /**
016 * This implementation of <code>MessageResources</code>
017 * takes the messages from a <code>Map</code> and can be
018 * used for testing purposes. The <code>Map</code> can
019 * also be filled with the contents of a property file.
020 * Note: This implementation ignores the specified <code>Locale</code>.
021 */
022 public class MapMessageResources extends MessageResources
023 {
024 private final static Log log = LogFactory.getLog(MapMessageResources.class);
025 private Map messages;
026
027 /**
028 * Creates an empty resources object
029 */
030 public MapMessageResources()
031 {
032 this(null);
033 }
034
035 /**
036 * Creates a resources object based on the specified
037 * map.
038 * @param messages the map of messages
039 */
040 public MapMessageResources(Map messages)
041 {
042 this(messages, null, "", true);
043 }
044
045 /**
046 * Creates a resources object based on the specified
047 * map.
048 * @param messages the map of messages
049 * @param factory the MessageResourcesFactory that created us
050 * @param config the configuration parameter
051 */
052 public MapMessageResources(Map messages, MessageResourcesFactory factory, String config)
053 {
054 super(factory, config);
055 this.messages = messages;
056 if(null == this.messages) this.messages = new HashMap();
057 }
058
059 /**
060 * Creates a resources object based on the specified
061 * map.
062 * @param messages the map of messages
063 * @param factory the MessageResourcesFactory that created us
064 * @param config the configuration parameter
065 * @param returnNull the returnNull property
066 */
067 public MapMessageResources(Map messages, MessageResourcesFactory factory, String config, boolean returnNull)
068 {
069 super(factory, config, returnNull);
070 this.messages = messages;
071 if(null == this.messages) this.messages = new HashMap();
072 }
073
074 /**
075 * Returns the message for the specified key. The locale
076 * is ignored.
077 * @param locale the locale (ignored)
078 * @param key the message key
079 * @return the message
080 */
081 public String getMessage(Locale locale, String key)
082 {
083 return (String)messages.get(key);
084 }
085
086 /**
087 * Adds a message for the specified key.
088 * @param key the message key
089 * @param value the message
090 */
091 public void putMessage(String key, String value)
092 {
093 messages.put(key, value);
094 }
095
096 /**
097 * Adds all messages in the specified map.
098 * @param messages the message map
099 */
100 public void putMessages(Map messages)
101 {
102 this.messages.putAll(messages);
103 }
104
105 /**
106 * Loads a property file and adds all messages
107 * from the file.
108 * @param propertyFileName the file name
109 */
110 public void putMessages(String propertyFileName)
111 {
112 putMessages(new File(propertyFileName));
113 }
114
115 /**
116 * Loads a property file and adds all messages
117 * from the file.
118 * @param propertyFile the file
119 */
120 public void putMessages(File propertyFile)
121 {
122 try
123 {
124 FileInputStream inputStream = new FileInputStream(propertyFile);
125 Properties properties = new Properties();
126 properties.load(inputStream);
127 putMessages(properties);
128 }
129 catch(Exception exc)
130 {
131 log.error(exc.getMessage(), exc);
132 }
133 }
134
135 /**
136 * Clears all messages.
137 */
138 public void clear()
139 {
140 super.formats.clear();
141 messages.clear();
142 }
143 }