// --------------------------------------------------------------------------- // jWebSocket - Map Token Implementation // Copyright (c) 2010 Alexander Schulze, Innotrade GmbH // --------------------------------------------------------------------------- // This program 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 3 of the License, or (at your // option) any later version. // This program 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 program; if not, see <http://www.gnu.org/licenses/lgpl.html>. // --------------------------------------------------------------------------- package org.jwebsocket.token; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javolution.util.FastList; import javolution.util.FastMap; /** * A token is ... * @author aschulze */ public class MapToken extends BaseToken implements Token { private FastMap mData = null; /** * Creates a new empty instance of a token. * The token does not contain any items. */ public MapToken() { mData = new FastMap(); } /** * * @param aType */ public MapToken(String aType) { mData = new FastMap(); setType(aType); } /** * * @param aMap */ public MapToken(FastMap aMap) { mData = aMap; } /** * * @param aNS * @param aType */ public MapToken(String aNS, String aType) { mData = new FastMap(); setNS(aNS); setType(aType); } @Override public void clear() { mData.clear(); } @Override public void set(ITokenizable aTokenizable) { aTokenizable.writeToToken(this); } /** * * @param aMap */ public void setMap(FastMap aMap) { mData = aMap; } /** * * * @return */ @Override public Map getMap() { return mData; } private Object getValue(Object aValue) { if (aValue instanceof MapToken) { aValue = ((MapToken) aValue).getMap(); } else if (aValue instanceof Collection) { List lList = new FastList(); for (Object lItem : (Collection) aValue) { lList.add(getValue(lItem)); } aValue = lList; } else if (aValue instanceof Map) { Map lMap = new FastMap(); for (Entry<Object, Object> lItem : ((Map<Object, Object>) aValue).entrySet()) { lMap.put(lItem.getKey().toString(), getValue(lItem.getValue())); } aValue = lMap; } else if (aValue instanceof Object[]) { List lList = new FastList(); Object[] lOA = (Object[]) aValue; for (int lIdx = 0; lIdx < lOA.length; lIdx++) { lList.add(getValue(lOA[lIdx])); } aValue = lList; } return aValue; } /** * puts a new key/value pair into the token, in other words it adds a * new item to the token. * @param aKey key of the the token item. * @param aValue value of the token item. */ private void put(String aKey, Object aValue) { mData.put(aKey, getValue(aValue)); } /** * * @param aKey * @return */ private Object get(String aKey) { return mData.get(aKey); } /** * * @param aKey */ @Override public void remove(String aKey) { mData.remove(aKey); } /** * * @param aKey * @param aDefault * @return */ @Override public String getString(String aKey, String aDefault) { String lResult; try { lResult = (String) mData.get(aKey); if (lResult == null) { lResult = aDefault; } } catch (Exception lEx) { lResult = aDefault; } return lResult; } /** * * @param aKey */ @Override public void setString(String aKey, String aValue) { try { mData.put(aKey, aValue); } catch (Exception lEx) { // TODO: handle exception } } /** * * @param aKey * @return */ @Override public String getString(String aKey) { return getString(aKey, null); } /** * * @param aKey * @param aDefault * @return */ @Override public Integer getInteger(String aKey, Integer aDefault) { Integer lResult; try { lResult = (Integer) mData.get(aKey); if (lResult == null) { lResult = aDefault; } } catch (Exception lEx) { lResult = aDefault; } return lResult; } /** * * @param aKey * @return */ @Override public Integer getInteger(String aKey) { return getInteger(aKey, null); } @Override public void setInteger(String aKey, Integer aValue) { try { mData.put(aKey, aValue); } catch (Exception lEx) { // TODO: handle exception } } /** * * @param aKey * @param aDefault * @return */ @Override public Double getDouble(String aKey, Double aDefault) { Double lResult; try { Object lObj = mData.get(aKey); if (lObj instanceof String) { lResult = Double.parseDouble((String) lObj); } else if (lObj instanceof Integer) { lResult = (Integer) lObj / 1.0; } else { lResult = (Double) lObj; } if (lResult == null) { lResult = aDefault; } } catch (Exception lEx) { lResult = aDefault; } return lResult; } /** * * @param aKey * @return */ @Override public Double getDouble(String aKey) { return getDouble(aKey, null); } @Override public void setDouble(String aKey, Double aValue) { try { mData.put(aKey, aValue); } catch (Exception lEx) { // TODO: handle exception } } /** * * @param aKey * @param aDefault * @return */ @Override public Boolean getBoolean(String aKey, Boolean aDefault) { Boolean lResult; try { lResult = (Boolean) mData.get(aKey); if (lResult == null) { lResult = aDefault; } } catch (Exception lEx) { lResult = aDefault; } return lResult; } /** * * @param aArg * @return */ @Override public Boolean getBoolean(String aArg) { return getBoolean(aArg, null); } /** * * @param aKey */ @Override public void setBoolean(String aKey, Boolean aValue) { try { mData.put(aKey, aValue); } catch (Exception lEx) { // TODO: handle exception } } /** * * @param aKey * @return */ @Override public List getList(String aKey) { return getList(aKey, null); } /** * * @param aKey * @param aDefault * @return */ @Override public List getList(String aKey, List aDefault) { List lResult = null; try { lResult = (List) mData.get(aKey); if (lResult == null) { lResult = aDefault; } } catch (Exception lEx) { lResult = aDefault; } return lResult; } /** * * @param aKey * @param aList */ @Override public void setList(String aKey, List aList) { try { mData.put(aKey, aList); } catch (Exception lEx) { // TODO: handle exception } } /** * * @param aKey * @param aTokenizable */ @Override public void setToken(String aKey, ITokenizable aTokenizable) { Token lToken = TokenFactory.createToken(); aTokenizable.writeToToken(lToken); setToken(aKey, lToken); } /** * * @param aKey * @param aToken */ @Override public void setToken(String aKey, Token aToken) { try { mData.put(aKey, aToken); } catch (Exception lEx) { // TODO: handle exception } } /** * * @param aKey * @return */ @Override public Token getToken(String aKey) { return getToken(aKey, null); } /** * * @param aKey * @param aDefault * @return */ @Override public Token getToken(String aKey, Token aDefault) { Token lResult = null; try { lResult = (Token) mData.get(aKey); if (lResult == null) { lResult = aDefault; } } catch (Exception lEx) { lResult = aDefault; } return lResult; } /** * * @param aKey * @param aDefault * @return */ @Override public Map getMap(String aKey, Map aDefault) { Map lResult = null; try { lResult = (Map) mData.get(aKey); if (lResult == null) { lResult = aDefault; } } catch (Exception lEx) { lResult = aDefault; } return lResult; } /** * * @param aKey * @return */ @Override public Map getMap(String aKey) { return getMap(aKey, null); } /** * * @param aKey */ @Override public void setMap(String aKey, Map aMap) { try { mData.put(aKey, aMap); } catch (Exception lEx) { // TODO: handle exception } } /** * * @return */ @Override public String toString() { return mData.toString(); } /** * * @return */ @Override public Iterator<String> getKeyIterator() { return mData.keySet().iterator(); } /** * * @param aKey * @return */ @Override public Object getObject(String aKey) { Object lObj = null; try { lObj = mData.get(aKey); } catch (Exception lEx) { // } return lObj; } }