package org.marketcetera.quickfix; import org.marketcetera.core.ClassVersion; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** * * @author gmiller * $Id: FieldNameMap.java 16841 2014-02-20 19:59:04Z colin $ */ @ClassVersion("$Id: FieldNameMap.java 16841 2014-02-20 19:59:04Z colin $") public class FieldNameMap<T> { /** Creates a new instance of NameManager */ public FieldNameMap(int fieldID, Class<?> fieldClass) { addNames(fieldID, fieldClass); } Map<T, String> mForwardMap = new HashMap<T, String>(); Map<String, T> mBackwardMap = new HashMap<String, T>(); protected String cleanFieldName(String aName) { aName = aName.replace("_", " "); //$NON-NLS-1$ //$NON-NLS-2$ String [] pieces = aName.split(" "); //$NON-NLS-1$ StringBuffer newString = new StringBuffer(); boolean first = true; for (String aPiece : pieces) { if (!first) newString.append(' '); first = false; newString.append(aPiece.charAt(0)); newString.append(aPiece.substring(1).toLowerCase()); } return newString.toString(); } @SuppressWarnings("unchecked") //$NON-NLS-1$ private void addNames(int fieldID, Class<?> fieldClass) { Field [] fields = fieldClass.getFields(); for (Field aField : fields) { String fieldName = aField.getName(); if (! fieldName.equals("FIELD")) { //$NON-NLS-1$ int modifiers = aField.getModifiers(); if (Modifier.isPublic(modifiers)) { fieldName = cleanFieldName(fieldName); T fieldValue = null; try { fieldValue = (T)aField.get(null); mForwardMap.put(fieldValue, fieldName); mBackwardMap.put(fieldName, fieldValue); } catch (IllegalAccessException ex) {} } } } } public Collection<String> values() { return mForwardMap.values(); } public synchronized String getName(T fieldValue) { String aName = mForwardMap.get(fieldValue); return aName == null ? "Unknown" : aName; //$NON-NLS-1$ } public synchronized T getValue(String fieldValueName) { return mBackwardMap.get(fieldValueName); } }