package eclipseutils.core.extensions;
import java.util.Collection;
import org.eclipse.core.expressions.ExpressionTagNames;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.IConfigurationElement;
public abstract class ExtensionPoint<T> {
private final String id;
private final ExtensionVisitor<T> visitor;
private String elementId = "id";
public ExtensionPoint(String id, String... requiredAttribs) {
this.id = id;
visitor = new ExtensionVisitor<T>(requiredAttribs) {
public T create(IConfigurationElement configElement) {
return ExtensionPoint.this.create(configElement);
}
};
}
protected abstract T create(IConfigurationElement configElement);
public T find(String id) {
return ExtensionPoints.find(this.id, elementId, id, visitor);
}
public void setElementId(String id) {
elementId = id;
}
public Collection<T> findAll() {
return ExtensionPoints.visitAll(id, visitor);
}
public Collection<T> findAll(IEvaluationContext context,
String enablementName) {
return ExtensionPoints.visitAll(id, new ExpressionEvaluatingVisitor<T>(
context, enablementName, visitor));
}
public Collection<T> findAll(IEvaluationContext context) {
return findAll(context, ExpressionTagNames.ENABLEMENT);
}
}