package eclipseutils.core.extensions;
import java.util.Collection;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import patterns.visitor.Visitor;
import patterns.visitor.Visitors;
public final class ExtensionPoints {
public static <R> R visit(String extensionPointId,
Visitor<IConfigurationElement, R> visitor) {
IConfigurationElement[] configurationElements = Platform
.getExtensionRegistry().getConfigurationElementsFor(
extensionPointId);
return Visitors.visit(configurationElements, visitor);
}
public static <R> Collection<R> visitAll(String extensionPointId,
Visitor<IConfigurationElement, R> visitor) {
IConfigurationElement[] configurationElements = Platform
.getExtensionRegistry().getConfigurationElementsFor(
extensionPointId);
return Visitors.visitAllUnique(configurationElements, visitor);
}
public static <R> R find(String extensionPointId, final String attribute,
final String value, final ExtensionVisitor<R> visitor) {
return visit(extensionPointId, new ExtensionVisitor<R>(attribute) {
@Override
protected R create(IConfigurationElement configElement) {
if (value.equals(configElement.getAttribute(attribute))) {
return visitor.visit(configElement);
}
return null;
}
});
}
private ExtensionPoints() {
}
}