/**
* GRANITE DATA SERVICES
* Copyright (C) 2006-2015 GRANITE DATA SERVICES S.A.S.
*
* This file is part of the Granite Data Services Platform.
*
* Granite Data Services is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Granite Data Services is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
* General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA, or see <http://www.gnu.org/licenses/>.
*/
/**
* www.openamf.org
*
* Distributable under LGPL license. See terms of license at gnu.org.
*/
package flex.messaging.io;
import java.util.HashMap;
/**
* Implementation of MM's flashgateway.io.ASObject so that we can use
* ASTranslator
*
* @author Jason Calabrese <mail@jasoncalabrese.com>
* @author Sean C. Sullivan
*
* @version $Revision: 1.11 $, $Date: 2004/02/06 02:48:59 $
*/
public class ASObject extends HashMap<String, Object> {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Object type
*/
private String type;
public ASObject() {
super();
}
/**
* Creates ASObject with type
*
* @param type
*/
public ASObject(String type) {
super();
this.type = type;
}
/**
* Gets object type
*
* @return type
* @see #setType(String)
*/
public String getType() {
return type;
}
/**
* Sets object type
*
* @param type
*
* @see #getType()
*
*/
public void setType(String type) {
this.type = type;
}
/**
* Returns <tt>true</tt> if this map contains a mapping for the specified
* key. <br>
*
* @param key
* The key whose presence in this map is to be tested
* @return <tt>true</tt> if this map contains a mapping for the specified
* key.
*/
@Override
public boolean containsKey(Object key) {
return super.containsKey(toLowerCase(key));
}
/**
* Returns the value to which the specified key is mapped in this identity
* hash map, or <tt>null</tt> if the map contains no mapping for this
* key. A return value of <tt>null</tt> does not <i>necessarily</i>
* indicate that the map contains no mapping for the key; it is also
* possible that the map explicitly maps the key to <tt>null</tt>. The
* <tt>containsKey</tt> method may be used to distinguish these two
* cases.
*
* @param key
* the key whose associated value is to be returned.
* @return the value to which this map maps the specified key, or <tt>null</tt>
* if the map contains no mapping for this key.
* @see #put(Object, Object)
*/
@Override
public Object get(Object key) {
return super.get(toLowerCase(key));
}
/**
* Associates the specified value with the specified key in this map. If
* the map previously contained a mapping for this key, the old value is
* replaced.
*
* @param key
* key with which the specified value is to be associated.
* @param value
* value to be associated with the specified key.
* @return previous value associated with specified key, or <tt>null</tt>
* if there was no mapping for key. A <tt>null</tt> return can
* also indicate that the HashMap previously associated <tt>null</tt>
* with the specified key.
*/
@Override
public Object put(String key, Object value) {
return super.put((String)toLowerCase(key), value);
}
/**
* Removes the mapping for this key from this map if present.
*
* @param key
* key whose mapping is to be removed from the map.
* @return previous value associated with specified key, or <tt>null</tt>
* if there was no mapping for key. A <tt>null</tt> return can
* also indicate that the map previously associated <tt>null</tt>
* with the specified key.
*/
@Override
public Object remove(Object key) {
return super.remove(toLowerCase(key));
}
/**
* Gets lower case object if object was instance of String
*
* @param key
* @return lower case
*/
private Object toLowerCase(Object key) {
/*if (key != null
&& key instanceof String
&& amfSerializerConfig.forceLowerCaseKeys()) {
key = ((String) key).toLowerCase();
}*/
return key;
}
/**
* @return this method may return null
*
* @see #setType(String)
* @see #getType()
*
*/
public Object instantiate() {
Object ret;
try {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class<?> clazz = loader.loadClass(type);
ret = clazz.newInstance();
} catch (Exception e) {
ret = null;
}
return ret;
}
@Override
public String toString() {
return "ASObject[type=" + getType() + "," + super.toString() + "]";
}
}