package com.snowcattle.game.common.util; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; /** * * @author * @version */ public final class ArgumentList { /** * default constructor */ public ArgumentList() { } /** * Get a named argument value. * * @param strArgName Argument name. * @return The argument value. * */ public String get(String strArgName) { return get(strArgName, String.class); } // get /** * Get a specific named argument value * * @param strArgName Argument name. * @param nValueIndex Index of the value to retrieve (0 base) * * @return The argument value. */ @SuppressWarnings("unchecked") public <T> T get(String strArgName, Class<T> type) { Object oValue = m_hashValues.get(strArgName); if (oValue == null) { return null; } return (T)oValue; } // get /** * Add a named argument to the argument list * * @param strArgName Argument name. * @param strArgValue Argument value. * @return the argument index */ public ArgumentList set(String strArgName, Object objArgValue) { // Is there already an arg of this name in the list? Object oValue = m_hashValues.get(strArgName); m_hashValues.put(strArgName, objArgValue); if (oValue == null) { // Create a new named argument m_arrOrderedNames.add(strArgName); } return this; } // add /** * Replace any number of values with a single value * * @param strArgName Argument name to replace. * @param strArgValue Argument value. */ public void replace(String strArgName, Object strArgValue) { remove(strArgName); set(strArgName, strArgValue); } /** * Remove an argument and all its values from an ArgumentList. * @param strArgName Argument name to remove. */ public void remove(String strArgName) { m_hashValues.remove(strArgName); m_arrOrderedNames.remove(strArgName); } /** * Get the ordered list of argument names. * * @return the ordered list of argument names */ public Iterator<String> nameIterator() { return m_arrOrderedNames.iterator(); } // nameIterator /** * Is the Argument List empty. * * @return true => There are no arguments defined in the dictionary. */ public boolean isEmpty() { return m_arrOrderedNames.isEmpty(); } // isEmpty /** * get string representation * * @return String containing representation */ public String toString() { StringBuffer strBuf = new StringBuffer(256); strBuf.append('{'); boolean bFirst = true; Iterator<String> iterName = nameIterator(); while ( iterName.hasNext() ) { String strName = iterName.next(); Object objValue = get(strName,Object.class); if ( bFirst == false ) { strBuf.append(','); } strBuf.append(strName); strBuf.append('='); strBuf.append(objValue.toString()); bFirst = false; } strBuf.append('}'); return strBuf.toString(); } // Private data private HashMap<String,Object> m_hashValues = new HashMap<String, Object>(5,1.0f); private ArrayList<String> m_arrOrderedNames = new ArrayList<String>(5); } // end ArgumentList