package org.eclipse.gmf.tooling.runtime.providers.router; import java.util.HashSet; import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExecutableExtension; import org.eclipse.gmf.runtime.common.core.service.IOperation; import org.eclipse.gmf.runtime.diagram.ui.render.internal.providers.DiagramUIRenderEditPartProvider; import org.eclipse.gmf.runtime.diagram.ui.services.editpart.CreateRootEditPartOperation; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.View; /** * Base class for providers that want to override connection routers for * specific diagram types. * * @since 3.3 */ public abstract class CustomRoutersDiagramRootEditPartProvider extends DiagramUIRenderEditPartProvider implements IExecutableExtension { private final Set<String> myApplicableDiagramTypes = new HashSet<String>(); @Override public boolean provides(IOperation operation) { if (operation instanceof CreateRootEditPartOperation) { CreateRootEditPartOperation op = (CreateRootEditPartOperation) operation; View view = op.getView(); boolean result = view != null && myApplicableDiagramTypes.contains(view.getType()); return result; } return false; } @Override public abstract CustomRoutersDiagramRootEditPart createRootEditPart( Diagram diagram); @Override public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { IConfigurationElement[] applicability = config .getChildren(ExtensionSchema.ELEM_APPLICABLE_DIAGRAM); for (IConfigurationElement next : applicability) { String nextType = next.getAttribute(ExtensionSchema.ATTR_TYPE); if (nextType != null) { myApplicableDiagramTypes.add(nextType); } } } private static interface ExtensionSchema { public static final String ELEM_APPLICABLE_DIAGRAM = "applicable-diagram"; public static final String ATTR_TYPE = "type"; } }