package org.nightlabs.jfire.trade.admin.ui.overview; import java.util.Collection; import java.util.Collections; import java.util.SortedMap; import java.util.TreeMap; import org.apache.log4j.Logger; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.nightlabs.eclipse.extension.AbstractEPProcessor; /** * @author Daniel.Mazurek [at] NightLabs [dot] de * */ public class TradeAdminOverviewRegistry extends AbstractEPProcessor { private static final Logger logger = Logger.getLogger(TradeAdminOverviewRegistry.class); public static final String EXTENSION_POINT_ID = "org.nightlabs.jfire.trade.admin.ui.overview"; //$NON-NLS-1$ public static final String ELEMENT_CATEGORY = "category"; //$NON-NLS-1$ public static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$ private static TradeAdminOverviewRegistry sharedInstance; public static TradeAdminOverviewRegistry sharedInstance() { if (sharedInstance == null) { synchronized (TradeAdminOverviewRegistry.class) { if (sharedInstance == null) sharedInstance = new TradeAdminOverviewRegistry(); } } return sharedInstance; } protected TradeAdminOverviewRegistry() { checkProcessing(); } @Override public String getExtensionPointID() { return EXTENSION_POINT_ID; } @Override public void processElement(IExtension extension, IConfigurationElement element) throws Exception { if (element.getName().equalsIgnoreCase(ELEMENT_CATEGORY)) { try { TradeAdminCategoryFactory category = (TradeAdminCategoryFactory) element.createExecutableExtension( ATTRIBUTE_CLASS); int index = category.getIndex(); if (index2Category.containsKey(index) || index < 0) { int lastIndex = index2Category.size(); index2Category.put(lastIndex, category); logger.warn("TradeAdminCategoryFactory with index "+index+" already registered will use last index "+lastIndex); //$NON-NLS-1$ //$NON-NLS-2$ } else { index2Category.put(index, category); } } catch (CoreException e) { logger.error("Could not instantiate TradeAdminCategoryFactory"); //$NON-NLS-1$ } } } private SortedMap<Integer, TradeAdminCategoryFactory> index2Category = new TreeMap<Integer, TradeAdminCategoryFactory>(); // public SortedMap<Integer, TradeAdminCategoryFactory> getIndex2Catgeory() { // checkProcessing(); // return index2Category; // } public Collection<TradeAdminCategoryFactory> getCategories() { return Collections.unmodifiableCollection(index2Category.values()); } public TradeAdminCategoryFactory getCategory(int index) { return index2Category.get(index); } }