/** * */ package com.topsun.posclient.application; import java.util.LinkedHashMap; import java.util.Map; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; public class ContributionItemCategorysRegistry { //private static final Logger logger = SystemLogFactory.getLogger(ContributionItemCategorysRegistry.class); public static final String EXTENSION_ID = "com.topsun.posclient.application.contributionItemCategorys"; private static ContributionItemCategorysRegistry instance = null; public static ContributionItemCategorysRegistry getInstance() { if (instance == null) { synchronized (ContributionItemCategorysRegistry.class) { if (instance == null) { instance = new ContributionItemCategorysRegistry(); } } } return instance; } public ContributionItemCategorysRegistry() { init(); } private Map<String, ContributionItemCategoryDescriptor> descriptorMap = new LinkedHashMap<String, ContributionItemCategoryDescriptor>(); private void init() { IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(EXTENSION_ID); IExtension[] extensions = extensionPoint.getExtensions(); for (IExtension extension : extensions) { IConfigurationElement[] elements = extension.getConfigurationElements(); for (IConfigurationElement element : elements) { ContributionItemCategoryDescriptor descriptor = new ContributionItemCategoryDescriptor(); try { descriptor.init(element); addDescriptor(descriptor); } catch (Throwable e) { // logger.error(e); } } } } public ContributionItemCategoryDescriptor[] getDescriptors() { return descriptorMap.values().toArray(new ContributionItemCategoryDescriptor[descriptorMap.size()]); } public boolean contains(String categoryId) { return descriptorMap.containsKey(categoryId); } public void addDescriptor(ContributionItemCategoryDescriptor descriptor) { if (descriptorMap.containsKey(descriptor.getId())) { throw new IllegalArgumentException("Duplicated category id '" + descriptor.getId() + "'."); } descriptorMap.put(descriptor.getId(), descriptor); } }