diff options
author | rschnekenbu | 2012-08-27 15:11:58 +0000 |
---|---|---|
committer | rschnekenbu | 2012-08-27 15:11:58 +0000 |
commit | 11740adf4e905c107f734a0689d2e60f523c9ba8 (patch) | |
tree | 410f4c324f7cc43d33d145cff8466133425ebb0b | |
parent | 1c7a7a8411ce3db102e23586cc1be90849e4bb77 (diff) | |
download | org.eclipse.papyrus-11740adf4e905c107f734a0689d2e60f523c9ba8.tar.gz org.eclipse.papyrus-11740adf4e905c107f734a0689d2e60f523c9ba8.tar.xz org.eclipse.papyrus-11740adf4e905c107f734a0689d2e60f523c9ba8.zip |
375537: [SysML Internal Block Diagram] Unless necessary providing explicit GraphicalType as ViewDescriptor parameter should be avoided
https://bugs.eclipse.org/bugs/show_bug.cgi?id=375537
- adding null to the Ctor of the view descriptors for the drop in internal block diagram editor
- adding 2 contexts for custom sysml view providers (element type semantic hints are also found from the semantic adapter, given a specific interface)
8 files changed, 106 insertions, 14 deletions
diff --git a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.blockdefinition/plugin.xml b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.blockdefinition/plugin.xml index a79398cf196..2540a8c6fde 100644 --- a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.blockdefinition/plugin.xml +++ b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.blockdefinition/plugin.xml @@ -580,6 +580,30 @@ <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="SysML::AssociationNone, UML::Dependency, SysML::Association, UML::InterfaceRealization, UML::Generalization, SysML::AssociationSharedDirected, SysML::AssociationCompositeDirected, SysML::AssociationComposite, UML::Usage, SysML::AssociationNoneDirected, SysML::AssociationShared"/> <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="link_uml_dependency, link_uml_usage, link_uml_interfacerealization, link_sysml_association, link_uml_generalization"/> + <object id="elementtype.node" + class="org.eclipse.papyrus.gmf.diagram.common.commands.ISemanticHintAdapter(org.eclipse.papyrus.sysml.diagram.common)"> + + <method + name="getSemanticHint()" + value="SysML::ActorPartProperty, SysML::ReferenceProperty, UML::EnumerationLiteral, SysML::ConstraintBlock, UML::Signal, UML::Operation, SysML::FlowProperty, UML::PrimitiveType, UML::Port, SysML::ConstraintProperty, SysML::ValueProperty, UML::Reception, UML::Interface, UML::Constraint, UML::DataType, SysML::Unit, UML::Enumeration, SysML::ValueType, UML::Actor, UML::Property, SysML::Dimension, SysML::FlowSpecification, SysML::PartProperty, SysML::Block, SysML::FlowPort"> + </method> + </object> + <context + elements="elementtype.node" + viewClass="org.eclipse.gmf.runtime.notation.Node"> + </context> + <object id="elementtype.edge" + class="org.eclipse.papyrus.gmf.diagram.common.commands.ISemanticHintAdapter(org.eclipse.papyrus.sysml.diagram.common)"> + <method + name="getSemanticHint()" + value="SysML::AssociationNone, UML::Dependency, SysML::Association, UML::InterfaceRealization, UML::Generalization, SysML::AssociationSharedDirected, SysML::AssociationCompositeDirected, SysML::AssociationComposite, UML::Usage, SysML::AssociationNoneDirected, SysML::AssociationShared"> + </method> + </object> + <context + elements="elementtype.edge" + viewClass="org.eclipse.gmf.runtime.notation.Edge"> + </context> + <!-- Additional descriptors provided in case the semantic hint is is not provided --> <!-- "uml.Actor" --> diff --git a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.common/src-common-gmf/org/eclipse/papyrus/gmf/diagram/common/commands/ISemanticHintAdapter.java b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.common/src-common-gmf/org/eclipse/papyrus/gmf/diagram/common/commands/ISemanticHintAdapter.java new file mode 100644 index 00000000000..ca2558e0e23 --- /dev/null +++ b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.common/src-common-gmf/org/eclipse/papyrus/gmf/diagram/common/commands/ISemanticHintAdapter.java @@ -0,0 +1,27 @@ +/*****************************************************************************
+ * Copyright (c) 2011 CEA LIST.
+ *
+ * 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:
+ *
+ * CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.gmf.diagram.common.commands;
+
+
+/**
+ * Interface for an adapter that can give a semantic hint
+ */
+public interface ISemanticHintAdapter {
+
+ /**
+ * Returns the semantic hint for this adapter
+ * @return the semantic hint for this adapter
+ */
+ public String getSemanticHint();
+}
diff --git a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.common/src-common-gmf/org/eclipse/papyrus/gmf/diagram/common/commands/SemanticElementAdapter.java b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.common/src-common-gmf/org/eclipse/papyrus/gmf/diagram/common/commands/SemanticElementAdapter.java index 3032bb7497b..c757f64ffae 100644 --- a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.common/src-common-gmf/org/eclipse/papyrus/gmf/diagram/common/commands/SemanticElementAdapter.java +++ b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.common/src-common-gmf/org/eclipse/papyrus/gmf/diagram/common/commands/SemanticElementAdapter.java @@ -15,13 +15,14 @@ package org.eclipse.papyrus.gmf.diagram.common.commands; import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.uml.diagram.common.commands.SemanticAdapter;
/**
* An adapter for {@link IElementType}, {@link EObject} or {@link View}.
*/
-public class SemanticElementAdapter extends SemanticAdapter {
+public class SemanticElementAdapter extends SemanticAdapter implements ISemanticHintAdapter {
/** The elementType. */
private Object elementType;
@@ -50,9 +51,22 @@ public class SemanticElementAdapter extends SemanticAdapter { @SuppressWarnings("rawtypes")
@Override
public Object getAdapter(Class adapter) {
+ if(adapter.equals(IHintedType.class)) {
+ if(elementType instanceof IHintedType) {
+ return (IHintedType)elementType;
+ }
+ }
if(adapter.equals(IElementType.class)) {
return elementType;
}
return super.getAdapter(adapter);
}
+
+ public String getSemanticHint() {
+ if(elementType instanceof IHintedType) {
+ return ((IHintedType)elementType).getSemanticHint();
+ }
+ return null;
+ }
+
}
diff --git a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/plugin.xml b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/plugin.xml index 361afaca758..416feb9a300 100644 --- a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/plugin.xml +++ b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/plugin.xml @@ -186,31 +186,58 @@ <object id="uml.Class" class="org.eclipse.gmf.runtime.emf.core.util.IProxyEObject(org.eclipse.gmf.runtime.emf.core)"> <method name="getProxyClassID()" value="uml.Class"></method> </object> - <context viewClass="org.eclipse.gmf.runtime.notation.Node" semanticHints="uml.Class"></context> + <context
+ elements="uml.Class"
+ viewClass="org.eclipse.gmf.runtime.notation.Node"></context> <!-- "uml.Port" --> <object id="uml.Port" class="org.eclipse.gmf.runtime.emf.core.util.IProxyEObject(org.eclipse.gmf.runtime.emf.core)"> <method name="getProxyClassID()" value="uml.Port"></method> </object> - <context viewClass="org.eclipse.gmf.runtime.notation.Node" semanticHints="uml.Port"></context> + <context viewClass="org.eclipse.gmf.runtime.notation.Node" elements="uml.Port"></context> <!-- "uml.Property" --> <object id="uml.Property" class="org.eclipse.gmf.runtime.emf.core.util.IProxyEObject(org.eclipse.gmf.runtime.emf.core)"> <method name="getProxyClassID()" value="uml.Property"></method> </object> - <context viewClass="org.eclipse.gmf.runtime.notation.Node" semanticHints="uml.Property"></context> + <context viewClass="org.eclipse.gmf.runtime.notation.Node" elements="uml.Property"></context> <!-- "uml.Connector" --> <object id="uml.Connector" class="org.eclipse.gmf.runtime.emf.core.util.IProxyEObject(org.eclipse.gmf.runtime.emf.core)"> <method name="getProxyClassID()" value="uml.Connector"></method> </object> - <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="uml.Connector"></context> + <context viewClass="org.eclipse.gmf.runtime.notation.Edge" elements="uml.Connector"></context> <!-- "uml.Dependency" --> <object id="uml.Dependency" class="org.eclipse.gmf.runtime.emf.core.util.IProxyEObject(org.eclipse.gmf.runtime.emf.core)"> <method name="getProxyClassID()" value="uml.Dependency"></method> </object> - <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="uml.Dependency"></context> + <context viewClass="org.eclipse.gmf.runtime.notation.Edge" elements="uml.Dependency"></context>
+
+
+ <object id="elementtype.node"
+ class="org.eclipse.papyrus.gmf.diagram.common.commands.ISemanticHintAdapter(org.eclipse.papyrus.sysml.diagram.common)">
+
+ <method
+ name="getSemanticHint()"
+ value="UML::Property, SysML::ActorPartProperty, SysML::ValueProperty, SysML::ReferenceProperty, SysML::FlowPort_In, UML::Port, SysML::FlowPort_Out, SysML::PartProperty, SysML::FlowPort_InOut, SysML::FlowPort, SysML::Block, SysML::FlowPort_NA">
+ </method>
+ </object>
+ <context
+ elements="elementtype.node"
+ viewClass="org.eclipse.gmf.runtime.notation.Node">
+ </context>
+ <object id="elementtype.edge"
+ class="org.eclipse.papyrus.gmf.diagram.common.commands.ISemanticHintAdapter(org.eclipse.papyrus.sysml.diagram.common)">
+ <method
+ name="getSemanticHint()"
+ value="UML::Dependency, UML::Connector">
+ </method>
+ </object>
+ <context
+ elements="elementtype.edge"
+ viewClass="org.eclipse.gmf.runtime.notation.Edge">
+ </context> </viewProvider> diff --git a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/BlockDropHelper.java b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/BlockDropHelper.java index ba2194d983c..25b35621f7b 100644 --- a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/BlockDropHelper.java +++ b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/BlockDropHelper.java @@ -105,7 +105,7 @@ public class BlockDropHelper extends ElementHelper { IAdaptable createElementRequestAdapter = new CreateElementRequestAdapter(createElementRequest);
// 2. Prepare the drop command
- ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
+ ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, /* explicit semantic hint is mandatory */ null, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
CreateViewRequest createViewRequest = new CreateViewRequest(descriptor);
createViewRequest.setLocation(request.getLocation().getCopy());
Command viewCreateCommand = host.getCommand(createViewRequest);
@@ -154,7 +154,7 @@ public class BlockDropHelper extends ElementHelper { IAdaptable createElementRequestAdapter = new CreateElementRequestAdapter(createElementRequest);
// 2. Prepare the drop command
- ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
+ ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, /* explicit semantic hint is mandatory */ null, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
CreateViewRequest createViewRequest = new CreateViewRequest(descriptor);
createViewRequest.setLocation(request.getLocation().getCopy());
Command viewCreateCommand = host.getCommand(createViewRequest);
diff --git a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/PartDropHelper.java b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/PartDropHelper.java index 101c0cea8fe..ffb8ea0522d 100644 --- a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/PartDropHelper.java +++ b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/PartDropHelper.java @@ -49,7 +49,7 @@ public class PartDropHelper extends ElementHelper { }
// Prepare the view creation command
- ViewDescriptor descriptor = new ViewDescriptor(new SemanticAdapter((EObject)droppedEObject, null), Node.class, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
+ ViewDescriptor descriptor = new ViewDescriptor(new SemanticAdapter((EObject)droppedEObject, null), Node.class, /* explicit semantic hint is mandatory */ null, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
CreateViewRequest createViewRequest = new CreateViewRequest(descriptor);
createViewRequest.setLocation(request.getLocation().getCopy());
Command viewCreateCommand = host.getCommand(createViewRequest);
diff --git a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/PortDropHelper.java b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/PortDropHelper.java index 2882fd4608c..8ca6b3d02ed 100644 --- a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/PortDropHelper.java +++ b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/PortDropHelper.java @@ -58,7 +58,7 @@ public class PortDropHelper extends ElementHelper { }
// Prepare the view creation command
- ViewDescriptor descriptor = new ViewDescriptor(new SemanticAdapter((EObject)droppedPort, null), Node.class, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
+ ViewDescriptor descriptor = new ViewDescriptor(new SemanticAdapter((EObject)droppedPort, null), Node.class, /* explicit semantic hint is mandatory */ null, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
CreateViewRequest createViewRequest = new CreateViewRequest(descriptor);
createViewRequest.setLocation(location);
Command viewCreateCommand = host.getCommand(createViewRequest);
diff --git a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/TypeDropHelper.java b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/TypeDropHelper.java index fdb12c77775..83abde4b265 100644 --- a/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/TypeDropHelper.java +++ b/plugins/sysml/diagram/org.eclipse.papyrus.sysml.diagram.internalblock/src/org/eclipse/papyrus/sysml/diagram/internalblock/utils/TypeDropHelper.java @@ -106,7 +106,7 @@ public class TypeDropHelper extends ElementHelper { IAdaptable createElementRequestAdapter = new CreateElementRequestAdapter(createElementRequest);
// 2. Prepare the drop command
- ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
+ ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, /* explicit semantic hint is mandatory */ null, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
CreateViewRequest createViewRequest = new CreateViewRequest(descriptor);
createViewRequest.setLocation(request.getLocation().getCopy());
Command viewCreateCommand = host.getCommand(createViewRequest);
@@ -151,7 +151,7 @@ public class TypeDropHelper extends ElementHelper { IAdaptable createElementRequestAdapter = new CreateElementRequestAdapter(createElementRequest);
// 2. Prepare the drop command
- ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
+ ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, /* explicit semantic hint is mandatory */ null, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
CreateViewRequest createViewRequest = new CreateViewRequest(descriptor);
createViewRequest.setLocation(request.getLocation().getCopy());
Command viewCreateCommand = host.getCommand(createViewRequest);
@@ -184,7 +184,7 @@ public class TypeDropHelper extends ElementHelper { IAdaptable createElementRequestAdapter = new CreateElementRequestAdapter(createElementRequest);
// 2. Prepare the drop command
- ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
+ ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, /* explicit semantic hint is mandatory */ null, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
CreateViewRequest createViewRequest = new CreateViewRequest(descriptor);
createViewRequest.setLocation(request.getLocation().getCopy());
Command viewCreateCommand = host.getCommand(createViewRequest);
@@ -229,7 +229,7 @@ public class TypeDropHelper extends ElementHelper { IAdaptable createElementRequestAdapter = new CreateElementRequestAdapter(createElementRequest);
// 2. Prepare the drop command
- ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
+ ViewDescriptor descriptor = new ViewDescriptor(createElementRequestAdapter, Node.class, /* explicit semantic hint is mandatory */ null, ViewDescriptorUtil.PERSISTED, host.getDiagramPreferencesHint());
CreateViewRequest createViewRequest = new CreateViewRequest(descriptor);
createViewRequest.setLocation(request.getLocation().getCopy());
Command viewCreateCommand = host.getCommand(createViewRequest);
|