/**
*
*/
package org.nightlabs.jfire.reporting.ui.parameter;
import java.util.HashMap;
import java.util.Map;
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;
import org.nightlabs.jfire.reporting.parameter.id.ValueProviderID;
/**
* @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de -->
*
*/
public class ValueProviderGUIRegistry extends AbstractEPProcessor {
private static final Logger logger = Logger.getLogger(ValueProviderGUIRegistry.class);
public static final String EXTENSION_POINT_ID = "org.nightlabs.jfire.reporting.ui.valueProviderGUIFactory"; //$NON-NLS-1$
private Map<ValueProviderID, IValueProviderGUIFactory> factories = new HashMap<ValueProviderID, IValueProviderGUIFactory>();
/**
*
*/
public ValueProviderGUIRegistry() {
}
/* (non-Javadoc)
* @see org.nightlabs.base.ui.extensionpoint.AbstractEPProcessor#getExtensionPointID()
*/
@Override
public String getExtensionPointID() {
return EXTENSION_POINT_ID;
}
/* (non-Javadoc)
* @see org.nightlabs.base.ui.extensionpoint.AbstractEPProcessor#processElement(org.eclipse.core.runtime.IExtension, org.eclipse.core.runtime.IConfigurationElement)
*/
@Override
public void processElement(IExtension extension, IConfigurationElement element) throws Exception {
if (element.getName().equalsIgnoreCase("valueProviderGUIFactory")) { //$NON-NLS-1$
IValueProviderGUIFactory factory = null;
try {
factory = (IValueProviderGUIFactory) element.createExecutableExtension("class"); //$NON-NLS-1$
} catch (CoreException e) {
logger.error("Failed loading ValueProviderGUIFactory: " + element.getAttribute("class") + ", but will continue", e); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
return;
}
if (factories.get(factory.getValueProviderID()) != null)
logger.warn("Found duplicate registration for valueProviderID "+factory.getValueProviderID()+". Duplicate was from: "+element.getNamespaceIdentifier()); //$NON-NLS-1$ //$NON-NLS-2$
factories.put(factory.getValueProviderID(), factory);
}
}
public IValueProviderGUIFactory getValueProviderGUIFactory(ValueProviderID valueProviderID) {
checkProcessing();
return factories.get(valueProviderID);
}
private static ValueProviderGUIRegistry sharedInstance;
public static ValueProviderGUIRegistry sharedInstance() {
if (sharedInstance == null)
sharedInstance = new ValueProviderGUIRegistry();
return sharedInstance;
}
}