package org.marketcetera.quickfix;
import org.marketcetera.core.ClassVersion;
import java.util.HashMap;
import java.util.Map;
/**
* Singleton class that is a mapping of all {@link FIXVersion} to
* their corresponding {@link quickfix.DataDictionary} classes.
*
* @author toli
* @author anshul@marketcetera.com
*
* @version $Id: FIXDataDictionaryManager.java 16154 2012-07-14 16:34:05Z colin $
*/
@ClassVersion("$Id: FIXDataDictionaryManager.java 16154 2012-07-14 16:34:05Z colin $") //$NON-NLS-1$
public class FIXDataDictionaryManager {
/**
* Initializes the FIX data dictionary and returns it.
* <p>
* Note that this method is used for spring configuration
*
* @param version The FIX Version.
* @param location the location of the dictionary.
*
* @return the data dictionary instance.
*
* @throws FIXFieldConverterNotAvailable if there were errors.
*/
public static FIXDataDictionary initialize(FIXVersion version,
String location)
throws FIXFieldConverterNotAvailable {
FIXDataDictionary fixDD = new FIXDataDictionary(location);
synchronized (LOCK) {
fddMap.put(version, fixDD);
}
return fixDD;
}
/**
* Initializes the manager with the supplied table of FIX Versions
* and the URLs to their data dictionaries.
*
* @param urlMap The map with FIX Versions as keys and URLs to their
* data dictionaries as values.
*
* @throws FIXFieldConverterNotAvailable if there were errors.
*/
public static void initialize(Map<FIXVersion, String> urlMap)
throws FIXFieldConverterNotAvailable {
synchronized (LOCK) {
for (FIXVersion version : urlMap.keySet()) {
fddMap.put(version, new FIXDataDictionary(urlMap.get(version)));
}
}
}
/**
* Returns the data dictionary instance given the FIX Version.
*
* @param version The FIX Version value.
*
* @return the data dictionary instance for the supplied FIX version.
* Null, if no data dictionary instance is available.
*/
public static FIXDataDictionary getFIXDataDictionary(FIXVersion version) {
synchronized (LOCK) {
return fddMap.get(version);
}
}
private FIXDataDictionaryManager() {
//A utility class. No instances should be created.
}
private static final HashMap<FIXVersion, FIXDataDictionary> fddMap =
new HashMap<FIXVersion, FIXDataDictionary>();
private static final Object LOCK = new Object();
}