package de.ovgu.cide;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.Platform;
public abstract class ExtensionPointManager<T> {
private final String namespace;
private final String extensionPointName;
protected ExtensionPointManager(String namespace, String extensionPointName) {
this.namespace = namespace;
this.extensionPointName = extensionPointName;
}
private List<T> cachedProviders = null;
private void loadProviders() {
if (cachedProviders != null)
return;
cachedProviders = new ArrayList<T>();
IExtension[] extensions = Platform.getExtensionRegistry()
.getExtensionPoint(namespace, extensionPointName)
.getExtensions();
for (IExtension extension : extensions) {
IConfigurationElement[] configurationElements = extension
.getConfigurationElements();
for (IConfigurationElement configurationElement : configurationElements) {
T proxy = parseExtension(configurationElement);
if (proxy != null)
cachedProviders.add(proxy);
}
}
debugPrintExtensions();
}
private void debugPrintExtensions() {
for (T le : getProviders())
System.out.println(le);
}
protected abstract T parseExtension(
IConfigurationElement configurationElement);
protected List<T> getProviders() {
loadProviders();
return Collections.unmodifiableList(cachedProviders);
}
}