diff options
43 files changed, 866 insertions, 68 deletions
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.uml.diagram.feature/feature.xml b/features/papyrus-main-features/org.eclipse.papyrus.uml.diagram.feature/feature.xml index 3468178ec3c..78bf8d322f1 100644 --- a/features/papyrus-main-features/org.eclipse.papyrus.uml.diagram.feature/feature.xml +++ b/features/papyrus-main-features/org.eclipse.papyrus.uml.diagram.feature/feature.xml @@ -190,4 +190,11 @@ http://www.eclipse.org/legal/epl-v10.html version="0.0.0" unpack="false"/> + <plugin + id="org.eclipse.papyrus.uml.diagram.sequence.restrictions" + download-size="0" + install-size="0" + version="0.0.0" + unpack="false"/> + </feature> diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/editpolicies/EventListenerEditPolicyProvider.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/editpolicies/EventListenerEditPolicyProvider.java index 83e25a9444f..c405b974a4f 100644 --- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/editpolicies/EventListenerEditPolicyProvider.java +++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/editpolicies/EventListenerEditPolicyProvider.java @@ -20,6 +20,7 @@ import org.eclipse.gmf.runtime.common.core.service.IOperation; import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation; import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.papyrus.infra.emf.utils.EMFHelper; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.css.helper.CSSHelper; /** @@ -35,6 +36,9 @@ public class EventListenerEditPolicyProvider extends AbstractProvider implements public boolean provides(IOperation operation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; EditPart editPart = epOperation.getEditPart(); + if (!ProviderServiceUtil.isEnabled(this, editPart)) { + return false; + } if (!(editPart instanceof GraphicalEditPart)) { return false; } diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/editpolicies/MarkerEventListenerEditPolicyProvider.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/editpolicies/MarkerEventListenerEditPolicyProvider.java index a8e2bd07abc..e554468228c 100644 --- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/editpolicies/MarkerEventListenerEditPolicyProvider.java +++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/editpolicies/MarkerEventListenerEditPolicyProvider.java @@ -20,6 +20,7 @@ import org.eclipse.gmf.runtime.common.core.service.IOperation; import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation; import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.papyrus.infra.emf.utils.EMFHelper; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.css.helper.CSSHelper; @@ -33,6 +34,9 @@ public class MarkerEventListenerEditPolicyProvider extends AbstractProvider impl public boolean provides(IOperation operation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; EditPart editPart = epOperation.getEditPart(); + if (!ProviderServiceUtil.isEnabled(this, editPart)) { + return false; + } if (!(editPart instanceof GraphicalEditPart)) { return false; } diff --git a/plugins/infra/gmfdiag/expansion/org.eclipse.papyrus.infra.gmfdiag.expansion/src/main/java/org/eclipse/papyrus/infra/gmfdiag/expansion/expansionmodel/providers/ExpandViewProvider.java b/plugins/infra/gmfdiag/expansion/org.eclipse.papyrus.infra.gmfdiag.expansion/src/main/java/org/eclipse/papyrus/infra/gmfdiag/expansion/expansionmodel/providers/ExpandViewProvider.java index ee2abe66333..f33c8929c8f 100644 --- a/plugins/infra/gmfdiag/expansion/org.eclipse.papyrus.infra.gmfdiag.expansion/src/main/java/org/eclipse/papyrus/infra/gmfdiag/expansion/expansionmodel/providers/ExpandViewProvider.java +++ b/plugins/infra/gmfdiag/expansion/org.eclipse.papyrus.infra.gmfdiag.expansion/src/main/java/org/eclipse/papyrus/infra/gmfdiag/expansion/expansionmodel/providers/ExpandViewProvider.java @@ -26,6 +26,7 @@ import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.papyrus.infra.gmfdiag.common.Activator; import org.eclipse.papyrus.infra.gmfdiag.common.providers.CustomAbstractViewProvider; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.AbstractRepresentation; import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.RepresentationKind; import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.rendering.DiagramExpansionSingleton; @@ -35,10 +36,10 @@ import org.eclipse.papyrus.infra.tools.util.ClassLoaderHelper; import org.eclipse.papyrus.infra.viewpoints.policy.ViewPrototype; /** - * + * * This class is a generic ViewProvider that is enable to create notation element by reading an expansion model * See Requirement #Req org.eclipse.papyrus.infra.gmfdiag.expansion.Req_010 - * #Req org.eclipse.papyrus.infra.gmfdiag.expansion.Req_040 + * #Req org.eclipse.papyrus.infra.gmfdiag.expansion.Req_040 * */ public class ExpandViewProvider extends CustomAbstractViewProvider implements IViewProvider { @@ -76,44 +77,52 @@ public class ExpandViewProvider extends CustomAbstractViewProvider implements IV @Override protected boolean provides(CreateNodeViewOperation operation) { + if (!ProviderServiceUtil.isEnabled(this, operation.getContainerView())) { + return false; + } return providesFromExpansionModel(operation); } + @Override protected boolean provides(CreateEdgeViewOperation operation) { + if (!ProviderServiceUtil.isEnabled(this, operation.getContainerView())) { + return false; + } return providesFromExpansionModel(operation); } /** * this method consults the expansion model to know if the view can be created in the current container. - * @param operation the proposition of creation + * + * @param operation + * the proposition of creation * @return true if the expansion model declare it, else false */ protected boolean providesFromExpansionModel(CreateChildViewOperation operation) { String currentDiagramType = getDiagramType(operation.getContainerView()); - //this diagram is known as extended? - if(diagramExpansionRegistry.mapChildreen.get(currentDiagramType)==null){ - Activator.log.trace(Activator.EXPANSION_TRACE,this.getClass().getName()+" " +currentDiagramType+ " not supported by loaded expansion model"); - - //this diagram is unknown + // this diagram is known as extended? + if (diagramExpansionRegistry.mapChildreen.get(currentDiagramType) == null) { + Activator.log.trace(Activator.EXPANSION_TRACE, this.getClass().getName() + " " + currentDiagramType + " not supported by loaded expansion model"); + + // this diagram is unknown return false; } - String graphicalType =operation.getSemanticHint(); + String graphicalType = operation.getSemanticHint(); String containerType; - if(operation.getContainerView() instanceof Diagram ){ - containerType=currentDiagramType; - } - else{ - containerType = operation.getContainerView().getType(); + if (operation.getContainerView() instanceof Diagram) { + containerType = currentDiagramType; + } else { + containerType = operation.getContainerView().getType(); } - Activator.log.trace(Activator.EXPANSION_TRACE,this.getClass().getName()+" try to create view in the container "+containerType+ " the view "+ operation.getSemanticHint()); //$NON-NLS-1$ //$NON-NLS-2$ - //get the list of childreen Id from a parent ID - List<String> possibleChildreenIDs=diagramExpansionRegistry.mapChildreen.get(currentDiagramType).parentChildrenRelation.get(containerType); - if(possibleChildreenIDs==null){ + Activator.log.trace(Activator.EXPANSION_TRACE, this.getClass().getName() + " try to create view in the container " + containerType + " the view " + operation.getSemanticHint()); //$NON-NLS-1$ //$NON-NLS-2$ + // get the list of childreen Id from a parent ID + List<String> possibleChildreenIDs = diagramExpansionRegistry.mapChildreen.get(currentDiagramType).parentChildrenRelation.get(containerType); + if (possibleChildreenIDs == null) { return false; } - //the child ID is known? - if(possibleChildreenIDs.contains(graphicalType)){ + // the child ID is known? + if (possibleChildreenIDs.contains(graphicalType)) { return true; } return false; @@ -133,21 +142,20 @@ public class ExpandViewProvider extends CustomAbstractViewProvider implements IV String currentDiagramType = getDiagramType(containerView); // the map from the diagram ID - if(diagramExpansionRegistry.mapChildreen.get(currentDiagramType)!=null){ - EObject eObject=diagramExpansionRegistry.mapChildreen.get(currentDiagramType).IDMap.get(graphicalType); - - //look for the representation and the view factory path - if( eObject instanceof AbstractRepresentation){ - String viewFactoryPath=((AbstractRepresentation)eObject).getViewFactory(); - if( viewFactoryPath!=null&& (!"".equals(viewFactoryPath.trim()))){ - return ClassLoaderHelper.loadClass( viewFactoryPath); - } - else{ - RepresentationKind representationKind=((AbstractRepresentation)eObject).getKind(); - if(representationKind!=null){ - viewFactoryPath=representationKind.getViewFactory(); - if( viewFactoryPath!=null){ - return ClassLoaderHelper.loadClass( viewFactoryPath); + if (diagramExpansionRegistry.mapChildreen.get(currentDiagramType) != null) { + EObject eObject = diagramExpansionRegistry.mapChildreen.get(currentDiagramType).IDMap.get(graphicalType); + + // look for the representation and the view factory path + if (eObject instanceof AbstractRepresentation) { + String viewFactoryPath = ((AbstractRepresentation) eObject).getViewFactory(); + if (viewFactoryPath != null && (!"".equals(viewFactoryPath.trim()))) { + return ClassLoaderHelper.loadClass(viewFactoryPath); + } else { + RepresentationKind representationKind = ((AbstractRepresentation) eObject).getKind(); + if (representationKind != null) { + viewFactoryPath = representationKind.getViewFactory(); + if (viewFactoryPath != null) { + return ClassLoaderHelper.loadClass(viewFactoryPath); } } } @@ -158,20 +166,21 @@ public class ExpandViewProvider extends CustomAbstractViewProvider implements IV /** * get the diagram type from a view. - * @param currentView the current view + * + * @param currentView + * the current view * @return the diagram type it can be also a view point */ protected String getDiagramType(View currentView) { - Diagram diagram=currentView.getDiagram(); - String currentDiagramType=null; - ViewPrototype viewPrototype=org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramUtils.getPrototype(diagram); - if(viewPrototype!=null){ - currentDiagramType=viewPrototype.getLabel(); + Diagram diagram = currentView.getDiagram(); + String currentDiagramType = null; + ViewPrototype viewPrototype = org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramUtils.getPrototype(diagram); + if (viewPrototype != null) { + currentDiagramType = viewPrototype.getLabel(); + } else { + currentDiagramType = diagram.getType(); } - else{ - currentDiagramType=diagram.getType(); - } - diagramType=currentDiagramType; + diagramType = currentDiagramType; return currentDiagramType; } @@ -182,11 +191,12 @@ public class ExpandViewProvider extends CustomAbstractViewProvider implements IV protected Class<?> getEdgeViewClass(IAdaptable semanticAdapter, View containerView, String graphicalType) { return getViewFactory(containerView, graphicalType); } + /** * {@inheritDoc} */ protected void initDiagramType() { - diagramType=null; + diagramType = null; } diff --git a/plugins/infra/gmfdiag/expansion/org.eclipse.papyrus.infra.gmfdiag.expansion/src/main/java/org/eclipse/papyrus/infra/gmfdiag/expansion/expansionmodel/providers/InducedRepresentationPolicyProvider.java b/plugins/infra/gmfdiag/expansion/org.eclipse.papyrus.infra.gmfdiag.expansion/src/main/java/org/eclipse/papyrus/infra/gmfdiag/expansion/expansionmodel/providers/InducedRepresentationPolicyProvider.java index 62548300d7b..0c0fafcb87b 100644 --- a/plugins/infra/gmfdiag/expansion/org.eclipse.papyrus.infra.gmfdiag.expansion/src/main/java/org/eclipse/papyrus/infra/gmfdiag/expansion/expansionmodel/providers/InducedRepresentationPolicyProvider.java +++ b/plugins/infra/gmfdiag/expansion/org.eclipse.papyrus.infra.gmfdiag.expansion/src/main/java/org/eclipse/papyrus/infra/gmfdiag/expansion/expansionmodel/providers/InducedRepresentationPolicyProvider.java @@ -21,6 +21,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPolicies import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.rendering.DiagramExpansionSingleton; import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.rendering.DiagramExpansionsRegistry; import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.rendering.InducedRepresentationCreationEditPolicy; @@ -34,7 +35,7 @@ import org.eclipse.papyrus.infra.viewpoints.policy.ViewPrototype; public class InducedRepresentationPolicyProvider extends AbstractProvider implements IEditPolicyProvider { - private DiagramExpansionsRegistry diagramExpansionRegistry=null; + private DiagramExpansionsRegistry diagramExpansionRegistry = null; /** * Constructor. @@ -46,40 +47,46 @@ public class InducedRepresentationPolicyProvider extends AbstractProvider implem /** * get the diagram type from a view. - * @param currentView the current view + * + * @param currentView + * the current view * @return the diagram type it can be also a view point */ protected String getDiagramType(View currentView) { - Diagram diagram=currentView.getDiagram(); - String currentDiagramType=null; - ViewPrototype viewPrototype=org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramUtils.getPrototype(diagram); - if(viewPrototype!=null){ - currentDiagramType=viewPrototype.getLabel(); - } - else{ - currentDiagramType=diagram.getType(); + Diagram diagram = currentView.getDiagram(); + String currentDiagramType = null; + ViewPrototype viewPrototype = org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramUtils.getPrototype(diagram); + if (viewPrototype != null) { + currentDiagramType = viewPrototype.getLabel(); + } else { + currentDiagramType = diagram.getType(); } return currentDiagramType; } + /** * {@inheritDoc} */ @Override public boolean provides(IOperation operation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; + if (!ProviderServiceUtil.isEnabled(this, epOperation.getEditPart())) { + return false; + } if (!(epOperation.getEditPart() instanceof IGraphicalEditPart)) { return false; } // Make sure this concern Block Definition Diagram only IGraphicalEditPart gep = (IGraphicalEditPart) epOperation.getEditPart(); - String diagramType=getDiagramType(gep.getNotationView()); - if(diagramExpansionRegistry.mapChildreen.get(diagramType)!=null){ + String diagramType = getDiagramType(gep.getNotationView()); + if (diagramExpansionRegistry.mapChildreen.get(diagramType) != null) { return true; } return false; } + /** * {@inheritDoc} */ diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/.project b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/.project index 05fd2ab6c76..74df1fb5be0 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/.project +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/.project @@ -46,6 +46,11 @@ <arguments> </arguments> </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ds.core.builder</name> + <arguments> + </arguments> + </buildCommand> </buildSpec> <natures> <nature>org.eclipse.jdt.core.javanature</nature> diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/.settings/org.eclipse.pde.ds.annotations.prefs b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/.settings/org.eclipse.pde.ds.annotations.prefs new file mode 100644 index 00000000000..73a356b6d05 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/.settings/org.eclipse.pde.ds.annotations.prefs @@ -0,0 +1,8 @@ +classpath=true +dsVersion=V1_3 +eclipse.preferences.version=1 +enabled=true +generateBundleActivationPolicyLazy=true +path=OSGI-INF +validationErrorLevel=error +validationErrorLevel.missingImplicitUnbindMethod=error diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF index bef69e99cdd..7fc026b8a63 100755 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF @@ -4,8 +4,7 @@ Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.common;singleton:=true Bundle-Version: 3.100.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: - org.eclipse.emf.ecore.edit;bundle-version="[2.9.0,3.0.0)", +Require-Bundle: org.eclipse.emf.ecore.edit;bundle-version="[2.9.0,3.0.0)", org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="[1.7.0,2.0.0)";visibility:=reexport, org.eclipse.papyrus.infra.emf.appearance;bundle-version="[2.0.0,3.0.0)", org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="[3.0.0,4.0.0)";visibility:=reexport, @@ -89,5 +88,8 @@ Export-Package: org.eclipse.papyrus.infra.gmfdiag.common, org.eclipse.papyrus.infra.gmfdiag.internal.common.model;x-internal:=true Import-Package: com.google.common.base;version="21.0.0", com.google.common.collect;version="21.0.0", - com.google.common.util.concurrent;version="21.0.0" + com.google.common.util.concurrent;version="21.0.0", + org.osgi.service.component.annotations;version="1.3.0";resolution:=optional +Service-Component: OSGI-INF/org.eclipse.papyrus.infra.gmfdiag.common.internal.service.EditPolicyProviderServiceImpl.xml, + OSGI-INF/org.eclipse.papyrus.infra.gmfdiag.common.internal.service.ViewProviderServiceImpl.xml Automatic-Module-Name: org.eclipse.papyrus.infra.gmfdiag.common diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/OSGI-INF/org.eclipse.papyrus.infra.gmfdiag.common.internal.service.EditPolicyProviderServiceImpl.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/OSGI-INF/org.eclipse.papyrus.infra.gmfdiag.common.internal.service.EditPolicyProviderServiceImpl.xml new file mode 100644 index 00000000000..20616bc68ae --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/OSGI-INF/org.eclipse.papyrus.infra.gmfdiag.common.internal.service.EditPolicyProviderServiceImpl.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.papyrus.infra.gmfdiag.common.internal.service.EditPolicyProviderServiceImpl"> + <service> + <provide interface="org.eclipse.papyrus.infra.gmfdiag.common.service.EditPolicyProviderService"/> + </service> + <reference bind="registerTester" interface="org.eclipse.papyrus.infra.gmfdiag.common.service.EditPolicyProviderTester" name="registerTester"/> + <implementation class="org.eclipse.papyrus.infra.gmfdiag.common.internal.service.EditPolicyProviderServiceImpl"/> +</scr:component>
\ No newline at end of file diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/OSGI-INF/org.eclipse.papyrus.infra.gmfdiag.common.internal.service.ViewProviderServiceImpl.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/OSGI-INF/org.eclipse.papyrus.infra.gmfdiag.common.internal.service.ViewProviderServiceImpl.xml new file mode 100644 index 00000000000..f9fb788e860 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/OSGI-INF/org.eclipse.papyrus.infra.gmfdiag.common.internal.service.ViewProviderServiceImpl.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.papyrus.infra.gmfdiag.common.internal.service.ViewProviderServiceImpl"> + <service> + <provide interface="org.eclipse.papyrus.infra.gmfdiag.common.service.ViewProviderService"/> + </service> + <reference bind="registerTester" interface="org.eclipse.papyrus.infra.gmfdiag.common.service.ViewProviderTester" name="registerTester"/> + <implementation class="org.eclipse.papyrus.infra.gmfdiag.common.internal.service.ViewProviderServiceImpl"/> +</scr:component>
\ No newline at end of file diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/build.properties b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/build.properties index a1b5cb5e1a2..b9f2a05f653 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/build.properties +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/build.properties @@ -8,7 +8,8 @@ bin.includes = .options,\ plugin.xml,\ schema/,\ icons/,\ - model/ + model/,\ + OSGI-INF/ output.. = bin/ jars.compile.order=. src.includes = about.html diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/plugin.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/plugin.xml index c45d6968703..60026473a38 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/plugin.xml +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/plugin.xml @@ -127,6 +127,18 @@ priority="1" startKind="lazy"> </service> + <serviceFactory + classname="org.eclipse.papyrus.infra.gmfdiag.common.service.ViewProviderService$Factory" + id="org.eclipse.papyrus.infra.gmfdiag.common.service.ViewProviderService" + priority="1" + startKind="lazy"> + </serviceFactory> + <serviceFactory + classname="org.eclipse.papyrus.infra.gmfdiag.common.service.EditPolicyProviderService$Factory" + id="org.eclipse.papyrus.infra.gmfdiag.common.service.EditPolicyProviderService" + priority="1" + startKind="lazy"> + </serviceFactory> </extension> <extension point="org.eclipse.papyrus.infra.services.labelprovider.labelProvider"> diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/internal/service/EditPolicyProviderServiceImpl.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/internal/service/EditPolicyProviderServiceImpl.java new file mode 100644 index 00000000000..ad13bf561cc --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/internal/service/EditPolicyProviderServiceImpl.java @@ -0,0 +1,41 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation (Bug 533701) + * + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.common.internal.service; + +import java.util.HashSet; +import java.util.Set; + +import org.eclipse.gef.EditPart; +import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; +import org.eclipse.papyrus.infra.gmfdiag.common.service.EditPolicyProviderService; +import org.eclipse.papyrus.infra.gmfdiag.common.service.EditPolicyProviderTester; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +import com.google.common.base.Predicates; + +@Component +public class EditPolicyProviderServiceImpl implements EditPolicyProviderService { + + private Set<EditPolicyProviderTester> testers = new HashSet<>(); + + @Override + public boolean isEnabled(IEditPolicyProvider provider, EditPart editPart) { + return testers.stream().map(tester -> tester.isEnabled(provider, editPart)).noneMatch(Predicates.equalTo(Boolean.FALSE)); + } + + @Reference + public void registerTester(EditPolicyProviderTester tester) { + testers.add(tester); + } +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/internal/service/ViewProviderServiceImpl.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/internal/service/ViewProviderServiceImpl.java new file mode 100644 index 00000000000..64b6ed738ae --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/internal/service/ViewProviderServiceImpl.java @@ -0,0 +1,40 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation (Bug 533701) + * + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.common.internal.service; + +import java.util.HashSet; +import java.util.Set; + +import org.eclipse.gmf.runtime.diagram.core.providers.IViewProvider; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ViewProviderService; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ViewProviderTester; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +@Component +public class ViewProviderServiceImpl implements ViewProviderService { + + private Set<ViewProviderTester> testers = new HashSet<>(); + + @Override + public boolean isEnabled(IViewProvider provider, View view) { + return testers.stream().map(tester -> tester.isEnabled(provider, view)).reduce(true, Boolean::logicalAnd); + } + + @Reference + public void registerTester(ViewProviderTester tester) { + testers.add(tester); + } + +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/CustomAbstractViewProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/CustomAbstractViewProvider.java index eb02c910275..055aa16e510 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/CustomAbstractViewProvider.java +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/CustomAbstractViewProvider.java @@ -24,6 +24,7 @@ import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.Edge; import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.viewpoints.policy.ViewPrototype; /** @@ -61,6 +62,9 @@ public abstract class CustomAbstractViewProvider extends AbstractViewProvider { */ @Override protected boolean provides(CreateViewForKindOperation op) { + if (!ProviderServiceUtil.isEnabled(this, op.getContainerView())) { + return false; + } if (!isRelevantDiagram(op.getContainerView().getDiagram())) { return false; } @@ -81,6 +85,9 @@ public abstract class CustomAbstractViewProvider extends AbstractViewProvider { */ @Override protected boolean provides(CreateEdgeViewOperation operation) { + if (!ProviderServiceUtil.isEnabled(this, operation.getContainerView())) { + return false; + } if (!isRelevantDiagram(operation.getContainerView().getDiagram())) { return false; } @@ -93,6 +100,9 @@ public abstract class CustomAbstractViewProvider extends AbstractViewProvider { */ @Override protected boolean provides(CreateNodeViewOperation operation) { + if (!ProviderServiceUtil.isEnabled(this, operation.getContainerView())) { + return false; + } if (!isRelevantDiagram(operation.getContainerView().getDiagram())) { return false; } @@ -138,7 +148,7 @@ public abstract class CustomAbstractViewProvider extends AbstractViewProvider { /** * This method is used to know id the diagram is conform to type, it may be a prototype view, or a generatedDiagram - * + * * @param diagram * @return */ diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/CustomEditPolicyProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/CustomEditPolicyProvider.java index d3d717f2201..b3923d22860 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/CustomEditPolicyProvider.java +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/CustomEditPolicyProvider.java @@ -23,6 +23,7 @@ import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.core.services.ServicesRegistry; import org.eclipse.papyrus.infra.emf.utils.EMFHelper; import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.HighlightEditPolicy; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; /** @@ -70,8 +71,11 @@ public class CustomEditPolicyProvider implements IEditPolicyProvider { * {@inheritDoc} */ @Override - public boolean provides(IOperation operation) { + public boolean provides(IOperation operation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; + if (!ProviderServiceUtil.isEnabled(this, epOperation.getEditPart())) { + return false; + } try { EditPart editPart = epOperation.getEditPart(); if (!(editPart instanceof GraphicalEditPart)) { diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/ExternalReferenceEditPolicyProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/ExternalReferenceEditPolicyProvider.java index 39dd468c4b0..df832001fad 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/ExternalReferenceEditPolicyProvider.java +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/providers/ExternalReferenceEditPolicyProvider.java @@ -19,6 +19,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvide import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.ExternalReferenceEditPolicy; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; /** @@ -35,6 +36,9 @@ public class ExternalReferenceEditPolicyProvider extends AbstractProvider implem public boolean provides(IOperation operation) { if (operation instanceof CreateEditPoliciesOperation) { CreateEditPoliciesOperation createOperation = (CreateEditPoliciesOperation) operation; + if (!ProviderServiceUtil.isEnabled(this, createOperation.getEditPart())) { + return false; + } try { if (ServiceUtilsForEditPart.getInstance().getServiceRegistry(createOperation.getEditPart()) != null) { return createOperation.getEditPart().getModel() instanceof Node; diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/EditPolicyProviderService.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/EditPolicyProviderService.java new file mode 100644 index 00000000000..ed026605c72 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/EditPolicyProviderService.java @@ -0,0 +1,77 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation (Bug 533701) + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.gmfdiag.common.service; + +import org.eclipse.gef.EditPart; +import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; +import org.eclipse.papyrus.infra.core.services.IServiceFactory; +import org.eclipse.papyrus.infra.core.services.ServiceException; +import org.eclipse.papyrus.infra.core.services.ServicesRegistry; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; + +/** + * <p> + * A service used to increase the control diagrams have over the {@link IEditPolicyProvider} + * that should be enabled in that diagram. All generic Papyrus {@link IEditPolicyProvider} are expected to use this + * service before deciding if they should indeed be enabled. + * </p> + * <p> + * Note that this service is here to provide an additional pre-check to determine if a + * provider is allowed to work in a specific diagram. However, this service knows nothing + * about the internal requirements/dependencies of a specific provider, and should not + * <strong>replace</strong> the {@link IEditPolicyProvider#provides(org.eclipse.gmf.runtime.common.core.service.IOperation)} + * method (i.e. the actual provider is still expected to run its own checks, in addition + * to calling this service). + * </p> + * + * @since 3.100 + */ +public interface EditPolicyProviderService { + + /** + * Tests whether the given provider is allowed in the context of that edit part + * + * @param provider + * @param editPart + * @return + */ + boolean isEnabled(IEditPolicyProvider provider, EditPart editPart); + + public static class Factory implements IServiceFactory { + + @Override + public void init(ServicesRegistry servicesRegistry) throws ServiceException { + // Nothing + } + + @Override + public void startService() throws ServiceException { + // Nothing + } + + @Override + public void disposeService() throws ServiceException { + // Nothing + } + + @Override + public EditPolicyProviderService createServiceInstance() throws ServiceException { + BundleContext bundleContext = FrameworkUtil.getBundle(Factory.class).getBundleContext(); + ServiceReference<EditPolicyProviderService> serviceReference = bundleContext.getServiceReference(EditPolicyProviderService.class); + return bundleContext.getService(serviceReference); + } + } +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/EditPolicyProviderTester.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/EditPolicyProviderTester.java new file mode 100644 index 00000000000..7bfd7ad94dc --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/EditPolicyProviderTester.java @@ -0,0 +1,39 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation (Bug 533701) + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.gmfdiag.common.service; + +import org.eclipse.gef.EditPart; +import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; + +/** + * <p> + * A contribution to the {@link EditPolicyProviderService} + * </p> + * + * @since 3.100 + */ +public interface EditPolicyProviderTester { + + /** + * Tests whether the given provider is allowed in the context of that edit part + * + * @param provider + * @param editPart + * @return + * <code>false</code> if this tester explicitly rejects this provider in the context of that edit part; + * <code>true</code> otherwise. + */ + boolean isEnabled(IEditPolicyProvider provider, EditPart editPart); +} + diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ProviderServiceUtil.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ProviderServiceUtil.java new file mode 100644 index 00000000000..adbbcde0f5e --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ProviderServiceUtil.java @@ -0,0 +1,130 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation (Bug 533701) + * + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.common.service; + +import org.eclipse.gef.EditPart; +import org.eclipse.gmf.runtime.diagram.core.providers.IViewProvider; +import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.infra.core.services.ServicesRegistry; +import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject; +import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; + +/** + * <p> + * Utility methods to use the {@link ViewProviderService} and {@link EditPolicyProviderService} + * </p> + * + * @since 3.100 + */ +public class ProviderServiceUtil { + + /** + * <p> + * Tests if the given edit part is a Papyrus Edit Part, by testing if a Papyrus {@link ServicesRegistry} + * is present. + * </p> + * + * @param editPart + * The edit part to test + * @return + * <code>true</code> if this edit part is part of a Papyrus environment (Using a Papyrus {@link ServicesRegistry}), <code>false</code> otherwise + */ + public static boolean isPapyrusPart(EditPart editPart) { + try { + return ServiceUtilsForEditPart.getInstance().getServiceRegistry(editPart) != null; + } catch (Exception ex) { + // Ignore & return + return false; + } + } + + /** + * <p> + * Tests if the given View is a Papyrus View, by testing if a Papyrus {@link ServicesRegistry} + * is present. + * </p> + * + * @param view + * The view to test + * @return + * <code>true</code> if this view is part of a Papyrus environment (Using a Papyrus {@link ServicesRegistry}), <code>false</code> otherwise + */ + public static boolean isPapyrusView(View view) { + try { + return ServiceUtilsForEObject.getInstance().getServiceRegistry(view) != null; + } catch (Exception ex) { + // Ignore & return + return false; + } + } + + /** + * <p> + * Helper method to use the {@link ViewProviderService}. + * </p> + * <p> + * This methods verifies that the edit part is a Papyrus Edit Part (Via {@link #isPapyrusPart(EditPart)}), + * and then calls {@link ViewProviderService#isEnabled(IViewProvider, EditPart)} + * </p> + * + * @param provider + * @param editPart + * @return + * + * @see ViewProviderService#isEnabled(IViewProvider, EditPart) + */ + public static boolean isEnabled(IViewProvider provider, View view) { + if (isPapyrusView(view)) { + try { + ViewProviderService service = ServiceUtilsForEObject.getInstance().getService(ViewProviderService.class, view); + return service.isEnabled(provider, view); + } catch (Exception ex) { + // Ignore & return + return false; + } + } + + return false; + } + + /** + * <p> + * Helper method to use the {@link EditPolicyProviderService}. + * </p> + * <p> + * This methods verifies that the edit part is a Papyrus Edit Part (Via {@link #isPapyrusPart(EditPart)}), + * and then calls {@link EditPolicyProviderService#isEnabled(IEditPolicyProvider, EditPart)} + * </p> + * + * @param provider + * @param editPart + * @return + * + * @see {@link EditPolicyProviderService#isEnabled(IEditPolicyProvider, EditPart)} + */ + public static boolean isEnabled(IEditPolicyProvider provider, EditPart editPart) { + if (isPapyrusPart(editPart)) { + try { + EditPolicyProviderService service = ServiceUtilsForEditPart.getInstance().getService(EditPolicyProviderService.class, editPart); + return service.isEnabled(provider, editPart); + } catch (Exception ex) { + // Ignore & return + return false; + } + } + + return false; + } + +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ViewProviderService.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ViewProviderService.java new file mode 100644 index 00000000000..7a16c39b72b --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ViewProviderService.java @@ -0,0 +1,78 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation (Bug 533701) + * + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.common.service; + +import org.eclipse.gmf.runtime.diagram.core.providers.IViewProvider; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.infra.core.services.IServiceFactory; +import org.eclipse.papyrus.infra.core.services.ServiceException; +import org.eclipse.papyrus.infra.core.services.ServicesRegistry; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceReference; + +/** + * <p> + * A service used to increase the control diagrams have over the {@link IViewProvider} + * that should be enabled in that diagram. All generic Papyrus {@link IViewProvider} are expected to use this + * service before deciding if they should indeed be enabled. + * </p> + * <p> + * Note that this service is here to provide an additional pre-check to determine if a + * provider is allowed to work in a specific diagram. However, this service knows nothing + * about the internal requirements/dependencies of a specific provider, and should not + * <strong>replace</strong> the {@link IViewProvider#provides(org.eclipse.gmf.runtime.common.core.service.IOperation)} + * method (i.e. the actual provider is still expected to run its own checks, in addition + * to calling this service). + * </p> + * + * @since 3.100 + */ +public interface ViewProviderService { + /** + * Tests whether the given provider is allowed in the context of that view + * + * @param provider + * @param view + * @return + */ + boolean isEnabled(IViewProvider provider, View view); + + + + public static class Factory implements IServiceFactory { + + @Override + public void init(ServicesRegistry servicesRegistry) throws ServiceException { + // Nothing + } + + @Override + public void startService() throws ServiceException { + // Nothing + } + + @Override + public void disposeService() throws ServiceException { + // Nothing + } + + @Override + public ViewProviderService createServiceInstance() throws ServiceException { + BundleContext bundleContext = FrameworkUtil.getBundle(Factory.class).getBundleContext(); + ServiceReference<ViewProviderService> serviceReference = bundleContext.getServiceReference(ViewProviderService.class); + return bundleContext.getService(serviceReference); + } + + } +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ViewProviderTester.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ViewProviderTester.java new file mode 100644 index 00000000000..f2928331534 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/service/ViewProviderTester.java @@ -0,0 +1,39 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation (Bug 533701) + * + *****************************************************************************/ + +package org.eclipse.papyrus.infra.gmfdiag.common.service; + +import org.eclipse.gmf.runtime.diagram.core.providers.IViewProvider; +import org.eclipse.gmf.runtime.notation.View; + +/** + * <p> + * A contribution to the {@link ViewProviderService} + * </p> + * + * @since 3.100 + */ +public interface ViewProviderTester { + + /** + * Tests whether the given provider is allowed in the context of that edit part + * + * @param provider + * @param editPart + * @return + * <code>false</code> if this tester explicitly rejects this provider in the context of that edit part; + * <code>true</code> otherwise. + */ + boolean isEnabled(IViewProvider provider, View view); +} + diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicyProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicyProvider.java index 117555e8eff..24535b8498a 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicyProvider.java +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicyProvider.java @@ -20,13 +20,18 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPolicies import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.core.services.ServicesRegistry; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; public class CustomizableDropEditPolicyProvider extends AbstractProvider implements IEditPolicyProvider { + @Override public boolean provides(IOperation operation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; + if (!ProviderServiceUtil.isEnabled(this, epOperation.getEditPart())) { + return false; + } try { ServicesRegistry registry = ServiceUtilsForEditPart.getInstance().getServiceRegistry(epOperation.getEditPart()); @@ -36,6 +41,7 @@ public class CustomizableDropEditPolicyProvider extends AbstractProvider impleme } } + @Override public void createEditPolicies(EditPart editPart) { EditPolicy defaultDropEditPolicy = editPart.getEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE); EditPolicy defaultCreationEditPolicy = editPart.getEditPolicy(EditPolicyRoles.CREATION_ROLE); diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/providers/HyperlinkEditPolicyProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/providers/HyperlinkEditPolicyProvider.java index 10fab80d91b..198f033b389 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/providers/HyperlinkEditPolicyProvider.java +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/providers/HyperlinkEditPolicyProvider.java @@ -22,6 +22,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPolicies import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.core.services.ServicesRegistry; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; import org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies.HyperlinkNavigationMenuEditPolicy; @@ -38,10 +39,14 @@ public class HyperlinkEditPolicyProvider extends AbstractProvider implements IEd * * This provider can handle GraphicalEditParts */ + @Override public boolean provides(IOperation operation) { if (operation instanceof CreateEditPoliciesOperation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; EditPart editPart = epOperation.getEditPart(); + if (!ProviderServiceUtil.isEnabled(this, editPart)) { + return false; + } try { ServicesRegistry registry = ServiceUtilsForEditPart.getInstance().getServiceRegistry(editPart); if (registry == null) { @@ -63,6 +68,7 @@ public class HyperlinkEditPolicyProvider extends AbstractProvider implements IEd * * Installs the Hyperlink and Navigation edit policies */ + @Override public void createEditPolicies(EditPart editPart) { editPart.installEditPolicy(org.eclipse.papyrus.infra.gmfdiag.navigation.editpolicy.NavigationEditPolicy.EDIT_POLICY_ID, new HyperlinkNavigationMenuEditPolicy()); editPart.installEditPolicy(org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies.NavigationEditPolicy.NAVIGATION_POLICY, new org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies.NavigationEditPolicy()); diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/provider/NavigationEditPolicyProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/provider/NavigationEditPolicyProvider.java index 41bb3fce0fa..5526653b7f9 100644 --- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/provider/NavigationEditPolicyProvider.java +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.navigation/src/org/eclipse/papyrus/infra/gmfdiag/navigation/provider/NavigationEditPolicyProvider.java @@ -16,6 +16,7 @@ import org.eclipse.gmf.runtime.common.core.service.AbstractProvider; import org.eclipse.gmf.runtime.common.core.service.IOperation; import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation; import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; import org.eclipse.papyrus.infra.gmfdiag.navigation.editpolicy.NavigationEditPolicy; import org.eclipse.papyrus.infra.services.navigation.service.NavigationService; @@ -28,6 +29,9 @@ public class NavigationEditPolicyProvider extends AbstractProvider implements IE CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; EditPart editPart = epOperation.getEditPart(); + if (!ProviderServiceUtil.isEnabled(this, editPart)) { + return false; + } try { NavigationService navigationService = ServiceUtilsForEditPart.getInstance().getService(NavigationService.class, editPart); return navigationService != null; diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/providers/CommentEditPolicyProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/providers/CommentEditPolicyProvider.java index 5a5c0c9ab92..bcf1781579d 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/providers/CommentEditPolicyProvider.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/providers/CommentEditPolicyProvider.java @@ -21,6 +21,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPolicies import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.papyrus.infra.core.services.ServicesRegistry; import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.uml.diagram.common.editpolicies.AbstractNameReferencesListenerEditPolicy; import org.eclipse.papyrus.uml.diagram.common.editpolicies.CommentReferencesListenerEditPolicy; import org.eclipse.papyrus.uml.tools.utils.UMLUtil; @@ -38,6 +39,9 @@ public class CommentEditPolicyProvider extends AbstractProvider implements IEdit @Override public boolean provides(IOperation operation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; + if (!ProviderServiceUtil.isEnabled(this, epOperation.getEditPart())) { + return false; + } Element element = UMLUtil.resolveUMLElement(epOperation.getEditPart()); if (!(element instanceof Comment)) { return false; diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/providers/CustomEditPolicyProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/providers/CustomEditPolicyProvider.java index 82506653ac6..8f770c24028 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/providers/CustomEditPolicyProvider.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/providers/CustomEditPolicyProvider.java @@ -1,6 +1,6 @@ /***************************************************************************** * Copyright (c) 2015 CEA LIST and others. - * + * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,7 +8,7 @@ * * Contributors: * Fanch Bonnabesse (ALL4TEC) fanch.bonnabesse@alltec.net - Bug 419357 - * + * *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.common.providers; @@ -21,6 +21,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPolicies import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.papyrus.infra.gmfdiag.common.editpart.NodeEditPart; import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.DefaultSemanticEditPolicy; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.uml.diagram.common.editpolicies.CustomDefaultSemanticEditPolicy; /** @@ -35,6 +36,9 @@ public class CustomEditPolicyProvider extends AbstractProvider implements IEditP public boolean provides(final IOperation operation) { if (operation instanceof CreateEditPoliciesOperation) { final EditPart editPart = ((CreateEditPoliciesOperation) operation).getEditPart(); + if (!ProviderServiceUtil.isEnabled(this, editPart)) { + return false; + } if (editPart instanceof NodeEditPart) { final EditPolicy editPolicy = editPart.getEditPolicy(EditPolicyRoles.SEMANTIC_ROLE); if (null != editPolicy) { diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.classpath b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.classpath new file mode 100644 index 00000000000..eca7bdba8f0 --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.classpath @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.project b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.project new file mode 100644 index 00000000000..e6d127a09a4 --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.project @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.papyrus.uml.diagram.sequence.restrictions</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ds.core.builder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.settings/org.eclipse.jdt.core.prefs b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..0c68a61dca8 --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.settings/org.eclipse.pde.ds.annotations.prefs b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.settings/org.eclipse.pde.ds.annotations.prefs new file mode 100644 index 00000000000..73a356b6d05 --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/.settings/org.eclipse.pde.ds.annotations.prefs @@ -0,0 +1,8 @@ +classpath=true +dsVersion=V1_3 +eclipse.preferences.version=1 +enabled=true +generateBundleActivationPolicyLazy=true +path=OSGI-INF +validationErrorLevel=error +validationErrorLevel.missingImplicitUnbindMethod=error diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/META-INF/MANIFEST.MF b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..2c9c9d70ad4 --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/META-INF/MANIFEST.MF @@ -0,0 +1,15 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SequenceDiagram Restrictions +Bundle-SymbolicName: org.eclipse.papyrus.uml.diagram.sequence.restrictions +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: Eclipse Modeling Project +Automatic-Module-Name: org.eclipse.papyrus.uml.diagram.sequence.restrictions +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ActivationPolicy: lazy +Service-Component: OSGI-INF/org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceEditPolicyProviderTester.xml, + OSGI-INF/org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceViewProviderTester.xml +Require-Bundle: org.eclipse.papyrus.uml.diagram.sequence;bundle-version="5.0.0", + org.eclipse.papyrus.infra.gmfdiag.common, + org.eclipse.papyrus.uml.diagram.symbols;bundle-version="1.2.0" +Import-Package: org.osgi.service.component.annotations;version="1.3.0";resolution:=optional diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/OSGI-INF/org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceEditPolicyProviderTester.xml b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/OSGI-INF/org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceEditPolicyProviderTester.xml new file mode 100644 index 00000000000..f45599187af --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/OSGI-INF/org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceEditPolicyProviderTester.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceEditPolicyProviderTester"> + <service> + <provide interface="org.eclipse.papyrus.infra.gmfdiag.common.service.EditPolicyProviderTester"/> + </service> + <implementation class="org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceEditPolicyProviderTester"/> +</scr:component>
\ No newline at end of file diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/OSGI-INF/org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceViewProviderTester.xml b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/OSGI-INF/org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceViewProviderTester.xml new file mode 100644 index 00000000000..a7f239b7d7a --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/OSGI-INF/org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceViewProviderTester.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceViewProviderTester"> + <service> + <provide interface="org.eclipse.papyrus.infra.gmfdiag.common.service.ViewProviderTester"/> + </service> + <implementation class="org.eclipse.papyrus.uml.diagram.sequence.restrictions.SequenceViewProviderTester"/> +</scr:component>
\ No newline at end of file diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/about.html b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/about.html new file mode 100644 index 00000000000..d35d5aed64c --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/about.html @@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> +<title>About</title> +</head> +<body lang="EN-US"> +<h2>About This Content</h2> + +<p>June 5, 2007</p> +<h3>License</h3> + +<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>. +For purposes of the EPL, "Program" will mean the Content.</p> + +<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p> + +</body> +</html> diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/build.properties b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/build.properties new file mode 100644 index 00000000000..30c35d74ee2 --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/build.properties @@ -0,0 +1,7 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + OSGI-INF/,\ + about.html +src.includes = about.html diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/pom.xml b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/pom.xml new file mode 100644 index 00000000000..906786fae58 --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/pom.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.eclipse.papyrus</groupId> + <artifactId>org.eclipse.papyrus.uml-diagrams</artifactId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <artifactId>org.eclipse.papyrus.uml.diagram.sequence.restrictions</artifactId> + <version>1.0.0-SNAPSHOT</version> + <packaging>eclipse-plugin</packaging> +</project>
\ No newline at end of file diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/src/org/eclipse/papyrus/uml/diagram/sequence/restrictions/SequenceEditPolicyProviderTester.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/src/org/eclipse/papyrus/uml/diagram/sequence/restrictions/SequenceEditPolicyProviderTester.java new file mode 100644 index 00000000000..6acb2792bcf --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/src/org/eclipse/papyrus/uml/diagram/sequence/restrictions/SequenceEditPolicyProviderTester.java @@ -0,0 +1,42 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ +package org.eclipse.papyrus.uml.diagram.sequence.restrictions; + +import org.eclipse.gef.EditPart; +import org.eclipse.gef.RootEditPart; +import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; +import org.eclipse.papyrus.infra.gmfdiag.common.service.EditPolicyProviderTester; +import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.SequenceDiagramEditPart; +import org.eclipse.papyrus.uml.diagram.symbols.provider.ShapeEditPolicyProvider; +import org.osgi.service.component.annotations.Component; + +@Component +public class SequenceEditPolicyProviderTester implements EditPolicyProviderTester { + + @Override + public boolean isEnabled(IEditPolicyProvider provider, EditPart editPart) { + if (isSequenceDiagram(editPart)) { + if (provider instanceof ShapeEditPolicyProvider) { + return false; + } + return true; + } + return true; + } + + private boolean isSequenceDiagram(EditPart editPart) { + RootEditPart root = editPart.getRoot(); + return root != null && root.getContents() instanceof SequenceDiagramEditPart; + } + +} diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/src/org/eclipse/papyrus/uml/diagram/sequence/restrictions/SequenceViewProviderTester.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/src/org/eclipse/papyrus/uml/diagram/sequence/restrictions/SequenceViewProviderTester.java new file mode 100644 index 00000000000..438a3357232 --- /dev/null +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence.restrictions/src/org/eclipse/papyrus/uml/diagram/sequence/restrictions/SequenceViewProviderTester.java @@ -0,0 +1,45 @@ +/***************************************************************************** + * Copyright (c) 2018 EclipseSource and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * EclipseSource - Initial API and implementation + * + *****************************************************************************/ +package org.eclipse.papyrus.uml.diagram.sequence.restrictions; + +import org.eclipse.gmf.runtime.diagram.core.providers.IViewProvider; +import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ViewProviderTester; +import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.SequenceDiagramEditPart; +import org.eclipse.papyrus.uml.diagram.symbols.provider.ShapeCompartmentViewProvider; +import org.osgi.service.component.annotations.Component; + +@Component +public class SequenceViewProviderTester implements ViewProviderTester { + + @Override + public boolean isEnabled(IViewProvider provider, View view) { + if (isSequenceDiagram(view)) { + if (provider instanceof ShapeCompartmentViewProvider) { + return false; + } + return true; + } + return true; + } + + private boolean isSequenceDiagram(View view) { + // XXX Should we use Architecture? We probably want to restrain only what we + // know, + // and let extension plug-ins provide their own restrictions if they need to. + Diagram diagram = view.getDiagram(); + return diagram != null && SequenceDiagramEditPart.MODEL_ID.equals(diagram.getType()); + } + +} diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.stereotype.edition/src/org/eclipse/papyrus/uml/diagram/stereotype/edition/provider/CustomEditPolicyProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.stereotype.edition/src/org/eclipse/papyrus/uml/diagram/stereotype/edition/provider/CustomEditPolicyProvider.java index f6dfd08d726..c36ef86bcd9 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.stereotype.edition/src/org/eclipse/papyrus/uml/diagram/stereotype/edition/provider/CustomEditPolicyProvider.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.stereotype.edition/src/org/eclipse/papyrus/uml/diagram/stereotype/edition/provider/CustomEditPolicyProvider.java @@ -24,6 +24,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvide import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IPapyrusEditPart; import org.eclipse.papyrus.infra.gmfdiag.common.editpart.NodeEditPart; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; import org.eclipse.papyrus.uml.diagram.common.editparts.AbstractCommentEditPart; import org.eclipse.papyrus.uml.diagram.common.editparts.NamedElementEditPart; @@ -44,6 +45,7 @@ public class CustomEditPolicyProvider extends AbstractProvider implements IEditP * * {@inheritDoc} */ + @Override public void createEditPolicies(EditPart editPart) { if (editPart instanceof IPapyrusEditPart) { if (!(editPart instanceof AppliedStereotypeMultilinePropertyEditPart)) { @@ -71,8 +73,13 @@ public class CustomEditPolicyProvider extends AbstractProvider implements IEditP * * {@inheritDoc} */ + @Override public boolean provides(IOperation operation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; + if (!ProviderServiceUtil.isEnabled(this, epOperation.getEditPart())) { + return false; + } + if (!(epOperation.getEditPart() instanceof GraphicalEditPart) && !(epOperation.getEditPart() instanceof ConnectionEditPart)) { return false; } diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.symbols/src/org/eclipse/papyrus/uml/diagram/symbols/provider/ShapeCompartmentViewProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.symbols/src/org/eclipse/papyrus/uml/diagram/symbols/provider/ShapeCompartmentViewProvider.java index 6eb8fd16420..9d85d27aac4 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.symbols/src/org/eclipse/papyrus/uml/diagram/symbols/provider/ShapeCompartmentViewProvider.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.symbols/src/org/eclipse/papyrus/uml/diagram/symbols/provider/ShapeCompartmentViewProvider.java @@ -19,6 +19,7 @@ import org.eclipse.gmf.runtime.diagram.core.services.view.CreateViewForKindOpera import org.eclipse.papyrus.infra.gmfdiag.common.editpart.IShapeCompartmentEditPart; import org.eclipse.papyrus.infra.gmfdiag.common.providers.AbstractShapeCompartmentViewProvider; import org.eclipse.papyrus.infra.gmfdiag.common.providers.GraphicalTypeRegistry; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; /** * View Provider for Internal Block Diagram. It adds the shape compartment edit parts @@ -50,6 +51,9 @@ public class ShapeCompartmentViewProvider extends AbstractShapeCompartmentViewPr */ @Override protected boolean provides(CreateNodeViewOperation operation) { + if (!ProviderServiceUtil.isEnabled(this, operation.getContainerView())) { + return false; + } return (getNodeViewClass(operation.getSemanticAdapter(), operation.getContainerView(), operation.getSemanticHint()) != null); } diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.symbols/src/org/eclipse/papyrus/uml/diagram/symbols/provider/ShapeEditPolicyProvider.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.symbols/src/org/eclipse/papyrus/uml/diagram/symbols/provider/ShapeEditPolicyProvider.java index 9b70c6595dd..c744fd84a7e 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.symbols/src/org/eclipse/papyrus/uml/diagram/symbols/provider/ShapeEditPolicyProvider.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.symbols/src/org/eclipse/papyrus/uml/diagram/symbols/provider/ShapeEditPolicyProvider.java @@ -23,6 +23,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPolicies import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.papyrus.infra.gmfdiag.common.editpart.NodeEditPart; import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.ShapeCompartmentEditPolicy; +import org.eclipse.papyrus.infra.gmfdiag.common.service.ProviderServiceUtil; import org.eclipse.papyrus.uml.diagram.common.editparts.NamedElementEditPart; import org.eclipse.papyrus.uml.diagram.common.editparts.RoundedBorderNamedElementEditPart; import org.eclipse.papyrus.uml.diagram.common.figure.node.NodeNamedElementFigure; @@ -39,6 +40,9 @@ public class ShapeEditPolicyProvider extends AbstractProvider implements IEditPo @Override public boolean provides(IOperation operation) { CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation; + if (!ProviderServiceUtil.isEnabled(this, epOperation.getEditPart())) { + return false; + } if (!(epOperation.getEditPart() instanceof IGraphicalEditPart)) { return false; } @@ -47,7 +51,7 @@ public class ShapeEditPolicyProvider extends AbstractProvider implements IEditPo IGraphicalEditPart gep = (IGraphicalEditPart) epOperation.getEditPart(); return provides(gep); } - + /** * {@inheritDoc} */ @@ -61,7 +65,9 @@ public class ShapeEditPolicyProvider extends AbstractProvider implements IEditPo /** * check whether edit part provides a symbol compartment - * @param the edit part + * + * @param the + * edit part * @return */ protected boolean provides(EditPart ep) { diff --git a/plugins/uml/diagram/pom.xml b/plugins/uml/diagram/pom.xml index 7920a0f8da0..647e89ad302 100644 --- a/plugins/uml/diagram/pom.xml +++ b/plugins/uml/diagram/pom.xml @@ -30,6 +30,7 @@ <module>org.eclipse.papyrus.uml.diagram.navigation</module> <module>org.eclipse.papyrus.uml.diagram.profile</module> <module>org.eclipse.papyrus.uml.diagram.sequence</module> + <module>org.eclipse.papyrus.uml.diagram.sequence.restrictions</module> <module>org.eclipse.papyrus.uml.diagram.statemachine</module> <module>org.eclipse.papyrus.uml.diagram.stereotype.edition</module> <module>org.eclipse.papyrus.uml.diagram.symbols</module> |