package com.liferay.ide.velocity.editor.completion;
import java.util.ArrayList;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
/**
* The {@link ProviderManager} manages all
* {@link com.liferay.ide.velocity.editor.completion.ICompletionProvider} extensions.
*
* @author Peter Friese
*/
public final class ProviderManager {
/** Singleton instance of this {@link ProviderManager}. */
private static ProviderManager instance;
/** This list contains all provider proxies. */
private ArrayList providerProxies;
/** The ID for the completion providers extenstion point. */
private String ID_EXTENSION_PROVIDERS = "com.liferay.ide.velocity.completionproviders";
/** The ID of the provider config element. */
private String ID_EXTENSION_PROVIDER = "provider";
/**
* Hide constructor.
*/
private ProviderManager() {
super();
}
/**
* @return The singleton instance of this provider manager.
*/
public static ProviderManager getInstance() {
if (instance == null) {
instance = new ProviderManager();
instance.init();
}
return instance;
}
/**
* Initialize the provider manager. All provider extension declared in the extension registry
* will be returned as proxy instances.
*/
private void init() {
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint longrunnerProvidersExtensionPoint = registry
.getExtensionPoint(ID_EXTENSION_PROVIDERS );
// get all extensions registered to this extension point
IExtension[] extensions = longrunnerProvidersExtensionPoint.getExtensions();
instantiateProxies(extensions);
}
/**
* This method instantiates proxies for extensions registered to the
* <code>com.lhsystems.rcp.longrunner.providers</code> extension point.
*
* @param extensions An array of extensions to the
* <code>com.lhsystems.rcp.longrunner.providers</code> extension point.
*/
private void instantiateProxies(IExtension[] extensions) {
providerProxies = new ArrayList();
for (int i = 0; i < extensions.length; i++) {
IExtension extension = extensions[i];
IConfigurationElement[] configurationElements = extension.getConfigurationElements();
for (int j = 0; j < configurationElements.length; j++) {
IConfigurationElement element = configurationElements[j];
if (element.getName().equals(ID_EXTENSION_PROVIDER)) {
providerProxies.add(new CompletionProviderProxy(element));
}
}
}
}
/**
* @return An array containing all providers managed by this manager.
*/
public ICompletionProvider[] getProviders() {
return (ICompletionProvider[]) providerProxies
.toArray(new ICompletionProvider[(providerProxies.size())]);
}
}