package org.xmind.ui.internal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.xmind.ui.mindmap.MindMapUI; import org.xmind.ui.util.Logger; /** * * @author Shawn Liu * @since 3.6.50 */ public class ShareOptionRegistry { private List<ShareOption> options = null; ShareOptionRegistry() { } public List<ShareOption> getOptions() { ensureLoaded(); return Collections.unmodifiableList(options); } /** * @return */ public boolean hasOptions() { ensureLoaded(); return !options.isEmpty(); } public ShareOption getOptionById(String id) { Assert.isLegal(id != null); ensureLoaded(); for (ShareOption option : options) { if (id.equals(option.getId())) { return option; } } return null; } public List<ShareOption> getOptionsByCategory(String category) { Assert.isLegal(category != null); ensureLoaded(); List<ShareOption> result = new ArrayList<ShareOption>(); for (ShareOption option : options) { if (category.equals(option.getCategory())) result.add(option); } return result; } private void ensureLoaded() { if (options != null) return; lazyLoad(); if (options == null) options = Collections.emptyList(); } private void lazyLoad() { IExtensionPoint extPoint = Platform.getExtensionRegistry() .getExtensionPoint(MindMapUI.PLUGIN_ID, RegistryConstants.EXT_SHARE_OPTIONS); Assert.isNotNull(extPoint); for (IConfigurationElement ele : extPoint.getConfigurationElements()) { if (RegistryConstants.TAG_OPTION.equals(ele.getName())) { readShareOption(ele); } } } private void readShareOption(IConfigurationElement element) { ShareOption descriptor; try { descriptor = new ShareOption(element); } catch (CoreException e) { Logger.log(e, "Failed to load share item: " + element); //$NON-NLS-1$ return; } if (options == null) { options = new ArrayList<ShareOption>(); } options.add(descriptor); } }