001 /*
002 * www.openamf.org
003 *
004 * Distributable under LGPL license. See terms of license at gnu.org.
005 */
006
007 package flex.messaging.io;
008
009 import java.util.HashMap;
010
011 /**
012 * Implementation of MM's flashgateway.io.ASObject so that we can use
013 * ASTranslator
014 *
015 * @author Jason Calabrese <mail@jasoncalabrese.com>
016 * @author Sean C. Sullivan
017 *
018 * @version $Revision: 1.11 $, $Date: 2004/02/06 02:48:59 $
019 */
020 public class ASObject extends HashMap<String, Object> {
021
022 /**
023 *
024 */
025 private static final long serialVersionUID = 1L;
026
027 /**
028 * Object type
029 */
030 private String type;
031
032 public ASObject() {
033 super();
034 }
035
036 /**
037 * Creates ASObject with type
038 *
039 * @param type
040 */
041 public ASObject(String type) {
042 super();
043 this.type = type;
044 }
045
046 /**
047 * Gets object type
048 *
049 * @return @see #setType(String)
050 *
051 */
052 public String getType() {
053 return type;
054 }
055
056 /**
057 * Sets object type
058 *
059 * @param type
060 *
061 * @see #getType()
062 *
063 */
064 public void setType(String type) {
065 this.type = type;
066 }
067
068 /**
069 * Returns <tt>true</tt> if this map contains a mapping for the specified
070 * key. <br>
071 *
072 * @param key
073 * The key whose presence in this map is to be tested
074 * @return <tt>true</tt> if this map contains a mapping for the specified
075 * key.
076 */
077 @Override
078 public boolean containsKey(Object key) {
079 return super.containsKey(toLowerCase(key));
080 }
081
082 /**
083 * Returns the value to which the specified key is mapped in this identity
084 * hash map, or <tt>null</tt> if the map contains no mapping for this
085 * key. A return value of <tt>null</tt> does not <i>necessarily</i>
086 * indicate that the map contains no mapping for the key; it is also
087 * possible that the map explicitly maps the key to <tt>null</tt>. The
088 * <tt>containsKey</tt> method may be used to distinguish these two
089 * cases.
090 *
091 * @param key
092 * the key whose associated value is to be returned.
093 * @return the value to which this map maps the specified key, or <tt>null</tt>
094 * if the map contains no mapping for this key.
095 * @see #put(Object, Object)
096 */
097 @Override
098 public Object get(Object key) {
099 return super.get(toLowerCase(key));
100 }
101
102 /**
103 * Associates the specified value with the specified key in this map. If
104 * the map previously contained a mapping for this key, the old value is
105 * replaced.
106 *
107 * @param key
108 * key with which the specified value is to be associated.
109 * @param value
110 * value to be associated with the specified key.
111 * @return previous value associated with specified key, or <tt>null</tt>
112 * if there was no mapping for key. A <tt>null</tt> return can
113 * also indicate that the HashMap previously associated <tt>null</tt>
114 * with the specified key.
115 */
116 @Override
117 public Object put(String key, Object value) {
118 return super.put((String)toLowerCase(key), value);
119 }
120
121 /**
122 * Removes the mapping for this key from this map if present.
123 *
124 * @param key
125 * key whose mapping is to be removed from the map.
126 * @return previous value associated with specified key, or <tt>null</tt>
127 * if there was no mapping for key. A <tt>null</tt> return can
128 * also indicate that the map previously associated <tt>null</tt>
129 * with the specified key.
130 */
131 @Override
132 public Object remove(Object key) {
133 return super.remove(toLowerCase(key));
134 }
135
136 /**
137 * Gets lower case object if object was instance of String
138 *
139 * @param key
140 * @return
141 */
142 private Object toLowerCase(Object key) {
143 /*if (key != null
144 && key instanceof String
145 && amfSerializerConfig.forceLowerCaseKeys()) {
146 key = ((String) key).toLowerCase();
147 }*/
148 return key;
149 }
150
151 /**
152 * @return this method may return null
153 *
154 * @see #setType(String)
155 * @see #getType()
156 *
157 */
158 public Object instantiate() {
159 Object ret;
160 try {
161 ClassLoader loader = Thread.currentThread().getContextClassLoader();
162 Class<?> clazz = loader.loadClass(type);
163 ret = clazz.newInstance();
164 } catch (Exception e) {
165 ret = null;
166 }
167 return ret;
168 }
169
170 @Override
171 public String toString() {
172 return "ASObject[type=" + getType() + "," + super.toString() + "]";
173 }
174 }