package org.nightlabs.jfire.trade.ui.transfer.print;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.nightlabs.eclipse.extension.AbstractEPProcessor;
import org.nightlabs.jfire.trade.ui.TradePlugin;
/**
* Extension-Point Registry for registering {@link IArticleContainerPrinterFactory}s.
*
* @author Daniel Mazurek - daniel [at] nightlabs [dot] de
*
*/
public class ArticleContainerPrinterRegistry
extends AbstractEPProcessor
{
public static final String FACTOY_ELEMENT_NAME = "articleContainerPrinterFactory"; //$NON-NLS-1$
public static final String EXTENSION_POINT_ID = TradePlugin.getDefault().getBundle().getSymbolicName() + "." + FACTOY_ELEMENT_NAME; //$NON-NLS-1$
private static ArticleContainerPrinterRegistry sharedInstance;
private List<IArticleContainerPrinterFactory> factories = new ArrayList<IArticleContainerPrinterFactory>();
private ArticleContainerPrinterRegistry() {};
/**
* Returns and lazily creates a static instance of ArticleContainerPrinterRegistry
*/
public static ArticleContainerPrinterRegistry sharedInstance() {
if (sharedInstance == null) {
synchronized (ArticleContainerPrinterRegistry.class) {
if (sharedInstance == null) {
sharedInstance = new ArticleContainerPrinterRegistry();
sharedInstance.process();
}
}
}
return sharedInstance;
}
/* (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().equals(FACTOY_ELEMENT_NAME)) {
IArticleContainerPrinterFactory factory = (IArticleContainerPrinterFactory) element.createExecutableExtension("class"); //$NON-NLS-1$
factories.add(factory);
}
}
public List<IArticleContainerPrinterFactory> getFactories() {
checkProcessing();
return factories;
}
}