package org.codefaces.web.internal; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.codefaces.web.urls.URLParsingStrategy; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.osgi.framework.BundleContext; public class CodeFacesWebActivator extends Plugin { private static final String URL_PARSING_STRATEGIES_EXTENSION_POINT = "scmUrlParsingStrategies"; // The plug-in ID public static final String PLUGIN_ID = "org.codefaces.web"; // The shared instance private static CodeFacesWebActivator plugin; private URLParsingStrategy[] urlParseStrategies; public CodeFacesWebActivator() { urlParseStrategies = retrieveUrlParsingStrategiesFromExtensionPoint() .toArray(new URLParsingStrategy[0]); } /* * (non-Javadoc) * * @see * org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } /* * (non-Javadoc) * * @see * org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static CodeFacesWebActivator getDefault() { return plugin; } public URLParsingStrategy getUrlParseStrategies(String url) { for (URLParsingStrategy strategy : urlParseStrategies) { if (strategy.canParse(url)) { return strategy; } } return null; } /** * retrieve parsing strategies from extension point */ protected Collection<URLParsingStrategy> retrieveUrlParsingStrategiesFromExtensionPoint(){ Set<URLParsingStrategy> parsingStrategies = new HashSet<URLParsingStrategy>(); IConfigurationElement[] extensionPoints = Platform .getExtensionRegistry().getConfigurationElementsFor( PLUGIN_ID, URL_PARSING_STRATEGIES_EXTENSION_POINT); for (IConfigurationElement extensionPoint : extensionPoints) { try { URLParsingStrategy strategy = (URLParsingStrategy) extensionPoint .createExecutableExtension("class"); parsingStrategies.add(strategy); } catch (CoreException e) { IStatus status = new Status( Status.ERROR, CodeFacesWebActivator.PLUGIN_ID, "Errors occurs when loading URL Parsing Strategy extensions", e); getLog().log(status); } } return parsingStrategies; } }