Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/infra/gmfdiag')
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.configuration/src/org/eclipse/papyrus/infra/gmfdiag/css/configuration/handler/AbstractStyleHandler.java6
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.properties/src/org/eclipse/papyrus/infra/gmfdiag/css/properties/preferences/ThemePreferencesPage.java6
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/GMFElementAdapter.java33
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/StyleListener.java69
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/DiagramCSSEngine.java13
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ExtendedCSSEngineImpl.java25
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ModelCSSEngine.java13
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ProjectCSSEngine.java13
-rw-r--r--plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/notation/ForceValueHelper.java7
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.classpath7
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.project28
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.core.prefs291
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.ui.prefs68
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/DeveloperDoc.html1
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/MANIFEST.MF29
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/p2.inf2
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/about.html28
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/build.properties9
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/default.css59
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/docs/out.html1
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/ArchitectureOverview.pngbin0 -> 14434 bytes
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/Structure.pngbin0 -> 34647 bytes
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/UseCaseDiagram.pngbin0 -> 18524 bytes
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.properties17
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.xml14
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/pom.xml14
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.di2
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.notation724
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.uml789
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/schema/strategies.exsd325
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/CanonicalStateListener.java308
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/PapyrusCanonicalEditPolicy.java790
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/Activator.java66
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/provider/PapyrusCanonicalEditPolicyProvider.java76
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/BasicSemanticChildrenStrategy.java82
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/CreationTargetStrategyRegistration.java28
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/DefaultSemanticChildrenStrategyRegistration.java29
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/EditPartBasedRegistration.java78
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ICreationTargetStrategy.java84
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ISemanticChildrenStrategy.java62
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/IVisualChildrenStrategy.java54
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/Registration.java165
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistration.java27
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistry.java177
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/VisualChildrenStrategyRegistration.java26
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/util/CommandTreeIterator.java203
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/wrappers/GEFCommandWrapper.java117
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/plugin.xml7
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/CommonDeferredCreateConnectionViewCommand.java5
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/SetCanonicalCommand.java110
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/requests/CanonicalDropObjectsRequest.java51
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpart/PapyrusDiagramEditPart.java51
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpolicies/IPapyrusCanonicalEditPolicy.java41
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/helper/DiagramHelper.java247
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java112
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/EditPartPropertyTester.java49
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicy.java26
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/plugin.xml27
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/AbstractGraphicalCommandHandler.java3
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/CanonicalState.java91
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/ToggleCanonicalHandler.java58
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF5
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/Environment.xmi3
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/synchronization.ctx30
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/ui/MultipleCanonicalStyle.xwt17
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/ui/SingleCanonicalStyle.xwt16
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/plugin.xml3
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/constraint/HasEditPolicy.java7
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/databinding/CanonicalObservableValue.java125
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/SynchronizationModelElement.java45
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/SynchronizationModelElementFactory.java49
72 files changed, 6061 insertions, 85 deletions
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.configuration/src/org/eclipse/papyrus/infra/gmfdiag/css/configuration/handler/AbstractStyleHandler.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.configuration/src/org/eclipse/papyrus/infra/gmfdiag/css/configuration/handler/AbstractStyleHandler.java
index 5b1ae8f64d8..58248b4530f 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.configuration/src/org/eclipse/papyrus/infra/gmfdiag/css/configuration/handler/AbstractStyleHandler.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.configuration/src/org/eclipse/papyrus/infra/gmfdiag/css/configuration/handler/AbstractStyleHandler.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 461629
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.configuration.handler;
@@ -168,8 +169,7 @@ public abstract class AbstractStyleHandler extends AbstractHandler {
try {
resource.save(new HashMap<Object, Object>());
BaseCSSEngine.INSTANCE.reset();
- DiagramHelper.setNeedsRefresh();
- DiagramHelper.refreshDiagrams();
+ DiagramHelper.forceRefresh();
} catch (IOException ex) {
Activator.log.error(ex);
MessageDialog.open(MessageDialog.ERROR, parentShell, "Style error", "An unexpected error occured while trying to save the Stylesheet", SWT.NONE);
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.properties/src/org/eclipse/papyrus/infra/gmfdiag/css/properties/preferences/ThemePreferencesPage.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.properties/src/org/eclipse/papyrus/infra/gmfdiag/css/properties/preferences/ThemePreferencesPage.java
index dbff70390b3..2e1beec4696 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.properties/src/org/eclipse/papyrus/infra/gmfdiag/css/properties/preferences/ThemePreferencesPage.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css.properties/src/org/eclipse/papyrus/infra/gmfdiag/css/properties/preferences/ThemePreferencesPage.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2014 CEA LIST.
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -9,6 +9,7 @@
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
* Gabriel Pascual (ALL4TEC) gabriel.pascual@all4tec.net - Initial API and implementation
+ * Christian W. Damus - bug 461629
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.properties.preferences;
@@ -1073,8 +1074,7 @@ public class ThemePreferencesPage extends FieldEditorPreferencePage implements I
boolean result = super.performOk();
if (needsRefresh) {
WorkspaceCSSEngine.instance.reset();
- DiagramHelper.setNeedsRefresh();
- DiagramHelper.refreshDiagrams();
+ DiagramHelper.forceRefresh();
}
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/META-INF/MANIFEST.MF
index 9c7ae7bd4f2..8f3aa2771cd 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/META-INF/MANIFEST.MF
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/META-INF/MANIFEST.MF
@@ -39,7 +39,8 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.papyrus.emf.facet.custom.core;bundle-version="1.1.0",
org.eclipse.papyrus.emf.facet.custom.ui;bundle-version="1.1.0",
org.eclipse.papyrus.views.properties;bundle-version="1.1.0",
- org.eclipse.papyrus.views.properties.model;bundle-version="1.1.0"
+ org.eclipse.papyrus.views.properties.model;bundle-version="1.1.0",
+ com.google.guava;bundle-version="11.0.0"
Bundle-Vendor: %providerName
Bundle-ActivationPolicy: lazy
Bundle-Version: 1.1.0.qualifier
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/GMFElementAdapter.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/GMFElementAdapter.java
index ccf64115a6c..d04f674860a 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/GMFElementAdapter.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/GMFElementAdapter.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 461629
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.dom;
@@ -26,6 +27,7 @@ import java.util.Set;
import org.eclipse.core.databinding.observable.ChangeEvent;
import org.eclipse.core.databinding.observable.IChangeListener;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.e4.ui.css.core.dom.ElementAdapter;
import org.eclipse.e4.ui.css.core.engine.CSSEngine;
import org.eclipse.emf.common.notify.Adapter;
@@ -59,7 +61,7 @@ import org.w3c.dom.NodeList;
* @author Camille Letavernier
*/
@SuppressWarnings("restriction")
-public class GMFElementAdapter extends ElementAdapter implements NodeList, IChangeListener, StatefulView {
+public class GMFElementAdapter extends ElementAdapter implements NodeList, IChangeListener, StatefulView, IAdaptable {
public static final String CSS_VALUES_SEPARATOR = " "; //$NON-NLS-1$
@@ -205,6 +207,21 @@ public class GMFElementAdapter extends ElementAdapter implements NodeList, IChan
}
/**
+ * I provide adapters for
+ *
+ * <ul>
+ * <li>{@link Diagram} - the diagram containing my {@linkplain #getNotationElement() notation element}</li>
+ * </ul>
+ */
+ @Override
+ public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
+ if (adapter == Diagram.class) {
+ return getNotationElement().getDiagram();
+ }
+ return null;
+ }
+
+ /**
* Returns the semantic element associated to this adapter. In case of a diagram,
* the diagram is itself the semantic element.
*
@@ -517,20 +534,20 @@ public class GMFElementAdapter extends ElementAdapter implements NodeList, IChan
/*
* <--------------------
- *
+ *
* //Allows both notations Class > Property and Class > Compartment > Property
- *
+ *
* //FIXME: The Tree is computed through "getParentNode". "getChildren" is barely used. Moreover,
* //there is a mapping between Notation element and DOM element, which makes it impossible to associate the same
* //notation element to different DOM elements.
- *
+ *
* // for(EObject child : notationElement.eContents()) {
* // if(child instanceof BasicCompartment) {
* // //Add the Compartment's children to this' children
* // childList.addAll(Arrays.asList(computeChildren((View)child, engine)));
* // }
* // }
- *
+ *
* -------------------->
*/
@@ -693,7 +710,7 @@ public class GMFElementAdapter extends ElementAdapter implements NodeList, IChan
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.papyrus.infra.gmfdiag.css.notation.StatefulView#addStates(java.util.Set)
*/
@Override
@@ -706,7 +723,7 @@ public class GMFElementAdapter extends ElementAdapter implements NodeList, IChan
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.papyrus.infra.gmfdiag.css.notation.StatefulView#removeStates(java.util.Set)
*/
@Override
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/StyleListener.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/StyleListener.java
index 40b527b746a..f6f7c0126d9 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/StyleListener.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/dom/StyleListener.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,12 +8,16 @@
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 461629
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.dom;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSAnnotations;
/**
* A Listener for notation and semantic properties changes
@@ -50,7 +54,9 @@ public class StyleListener extends AdapterImpl {
}
if (notification.getNotifier() == elementAdapter.getNotationElement()) {
- elementAdapter.notationPropertyChanged();
+ if (shouldPropagateNotationEvent(notification)) {
+ elementAdapter.notationPropertyChanged();
+ }
return;
}
@@ -59,4 +65,63 @@ public class StyleListener extends AdapterImpl {
return;
}
}
+
+ /**
+ * Queries whether a {@code notification} from the notation model should be propagated to my element adapter.
+ * The default implementation propagates all but
+ * <ul>
+ * <li>changes to the {@link NotationPackage.Literals#VIEW__MUTABLE View::mutable} attribute</li>
+ * <li>addition of or changes to the {@linkplain CSSAnnotations#CSS_FORCE_VALUE force-value} annotation</li>
+ * </ul>
+ *
+ * @param notification
+ * a notification from the notation model
+ * @return whether it should be propagated
+ */
+ protected boolean shouldPropagateNotationEvent(Notification notification) {
+ boolean result = notification.getFeature() != NotationPackage.Literals.VIEW__MUTABLE;
+
+ if (result) {
+ if (notification.getFeature() == EcorePackage.Literals.EMODEL_ELEMENT__EANNOTATIONS) {
+ // We never add/remove multiple annotations nor do we use SET to replace them.
+ // However, if we did, all that would happen is an unnecessary refresh
+ switch (notification.getEventType()) {
+ case Notification.ADD:
+ result = !CSSAnnotations.CSS_FORCE_VALUE.equals(((EAnnotation) notification.getNewValue()).getSource());
+ break;
+ case Notification.REMOVE:
+ result = !CSSAnnotations.CSS_FORCE_VALUE.equals(((EAnnotation) notification.getOldValue()).getSource());
+ break;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private String getEventType(Notification notification) {
+ switch (notification.getEventType())
+ {
+ case Notification.SET:
+ return ("SET");
+ case Notification.UNSET:
+ return ("UNSET");
+ case Notification.ADD:
+ return ("ADD");
+ case Notification.ADD_MANY:
+ return ("ADD_MANY");
+ case Notification.REMOVE:
+ return ("REMOVE");
+ case Notification.REMOVE_MANY:
+ return ("REMOVE_MANY");
+ case Notification.MOVE:
+ return ("MOVE");
+ case Notification.REMOVING_ADAPTER:
+ return ("REMOVING_ADAPTER");
+ case Notification.RESOLVE:
+ return ("RESOLVE");
+ default:
+ return Integer.toString(notification.getEventType());
+ }
+ }
}
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/DiagramCSSEngine.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/DiagramCSSEngine.java
index f76ff086286..c92efa9bf3e 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/DiagramCSSEngine.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/DiagramCSSEngine.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 461629
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.engine;
@@ -18,7 +19,9 @@ import org.eclipse.core.databinding.observable.ChangeEvent;
import org.eclipse.core.databinding.observable.IChangeListener;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusDiagramEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.helper.DiagramHelper;
import org.eclipse.papyrus.infra.gmfdiag.css.helper.CSSDOMSemanticElementHelper;
import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSDiagram;
@@ -110,8 +113,12 @@ public class DiagramCSSEngine extends ExtendedCSSEngineImpl implements IChangeLi
@Override
public void handleChange(ChangeEvent event) {
resetCache();
- DiagramHelper.setNeedsRefresh();
- DiagramHelper.refreshDiagrams(); // FIXME: Should be contextual. We should only refresh the editor(s) containing this Diagram
+
+ if (diagram != null) {
+ for (DiagramEditPart next : PapyrusDiagramEditPart.getDiagramEditPartsFor(diagram)) {
+ DiagramHelper.forceRefresh(next);
+ }
+ }
}
@Override
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ExtendedCSSEngineImpl.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ExtendedCSSEngineImpl.java
index f3be2cda0fb..e11c2c28e63 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ExtendedCSSEngineImpl.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ExtendedCSSEngineImpl.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 461629
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.engine;
@@ -32,6 +33,10 @@ import org.eclipse.e4.ui.css.core.impl.dom.CSSStyleDeclarationImpl;
import org.eclipse.e4.ui.css.core.impl.engine.AbstractCSSEngine;
import org.eclipse.e4.ui.css.core.impl.sac.CSSConditionFactoryImpl;
import org.eclipse.e4.ui.css.core.impl.sac.CSSSelectorFactoryImpl;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.papyrus.infra.core.utils.AdapterUtils;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusDiagramEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.helper.DiagramHelper;
import org.eclipse.papyrus.infra.gmfdiag.css.converters.BooleanConverter;
import org.eclipse.papyrus.infra.gmfdiag.css.converters.ColorToGMFConverter;
@@ -43,7 +48,6 @@ import org.eclipse.papyrus.infra.gmfdiag.css.lists.ExtendedStyleSheetList;
import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.EmbeddedStyleSheet;
import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheet;
import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheetReference;
-import org.eclipse.swt.widgets.Display;
import org.w3c.css.sac.ConditionFactory;
import org.w3c.dom.Element;
import org.w3c.dom.css.CSSStyleDeclaration;
@@ -364,15 +368,16 @@ public abstract class ExtendedCSSEngineImpl extends AbstractCSSEngine implements
// FIXME: It seems the refresh can create a deadlock in some cases
- DiagramHelper.setNeedsRefresh();
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- DiagramHelper.refreshDiagrams(); // TODO: Contextual refresh
+ Diagram diagram = AdapterUtils.adapt(elementAdapter, Diagram.class, null);
+ Set<? extends DiagramEditPart> diagramEditParts = PapyrusDiagramEditPart.getDiagramEditPartsFor(diagram);
+ if (!diagramEditParts.isEmpty()) {
+ // TODO: Contextual refresh more specific than the diagram?
+ for (DiagramEditPart next : diagramEditParts) {
+ DiagramHelper.scheduleRefresh(next);
}
- });
-
+ } else {
+ DiagramHelper.scheduleRefresh();
+ }
}
/**
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ModelCSSEngine.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ModelCSSEngine.java
index 8736b596633..2958bd4cc07 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ModelCSSEngine.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ModelCSSEngine.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012, 2014 CEA LIST and others.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -10,6 +10,7 @@
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
* Christian W. Damus (CEA) - bug 429422
* Mickael ADAM (ALL4TEC) mickael.adam@ALL4TEC.net - bug 429642
+ * Christian W. Damus - bug 461629
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.engine;
@@ -30,7 +31,6 @@ import org.eclipse.papyrus.infra.gmfdiag.css.resource.CSSNotationResource;
import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.ModelStyleSheets;
import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheet;
import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheetReference;
-import org.eclipse.swt.widgets.Display;
import org.w3c.dom.Element;
/**
@@ -55,14 +55,7 @@ public class ModelCSSEngine extends ExtendedCSSEngineImpl {
public void notifyChanged(Notification notification) {
ModelCSSEngine.this.reset();
- DiagramHelper.setNeedsRefresh();
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- DiagramHelper.refreshDiagrams();
- }
- });
+ DiagramHelper.scheduleRefresh();
}
};
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ProjectCSSEngine.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ProjectCSSEngine.java
index d7012c80ee9..53fda111410 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ProjectCSSEngine.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/engine/ProjectCSSEngine.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2013, 2014 CEA LIST and others.
+ * Copyright (c) 2013, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -9,6 +9,7 @@
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
* Christian W. Damus (CEA) - bug 429422
+ * Christian W. Damus - bug 461629
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.engine;
@@ -35,7 +36,6 @@ import org.eclipse.papyrus.infra.gmfdiag.common.helper.DiagramHelper;
import org.eclipse.papyrus.infra.gmfdiag.css.Activator;
import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheet;
import org.eclipse.papyrus.infra.gmfdiag.css.stylesheets.StyleSheetReference;
-import org.eclipse.swt.widgets.Display;
/**
* A CSS Engine for the current Eclipse Project
@@ -60,14 +60,7 @@ public class ProjectCSSEngine extends ExtendedCSSEngineImpl {
public boolean visit(IResourceDelta delta) throws CoreException {
if (delta.getResource().equals(stylesheetPreferences)) {
ProjectCSSEngine.this.reset();
- DiagramHelper.setNeedsRefresh();
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- DiagramHelper.refreshDiagrams();
- }
- });
+ DiagramHelper.scheduleRefresh();
return false;
}
diff --git a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/notation/ForceValueHelper.java b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/notation/ForceValueHelper.java
index c6713fe8be4..08f6e200e59 100644
--- a/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/notation/ForceValueHelper.java
+++ b/plugins/infra/gmfdiag/css/org.eclipse.papyrus.infra.gmfdiag.css/src/org/eclipse/papyrus/infra/gmfdiag/css/notation/ForceValueHelper.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012, 2013 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -9,6 +9,7 @@
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
* Christian W. Damus (CEA) - support adapter instead of custom resource impl for CSS (CDO)
+ * Christian W. Damus - bug 461629
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.css.notation;
@@ -67,8 +68,10 @@ public class ForceValueHelper {
EAnnotation eAnnotation = view.getEAnnotation(CSSAnnotations.CSS_FORCE_VALUE);
if (eAnnotation == null) {
eAnnotation = EcorePackage.eINSTANCE.getEcoreFactory().createEAnnotation();
- eAnnotation.setEModelElement(view);
+
+ // Set the source first so that when we get the add notification we can see the source
eAnnotation.setSource(CSSAnnotations.CSS_FORCE_VALUE);
+ eAnnotation.setEModelElement(view);
}
EMap<String, String> details = eAnnotation.getDetails();
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.classpath b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.classpath
new file mode 100644
index 00000000000..098194ca4b7
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.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.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.project b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.project
new file mode 100644
index 00000000000..c42cca145e2
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.gmfdiag.canonical</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>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..9ca8e68231b
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,291 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=260
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=false
+org.eclipse.jdt.core.formatter.join_wrapped_lines=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=260
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=5
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.ui.prefs b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..954281dbc31
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,68 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_Papyrus
+cleanup_settings_version=2
+eclipse.preferences.version=1
+formatter_profile=_Papyrus
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * Constructor.\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*****************************************************************************\n * Copyright (c) ${year} CEA LIST and others.\n * \n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors\:\n * CEA LIST - Initial API and implementation\n * \n *****************************************************************************/\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * ${see_to_overridden}\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${see_to_target}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/DeveloperDoc.html b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/DeveloperDoc.html
new file mode 100644
index 00000000000..c2d6193d083
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/DeveloperDoc.html
@@ -0,0 +1 @@
+<html><link rel="stylesheet" href="default.css" type="text/css"><H1>Synchronize automatically between views element with related model element in the model</H1><P>The goal is to enable a strong synchronization between visual elements displayed in the diagram with elements contained in the model. <BR/>This mechanism can be added locally for each element by using CSS. <BR/>For example, you would like to see: <BR/>- synchronize compartment of enumeration literal for all enumeration. <BR/>- synchronize compartment of attributes and operation for all class stereotyped …. <BR/>This fucntionality is associated to the task 433206. <BR/></P><H2>Requirements</H2><P>- LocalSynchronization (id=Req001): <BR/> The synchronization shall be local for each graphical element for example: package compartment, attribute compartment...</P><P>- CSSIntegration (id=Req002): <BR/> The synchronization shall be parameterized by CSS, by using a keyword and a value.</P><P>- CustomSynchronization (id=Req003): <BR/> For an graphical element, it shall be possible to custom the synchonization</P><H2>Use Cases</H2><P align="middle"><img src=C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/UseCaseDiagram.png alt=UseCaseDiagram ></P><P align="middle">UseCaseDiagram</P><H3>Add an element in the model</H3><P>When an user adds an element in the model, the synchronization mechanism try to add in the current diagram the view that correspond to the semantic element <BR/>The difficulty of this mechanism is to parameter the synchronization. <BR/>By default, the synchronizatiopn is based on ' owned element'role. When you add an element, the graphical element that correponds to the owner try to display it in the diagram. <BR/>But some cases are not interesting. For example in the composite diagram, displaying parts in part correspond to part of the type, not directly part of part.</P><H3>Move an element</H3><P>When a element is moved, the synchronization mechanism must to create graphically the element to each diagram. <BR/></P><H3>Set synchronization enable</H3><P>The user can set enable the synchronization for a set of graphical elements. <BR/></P><H3>Remove an element from the model</H3><P>When the element is removed, the corresponding graphical element must be removed.</P><H2>Design</H2><P align="middle"><img src=C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/ArchitectureOverview.png alt=ArchitectureOverview ></P><P align="middle">ArchitectureOverview</P><P>The desing consists into one plugin org.eclipse.papyrus.uml.diagram.synchronizeview. <BR/>I contains a editpolicy provider and an extension point</P><P align="middle"><img src=C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/Structure.png alt=Structure ></P><P align="middle">Structure</P><P>The edit policy SynchronizeViewEdipolicty is installed by the SynchronizeEditPolicyProvider on: <BR/> - DiagramEditPart (to synchronize content of diagram) <BR/> - CompartmentEditPart (to synchronize content of compartment) <BR/> - IBorderedShapeEditPart (to synchronize content of borderedElement as port....) <BR/> <BR/>ThisEditPolicy is used to allowing synchronization between graphical element and element in the model <BR/> It is based on canonical editpolicy but it has several differencies: <BR/> - View Service cannot be called. To call it we need to get the identifier of the child that could be place in compartment. I is not possible to find in a generic way <BR/> --> link to each Diagram Updater, and moreover some child has been created by custom code. In fact, the hierarchy of visual element must follow the hierachy of semantic element. <BR/> --> this is not the case so the Diagram updater generated from the gmfgen has not the good info. <BR/> <BR/>So to an extension point has been added to let the developer to specify semantic element that play children of a given editpart: <BR/> see the example: <BR/><extension <BR/> point="org.eclipse.papyrus.uml.diagram.synchronizeview.semanticchild"> <BR/> <semanticChild <BR/> editPart="org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartCompartmentEditPartCN" <BR/> getSemanticChildren="org.eclipse.papyrus.uml.diagram.composite.SynchroSemanticForPopertyPartCompartment"> <BR/> </semanticChild> <BR/></extension <BR/> <BR/>The editpolicy try to refresh visual element. To do that it calls the method getSemanticChildrenList(). I llokf for accoss the extesnison point the corresponding 'SemantiChild' with the highest priority. <BR/>This object give the list of sementic element that could be children of the context of the given editpart. <BR/> <BR/>In the context of part, in the composite diagram, we can describe that children are ownedlement of the type of the part. <BR/> <BR/>Finally to allow the creation we base our work on the mechanism of the drop. (refreshSemanticChildrenByDrop)</P><P>In order to install synchronization on element, views must have canonical style. So a migration is needed. <BR/>BasicCompartment becomes Compartment <BR/>Diagram and Shape mst have a style: so we need to add : <BR/> CanonicalStyle canonicalStyle=(CanonicalStyle)diagram.createStyle(NotationPackage.eINSTANCE.getCanonicalStyle()); <BR/> canonicalStyle.setCanonical(false);</P></html> \ No newline at end of file
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..fa195895496
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.common,
+ org.eclipse.emf.ecore,
+ org.eclipse.gef,
+ org.eclipse.gmf.runtime.diagram.ui,
+ org.eclipse.papyrus.infra.core;bundle-version="1.1.0",
+ org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="1.1.0",
+ org.eclipse.papyrus.infra.core.log;bundle-version="1.1.0",
+ com.google.guava;bundle-version="11.0.0",
+ org.eclipse.papyrus.infra.emf;bundle-version="1.1.0",
+ org.eclipse.core.expressions;bundle-version="3.4.600",
+ org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="1.1.0",
+ org.eclipse.papyrus.infra.tools;bundle-version="1.1.0"
+Export-Package: org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy,
+ org.eclipse.papyrus.infra.gmfdiag.canonical.internal,
+ org.eclipse.papyrus.infra.gmfdiag.canonical.internal.provider,
+ org.eclipse.papyrus.infra.gmfdiag.canonical.strategy
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-Version: 1.1.0.qualifier
+Bundle-Name: %pluginName
+Bundle-Localization: plugin
+Bundle-Activator: org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.canonical;singleton:=true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-Description: %pluginDescription
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/p2.inf b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/p2.inf
new file mode 100644
index 00000000000..bb7c70ff4d3
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/p2.inf
@@ -0,0 +1,2 @@
+update.id=org.eclipse.papyrus.uml.diagram.synchronizeview
+update.range=[1.0.0,1.1.0]
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/about.html b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/about.html
new file mode 100644
index 00000000000..82d49bf5f81
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/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 (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). 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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/build.properties b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/build.properties
new file mode 100644
index 00000000000..8539c191e15
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html,\
+ plugin.properties,\
+ schema/
+src.includes = about.html
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/default.css b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/default.css
new file mode 100644
index 00000000000..a52509fd64b
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/default.css
@@ -0,0 +1,59 @@
+/*
+ * Style sheet for the CSS2 specification
+ */
+
+body {
+ padding: 2em 1em 2em 70px;
+ margin: 0;
+ font-family: sans-serif;
+ color: black;
+ background: white;
+ background-position: top left;
+ background-attachment: fixed;
+ background-repeat: no-repeat;
+}
+
+
+p {
+ margin-top: 0.6em;
+ margin-bottom: 0.6em;
+ margin-left: 2em;
+}
+
+h1, h2, h3, h4, h5, h6 { text-align: left }
+
+
+h1, h2, h3 { color: #005A9C; background: white }
+h1 { font: 170% sans-serif }
+h2 { font: 140% sans-serif }
+h3 { font: 120% sans-serif }
+h4 { font: bold 100% sans-serif }
+h5 { font: italic 100% sans-serif }
+h6 { font: small-caps 100% sans-serif }
+
+body{counter-reset: h1 h2 h3;}
+
+
+h2:before {
+ content: counter(h2) " ";
+ counter-increment: h2;
+}
+h3:before {
+ content: counter(h2) "." counter(h3) " ";
+ counter-increment: h3;
+}
+h1 {
+ counter-reset: h2;
+}
+h2 {
+ counter-reset: h3;
+}
+h1.unnumbered, h2.unnumbered {
+ counter-reset: none;
+}
+h1.unnumbered:before,
+h2.unnumbered:before,
+h3.unnumbered:before{
+ content: none;
+ counter-increment: none;
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/docs/out.html b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/docs/out.html
new file mode 100644
index 00000000000..73bdc51f3ed
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/docs/out.html
@@ -0,0 +1 @@
+<html><link rel="stylesheet" href="default.css" type="text/css"><H1>Synchronize automatically between graphical element and element in the model</H1><P>The goal is to enable a strong synchronization between visual elements displayed in the diagram with elements contained in the model. <BR/>This mechanism can be added locally for each element by using CSS. <BR/>For example, you would like to see: <BR/>- synchronize compartment of enumeration literal for all enumeration. <BR/>- synchronize compartment of attributes and operation for all class stereotyped …. <BR/>This fucntionality is associated to the task 433206. <BR/></P><H2>Requirements</H2><P>- LocalSynchronization (id=Req001): <BR/> The synchronization shall be local for each graphical element for example: package compartment, attribute compartment...</P><P>- CSSIntegration (id=Req002): <BR/> The synchronization shall be parameterized by CSS, by using a keyword and a value.</P><P>- CustomSynchronization (id=Req003): <BR/> For an graphical element, it shall be possible to custom the synchonization</P><H2>Use Cases</H2><img src=C:/Workspaces/head/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/UseCaseDiagram.png alt=UseCaseDiagram ><P align="middle">UseCaseDiagram</P><H3>Add an element in the model</H3><P>When an user adds an element in the model, the synchronization mechanism try to add in the current diagram the view that correspond to the semantic element <BR/>The difficulty of this mechanism is to parameter the synchronization. <BR/>By default, the synchronizatiopn is based on ' owned element'role. When you add an element, the graphical element that correponds to the owner try to display it in the diagram. <BR/>But some cases are not interesting. For example in the composite diagram, displaying parts in part correspond to part of the type, not directly part of part.</P><H3>Move an element</H3><P>When a element is moved, the synchronization mechanism must to create graphically the element to each diagram. <BR/></P><H3>Set synchronization enable</H3><P>The user can set enable the synchronization for a set of graphical elements. <BR/></P><H3>Remove an element from the model</H3><P>When the element is removed, the corresponding graphical element must be removed.</P><H2>Design</H2><img src=C:/Workspaces/head/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/ArchitectureOverview.png alt=ArchitectureOverview ><P align="middle">ArchitectureOverview</P></html> \ No newline at end of file
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/ArchitectureOverview.png b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/ArchitectureOverview.png
new file mode 100644
index 00000000000..318ac1506d7
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/ArchitectureOverview.png
Binary files differ
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/Structure.png b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/Structure.png
new file mode 100644
index 00000000000..51fc9cff50f
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/Structure.png
Binary files differ
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/UseCaseDiagram.png b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/UseCaseDiagram.png
new file mode 100644
index 00000000000..f6f8921945b
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/UseCaseDiagram.png
Binary files differ
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.properties b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.properties
new file mode 100644
index 00000000000..025c6111645
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.properties
@@ -0,0 +1,17 @@
+#################################################################################
+# Copyright (c) 2008, 2015 CEA LIST, Christian W. Damus, 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:
+# Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - initial API and implementation
+# Christian W. Damus - bug 433206
+##################################################################################
+pluginName=Papyrus Canonical Diagram Infrastructure
+providerName=Eclipse Modeling Project
+
+pluginDescription=An extensible implementation of the Canonical Edit Policy for Papyrus diagrams. More details (models and .html) are available in the docs/ directory.
+
+extpt.strategies.name = Canonical Children Strategies
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.xml
new file mode 100644
index 00000000000..4a94207f9f9
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension-point id="org.eclipse.papyrus.infra.gmfdiag.canonical.strategies" name="%extpt.strategies.name" schema="schema/strategies.exsd"/>
+ <extension
+ point="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders">
+ <editpolicyProvider
+ class="org.eclipse.papyrus.infra.gmfdiag.canonical.internal.provider.PapyrusCanonicalEditPolicyProvider">
+ <Priority
+ name="Low">
+ </Priority>
+ </editpolicyProvider>
+ </extension>
+</plugin>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/pom.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/pom.xml
new file mode 100644
index 00000000000..6141f5538b6
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>1.1.0-SNAPSHOT</version>
+ <relativePath>../../../../releng/top-pom-main.xml</relativePath>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.gmfdiag.canonical</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>1.1.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.di b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.di
new file mode 100644
index 00000000000..8634d4c00e0
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.notation b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.notation
new file mode 100644
index 00000000000..915e8f7b5b3
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.notation
@@ -0,0 +1,724 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ADL4Eclipse="http:///schemas/ADL4Eclipse/_jDF0YNT6EeKj0Lzrn2trlQ/2" xmlns:configuration="http://www.eclipse.org/papyrus/infra/viewpoints/configuration" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:nattable="http://www.eclipse.org/papyrus/nattable/model" xmlns:nattableaxis="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxis" xmlns:nattableaxisconfiguration="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisconfiguration" xmlns:nattableaxisprovider="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisprovider" xmlns:nattableconfiguration="http://www.eclipse.org/papyrus/nattable/model/nattableconfiguration" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/viewpoints/policy/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http:///schemas/ADL4Eclipse/_jDF0YNT6EeKj0Lzrn2trlQ/2 pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_jDF0YdT6EeKj0Lzrn2trlQ http://www.eclipse.org/papyrus/nattable/model/table/nattableaxis http://www.eclipse.org/papyrus/nattable/model#//nattableaxis http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisconfiguration http://www.eclipse.org/papyrus/nattable/model#//nattableaxisconfiguration http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisprovider http://www.eclipse.org/papyrus/nattable/model#//nattableaxisprovider http://www.eclipse.org/papyrus/nattable/model/nattableconfiguration http://www.eclipse.org/papyrus/nattable/model#//nattableconfiguration">
+ <notation:Diagram xmi:id="_lNP40MbvEeO9CYUoXDRplw" type="PapyrusUMLClassDiagram" name="Overview" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_lNP40cbvEeO9CYUoXDRplw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP40sbvEeO9CYUoXDRplw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP408bvEeO9CYUoXDRplw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_lNP41MbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP41cbvEeO9CYUoXDRplw"/>
+ </children>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnYsbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP41sbvEeO9CYUoXDRplw" x="201" y="38"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lNP418bvEeO9CYUoXDRplw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP42MbvEeO9CYUoXDRplw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP42cbvEeO9CYUoXDRplw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_lNP42sbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP428bvEeO9CYUoXDRplw"/>
+ </children>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnY8bvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP43MbvEeO9CYUoXDRplw" x="204" y="173" width="259" height="96"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lNP43cbvEeO9CYUoXDRplw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP43sbvEeO9CYUoXDRplw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP438bvEeO9CYUoXDRplw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_lNP44MbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP44cbvEeO9CYUoXDRplw"/>
+ </children>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP44sbvEeO9CYUoXDRplw" x="206" y="329"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lNP448bvEeO9CYUoXDRplw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP45MbvEeO9CYUoXDRplw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP45cbvEeO9CYUoXDRplw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_lNP45sbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP458bvEeO9CYUoXDRplw"/>
+ </children>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnaMbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP46MbvEeO9CYUoXDRplw" x="635" y="324"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gSwG8MofEeO3DsHezUU9Sg" type="2012">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gSxVEMofEeO3DsHezUU9Sg" type="5038"/>
+ <element xmi:type="uml:Comment" href="model.uml#_gP184MofEeO3DsHezUU9Sg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gSwuAMofEeO3DsHezUU9Sg" x="534" y="72" width="366" height="70"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_lNP46cbvEeO9CYUoXDRplw"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_lNP46sbvEeO9CYUoXDRplw">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnYMbvEeO9CYUoXDRplw"/>
+ <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.infra.viewpoints.policy/builtin/default.configuration#//@viewpoints.0/@modelKinds.1"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnYMbvEeO9CYUoXDRplw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_lNP468bvEeO9CYUoXDRplw" type="4006" source="_lNP418bvEeO9CYUoXDRplw" target="_lNP40cbvEeO9CYUoXDRplw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP47MbvEeO9CYUoXDRplw" visible="false" type="6014">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP47cbvEeO9CYUoXDRplw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP47sbvEeO9CYUoXDRplw" visible="false" type="6015">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP478bvEeO9CYUoXDRplw" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lNP48MbvEeO9CYUoXDRplw"/>
+ <element xmi:type="uml:Abstraction" href="model.uml#_lNLnZMbvEeO9CYUoXDRplw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lNP48cbvEeO9CYUoXDRplw" points="[-2, -10, 8, 48]$[-27, -45, -17, 13]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP48sbvEeO9CYUoXDRplw" id="(0.305,0.1)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP488bvEeO9CYUoXDRplw" id="(0.27,0.87)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lNP49MbvEeO9CYUoXDRplw" type="4006" source="_lNP43cbvEeO9CYUoXDRplw" target="_lNP418bvEeO9CYUoXDRplw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP49cbvEeO9CYUoXDRplw" visible="false" type="6014">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP49sbvEeO9CYUoXDRplw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP498bvEeO9CYUoXDRplw" visible="false" type="6015">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP4-MbvEeO9CYUoXDRplw" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lNP4-cbvEeO9CYUoXDRplw"/>
+ <element xmi:type="uml:Abstraction" href="model.uml#_lNLnZ8bvEeO9CYUoXDRplw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lNP4-sbvEeO9CYUoXDRplw" points="[-9, -16, 0, 67]$[-24, -72, -15, 11]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP4-8bvEeO9CYUoXDRplw" id="(0.27,0.16)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP4_MbvEeO9CYUoXDRplw" id="(0.235,0.89)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lNP4_cbvEeO9CYUoXDRplw" type="4008" source="_lNP448bvEeO9CYUoXDRplw" target="_lNP418bvEeO9CYUoXDRplw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP4_sbvEeO9CYUoXDRplw" visible="false" type="6026">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP4_8bvEeO9CYUoXDRplw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP5AMbvEeO9CYUoXDRplw" visible="false" type="6027">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP5AcbvEeO9CYUoXDRplw" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lNP5AsbvEeO9CYUoXDRplw"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_lNLnacbvEeO9CYUoXDRplw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lNP5A8bvEeO9CYUoXDRplw" points="[-46, -20, 265, 113]$[-275, -135, 36, -2]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP5BMbvEeO9CYUoXDRplw" id="(0.0,0.24)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP5BcbvEeO9CYUoXDRplw" id="(1.0,0.65)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lNP5BsbvEeO9CYUoXDRplw" type="4008" source="_lNP448bvEeO9CYUoXDRplw" target="_lNP43cbvEeO9CYUoXDRplw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP5B8bvEeO9CYUoXDRplw" visible="false" type="6026">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP5CMbvEeO9CYUoXDRplw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP5CcbvEeO9CYUoXDRplw" visible="false" type="6027">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP5CsbvEeO9CYUoXDRplw" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lNP5C8bvEeO9CYUoXDRplw"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_lNLnasbvEeO9CYUoXDRplw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lNP5DMbvEeO9CYUoXDRplw" points="[-40, 1, 262, -12]$[-267, 20, 35, 7]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP5DcbvEeO9CYUoXDRplw" id="(0.0,0.69)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP5DsbvEeO9CYUoXDRplw" id="(1.0,0.64)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_KohZ8McQEeOLeMHQ13vmOA" type="PapyrusUMLClassDiagram" name="ClassDiagram" measurementUnit="Pixel">
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_KohZ8ccQEeOLeMHQ13vmOA"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_KohZ8scQEeOLeMHQ13vmOA">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnYMbvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnYMbvEeO9CYUoXDRplw"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_Nf1kUMcbEeOenbI5XqwJvQ" type="UseCase" name="UseCaseDiagram" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_OAXegMcbEeOenbI5XqwJvQ" type="2015">
+ <children xmi:type="notation:DecorationNode" xmi:id="_OAZTsMcbEeOenbI5XqwJvQ" type="5019"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_OAZTsccbEeOenbI5XqwJvQ" type="7011">
+ <children xmi:type="notation:Shape" xmi:id="_PBuN0McbEeOenbI5XqwJvQ" type="3009">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PBuN0scbEeOenbI5XqwJvQ" type="5018"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PBu04McbEeOenbI5XqwJvQ" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_PBu04ccbEeOenbI5XqwJvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_PBu04scbEeOenbI5XqwJvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PBu048cbEeOenbI5XqwJvQ"/>
+ </children>
+ <element xmi:type="uml:UseCase" href="model.uml#_O8koEMcbEeOenbI5XqwJvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PBuN0ccbEeOenbI5XqwJvQ" x="23" y="12"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QqrvsMcbEeOenbI5XqwJvQ" type="3009">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QqsWwMcbEeOenbI5XqwJvQ" type="5018"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_QqsWwccbEeOenbI5XqwJvQ" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_QqsWwscbEeOenbI5XqwJvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_QqsWw8cbEeOenbI5XqwJvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QqsWxMcbEeOenbI5XqwJvQ"/>
+ </children>
+ <element xmi:type="uml:UseCase" href="model.uml#_QqgwkMcbEeOenbI5XqwJvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QqrvsccbEeOenbI5XqwJvQ" x="12" y="78"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_zqrN0MozEeO3DsHezUU9Sg" type="3009">
+ <children xmi:type="notation:DecorationNode" xmi:id="_zqr04MozEeO3DsHezUU9Sg" type="5018"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_zqr04cozEeO3DsHezUU9Sg" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_zqr04sozEeO3DsHezUU9Sg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_zqr048ozEeO3DsHezUU9Sg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zqr05MozEeO3DsHezUU9Sg"/>
+ </children>
+ <element xmi:type="uml:UseCase" href="model.uml#_zqMFoMozEeO3DsHezUU9Sg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zqrN0cozEeO3DsHezUU9Sg" x="64" y="149" height="47"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_l8-K4Mo3EeOzTpunJ7qmNw" type="3009">
+ <children xmi:type="notation:DecorationNode" xmi:id="_l8-x8Mo3EeOzTpunJ7qmNw" type="5018"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_l8_ZAMo3EeOzTpunJ7qmNw" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_l8_ZAco3EeOzTpunJ7qmNw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_l8_ZAso3EeOzTpunJ7qmNw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_l8_ZA8o3EeOzTpunJ7qmNw"/>
+ </children>
+ <element xmi:type="uml:UseCase" href="model.uml#_l5cVwMo3EeOzTpunJ7qmNw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_l8-K4co3EeOzTpunJ7qmNw" x="42" y="206"/>
+ </children>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OAZTsscbEeOenbI5XqwJvQ"/>
+ </children>
+ <element xmi:type="uml:Component" href="model.uml#_lNLnZcbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OAXegccbEeOenbI5XqwJvQ" x="311" y="22" width="361" height="316"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_g3FzAMozEeO3DsHezUU9Sg" type="2011">
+ <children xmi:type="notation:DecorationNode" xmi:id="_g3GaEMozEeO3DsHezUU9Sg" type="5014">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_g3GaEcozEeO3DsHezUU9Sg" x="20" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_g3HBIMozEeO3DsHezUU9Sg" type="6029">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_g3HBIcozEeO3DsHezUU9Sg" x="20" y="100"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_g3HoMMozEeO3DsHezUU9Sg" type="6037">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_g3HoMcozEeO3DsHezUU9Sg" x="20" y="80"/>
+ </children>
+ <element xmi:type="uml:Actor" href="model.uml#_g2Kl8MozEeO3DsHezUU9Sg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_g3FzAcozEeO3DsHezUU9Sg" x="136" y="106"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_Nf2LYMcbEeOenbI5XqwJvQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_Nf2LYccbEeOenbI5XqwJvQ">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnY8bvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnY8bvEeO9CYUoXDRplw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_1p5TkMozEeO3DsHezUU9Sg" type="4011" source="_g3FzAMozEeO3DsHezUU9Sg" target="_PBuN0McbEeOenbI5XqwJvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_1p56oMozEeO3DsHezUU9Sg" visible="false" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_1p56ocozEeO3DsHezUU9Sg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_1p6hsMozEeO3DsHezUU9Sg" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_1p6hscozEeO3DsHezUU9Sg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_1p5TkcozEeO3DsHezUU9Sg"/>
+ <element xmi:type="uml:Association" href="model.uml#_1pkjcMozEeO3DsHezUU9Sg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1p5TksozEeO3DsHezUU9Sg" points="[40, -7, -141, 0]$[165, -7, -16, 0]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1qHWAMozEeO3DsHezUU9Sg" id="(0.06584362139917696,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_2Py18MozEeO3DsHezUU9Sg" type="4011" source="_g3FzAMozEeO3DsHezUU9Sg" target="_QqrvsMcbEeOenbI5XqwJvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2PzdAMozEeO3DsHezUU9Sg" visible="false" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2PzdAcozEeO3DsHezUU9Sg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2P0EEMozEeO3DsHezUU9Sg" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2P0EEcozEeO3DsHezUU9Sg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2Py18cozEeO3DsHezUU9Sg"/>
+ <element xmi:type="uml:Association" href="model.uml#_2PwZsMozEeO3DsHezUU9Sg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2Py18sozEeO3DsHezUU9Sg" points="[40, 23, -164, -62]$[103, 61, -101, -24]$[166, 76, -38, -9]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2P7_4MozEeO3DsHezUU9Sg" id="(0.12837837837837837,0.7)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_2zKBsMozEeO3DsHezUU9Sg" type="4011" source="_g3FzAMozEeO3DsHezUU9Sg" target="_zqrN0MozEeO3DsHezUU9Sg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2zKowMozEeO3DsHezUU9Sg" visible="false" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2zLP0MozEeO3DsHezUU9Sg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2zLP0cozEeO3DsHezUU9Sg" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2zL24MozEeO3DsHezUU9Sg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2zKBscozEeO3DsHezUU9Sg"/>
+ <element xmi:type="uml:Association" href="model.uml#_2zHlcMozEeO3DsHezUU9Sg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2zKBssozEeO3DsHezUU9Sg" points="[24, 30, -258, -110]$[82, 102, -200, -38]$[216, 127, -66, -13]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_rvotEMo3EeOzTpunJ7qmNw" type="4011" source="_g3FzAMozEeO3DsHezUU9Sg" target="_l8-K4Mo3EeOzTpunJ7qmNw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_rvpUIMo3EeOzTpunJ7qmNw" visible="false" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rvpUIco3EeOzTpunJ7qmNw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_rvp7MMo3EeOzTpunJ7qmNw" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rvp7Mco3EeOzTpunJ7qmNw" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_rvotEco3EeOzTpunJ7qmNw"/>
+ <element xmi:type="uml:Association" href="model.uml#_rvVLEMo3EeOzTpunJ7qmNw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rvotEso3EeOzTpunJ7qmNw" points="[10, 30, -218, -199]$[54, 160, -174, -69]$[197, 216, -31, -13]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rvx3AMo3EeOzTpunJ7qmNw" id="(0.13777777777777778,0.6666666666666666)"/>
+ </edges>
+ </notation:Diagram>
+ <nattable:Table xmi:id="_1PpFsMohEeO3DsHezUU9Sg" name="RequirementTable" currentRowAxisProvider="_1PpFtcohEeO3DsHezUU9Sg" currentColumnAxisProvider="_1PpFscohEeO3DsHezUU9Sg">
+ <context xmi:type="uml:Model" href="model.uml#_lNLnYsbvEeO9CYUoXDRplw"/>
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnYsbvEeO9CYUoXDRplw"/>
+ <prototype xmi:type="configuration:PapyrusSyncTable" href="platform:/plugin/org.eclipse.papyrus.infra.viewpoints.policy/builtin/default.configuration#//@viewpoints.0/@modelKinds.26"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml.nattable.requirement.config/configs/requirement.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_1PpFscohEeO3DsHezUU9Sg" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_1PpFssohEeO3DsHezUU9Sg" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml.nattable.requirement.config/configs/requirement.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EStructuralFeatureAxis" xmi:id="_1PpFs8ohEeO3DsHezUU9Sg">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml.nattable.requirement.config/configs/requirement.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="ecore:EAttribute" href="http://www.eclipse.org/uml2/5.0.0/UML#//NamedElement/name"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_1PpFtMohEeO3DsHezUU9Sg" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml.nattable.requirement.config/configs/requirement.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_1PpFtcohEeO3DsHezUU9Sg" description="Provides the requirements directly owned by the context of the table" name="Requirement Axis Provider" disconnectSlave="true"/>
+ </nattable:Table>
+ <notation:Diagram xmi:id="_pUh7UMrhEeOada-BlHQh_Q" type="PapyrusUMLComponentDiagram" name="ArchitectureOverview" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_JUmCkM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_JUmpoM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_JUnQsM7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_JUnQsc7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JUnQss7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_JUwaoM7UEeOkpJkbnruUGQ" visible="false" type="AppliedStereotypeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_JUwaoc7UEeOkpJkbnruUGQ" showTitle="true"/>
+ <element xmi:type="ADL4Eclipse:Plugin" href="model.uml#_GhlIYM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JUwaos7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_JUwao87UEeOkpJkbnruUGQ" type="compartment_shape_display">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_JUwapM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JUwapc7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KzqooM7UEeOkpJkbnruUGQ" type="3069">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Kzqoos7UEeOkpJkbnruUGQ" visible="false" type="5006">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KzrPsM7UEeOkpJkbnruUGQ" x="132" y="43"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Kzr2wM7UEeOkpJkbnruUGQ" visible="false" type="5007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Kzr2wc7UEeOkpJkbnruUGQ" x="25" y="-10"/>
+ </children>
+ <element xmi:type="uml:Port" href="model.uml#_Gs61sM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Kzqooc7UEeOkpJkbnruUGQ" x="-10" y="50"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_JUmCkc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_JUmCks7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GhiFEM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JUmCk87UEeOkpJkbnruUGQ" x="540" y="340" width="638" height="121"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_OzfUMM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Ozf7QM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ozf7Qc7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ozf7Qs7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ozf7Q87UEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_OzfUMc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_OzfUMs7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GqYfEM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OzfUM87UEeOkpJkbnruUGQ" x="500" y="120" width="161" height="81"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_PyR3sM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PySewM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_PyTF0M7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_PyTF0c7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PyTF0s7UEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_PyR3sc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_PyR3ss7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_Gqqy8M7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PyR3s87UEeOkpJkbnruUGQ" x="1000" y="120" width="181" height="81"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_QGfNIM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QGf0MM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_QGf0Mc7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_QGf0Ms7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QGf0M87UEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_QGfNIc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QGfNIs7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GrR28M7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QGfNI87UEeOkpJkbnruUGQ" x="720" y="120" width="241" height="81"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_QsxxEM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QsyYIM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Qsy_MM7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Qsy_Mc7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Qsy_Ms7UEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_QsxxEc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QsxxEs7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GsAPsM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QsxxE87UEeOkpJkbnruUGQ" x="260" y="120" width="178" height="81"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_TQfD8M7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_TQfD9M7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TQfrAM7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TQfrAc7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TQfrAs7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TQm_wM7UEeOkpJkbnruUGQ" visible="false" type="AppliedStereotypeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TQm_wc7UEeOkpJkbnruUGQ" showTitle="true"/>
+ <element xmi:type="ADL4Eclipse:Plugin" href="model.uml#_GodMcM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TQm_ws7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TQm_w87UEeOkpJkbnruUGQ" type="compartment_shape_display">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TQm_xM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TQm_xc7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_WXf4MM7UEeOkpJkbnruUGQ" type="3069">
+ <children xmi:type="notation:DecorationNode" xmi:id="_WXgfQM7UEeOkpJkbnruUGQ" type="5006">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_iOtWwM7UEeOkpJkbnruUGQ" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_iOt90M7UEeOkpJkbnruUGQ" key="visible" value="true"/>
+ </eAnnotations>
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_mQo7IM7UEeOkpJkbnruUGQ" name="maskLabel">
+ <stringListValue>visibility</stringListValue>
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>conjugated</stringListValue>
+ </styles>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_WXgfQc7UEeOkpJkbnruUGQ" x="-129" y="-70"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_WXhGUM7UEeOkpJkbnruUGQ" type="5007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_iOuk4M7UEeOkpJkbnruUGQ" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_iOvL8M7UEeOkpJkbnruUGQ" key="visible" value="true"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_WXhtYM7UEeOkpJkbnruUGQ" x="25" y="-10"/>
+ </children>
+ <element xmi:type="uml:Port" href="model.uml#_Gs8D0M7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WXf4Mc7UEeOkpJkbnruUGQ" x="189" y="50"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_TQfD8c7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_TQfD8s7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GoawMc7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TQfD887UEeOkpJkbnruUGQ" x="120" y="340" width="199" height="121"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_pUh7UcrhEeOada-BlHQh_Q"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_pUh7UsrhEeOada-BlHQh_Q">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_OzzdQM7UEeOkpJkbnruUGQ" type="4010" source="_JUmCkM7UEeOkpJkbnruUGQ" target="_OzfUMM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Oz0EUM7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Oz0rYM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Oz0rYc7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Oz1ScM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_OzzdQc7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_Gqo9wM7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OzzdQs7UEeOkpJkbnruUGQ" points="[-129, -77, 565, 339]$[-694, -416, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PNAAYM7UEeOkpJkbnruUGQ" id="(0.0768025078369906,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PNAncM7UEeOkpJkbnruUGQ" id="(0.4968944099378882,0.9876543209876543)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_PyghMM7UEeOkpJkbnruUGQ" type="4010" source="_JUmCkM7UEeOkpJkbnruUGQ" target="_PyR3sM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PyhIQM7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PyhvUM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PyhvUc7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PyhvUs7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_PyghMc7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_GrQBwM7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PyghMs7UEeOkpJkbnruUGQ" points="[-129, -77, 565, 339]$[-694, -416, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RhUMYM7UEeOkpJkbnruUGQ" id="(0.877742946708464,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RhUzcM7UEeOkpJkbnruUGQ" id="(0.5524861878453039,0.9876543209876543)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_QGt2oM7UEeOkpJkbnruUGQ" type="4010" source="_JUmCkM7UEeOkpJkbnruUGQ" target="_QGfNIM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QGudsM7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QGudsc7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_QGvEwM7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QGvEwc7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QGt2oc7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_Gr9zcM7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QGt2os7UEeOkpJkbnruUGQ" points="[-129, -77, 565, 339]$[-694, -416, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SA-j4M7UEeOkpJkbnruUGQ" id="(0.4702194357366771,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SA_K8M7UEeOkpJkbnruUGQ" id="(0.47717842323651455,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_QtAakM7UEeOkpJkbnruUGQ" type="4010" source="_JUmCkM7UEeOkpJkbnruUGQ" target="_QsxxEM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QtBBoM7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QtBosM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_QtBosc7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QtCPwM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QtAakc7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_GsjCQM7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QtAaks7UEeOkpJkbnruUGQ" points="[-129, -77, 565, 339]$[-694, -416, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SngYYM7UEeOkpJkbnruUGQ" id="(0.0,0.06451612903225806)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Sng_cM7UEeOkpJkbnruUGQ" id="(0.449438202247191,0.9876543209876543)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Yd4V4M7UEeOkpJkbnruUGQ" type="4010" source="_KzqooM7UEeOkpJkbnruUGQ" target="_WXf4MM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Yd488M7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Yd5kAM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Yd6LEM7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Yd6LEc7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Yd4V4c7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_Gs8q4M7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Yd4V4s7UEeOkpJkbnruUGQ" points="[-10, -2, 308, 44]$[-308, -45, 10, 1]"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_xae5MM7bEeOkpJkbnruUGQ" type="PapyrusUMLClassDiagram" name="Structure" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_yHZCgM7bEeOkpJkbnruUGQ" type="2007">
+ <children xmi:type="notation:DecorationNode" xmi:id="_yHaQoM7bEeOkpJkbnruUGQ" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yHaQoc7bEeOkpJkbnruUGQ" type="7016">
+ <children xmi:type="notation:Shape" xmi:id="_0-lSEM7bEeOkpJkbnruUGQ" type="3010" gradient="10011046, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0-l5IM7bEeOkpJkbnruUGQ" type="5014"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_0-l5Ic7bEeOkpJkbnruUGQ" visible="false" type="7011">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_0-l5Is7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0-l5I87bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0-l5JM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0-l5Jc7bEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_0-l5Js7bEeOkpJkbnruUGQ" type="7012">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Xv11EM7dEeOkpJkbnruUGQ" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Xv2cIM7dEeOkpJkbnruUGQ" key="visible" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:Node" xmi:id="_YbR-wM7dEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_YbQwoM7dEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YbR-wc7dEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_bqRqUM7dEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_bqP1IM7dEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_bqRqUc7dEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_0-l5J87bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0-l5KM7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0-l5Kc7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0-l5Ks7bEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_0-mgMM7bEeOkpJkbnruUGQ" visible="false" type="7013">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_0-mgMc7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0-mgMs7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0-mgM87bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0-mgNM7bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_0-fygM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0-lSEc7bEeOkpJkbnruUGQ" x="55" y="32" width="221" height="56"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yHaQos7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yHaQo87bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_hGz2YM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yHZCgc7bEeOkpJkbnruUGQ" x="40" y="240" width="393" height="182"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_yixW8M7bEeOkpJkbnruUGQ" type="2007">
+ <children xmi:type="notation:DecorationNode" xmi:id="_yix-AM7bEeOkpJkbnruUGQ" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yix-Ac7bEeOkpJkbnruUGQ" type="7016">
+ <children xmi:type="notation:Shape" xmi:id="_7X0FAM7bEeOkpJkbnruUGQ" type="3010" gradient="10011046, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_7X0FAs7bEeOkpJkbnruUGQ" type="5014"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7X0sEM7bEeOkpJkbnruUGQ" visible="false" type="7011">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7X0sEc7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7X0sEs7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7X0sE87bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7X0sFM7bEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7X0sFc7bEeOkpJkbnruUGQ" visible="false" type="7012">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7X0sFs7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7X0sF87bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7X0sGM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7X0sGc7bEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7X0sGs7bEeOkpJkbnruUGQ" visible="false" type="7013">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7X0sG87bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7X0sHM7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7X0sHc7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7X0sHs7bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_7XyP0M7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7X0FAc7bEeOkpJkbnruUGQ" x="51" y="13" width="202" height="56"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yix-As7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yix-A87bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_i84nMM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yixW8c7bEeOkpJkbnruUGQ" x="40" y="20" width="375" height="169"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_-_KmMM7bEeOkpJkbnruUGQ" type="2007">
+ <children xmi:type="notation:DecorationNode" xmi:id="_-_LNQM7bEeOkpJkbnruUGQ" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_-_LNQc7bEeOkpJkbnruUGQ" type="7016">
+ <children xmi:type="notation:Shape" xmi:id="_ADxd0M7cEeOkpJkbnruUGQ" type="3023" gradient="8905185, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ADxd0s7cEeOkpJkbnruUGQ" type="5049"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ADyE4M7cEeOkpJkbnruUGQ" visible="false" type="7027">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ADyE4c7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ADyE4s7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ADyE487cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADyE5M7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ADyE5c7cEeOkpJkbnruUGQ" type="7028">
+ <children xmi:type="notation:Node" xmi:id="_gicIkM7cEeOkpJkbnruUGQ" type="3007">
+ <element xmi:type="uml:Operation" href="model.uml#_giaTYM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gicIkc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_mbFW8M7cEeOkpJkbnruUGQ" type="3007">
+ <element xmi:type="uml:Operation" href="model.uml#_mbDhwM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_mbFW8c7cEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ADyE5s7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ADyE587cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ADyE6M7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADyE6c7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ADyE6s7cEeOkpJkbnruUGQ" visible="false" type="7029">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ADyE687cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ADyE7M7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ADyE7c7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADyE7s7cEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Interface" href="model.uml#_ADvBkM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADxd0c7cEeOkpJkbnruUGQ" x="255" y="33" height="81"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_G0bSQM7cEeOkpJkbnruUGQ" type="3010" gradient="8905185, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_G0b5UM7cEeOkpJkbnruUGQ" type="5014"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_G0b5Uc7cEeOkpJkbnruUGQ" visible="false" type="7011">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G0b5Us7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_G0b5U87cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_G0b5VM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G0b5Vc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_G0cgYM7cEeOkpJkbnruUGQ" type="7012">
+ <children xmi:type="notation:Node" xmi:id="_swVo0M7cEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_swTzoM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_swVo0c7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_utIFoM7cEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_utGQcM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_utIFoc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_xPFsEM7cEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_xPD24M7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xPFsEc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G0cgYc7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_G0cgYs7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_G0cgY87cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G0cgZM7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_G0cgZc7cEeOkpJkbnruUGQ" visible="false" type="7013">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G0cgZs7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_G0cgZ87cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_G0cgaM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G0cgac7cEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_G0aEIM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G0bSQc7cEeOkpJkbnruUGQ" x="15" y="33" height="81"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LRukAM7cEeOkpJkbnruUGQ" type="3010" gradient="8905185, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_LRukAs7cEeOkpJkbnruUGQ" type="5014"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LRvLEM7cEeOkpJkbnruUGQ" type="7011">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LRvLEc7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LRvLEs7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LRvLE87cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRvLFM7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LRvLFc7cEeOkpJkbnruUGQ" type="7012">
+ <children xmi:type="notation:Node" xmi:id="__iTTAM7cEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#__iRd0M7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="__iTTAc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DiIloM7dEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_DiGwcM7dEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_DiIloc7dEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LRvLFs7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LRvLF87cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LRvLGM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRvLGc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LRvLGs7cEeOkpJkbnruUGQ" type="7013">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LRvLG87cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LRvLHM7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LRvLHc7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRvLHs7cEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_LRsu0M7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRukAc7cEeOkpJkbnruUGQ" x="22" y="240" width="314"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_-_LNQs7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-_LNQ87bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_Gs3LUM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-_KmMc7bEeOkpJkbnruUGQ" x="480" y="20" width="481" height="401"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_xae5Mc7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_xae5Ms7bEeOkpJkbnruUGQ">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_PaODYM7cEeOkpJkbnruUGQ" type="4001" source="_7X0FAM7bEeOkpJkbnruUGQ" target="_0-lSEM7bEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaOqcM7cEeOkpJkbnruUGQ" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaOqcc7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaPRgM7cEeOkpJkbnruUGQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaPRgc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaP4kM7cEeOkpJkbnruUGQ" visible="false" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaP4kc7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaQfoM7cEeOkpJkbnruUGQ" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaQfoc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaRGsM7cEeOkpJkbnruUGQ" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaRGsc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaRGss7cEeOkpJkbnruUGQ" visible="false" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaRtwM7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_PaODYc7cEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Association" href="model.uml#_PaLAEM7cEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PaODYs7cEeOkpJkbnruUGQ" points="[6, 12, 0, -174]$[4, 177, -2, -9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Pa_fcM7cEeOkpJkbnruUGQ" id="(0.5148514851485149,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Pa_fcc7cEeOkpJkbnruUGQ" id="(0.4642857142857143,0.09)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_7ICuMM7cEeOkpJkbnruUGQ" type="4001" source="_G0bSQM7cEeOkpJkbnruUGQ" target="_ADxd0M7cEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IDVQM7cEeOkpJkbnruUGQ" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7ID8UM7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IEjYM7cEeOkpJkbnruUGQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IEjYc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IFKcM7cEeOkpJkbnruUGQ" visible="false" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IFKcc7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IFxgM7cEeOkpJkbnruUGQ" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IFxgc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IGYkM7cEeOkpJkbnruUGQ" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IGYkc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IG_oM7cEeOkpJkbnruUGQ" visible="false" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IG_oc7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_7ICuMc7cEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Association" href="model.uml#_7IAR8M7cEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ICuMs7cEeOkpJkbnruUGQ" points="[23, 4, -78, 0]$[78, 4, -23, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7IXeUM7cEeOkpJkbnruUGQ" id="(0.8756756756756757,0.4567901234567901)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7IXeUc7cEeOkpJkbnruUGQ" id="(0.11330049261083744,0.5061728395061729)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_HWBG8M7dEeOkpJkbnruUGQ" type="4001" source="_LRukAM7cEeOkpJkbnruUGQ" target="_G0bSQM7cEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWBuAM7dEeOkpJkbnruUGQ" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWBuAc7dEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWCVEM7dEeOkpJkbnruUGQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWCVEc7dEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWC8IM7dEeOkpJkbnruUGQ" visible="false" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWC8Ic7dEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWDjMM7dEeOkpJkbnruUGQ" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWDjMc7dEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWEKQM7dEeOkpJkbnruUGQ" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWEKQc7dEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWExUM7dEeOkpJkbnruUGQ" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWExUc7dEeOkpJkbnruUGQ" x="-7" y="20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_HWBG8c7dEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Association" href="model.uml#_HV-qsM7dEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HWBG8s7dEeOkpJkbnruUGQ" points="[2, -9, 0, 138]$[-8, -135, -10, 12]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HWXsQM7dEeOkpJkbnruUGQ" id="(0.1910828025477707,0.08108108108108109)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HWXsQc7dEeOkpJkbnruUGQ" id="(0.372972972972973,0.8518518518518519)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Q1kKkM7dEeOkpJkbnruUGQ" type="4008" source="_0-lSEM7bEeOkpJkbnruUGQ" target="_LRukAM7cEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Q1kxoM7dEeOkpJkbnruUGQ" visible="false" type="6026">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Q1lYsM7dEeOkpJkbnruUGQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Q1lYsc7dEeOkpJkbnruUGQ" visible="false" type="6027">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Q1l_wM7dEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Q1kKkc7dEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_Q1hHQM7dEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Q1kKks7dEeOkpJkbnruUGQ" points="[4, 5, -232, 0]$[215, 2, -21, -3]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Q1w-4M7dEeOkpJkbnruUGQ" id="(0.9795918367346939,0.375)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Q1xl8M7dEeOkpJkbnruUGQ" id="(0.06687898089171974,0.34234234234234234)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_kCCKAM7eEeOkpJkbnruUGQ" type="PapyrusUMLClassDiagram" name="comment" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_lBxvwM7eEeOkpJkbnruUGQ" type="2012">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_qpb70M7eEeOkpJkbnruUGQ" source="PapyrusHyperLink_Page" references="_xae5MM7bEeOkpJkbnruUGQ">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qpb70c7eEeOkpJkbnruUGQ" key="tooltip_text" value="Structure"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qpb70s7eEeOkpJkbnruUGQ" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qpb7087eEeOkpJkbnruUGQ" key="is_default_navigation" value="false"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lByW0M7eEeOkpJkbnruUGQ" type="5038"/>
+ <element xmi:type="uml:Comment" href="model.uml#_j3s-wM7dEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lBxvwc7eEeOkpJkbnruUGQ" x="39" y="27"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_kCCKAc7eEeOkpJkbnruUGQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_kCCKAs7eEeOkpJkbnruUGQ">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ </notation:Diagram>
+</xmi:XMI>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.uml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.uml
new file mode 100644
index 00000000000..57a5ae35815
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.uml
@@ -0,0 +1,789 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ADL4Eclipse="http:///schemas/ADL4Eclipse/_jDF0YNT6EeKj0Lzrn2trlQ/2" xmlns:Document="http:///schemas/Document/_qR4REMn0EeO9CYUoXDRplw/0" xmlns:ModuleLayer="http://OSGI/schemas/ModuleLayer/_0xHxU4DEEeKQG4TlBAn6bg/3" xmlns:Requirements="http://www.eclipse.org/papyrus/0.7.0/SysML/Requirements" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:structure="http://DeveloperProcess/schemas/structure/_VA9p4McPEeO9CYUoXDRplw/1" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http:///schemas/ADL4Eclipse/_jDF0YNT6EeKj0Lzrn2trlQ/2 pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_jDF0YdT6EeKj0Lzrn2trlQ http:///schemas/Document/_qR4REMn0EeO9CYUoXDRplw/0 pathmap://DEVELOPER_PROFILES/Document.profile.uml#_qR44IMn0EeO9CYUoXDRplw http://OSGI/schemas/ModuleLayer/_0xHxU4DEEeKQG4TlBAn6bg/3 pathmap://OSGI_PROFILES/osgi.profile.uml#_0xRiUIDEEeKQG4TlBAn6bg http://www.eclipse.org/papyrus/0.7.0/SysML/Requirements http://www.eclipse.org/papyrus/0.7.0/SysML#//requirements http://DeveloperProcess/schemas/structure/_VA9p4McPEeO9CYUoXDRplw/1 pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_VA-4AMcPEeO9CYUoXDRplw">
+ <uml:Model xmi:id="_lNLnYMbvEeO9CYUoXDRplw" name="SynchronizeView">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_gP184MofEeO3DsHezUU9Sg">
+ <body>The goal is to enable a strong synchronization between visual elements displayed in the diagram with elements contained in the model. &#xD;
+This mechanism can be added locally for each element by using CSS. &#xD;
+For example, you would like to see: &#xD;
+- synchronize compartment of enumeration literal for all enumeration. &#xD;
+- synchronize compartment of attributes and operation for all class stereotyped ….&#xD;
+This fucntionality is associated to the task 433206.&#xD;
+</body>
+ </ownedComment>
+ <packageImport xmi:type="uml:PackageImport" xmi:id="_lNLnYcbvEeO9CYUoXDRplw">
+ <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
+ </packageImport>
+ <packagedElement xmi:type="uml:Model" xmi:id="_lNLnYsbvEeO9CYUoXDRplw" name="Requirements">
+ <packagedElement xmi:type="uml:Class" xmi:id="_W7DF0MohEeO3DsHezUU9Sg" name="LocalSynchronization"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_9DAe4MoiEeO3DsHezUU9Sg" name="CSSIntegration"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_WWPdsMojEeO3DsHezUU9Sg" name="CustomSynchronization"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_lNLnY8bvEeO9CYUoXDRplw" name="UseCases">
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_lNLnZMbvEeO9CYUoXDRplw" name="useCasesAbstraction" client="_lNLnY8bvEeO9CYUoXDRplw" supplier="_lNLnYsbvEeO9CYUoXDRplw"/>
+ <packagedElement xmi:type="uml:Component" xmi:id="_lNLnZcbvEeO9CYUoXDRplw" name="Synchronization" useCase="_O8koEMcbEeOenbI5XqwJvQ _zqMFoMozEeO3DsHezUU9Sg _l5cVwMo3EeOzTpunJ7qmNw">
+ <ownedUseCase xmi:type="uml:UseCase" xmi:id="_O8koEMcbEeOenbI5XqwJvQ" name="Add an element in the model" subject="_lNLnZcbvEeO9CYUoXDRplw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_XBXZIMo1EeO3DsHezUU9Sg">
+ <body>When an user adds an element in the model, the synchronization mechanism try to add in the current diagram the view that correspond to the semantic element&#xD;
+The difficulty of this mechanism is to parameter the synchronization.&#xD;
+By default, the synchronizatiopn is based on ' owned element'role. When you add an element, the graphical element that correponds to the owner try to display it in the diagram. &#xD;
+But some cases are not interesting. For example in the composite diagram, displaying parts in part correspond to part of the type, not directly part of part.</body>
+ </ownedComment>
+ </ownedUseCase>
+ <ownedUseCase xmi:type="uml:UseCase" xmi:id="_zqMFoMozEeO3DsHezUU9Sg" name="Move an element" subject="_lNLnZcbvEeO9CYUoXDRplw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_a-G7gMo1EeO3DsHezUU9Sg">
+ <body>When a element is moved, the synchronization mechanism must to create graphically the element to each diagram.&#xD;
+</body>
+ </ownedComment>
+ </ownedUseCase>
+ <ownedUseCase xmi:type="uml:UseCase" xmi:id="_l5cVwMo3EeOzTpunJ7qmNw" name="Set synchronization enable" subject="_lNLnZcbvEeO9CYUoXDRplw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_vxFwUMo3EeOzTpunJ7qmNw">
+ <body>The user can set enable the synchronization for a set of graphical elements.&#xD;
+</body>
+ </ownedComment>
+ </ownedUseCase>
+ <packagedElement xmi:type="uml:UseCase" xmi:id="_QqgwkMcbEeOenbI5XqwJvQ" name="Remove an element from the model">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_bGhQoMo1EeO3DsHezUU9Sg">
+ <body>When the element is removed, the corresponding graphical element must be removed.</body>
+ </ownedComment>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Actor" xmi:id="_g2Kl8MozEeO3DsHezUU9Sg" name="User"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_1pkjcMozEeO3DsHezUU9Sg" name="A_user_add an element in the model" memberEnd="_1pkjccozEeO3DsHezUU9Sg _1pkjdMozEeO3DsHezUU9Sg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_1pkjccozEeO3DsHezUU9Sg" name="user" type="_g2Kl8MozEeO3DsHezUU9Sg" association="_1pkjcMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_1pkjcsozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_1pkjc8ozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ <ownedEnd xmi:type="uml:Property" xmi:id="_1pkjdMozEeO3DsHezUU9Sg" name="add an element in the model" type="_O8koEMcbEeOenbI5XqwJvQ" association="_1pkjcMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_1pkjdcozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_1pkjdsozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_2PwZsMozEeO3DsHezUU9Sg" name="A_user_remove an element from the model" memberEnd="_2PwZscozEeO3DsHezUU9Sg _2PwZtMozEeO3DsHezUU9Sg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_2PwZscozEeO3DsHezUU9Sg" name="user" type="_g2Kl8MozEeO3DsHezUU9Sg" association="_2PwZsMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2PwZssozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2PwZs8ozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ <ownedEnd xmi:type="uml:Property" xmi:id="_2PwZtMozEeO3DsHezUU9Sg" name="remove an element from the model" type="_QqgwkMcbEeOenbI5XqwJvQ" association="_2PwZsMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2PwZtcozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2PwZtsozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_2zHlcMozEeO3DsHezUU9Sg" name="A_user_move an element" memberEnd="_2zHlccozEeO3DsHezUU9Sg _2zHldMozEeO3DsHezUU9Sg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_2zHlccozEeO3DsHezUU9Sg" name="user" type="_g2Kl8MozEeO3DsHezUU9Sg" association="_2zHlcMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2zHlcsozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2zHlc8ozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ <ownedEnd xmi:type="uml:Property" xmi:id="_2zHldMozEeO3DsHezUU9Sg" name="move an element" type="_zqMFoMozEeO3DsHezUU9Sg" association="_2zHlcMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2zHldcozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2zHldsozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_rvVLEMo3EeOzTpunJ7qmNw" name="A_user_set synchronization enable" memberEnd="_rvVLEco3EeOzTpunJ7qmNw _rvVLFMo3EeOzTpunJ7qmNw">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_rvVLEco3EeOzTpunJ7qmNw" name="user" type="_g2Kl8MozEeO3DsHezUU9Sg" association="_rvVLEMo3EeOzTpunJ7qmNw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvVLEso3EeOzTpunJ7qmNw" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvVLE8o3EeOzTpunJ7qmNw" value="1"/>
+ </ownedEnd>
+ <ownedEnd xmi:type="uml:Property" xmi:id="_rvVLFMo3EeOzTpunJ7qmNw" name="set synchronization enable" type="_l5cVwMo3EeOzTpunJ7qmNw" association="_rvVLEMo3EeOzTpunJ7qmNw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvVLFco3EeOzTpunJ7qmNw" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvVLFso3EeOzTpunJ7qmNw" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_lNLnZsbvEeO9CYUoXDRplw" name="Design">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_9I1OUM7pEeOVs4zXLxqLmw">
+ <body>The desing consists into one plugin org.eclipse.papyrus.uml.diagram.synchronizeview.&#xD;
+It contains an editpolicy provider and an extension point</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_j3s-wM7dEeOkpJkbnruUGQ">
+ <body>The edit policy SynchronizeViewEdipolicty is installed by the SynchronizeEditPolicyProvider on:&#xD;
+ - DiagramEditPart (to synchronize content of diagram)&#xD;
+ - CompartmentEditPart (to synchronize content of compartment)&#xD;
+ - IBorderedShapeEditPart (to synchronize content of borderedElement as port....)&#xD;
+&#xD;
+ThisEditPolicy is used to allowing synchronization between graphical element and element in the model&#xD;
+ It is based on canonical editpolicy but it has several differencies:&#xD;
+ - View Service cannot be called. To call it we need to get the identifier of the child that could be place in compartment. I is not possible to find in a generic way&#xD;
+ --> link to each Diagram Updater, and moreover some child has been created by custom code. In fact, the hierarchy of visual element must follow the hierachy of semantic element.&#xD;
+ --> this is not the case so the Diagram updater generated from the gmfgen has not the good info.&#xD;
+&#xD;
+So to an extension point has been added to let the developer to specify semantic element that play children of a given editpart:&#xD;
+ see the example:&#xD;
+&#xD;
+&#xD;
+The editpolicy try to refresh visual element. To do that it calls the method getSemanticChildrenList(). I llokf for accoss the extesnison point the corresponding 'SemantiChild' with the highest priority.&#xD;
+This object give the list of sementic element that could be children of the context of the given editpart.&#xD;
+&#xD;
+In the context of part, in the composite diagram, we can describe that children are ownedlement of the type of the part.&#xD;
+&#xD;
+Finally to allow the creation we base our work on the mechanism of the drop. (refreshSemanticChildrenByDrop)</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_X4kYwMr3EeOxaZrLLxAqiw">
+ <body>Remarks:&#xD;
+In order to install synchronization on element, views must have canonical style. So a migration is needed.&#xD;
+BasicCompartment becomes Compartment&#xD;
+Diagram and Shape mst have a style: so we need to add :&#xD;
+ CanonicalStyle canonicalStyle=(CanonicalStyle)diagram.createStyle(NotationPackage.eINSTANCE.getCanonicalStyle());&#xD;
+ canonicalStyle.setCanonical(false);</body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_lNLnZ8bvEeO9CYUoXDRplw" name="DesignAbstraction" client="_lNLnZsbvEeO9CYUoXDRplw" supplier="_lNLnY8bvEeO9CYUoXDRplw"/>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GhiFEM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview">
+ <ownedAttribute xmi:type="uml:Port" xmi:id="_Gs61sM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GlxE0M7UEeOkpJkbnruUGQ" name="org.eclipse.ui" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_Glk3kM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GmCxoM7UEeOkpJkbnruUGQ" name="org.eclipse.core.runtime" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_Gl0IIM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GmbzMM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GmF08M7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GnFTcM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GmePcc7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GoXs4M7UEeOkpJkbnruUGQ" name="org.eclipse.gef" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GnHvsc7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Gqo9wM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GqYfEM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GrQBwM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_Gqqy8M7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Gr9zcM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GrR28M7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GsjCQM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GsAPsM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GstaUM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.log" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GslegM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gs3LUM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview.customization">
+ <packagedElement xmi:type="uml:Interface" xmi:id="_ADvBkM7cEeOkpJkbnruUGQ" name="ISynchroSemanticChild">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_giaTYM7cEeOkpJkbnruUGQ" name="getSemanticEObjectToListen"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_mbDhwM7cEeOkpJkbnruUGQ" name="getSynchroSemanticChild"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_G0aEIM7cEeOkpJkbnruUGQ" name="SemanticChild">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_7H_q4M7cEeOkpJkbnruUGQ" name="iSynchroSemanticChild" type="_ADvBkM7cEeOkpJkbnruUGQ" association="_7IAR8M7cEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_7H_q4c7cEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_7H_q4s7cEeOkpJkbnruUGQ" value="1"/>
+ </ownedAttribute>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_swTzoM7cEeOkpJkbnruUGQ" name="getEditPart"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_utGQcM7cEeOkpJkbnruUGQ" name="getPriority"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_xPD24M7cEeOkpJkbnruUGQ" name="getSynchroSemanticChild"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_LRsu0M7cEeOkpJkbnruUGQ" name="SynchroSemanticChildRegistry">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_HV9ckM7dEeOkpJkbnruUGQ" name="semanticChild" type="_G0aEIM7cEeOkpJkbnruUGQ" association="_HV-qsM7dEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_HV9ckc7dEeOkpJkbnruUGQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_HV9cks7dEeOkpJkbnruUGQ" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="__iRd0M7cEeOkpJkbnruUGQ" name="getInstance"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_DiGwcM7dEeOkpJkbnruUGQ" name="getSynchroSemanticChild"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_7IAR8M7cEeOkpJkbnruUGQ" name="A_semanticChild_iSynchroSemanticChild_1" memberEnd="_7IAR8c7cEeOkpJkbnruUGQ _7H_q4M7cEeOkpJkbnruUGQ">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_7IAR8c7cEeOkpJkbnruUGQ" name="semanticChild" type="_G0aEIM7cEeOkpJkbnruUGQ" association="_7IAR8M7cEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_7IAR8s7cEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_7IAR887cEeOkpJkbnruUGQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_HV-qsM7dEeOkpJkbnruUGQ" name="A_synchroSemanticChildRegistry_semanticChild_1" memberEnd="_HV-qsc7dEeOkpJkbnruUGQ _HV9ckM7dEeOkpJkbnruUGQ">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_HV-qsc7dEeOkpJkbnruUGQ" name="synchroSemanticChildRegistry" type="_LRsu0M7cEeOkpJkbnruUGQ" association="_HV-qsM7dEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_HV-qss7dEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_HV-qs87dEeOkpJkbnruUGQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Gs8q4M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders" client="_Gs61sM7UEeOkpJkbnruUGQ" supplier="_Gs8D0M7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_hGz2YM7bEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview.editpolicy">
+ <packagedElement xmi:type="uml:Class" xmi:id="_0-fygM7bEeOkpJkbnruUGQ" name="SynchronizeViewEditPolicy">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_YbQwoM7dEeOkpJkbnruUGQ" name="getSemanticChildrenList"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_bqP1IM7dEeOkpJkbnruUGQ" name="refreshSemanticChildrenByDrop"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Q1hHQM7dEeOkpJkbnruUGQ" name="Dependency1" client="_0-fygM7bEeOkpJkbnruUGQ" supplier="_LRsu0M7cEeOkpJkbnruUGQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_i84nMM7bEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview.provider">
+ <packagedElement xmi:type="uml:Class" xmi:id="_7XyP0M7bEeOkpJkbnruUGQ" name="SynchronizeEditPolicyProvider">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_PaKZAM7cEeOkpJkbnruUGQ" name="synchronizeViewEditPolicy" type="_0-fygM7bEeOkpJkbnruUGQ" association="_PaLAEM7cEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PaKZAc7cEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PaKZAs7cEeOkpJkbnruUGQ" value="1"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_PaLAEM7cEeOkpJkbnruUGQ" name="A_synchronizeEditPolicyProvider_synchronizeViewEditPolicy_1" memberEnd="_PaLAEc7cEeOkpJkbnruUGQ _PaKZAM7cEeOkpJkbnruUGQ">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_PaLAEc7cEeOkpJkbnruUGQ" name="synchronizeEditPolicyProvider" type="_7XyP0M7bEeOkpJkbnruUGQ" association="_PaLAEM7cEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PaLAEs7cEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PaLAE87cEeOkpJkbnruUGQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_Glk3kM7UEeOkpJkbnruUGQ" name="org.eclipse.ui">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GlszYM7UEeOkpJkbnruUGQ" name="org.eclipse.ui.internal"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_Gl0IIM7UEeOkpJkbnruUGQ" name="org.eclipse.core.runtime">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gl610M7UEeOkpJkbnruUGQ" name="org.eclipse.core.internal.preferences.legacy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gl9SEM7UEeOkpJkbnruUGQ" name="org.eclipse.core.internal.runtime"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gl_uUM7UEeOkpJkbnruUGQ" name="org.eclipse.core.runtime"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GmF08M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmMioM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmO-4M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.archive"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmRbIM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.command"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmT3YM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.notify"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmWToM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.notify.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmYv4M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.util"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GmePcc7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmlkMM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmoAcM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmqcsM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.plugin"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gms48M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.resource"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmvVMM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.resource.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmxxcM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.util"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm0NsM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.namespace"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm2p8M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.namespace.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm5GMM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.namespace.util"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm7icM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.type"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm9Xoc7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.type.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm_z4c7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.type.internal"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnCQIc7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.type.util"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GnHvsc7UEeOkpJkbnruUGQ" name="org.eclipse.gef">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnPEcM7UEeOkpJkbnruUGQ" name="org.eclipse.gef"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnQ5oc7UEeOkpJkbnruUGQ" name="org.eclipse.gef.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnTV4c7UEeOkpJkbnruUGQ" name="org.eclipse.gef.dnd"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnVyIM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnYOYM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.editpolicies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnaqoM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.handles"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GndG4M7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnfjIM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal.icons"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gnh_YM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal.ui.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnkboM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal.ui.palette.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gnm34M7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal.ui.rulers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnpUIM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnrJUc7UEeOkpJkbnruUGQ" name="org.eclipse.gef.print"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GntlkM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.requests"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnwB0M7UEeOkpJkbnruUGQ" name="org.eclipse.gef.rulers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gnx3Ac7UEeOkpJkbnruUGQ" name="org.eclipse.gef.tools"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn0TQM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.actions"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn2vgM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.console"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn4ksc7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.console.icons"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn7A8c7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn-EQM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.palette.customize"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoBHkM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.palette.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoDj0c7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.parts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoGnIM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.properties"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoJqcM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.rulers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoMtwM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.stackview"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoPKAM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.stackview.icons"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoSNUM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.views.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoUpkM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.util"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GoawMc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui">
+ <ownedAttribute xmi:type="uml:Port" xmi:id="_Gs8D0M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoiE8M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GokhMc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.actions"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GonkgM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoqAwc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.dialogs.sortfilter"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GotEEM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GowHYM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editpolicies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoyjoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.figures"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go0_4c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.handles"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go3cIc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.image"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go6fcM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go9iwM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.actions"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go__Ac7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpDCUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.dialogs"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpGFoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.dialogs.sortfilter"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpIh4c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpLlMM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.editpolicies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpOogM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.figures"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpREwM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.handles"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpThAM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.l10n"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpV9QM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.pagesetup"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpYZgM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.parts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpaOsc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.properties"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gpcq8M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.requests"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpfHMM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.resources"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GphjcM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.ruler"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gpj_sM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.ruler.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gpl04M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.decorator"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpnqEM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.editpart"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GppfQM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.editpolicy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GprUcc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.layout"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GptwsM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gpvl4M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.tools"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpxbEc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.type"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpzQQc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.util"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp1sgM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.l10n"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp3hsM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.label"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp5W4c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.layout"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp7MEc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.menus"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp9oUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.parts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp_dgM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.preferences"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqBSsM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.providers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqDH4M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.requests"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqE9Ec7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.decorator"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqGyQc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.editpart"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqIncc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.editpolicy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqKcoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.layout"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqMR0M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqNf8c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.tools"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqPVIM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.type"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqRKUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.util"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqSYcc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.view.factories"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqUNoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.view.factories.optimal"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GqYfEM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gqd-oM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gqfz0M7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.internal.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqhpAM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.internal.operations"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqjeMM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.internal.resource"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqlTYM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.resource"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqnIkM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.util"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_Gqqy8M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqwSgM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqyHsM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.clipboard"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gqz84M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.contentoutline"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq1LAc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.editor"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq3AMM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.editorsfactory"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq41YM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.extension"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq6Dgc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.extension.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq74sM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.extension.diagrameditor"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq9t4M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.lifecycleevents"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq-8AM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.listenerservice"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrAxMM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.markers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrB_Uc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.modelsetquery"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrD0gM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.modelsetquery.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrFpsM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.multidiagram.actionbarcontributor"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrG30c7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.resource"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrItAM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.resource.additional"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrKiMc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.resource.sasheditor"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrMXYM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.services"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrOMkM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.utils"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GrR28M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrX9kM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrZLsc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.adapter"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrbA4M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grc2EM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.commands.requests"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GreEMc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.databinding.custom"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grf5YM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.decoration"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrhHgc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.editpart"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gri8sM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.editpolicies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grkx4M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.figure.edge"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrmAAc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.figure.node"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grn1MM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.handler"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrpDUc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.helper"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grq4gM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.listener"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrstsM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.model"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grt70c7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.preferences"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrvxAM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.providers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grw_Ic7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.service.shape"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gry0UM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.snap"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr0Ccc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.strategy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr13oM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.strategy.copy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr3Fwc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.strategy.paste"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr468M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.types"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr6JEc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.undocontext"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr7-QM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.utils"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GsAPsM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsGWUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsHkcc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.actions"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsJZoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.directedit"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsLO0M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.directedit.locator"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsMc8c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.draw2d"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsOSIM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.draw2d.labels"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsQHUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.helpers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsRVcM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.policies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsTKoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.policies.effect"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsUYwc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.policies.labels"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsWN8M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.policies.reparent"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsXcEc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.ocl.tracker"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsZRQM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.parsers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsbGcM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.part"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GscUkM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.providers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GseJwM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.sheet"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsfX4c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.structure"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GshNEM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.update"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GslegM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.log">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsrlIM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.log"/>
+ </packagedElement>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_Gfrq8M7UEeOkpJkbnruUGQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GhgP4M7UEeOkpJkbnruUGQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_jDF0YdT6EeKj0Lzrn2trlQ"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_nE1m0Hz7EeKfO4elN3J5Fw"/>
+ </profileApplication>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_lNLnaMbvEeO9CYUoXDRplw" name="Test">
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_lNLnacbvEeO9CYUoXDRplw" name="Dependency1" client="_lNLnaMbvEeO9CYUoXDRplw" supplier="_lNLnY8bvEeO9CYUoXDRplw"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_lNLnasbvEeO9CYUoXDRplw" name="Dependency2" client="_lNLnaMbvEeO9CYUoXDRplw" supplier="_lNLnZsbvEeO9CYUoXDRplw"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_YDedkM7vEeOVs4zXLxqLmw" name="Synchronize automatically between views element with related model element in the model">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YDjWEM7vEeOVs4zXLxqLmw">
+ <body>The goal is to enable a strong synchronization between visual elements displayed in the diagram with elements contained in the model. &#xD;
+This mechanism can be added locally for each element by using CSS. &#xD;
+For example, you would like to see: &#xD;
+- synchronize compartment of enumeration literal for all enumeration. &#xD;
+- synchronize compartment of attributes and operation for all class stereotyped ….&#xD;
+This fucntionality is associated to the task 433206.&#xD;
+</body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YDnAcM7vEeOVs4zXLxqLmw" name="Requirements">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YDsgAM7vEeOVs4zXLxqLmw">
+ <body>- LocalSynchronization (id=Req001):
+ The synchronization shall be local for each graphical element for example: package compartment, attribute compartment...</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YDxYgM7vEeOVs4zXLxqLmw">
+ <body>- CSSIntegration (id=Req002):
+ The synchronization shall be parameterized by CSS, by using a keyword and a value.</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YD1C4M7vEeOVs4zXLxqLmw">
+ <body>- CustomSynchronization (id=Req003):
+ For an graphical element, it shall be possible to custom the synchonization</body>
+ </ownedComment>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YD3fIM7vEeOVs4zXLxqLmw" name="Use Cases">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YE4LwM7vEeOVs4zXLxqLmw">
+ <body>UseCaseDiagram</body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YE7PEM7vEeOVs4zXLxqLmw" name="Add an element in the model">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YE9rUM7vEeOVs4zXLxqLmw">
+ <body>When an user adds an element in the model, the synchronization mechanism try to add in the current diagram the view that correspond to the semantic element&#xD;
+The difficulty of this mechanism is to parameter the synchronization.&#xD;
+By default, the synchronizatiopn is based on ' owned element'role. When you add an element, the graphical element that correponds to the owner try to display it in the diagram. &#xD;
+But some cases are not interesting. For example in the composite diagram, displaying parts in part correspond to part of the type, not directly part of part.</body>
+ </ownedComment>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YFAuoM7vEeOVs4zXLxqLmw" name="Move an element">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YFDK4M7vEeOVs4zXLxqLmw">
+ <body>When a element is moved, the synchronization mechanism must to create graphically the element to each diagram.&#xD;
+</body>
+ </ownedComment>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YFFnIM7vEeOVs4zXLxqLmw" name="Set synchronization enable">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YFIDYM7vEeOVs4zXLxqLmw">
+ <body>The user can set enable the synchronization for a set of graphical elements.&#xD;
+</body>
+ </ownedComment>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YFJ4kc7vEeOVs4zXLxqLmw" name="Remove an element from the model">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YFMU0M7vEeOVs4zXLxqLmw">
+ <body>When the element is removed, the corresponding graphical element must be removed.</body>
+ </ownedComment>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YFPYIM7vEeOVs4zXLxqLmw" name="Design">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YGwbEM7vEeOVs4zXLxqLmw">
+ <body>ArchitectureOverview</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YGzeYM7vEeOVs4zXLxqLmw">
+ <body>The desing consists into one plugin org.eclipse.papyrus.uml.diagram.synchronizeview.&#xD;
+I contains a editpolicy provider and an extension point</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YJaGcM7vEeOVs4zXLxqLmw">
+ <body>Structure</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YJdJwM7vEeOVs4zXLxqLmw">
+ <body>The edit policy SynchronizeViewEdipolicty is installed by the SynchronizeEditPolicyProvider on:&#xD;
+ - DiagramEditPart (to synchronize content of diagram)&#xD;
+ - CompartmentEditPart (to synchronize content of compartment)&#xD;
+ - IBorderedShapeEditPart (to synchronize content of borderedElement as port....)&#xD;
+&#xD;
+ThisEditPolicy is used to allowing synchronization between graphical element and element in the model&#xD;
+ It is based on canonical editpolicy but it has several differencies:&#xD;
+ - View Service cannot be called. To call it we need to get the identifier of the child that could be place in compartment. I is not possible to find in a generic way&#xD;
+ --> link to each Diagram Updater, and moreover some child has been created by custom code. In fact, the hierarchy of visual element must follow the hierachy of semantic element.&#xD;
+ --> this is not the case so the Diagram updater generated from the gmfgen has not the good info.&#xD;
+&#xD;
+So to an extension point has been added to let the developer to specify semantic element that play children of a given editpart:&#xD;
+ see the example:&#xD;
+&lt;extension&#xD;
+ point=&quot;org.eclipse.papyrus.uml.diagram.synchronizeview.semanticchild&quot;>&#xD;
+ &lt;semanticChild&#xD;
+ editPart=&quot;org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartCompartmentEditPartCN&quot;&#xD;
+ getSemanticChildren=&quot;org.eclipse.papyrus.uml.diagram.composite.SynchroSemanticForPopertyPartCompartment&quot;>&#xD;
+ &lt;/semanticChild>&#xD;
+&lt;/extension&#xD;
+&#xD;
+The editpolicy try to refresh visual element. To do that it calls the method getSemanticChildrenList(). I llokf for accoss the extesnison point the corresponding 'SemantiChild' with the highest priority.&#xD;
+This object give the list of sementic element that could be children of the context of the given editpart.&#xD;
+&#xD;
+In the context of part, in the composite diagram, we can describe that children are ownedlement of the type of the part.&#xD;
+&#xD;
+Finally to allow the creation we base our work on the mechanism of the drop. (refreshSemanticChildrenByDrop)</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YJfmAM7vEeOVs4zXLxqLmw">
+ <body>In order to install synchronization on element, views must have canonical style. So a migration is needed.&#xD;
+BasicCompartment becomes Compartment&#xD;
+Diagram and Shape mst have a style: so we need to add :&#xD;
+ CanonicalStyle canonicalStyle=(CanonicalStyle)diagram.createStyle(NotationPackage.eINSTANCE.getCanonicalStyle());&#xD;
+ canonicalStyle.setCanonical(false);</body>
+ </ownedComment>
+ </packagedElement>
+ </packagedElement>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_lNLna8bvEeO9CYUoXDRplw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lNLnbMbvEeO9CYUoXDRplw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_VA6mkMcPEeO9CYUoXDRplw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_kWqjAMbXEeO09JBvNFZRNw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_lNLnbcbvEeO9CYUoXDRplw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lNLnbsbvEeO9CYUoXDRplw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_VA-4AMcPEeO9CYUoXDRplw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_qCT3MMbXEeO09JBvNFZRNw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_lNLnb8bvEeO9CYUoXDRplw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lNLncMbvEeO9CYUoXDRplw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_VBAtMccPEeO9CYUoXDRplw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_2LNtQMbYEeO09JBvNFZRNw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_zqiBwMbvEeO9CYUoXDRplw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zq7DUMbvEeO9CYUoXDRplw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/0.7.0/SysML#//requirements"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML_PROFILES/SysML.profile.uml#_OOJC4LX8EduFmqQsrNB9lw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_FGuXIMn2EeOU_InmtzG_ow">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FJEggMn2EeOU_InmtzG_ow" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://DEVELOPER_PROFILES/Document.profile.uml#_qR44IMn0EeO9CYUoXDRplw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://DEVELOPER_PROFILES/Document.profile.uml#_D0JcUMnzEeO9CYUoXDRplw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_DbpSMM7UEeOkpJkbnruUGQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DdivoM7UEeOkpJkbnruUGQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_jDF0YdT6EeKj0Lzrn2trlQ"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_nE1m0Hz7EeKfO4elN3J5Fw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_Ddkk0M7UEeOkpJkbnruUGQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DfYisM7UEeOkpJkbnruUGQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://OSGI_PROFILES/osgi.profile.uml#_0xHxUYDEEeKQG4TlBAn6bg"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://OSGI_PROFILES/osgi.profile.uml#_OKU8EHtxEeKcL-wrhM9ICg"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_DfaX4M7UEeOkpJkbnruUGQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DhHBAM7UEeOkpJkbnruUGQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://OSGI_PROFILES/osgi.profile.uml#_0xRiUIDEEeKQG4TlBAn6bg"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://OSGI_PROFILES/osgi.profile.uml#_YbhfEHtxEeKcL-wrhM9ICg"/>
+ </profileApplication>
+ </uml:Model>
+ <structure:Project xmi:id="_lNODoMbvEeO9CYUoXDRplw" author="P. Tessier (CEA LIST)" version="0.1" base_Model="_lNLnYMbvEeO9CYUoXDRplw" title="Synchronize automatically between views element with related model element in the model"/>
+ <structure:Requirements xmi:id="_lNOqsMbvEeO9CYUoXDRplw" base_Model="_lNLnYsbvEeO9CYUoXDRplw"/>
+ <structure:UseCases xmi:id="_lNOqscbvEeO9CYUoXDRplw" base_Model="_lNLnY8bvEeO9CYUoXDRplw"/>
+ <structure:Design xmi:id="_lNOqssbvEeO9CYUoXDRplw" base_Model="_lNLnZsbvEeO9CYUoXDRplw"/>
+ <structure:Tests xmi:id="_lNOqs8bvEeO9CYUoXDRplw" base_Model="_lNLnaMbvEeO9CYUoXDRplw"/>
+ <structure:UserDoc xmi:id="_uqNUsMofEeO3DsHezUU9Sg" base_Comment="_gP184MofEeO3DsHezUU9Sg"/>
+ <Requirements:Requirement xmi:id="_W7IlYMohEeO3DsHezUU9Sg" text="The synchronization shall be local for each graphical element for example: package compartment, attribute compartment..." id="Req001" base_Class="_W7DF0MohEeO3DsHezUU9Sg"/>
+ <Requirements:Requirement xmi:id="_9DBtAMoiEeO3DsHezUU9Sg" text="The synchronization shall be parameterized by CSS, by using a keyword and a value." id="Req002" base_Class="_9DAe4MoiEeO3DsHezUU9Sg"/>
+ <Requirements:Requirement xmi:id="_WWQr0MojEeO3DsHezUU9Sg" text="For an graphical element, it shall be possible to custom the synchonization" id="Req003" base_Class="_WWPdsMojEeO3DsHezUU9Sg"/>
+ <structure:DeveloperDoc xmi:id="_aDgUcMo1EeO3DsHezUU9Sg" base_Comment="_XBXZIMo1EeO3DsHezUU9Sg"/>
+ <structure:DeveloperDoc xmi:id="_c407wMo1EeO3DsHezUU9Sg" base_Comment="_a-G7gMo1EeO3DsHezUU9Sg"/>
+ <structure:DeveloperDoc xmi:id="_d06JgMo1EeO3DsHezUU9Sg" base_Comment="_bGhQoMo1EeO3DsHezUU9Sg"/>
+ <structure:DeveloperDoc xmi:id="_ym9xQMo3EeOzTpunJ7qmNw" base_Comment="_vxFwUMo3EeOzTpunJ7qmNw"/>
+ <structure:DeveloperDoc xmi:id="_ZWAAEMr3EeOxaZrLLxAqiw" base_Comment="_X4kYwMr3EeOxaZrLLxAqiw"/>
+ <ADL4Eclipse:Plugin xmi:id="_GhlIYM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.papyrus.uml.diagram.synchronizeview.Activator" description="The goal of this plugin is add the fucntionality to synchronize elements in diagram. More details (models and .html) has been store in the docs directory." localization="plugin" requiredExecutionEnvironment="JavaSE-1.6" symbolicName="org.eclipse.papyrus.uml.diagram.synchronizeview" vendor="Eclipse Modeling Project" version="1.0.0.qualifier" exportPackage="_Gs5AgM7UEeOkpJkbnruUGQ" base_Component="_GhiFEM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview" isIncubation="true"/>
+ <ADL4Eclipse:Plugin xmi:id="_GlnT0M7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.ui.internal.UIPlugin" classPath="." localization="plugin" requiredExecutionEnvironment="CDC-1.0/Foundation-1.0,J2SE-1.3" symbolicName="org.eclipse.ui" vendor="Eclipse.org" version="3.106.0.v20140303-1835" exportPackage="_GlvPoM7UEeOkpJkbnruUGQ" base_Component="_Glk3kM7UEeOkpJkbnruUGQ" name="Eclipse UI"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GlvPoM7UEeOkpJkbnruUGQ" base_Package="_GlszYM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ModuleLayer:BundleReference xmi:id="_GlzhEM7UEeOkpJkbnruUGQ" base_Dependency="_GlxE0M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_Gl19UM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.core.internal.runtime.PlatformActivator" localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.core.runtime" vendor="Eclipse.org" version="3.10.0.v20140221-2027" exportPackage="_Gl8rAM7UEeOkpJkbnruUGQ _Gl_HQM7UEeOkpJkbnruUGQ _GmBjgM7UEeOkpJkbnruUGQ" base_Component="_Gl0IIM7UEeOkpJkbnruUGQ" name="Core Runtime"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gl8rAM7UEeOkpJkbnruUGQ" base_Package="_Gl610M7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gl_HQM7UEeOkpJkbnruUGQ" base_Package="_Gl9SEM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmBjgM7UEeOkpJkbnruUGQ" atleast="3.4.0" base_Package="_Gl_uUM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GmFN4M7UEeOkpJkbnruUGQ" base_Dependency="_GmCxoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GmHqIM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.emf.common.CommonPlugin$Implementation" classPath="." localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.emf.common" vendor="Eclipse Modeling Project" version="2.10.0.v20140303-1023" exportPackage="_GmOX0M7UEeOkpJkbnruUGQ _GmQ0EM7UEeOkpJkbnruUGQ _GmTQUM7UEeOkpJkbnruUGQ _GmVskM7UEeOkpJkbnruUGQ _GmYI0M7UEeOkpJkbnruUGQ _GmalEM7UEeOkpJkbnruUGQ" base_Component="_GmF08M7UEeOkpJkbnruUGQ" name="EMF Common" lazyStart="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmOX0M7UEeOkpJkbnruUGQ" base_Package="_GmMioM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmQ0EM7UEeOkpJkbnruUGQ" base_Package="_GmO-4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmTQUM7UEeOkpJkbnruUGQ" base_Package="_GmRbIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmVskM7UEeOkpJkbnruUGQ" base_Package="_GmT3YM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmYI0M7UEeOkpJkbnruUGQ" base_Package="_GmWToM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmalEM7UEeOkpJkbnruUGQ" base_Package="_GmYv4M7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GmePcM7UEeOkpJkbnruUGQ" base_Dependency="_GmbzMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GmgrsM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.emf.ecore.plugin.EcorePlugin$Implementation" classPath="." localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.emf.ecore" vendor="Eclipse Modeling Project" version="2.10.0.v20140303-1023" exportPackage="_GmnZYM7UEeOkpJkbnruUGQ _Gmp1oM7UEeOkpJkbnruUGQ _GmsR4M7UEeOkpJkbnruUGQ _GmuuIM7UEeOkpJkbnruUGQ _GmxKYM7UEeOkpJkbnruUGQ _GmzmoM7UEeOkpJkbnruUGQ _Gm2C4M7UEeOkpJkbnruUGQ _Gm4fIM7UEeOkpJkbnruUGQ _Gm67YM7UEeOkpJkbnruUGQ _Gm9XoM7UEeOkpJkbnruUGQ _Gm_z4M7UEeOkpJkbnruUGQ _GnCQIM7UEeOkpJkbnruUGQ _GnEFUM7UEeOkpJkbnruUGQ" base_Component="_GmePcc7UEeOkpJkbnruUGQ" name="EMF Ecore" lazyStart="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmnZYM7UEeOkpJkbnruUGQ" base_Package="_GmlkMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gmp1oM7UEeOkpJkbnruUGQ" base_Package="_GmoAcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmsR4M7UEeOkpJkbnruUGQ" base_Package="_GmqcsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmuuIM7UEeOkpJkbnruUGQ" base_Package="_Gms48M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmxKYM7UEeOkpJkbnruUGQ" base_Package="_GmvVMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmzmoM7UEeOkpJkbnruUGQ" base_Package="_GmxxcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm2C4M7UEeOkpJkbnruUGQ" base_Package="_Gm0NsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm4fIM7UEeOkpJkbnruUGQ" base_Package="_Gm2p8M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm67YM7UEeOkpJkbnruUGQ" base_Package="_Gm5GMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm9XoM7UEeOkpJkbnruUGQ" base_Package="_Gm7icM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm_z4M7UEeOkpJkbnruUGQ" base_Package="_Gm9Xoc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnCQIM7UEeOkpJkbnruUGQ" base_Package="_Gm_z4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnEFUM7UEeOkpJkbnruUGQ" base_Package="_GnCQIc7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GnHvsM7UEeOkpJkbnruUGQ" base_Dependency="_GnFTcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GnKL8M7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.gef.internal.InternalGEFPlugin" localization="plugin" requiredExecutionEnvironment="J2SE-1.4" symbolicName="org.eclipse.gef" vendor="Eclipse.org" version="3.9.0.201401270305" exportPackage="_GnQ5oM7UEeOkpJkbnruUGQ _GnTV4M7UEeOkpJkbnruUGQ _GnVLEM7UEeOkpJkbnruUGQ _GnXnUM7UEeOkpJkbnruUGQ _GnaDkM7UEeOkpJkbnruUGQ _Gncf0M7UEeOkpJkbnruUGQ _Gne8EM7UEeOkpJkbnruUGQ _GnhYUM7UEeOkpJkbnruUGQ _Gnj0kM7UEeOkpJkbnruUGQ _GnmQ0M7UEeOkpJkbnruUGQ _GnotEM7UEeOkpJkbnruUGQ _GnrJUM7UEeOkpJkbnruUGQ _Gns-gM7UEeOkpJkbnruUGQ _GnvawM7UEeOkpJkbnruUGQ _Gnx3AM7UEeOkpJkbnruUGQ _GnzsMM7UEeOkpJkbnruUGQ _Gn2IcM7UEeOkpJkbnruUGQ _Gn4ksM7UEeOkpJkbnruUGQ _Gn7A8M7UEeOkpJkbnruUGQ _Gn9dMM7UEeOkpJkbnruUGQ _GoAggM7UEeOkpJkbnruUGQ _GoDj0M7UEeOkpJkbnruUGQ _GoGAEM7UEeOkpJkbnruUGQ _GoJDYM7UEeOkpJkbnruUGQ _GoMGsM7UEeOkpJkbnruUGQ _GoOi8M7UEeOkpJkbnruUGQ _GoRmQM7UEeOkpJkbnruUGQ _GoUCgM7UEeOkpJkbnruUGQ _GoXF0M7UEeOkpJkbnruUGQ" base_Component="_GnHvsc7UEeOkpJkbnruUGQ" name="Graphical Editing Framework GEF"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnQ5oM7UEeOkpJkbnruUGQ" base_Package="_GnPEcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnTV4M7UEeOkpJkbnruUGQ" base_Package="_GnQ5oc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnVLEM7UEeOkpJkbnruUGQ" base_Package="_GnTV4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnXnUM7UEeOkpJkbnruUGQ" base_Package="_GnVyIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnaDkM7UEeOkpJkbnruUGQ" base_Package="_GnYOYM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gncf0M7UEeOkpJkbnruUGQ" base_Package="_GnaqoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gne8EM7UEeOkpJkbnruUGQ" base_Package="_GndG4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnhYUM7UEeOkpJkbnruUGQ" base_Package="_GnfjIM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gnj0kM7UEeOkpJkbnruUGQ" base_Package="_Gnh_YM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnmQ0M7UEeOkpJkbnruUGQ" base_Package="_GnkboM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnotEM7UEeOkpJkbnruUGQ" base_Package="_Gnm34M7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnrJUM7UEeOkpJkbnruUGQ" base_Package="_GnpUIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gns-gM7UEeOkpJkbnruUGQ" base_Package="_GnrJUc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnvawM7UEeOkpJkbnruUGQ" base_Package="_GntlkM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gnx3AM7UEeOkpJkbnruUGQ" base_Package="_GnwB0M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnzsMM7UEeOkpJkbnruUGQ" base_Package="_Gnx3Ac7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gn2IcM7UEeOkpJkbnruUGQ" base_Package="_Gn0TQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gn4ksM7UEeOkpJkbnruUGQ" base_Package="_Gn2vgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gn7A8M7UEeOkpJkbnruUGQ" base_Package="_Gn4ksc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gn9dMM7UEeOkpJkbnruUGQ" base_Package="_Gn7A8c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoAggM7UEeOkpJkbnruUGQ" base_Package="_Gn-EQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoDj0M7UEeOkpJkbnruUGQ" base_Package="_GoBHkM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoGAEM7UEeOkpJkbnruUGQ" base_Package="_GoDj0c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoJDYM7UEeOkpJkbnruUGQ" base_Package="_GoGnIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoMGsM7UEeOkpJkbnruUGQ" base_Package="_GoJqcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoOi8M7UEeOkpJkbnruUGQ" base_Package="_GoMtwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoRmQM7UEeOkpJkbnruUGQ" base_Package="_GoPKAM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoUCgM7UEeOkpJkbnruUGQ" base_Package="_GoSNUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoXF0M7UEeOkpJkbnruUGQ" base_Package="_GoUpkM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GoawMM7UEeOkpJkbnruUGQ" base_Dependency="_GoXs4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GodMcM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIPlugin" localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.gmf.runtime.diagram.ui" vendor="Eclipse Modeling Project" version="1.7.0.201403111830" exportPackage="_GokhMM7UEeOkpJkbnruUGQ _Gom9cM7UEeOkpJkbnruUGQ _GoqAwM7UEeOkpJkbnruUGQ _GosdAM7UEeOkpJkbnruUGQ _GovgUM7UEeOkpJkbnruUGQ _Gox8kM7UEeOkpJkbnruUGQ _Go0_4M7UEeOkpJkbnruUGQ _Go3cIM7UEeOkpJkbnruUGQ _Go54YM7UEeOkpJkbnruUGQ _Go87sM7UEeOkpJkbnruUGQ _Go__AM7UEeOkpJkbnruUGQ _GpCbQM7UEeOkpJkbnruUGQ _GpFekM7UEeOkpJkbnruUGQ _GpIh4M7UEeOkpJkbnruUGQ _GpK-IM7UEeOkpJkbnruUGQ _GpOBcM7UEeOkpJkbnruUGQ _GpQdsM7UEeOkpJkbnruUGQ _GpS58M7UEeOkpJkbnruUGQ _GpVWMM7UEeOkpJkbnruUGQ _GpXycM7UEeOkpJkbnruUGQ _GpaOsM7UEeOkpJkbnruUGQ _GpcD4M7UEeOkpJkbnruUGQ _GpegIM7UEeOkpJkbnruUGQ _Gpg8YM7UEeOkpJkbnruUGQ _GpjYoM7UEeOkpJkbnruUGQ _GplN0M7UEeOkpJkbnruUGQ _GpnDAM7UEeOkpJkbnruUGQ _Gpo4MM7UEeOkpJkbnruUGQ _GprUcM7UEeOkpJkbnruUGQ _GptJoM7UEeOkpJkbnruUGQ _Gpu-0M7UEeOkpJkbnruUGQ _GpxbEM7UEeOkpJkbnruUGQ _GpzQQM7UEeOkpJkbnruUGQ _Gp1FcM7UEeOkpJkbnruUGQ _Gp26oM7UEeOkpJkbnruUGQ _Gp5W4M7UEeOkpJkbnruUGQ _Gp7MEM7UEeOkpJkbnruUGQ _Gp9BQM7UEeOkpJkbnruUGQ _Gp-2cM7UEeOkpJkbnruUGQ _GqAroM7UEeOkpJkbnruUGQ _GqCg0M7UEeOkpJkbnruUGQ _GqE9EM7UEeOkpJkbnruUGQ _GqGyQM7UEeOkpJkbnruUGQ _GqIncM7UEeOkpJkbnruUGQ _GqJ1kM7UEeOkpJkbnruUGQ _GqLqwM7UEeOkpJkbnruUGQ _GqNf8M7UEeOkpJkbnruUGQ _GqOuEM7UEeOkpJkbnruUGQ _GqQjQM7UEeOkpJkbnruUGQ _GqSYcM7UEeOkpJkbnruUGQ _GqTmkM7UEeOkpJkbnruUGQ _GqVbwM7UEeOkpJkbnruUGQ" base_Component="_GoawMc7UEeOkpJkbnruUGQ" name="GMF Diagram UI"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GokhMM7UEeOkpJkbnruUGQ" base_Package="_GoiE8M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gom9cM7UEeOkpJkbnruUGQ" base_Package="_GokhMc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoqAwM7UEeOkpJkbnruUGQ" base_Package="_GonkgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GosdAM7UEeOkpJkbnruUGQ" base_Package="_GoqAwc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GovgUM7UEeOkpJkbnruUGQ" base_Package="_GotEEM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gox8kM7UEeOkpJkbnruUGQ" base_Package="_GowHYM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go0_4M7UEeOkpJkbnruUGQ" base_Package="_GoyjoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go3cIM7UEeOkpJkbnruUGQ" base_Package="_Go0_4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go54YM7UEeOkpJkbnruUGQ" base_Package="_Go3cIc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go87sM7UEeOkpJkbnruUGQ" base_Package="_Go6fcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go__AM7UEeOkpJkbnruUGQ" base_Package="_Go9iwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpCbQM7UEeOkpJkbnruUGQ" base_Package="_Go__Ac7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpFekM7UEeOkpJkbnruUGQ" base_Package="_GpDCUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpIh4M7UEeOkpJkbnruUGQ" base_Package="_GpGFoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpK-IM7UEeOkpJkbnruUGQ" base_Package="_GpIh4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpOBcM7UEeOkpJkbnruUGQ" base_Package="_GpLlMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpQdsM7UEeOkpJkbnruUGQ" base_Package="_GpOogM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpS58M7UEeOkpJkbnruUGQ" base_Package="_GpREwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpVWMM7UEeOkpJkbnruUGQ" base_Package="_GpThAM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpXycM7UEeOkpJkbnruUGQ" base_Package="_GpV9QM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpaOsM7UEeOkpJkbnruUGQ" base_Package="_GpYZgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpcD4M7UEeOkpJkbnruUGQ" base_Package="_GpaOsc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpegIM7UEeOkpJkbnruUGQ" base_Package="_Gpcq8M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gpg8YM7UEeOkpJkbnruUGQ" base_Package="_GpfHMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpjYoM7UEeOkpJkbnruUGQ" base_Package="_GphjcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GplN0M7UEeOkpJkbnruUGQ" base_Package="_Gpj_sM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpnDAM7UEeOkpJkbnruUGQ" base_Package="_Gpl04M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gpo4MM7UEeOkpJkbnruUGQ" base_Package="_GpnqEM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GprUcM7UEeOkpJkbnruUGQ" base_Package="_GppfQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GptJoM7UEeOkpJkbnruUGQ" base_Package="_GprUcc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gpu-0M7UEeOkpJkbnruUGQ" base_Package="_GptwsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpxbEM7UEeOkpJkbnruUGQ" base_Package="_Gpvl4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpzQQM7UEeOkpJkbnruUGQ" base_Package="_GpxbEc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp1FcM7UEeOkpJkbnruUGQ" base_Package="_GpzQQc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp26oM7UEeOkpJkbnruUGQ" base_Package="_Gp1sgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp5W4M7UEeOkpJkbnruUGQ" base_Package="_Gp3hsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp7MEM7UEeOkpJkbnruUGQ" base_Package="_Gp5W4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp9BQM7UEeOkpJkbnruUGQ" base_Package="_Gp7MEc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp-2cM7UEeOkpJkbnruUGQ" base_Package="_Gp9oUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqAroM7UEeOkpJkbnruUGQ" base_Package="_Gp_dgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqCg0M7UEeOkpJkbnruUGQ" base_Package="_GqBSsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqE9EM7UEeOkpJkbnruUGQ" base_Package="_GqDH4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqGyQM7UEeOkpJkbnruUGQ" base_Package="_GqE9Ec7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqIncM7UEeOkpJkbnruUGQ" base_Package="_GqGyQc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqJ1kM7UEeOkpJkbnruUGQ" base_Package="_GqIncc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqLqwM7UEeOkpJkbnruUGQ" base_Package="_GqKcoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqNf8M7UEeOkpJkbnruUGQ" base_Package="_GqMR0M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqOuEM7UEeOkpJkbnruUGQ" base_Package="_GqNf8c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqQjQM7UEeOkpJkbnruUGQ" base_Package="_GqPVIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqSYcM7UEeOkpJkbnruUGQ" base_Package="_GqRKUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqTmkM7UEeOkpJkbnruUGQ" base_Package="_GqSYcc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqVbwM7UEeOkpJkbnruUGQ" base_Package="_GqUNoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GqZtMM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.uml2.uml.UMLPlugin$Implementation" classPath="." localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.uml2.uml" vendor="Eclipse Modeling Project" version="5.0.0.v20140310-0733" exportPackage="_GqfMwM7UEeOkpJkbnruUGQ _GqhB8M7UEeOkpJkbnruUGQ _Gqi3IM7UEeOkpJkbnruUGQ _GqksUM7UEeOkpJkbnruUGQ _GqmhgM7UEeOkpJkbnruUGQ _GqnvoM7UEeOkpJkbnruUGQ" base_Component="_GqYfEM7UEeOkpJkbnruUGQ" name="UML2 UML Model" lazyStart="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqfMwM7UEeOkpJkbnruUGQ" base_Package="_Gqd-oM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqhB8M7UEeOkpJkbnruUGQ" base_Package="_Gqfz0M7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gqi3IM7UEeOkpJkbnruUGQ" base_Package="_GqhpAM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqksUM7UEeOkpJkbnruUGQ" base_Package="_GqjeMM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqmhgM7UEeOkpJkbnruUGQ" base_Package="_GqlTYM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqnvoM7UEeOkpJkbnruUGQ" base_Package="_GqnIkM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GqqL4M7UEeOkpJkbnruUGQ" base_Dependency="_Gqo9wM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GqsBEM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.papyrus.infra.core.Activator" localization="plugin" requiredExecutionEnvironment="JavaSE-1.6" symbolicName="org.eclipse.papyrus.infra.core" vendor="Eclipse Modeling Project" version="1.0.0.v201404220826" exportPackage="_GqxgoM7UEeOkpJkbnruUGQ _GqzV0M7UEeOkpJkbnruUGQ _Gq1LAM7UEeOkpJkbnruUGQ _Gq2ZIM7UEeOkpJkbnruUGQ _Gq4OUM7UEeOkpJkbnruUGQ _Gq6DgM7UEeOkpJkbnruUGQ _Gq7RoM7UEeOkpJkbnruUGQ _Gq9G0M7UEeOkpJkbnruUGQ _Gq-U8M7UEeOkpJkbnruUGQ _GrAKIM7UEeOkpJkbnruUGQ _GrB_UM7UEeOkpJkbnruUGQ _GrDNcM7UEeOkpJkbnruUGQ _GrFCoM7UEeOkpJkbnruUGQ _GrG30M7UEeOkpJkbnruUGQ _GrIF8M7UEeOkpJkbnruUGQ _GrKiMM7UEeOkpJkbnruUGQ _GrLwUM7UEeOkpJkbnruUGQ _GrNlgM7UEeOkpJkbnruUGQ _GrPasM7UEeOkpJkbnruUGQ" base_Component="_Gqqy8M7UEeOkpJkbnruUGQ" name="Papyrus Backbone" isIncubation="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqxgoM7UEeOkpJkbnruUGQ" base_Package="_GqwSgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqzV0M7UEeOkpJkbnruUGQ" base_Package="_GqyHsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq1LAM7UEeOkpJkbnruUGQ" base_Package="_Gqz84M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq2ZIM7UEeOkpJkbnruUGQ" base_Package="_Gq1LAc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq4OUM7UEeOkpJkbnruUGQ" base_Package="_Gq3AMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq6DgM7UEeOkpJkbnruUGQ" base_Package="_Gq41YM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq7RoM7UEeOkpJkbnruUGQ" base_Package="_Gq6Dgc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq9G0M7UEeOkpJkbnruUGQ" base_Package="_Gq74sM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq-U8M7UEeOkpJkbnruUGQ" base_Package="_Gq9t4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrAKIM7UEeOkpJkbnruUGQ" base_Package="_Gq-8AM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrB_UM7UEeOkpJkbnruUGQ" base_Package="_GrAxMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrDNcM7UEeOkpJkbnruUGQ" base_Package="_GrB_Uc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrFCoM7UEeOkpJkbnruUGQ" base_Package="_GrD0gM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrG30M7UEeOkpJkbnruUGQ" base_Package="_GrFpsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrIF8M7UEeOkpJkbnruUGQ" base_Package="_GrG30c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrKiMM7UEeOkpJkbnruUGQ" base_Package="_GrItAM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrLwUM7UEeOkpJkbnruUGQ" base_Package="_GrKiMc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrNlgM7UEeOkpJkbnruUGQ" base_Package="_GrMXYM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrPasM7UEeOkpJkbnruUGQ" base_Package="_GrOMkM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GrRP4M7UEeOkpJkbnruUGQ" base_Dependency="_GrQBwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GrTFEM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.papyrus.infra.gmfdiag.common.Activator" classPath="." localization="plugin" requiredExecutionEnvironment="JavaSE-1.6" symbolicName="org.eclipse.papyrus.infra.gmfdiag.common" vendor="Eclipse Modeling Project" version="1.0.0.qualifier" exportPackage="_GrZLsM7UEeOkpJkbnruUGQ _GraZ0M7UEeOkpJkbnruUGQ _GrcPAM7UEeOkpJkbnruUGQ _GreEMM7UEeOkpJkbnruUGQ _GrfSUM7UEeOkpJkbnruUGQ _GrhHgM7UEeOkpJkbnruUGQ _GriVoM7UEeOkpJkbnruUGQ _GrkK0M7UEeOkpJkbnruUGQ _GrmAAM7UEeOkpJkbnruUGQ _GrnOIM7UEeOkpJkbnruUGQ _GrpDUM7UEeOkpJkbnruUGQ _GrqRcM7UEeOkpJkbnruUGQ _GrsGoM7UEeOkpJkbnruUGQ _Grt70M7UEeOkpJkbnruUGQ _GrvJ8M7UEeOkpJkbnruUGQ _Grw_IM7UEeOkpJkbnruUGQ _GryNQM7UEeOkpJkbnruUGQ _Gr0CcM7UEeOkpJkbnruUGQ _Gr1QkM7UEeOkpJkbnruUGQ _Gr3FwM7UEeOkpJkbnruUGQ _Gr4T4M7UEeOkpJkbnruUGQ _Gr6JEM7UEeOkpJkbnruUGQ _Gr7XMM7UEeOkpJkbnruUGQ _Gr9MYM7UEeOkpJkbnruUGQ" base_Component="_GrR28M7UEeOkpJkbnruUGQ" name="Papyrus GMF Diagrams Support" isIncubation="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrZLsM7UEeOkpJkbnruUGQ" base_Package="_GrX9kM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GraZ0M7UEeOkpJkbnruUGQ" base_Package="_GrZLsc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrcPAM7UEeOkpJkbnruUGQ" base_Package="_GrbA4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GreEMM7UEeOkpJkbnruUGQ" base_Package="_Grc2EM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrfSUM7UEeOkpJkbnruUGQ" base_Package="_GreEMc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrhHgM7UEeOkpJkbnruUGQ" base_Package="_Grf5YM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GriVoM7UEeOkpJkbnruUGQ" base_Package="_GrhHgc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrkK0M7UEeOkpJkbnruUGQ" base_Package="_Gri8sM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrmAAM7UEeOkpJkbnruUGQ" base_Package="_Grkx4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrnOIM7UEeOkpJkbnruUGQ" base_Package="_GrmAAc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrpDUM7UEeOkpJkbnruUGQ" base_Package="_Grn1MM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrqRcM7UEeOkpJkbnruUGQ" base_Package="_GrpDUc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrsGoM7UEeOkpJkbnruUGQ" base_Package="_Grq4gM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Grt70M7UEeOkpJkbnruUGQ" base_Package="_GrstsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrvJ8M7UEeOkpJkbnruUGQ" base_Package="_Grt70c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Grw_IM7UEeOkpJkbnruUGQ" base_Package="_GrvxAM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GryNQM7UEeOkpJkbnruUGQ" base_Package="_Grw_Ic7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr0CcM7UEeOkpJkbnruUGQ" base_Package="_Gry0UM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr1QkM7UEeOkpJkbnruUGQ" base_Package="_Gr0Ccc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr3FwM7UEeOkpJkbnruUGQ" base_Package="_Gr13oM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr4T4M7UEeOkpJkbnruUGQ" base_Package="_Gr3Fwc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr6JEM7UEeOkpJkbnruUGQ" base_Package="_Gr468M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr7XMM7UEeOkpJkbnruUGQ" base_Package="_Gr6JEc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr9MYM7UEeOkpJkbnruUGQ" base_Package="_Gr7-QM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_Gr_ooM7UEeOkpJkbnruUGQ" base_Dependency="_Gr9zcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GsBd0M7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.gmf.tooling.runtime.GMFToolingRuntimePlugin" localization="plugin" requiredExecutionEnvironment="JavaSE-1.6" symbolicName="org.eclipse.gmf.tooling.runtime" vendor="Eclipse Modeling Project" version="3.2.0.201403121855" exportPackage="_GsHkcM7UEeOkpJkbnruUGQ _GsIykM7UEeOkpJkbnruUGQ _GsKnwM7UEeOkpJkbnruUGQ _GsMc8M7UEeOkpJkbnruUGQ _GsNrEM7UEeOkpJkbnruUGQ _GsPgQM7UEeOkpJkbnruUGQ _GsQuYM7UEeOkpJkbnruUGQ _GsSjkM7UEeOkpJkbnruUGQ _GsUYwM7UEeOkpJkbnruUGQ _GsVm4M7UEeOkpJkbnruUGQ _GsXcEM7UEeOkpJkbnruUGQ _GsYqMM7UEeOkpJkbnruUGQ _GsafYM7UEeOkpJkbnruUGQ _GsbtgM7UEeOkpJkbnruUGQ _GsdisM7UEeOkpJkbnruUGQ _GsfX4M7UEeOkpJkbnruUGQ _GsgmAM7UEeOkpJkbnruUGQ _GsibMM7UEeOkpJkbnruUGQ" base_Component="_GsAPsM7UEeOkpJkbnruUGQ" name="GMF Tooling-Specific Runtime Extensions Plugin"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsHkcM7UEeOkpJkbnruUGQ" base_Package="_GsGWUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsIykM7UEeOkpJkbnruUGQ" base_Package="_GsHkcc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsKnwM7UEeOkpJkbnruUGQ" base_Package="_GsJZoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsMc8M7UEeOkpJkbnruUGQ" base_Package="_GsLO0M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsNrEM7UEeOkpJkbnruUGQ" base_Package="_GsMc8c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsPgQM7UEeOkpJkbnruUGQ" base_Package="_GsOSIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsQuYM7UEeOkpJkbnruUGQ" base_Package="_GsQHUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsSjkM7UEeOkpJkbnruUGQ" base_Package="_GsRVcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsUYwM7UEeOkpJkbnruUGQ" base_Package="_GsTKoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsVm4M7UEeOkpJkbnruUGQ" base_Package="_GsUYwc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsXcEM7UEeOkpJkbnruUGQ" base_Package="_GsWN8M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsYqMM7UEeOkpJkbnruUGQ" base_Package="_GsXcEc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsafYM7UEeOkpJkbnruUGQ" base_Package="_GsZRQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsbtgM7UEeOkpJkbnruUGQ" base_Package="_GsbGcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsdisM7UEeOkpJkbnruUGQ" base_Package="_GscUkM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsfX4M7UEeOkpJkbnruUGQ" base_Package="_GseJwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsgmAM7UEeOkpJkbnruUGQ" base_Package="_GsfX4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsibMM7UEeOkpJkbnruUGQ" base_Package="_GshNEM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_Gsk3cM7UEeOkpJkbnruUGQ" base_Dependency="_GsjCQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GsmsoM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.papyrus.infra.core.log.internal.Activator" localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.papyrus.infra.core.log" vendor="Eclipse Modeling Project" version="1.0.0.v201404220826" exportPackage="_GsszQM7UEeOkpJkbnruUGQ" base_Component="_GslegM7UEeOkpJkbnruUGQ" name="Papyrus Logging plugin" isIncubation="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsszQM7UEeOkpJkbnruUGQ" base_Package="_GsrlIM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GsvPgM7UEeOkpJkbnruUGQ" base_Dependency="_GstaUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gs5AgM7UEeOkpJkbnruUGQ" base_Package="_Gs3LUM7UEeOkpJkbnruUGQ"/>
+ <structure:DeveloperDoc xmi:id="_SUtzsM7eEeOkpJkbnruUGQ" base_Comment="_j3s-wM7dEeOkpJkbnruUGQ"/>
+ <Document:Document xmi:id="_YDhg4M7vEeOVs4zXLxqLmw" base_Model="_YDedkM7vEeOVs4zXLxqLmw" author="P. Tessier (CEA LIST)" version="0.1"/>
+ <Document:Content xmi:id="_YDlyUM7vEeOVs4zXLxqLmw" base_Comment="_YDjWEM7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YDpcsM7vEeOVs4zXLxqLmw" base_Package="_YDnAcM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YDu8QM7vEeOVs4zXLxqLmw" base_Comment="_YDsgAM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YDymoM7vEeOVs4zXLxqLmw" base_Comment="_YDxYgM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YD24EM7vEeOVs4zXLxqLmw" base_Comment="_YD1C4M7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YD5UUM7vEeOVs4zXLxqLmw" base_Package="_YD3fIM7vEeOVs4zXLxqLmw"/>
+ <Document:ImageRef xmi:id="_YE6oAM7vEeOVs4zXLxqLmw" base_Comment="_YE4LwM7vEeOVs4zXLxqLmw" ref="C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/UseCaseDiagram.png"/>
+ <Document:Section xmi:id="_YE9EQM7vEeOVs4zXLxqLmw" base_Package="_YE7PEM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YFAHkM7vEeOVs4zXLxqLmw" base_Comment="_YE9rUM7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YFCj0M7vEeOVs4zXLxqLmw" base_Package="_YFAuoM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YFFAEM7vEeOVs4zXLxqLmw" base_Comment="_YFDK4M7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YFHcUM7vEeOVs4zXLxqLmw" base_Package="_YFFnIM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YFJ4kM7vEeOVs4zXLxqLmw" base_Comment="_YFIDYM7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YFLtwM7vEeOVs4zXLxqLmw" base_Package="_YFJ4kc7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YFOxEM7vEeOVs4zXLxqLmw" base_Comment="_YFMU0M7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YFRNUM7vEeOVs4zXLxqLmw" base_Package="_YFPYIM7vEeOVs4zXLxqLmw"/>
+ <Document:ImageRef xmi:id="_YGy3UM7vEeOVs4zXLxqLmw" base_Comment="_YGwbEM7vEeOVs4zXLxqLmw" ref="C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/ArchitectureOverview.png"/>
+ <Document:Content xmi:id="_YG16oM7vEeOVs4zXLxqLmw" base_Comment="_YGzeYM7vEeOVs4zXLxqLmw"/>
+ <Document:ImageRef xmi:id="_YJcisM7vEeOVs4zXLxqLmw" base_Comment="_YJaGcM7vEeOVs4zXLxqLmw" ref="C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/Structure.png"/>
+ <Document:Content xmi:id="_YJe-8M7vEeOVs4zXLxqLmw" base_Comment="_YJdJwM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YJhbMM7vEeOVs4zXLxqLmw" base_Comment="_YJfmAM7vEeOVs4zXLxqLmw"/>
+</xmi:XMI>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/schema/strategies.exsd b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/schema/strategies.exsd
new file mode 100644
index 00000000000..7965c815fbd
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/schema/strategies.exsd
@@ -0,0 +1,325 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.papyrus.infra.gmfdiag.canonical" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.papyrus.infra.gmfdiag.canonical" id="org.eclipse.papyrus.infra.gmfdiag.canonical.strategies" name="Canonical Children Strategies"/>
+ </appinfo>
+ <documentation>
+ A registry of strategies for determining the semantic children of model elements that should canonically be represented as child views in the diagrams. In this context the term &quot;children&quot; is used loosely as pertaining to the model semantics, because elements visualized as child views in the diagram can have any kind of relationship to the element visualized in the parent view. For example, in composite structures, ports of the class that is the type of a part may be presented as child views on the border of the part&apos;s rectangle shape in the diagram, although they are in no way contained either directly or indirectly in the model.
+
+The semantic &quot;children&quot; also include relationships (generalizations, dependencies, associations, etc.) and relationship-like elements (connectors, state transitions, messages, etc.) that should visually connect to a &quot;parent&quot; view in the diagram.
+ </documentation>
+ </annotation>
+
+ <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <choice minOccurs="1" maxOccurs="unbounded">
+ <element ref="semanticChildrenStrategy"/>
+ <element ref="defaultSemanticChildrenStrategy"/>
+ <element ref="creationTargetStrategy"/>
+ <element ref="visualChildrenStrategy"/>
+ </choice>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="semanticChildrenStrategy">
+ <annotation>
+ <documentation>
+ This is a pair (EditPart, ISemanticChildrenStrategy) used to describe the list of semantic elements that will represented as children of the current EditPart.
+&lt;p&gt;
+The nested &amp;lt;enablement&amp;gt; expression, if specified, is used to match edit parts that the strategy supports. The expression has three variables available to it:
+&lt;/p&gt;
+&lt;table border=&quot;1&quot; align=&quot;center&quot;&gt;
+&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;editPart&lt;/td&gt;&lt;td&gt;the edit-part under consideration. This is also the default variable&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;view&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;editPart&lt;/tt&gt;&apos;s notation view&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;element&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;view&lt;/tt&gt;&apos;s semantic element&lt;/th&gt;&lt;/tr&gt;
+&lt;/table&gt;
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+ </sequence>
+ <attribute name="editPart" type="string">
+ <annotation>
+ <documentation>
+ A class implementing the EditPart interface whose instances will be synchronized. If both this attribute and an &amp;lt;enablement&amp;gt; expression are supplied, then strategies will only be used that match both.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.gef.EditPart"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ A strategy computing the list of semantic elements that will be represented as children of the referenced EditPart.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ISemanticChildrenStrategy"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string">
+ <annotation>
+ <documentation>
+ Semantic children strategies are matched in priority order, from highest priority first to lowest priority last.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="defaultSemanticChildrenStrategy">
+ <annotation>
+ <documentation>
+ An extension that provides a generic default implementation of the semantic children for edit parts on semantic objects that it recognizes.
+&lt;p&gt;
+The nested &amp;lt;enablement&amp;gt; expression, if specified, is used to match edit parts that the strategy supports. The expression has three variables available to it:
+&lt;/p&gt;
+&lt;table border=&quot;1&quot; align=&quot;center&quot;&gt;
+&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;editPart&lt;/td&gt;&lt;td&gt;the edit-part under consideration. This is also the default variable&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;view&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;editPart&lt;/tt&gt;&apos;s notation view&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;element&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;view&lt;/tt&gt;&apos;s semantic element&lt;/th&gt;&lt;/tr&gt;
+&lt;/table&gt;
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+ </sequence>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ The class implementing the default semantic children strategy
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ISemanticChildrenStrategy"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string">
+ <annotation>
+ <documentation>
+ Default semantic children strategies are consulted only if a specific registered strategy is not matched. In this case, the first default that can provide any children is used, so the priority sorts defaults.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="creationTargetStrategy">
+ <annotation>
+ <documentation>
+ An extension that provides an alternative target edit part to which requests should be sent for canonical creation of child views.
+&lt;p&gt;
+The nested &amp;lt;enablement&amp;gt; expression, if specified, is used to match edit parts that the strategy supports. The expression has three variables available to it:
+&lt;/p&gt;
+&lt;table border=&quot;1&quot; align=&quot;center&quot;&gt;
+&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;editPart&lt;/td&gt;&lt;td&gt;the edit-part under consideration. This is also the default variable&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;view&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;editPart&lt;/tt&gt;&apos;s notation view&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;element&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;view&lt;/tt&gt;&apos;s semantic element&lt;/th&gt;&lt;/tr&gt;
+&lt;/table&gt;
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+ </sequence>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ The class implementing the creation target edit-part strategy
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ICreationTargetStrategy"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string">
+ <annotation>
+ <documentation>
+ Creation target edit-part strategies are matched in priority order, from highest priority first to lowest priority last.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="visualChildrenStrategy">
+ <annotation>
+ <documentation>
+ This is a pair (EditPart, IVisualChildrenStrategy) used to describe the list of visual notation elements that are canonical children and connections of the current EditPart.
+&lt;p&gt;
+The nested &amp;lt;enablement&amp;gt; expression, if specified, is used to match edit parts that the strategy supports. The expression has three variables available to it:
+&lt;/p&gt;
+&lt;table border=&quot;1&quot; align=&quot;center&quot;&gt;
+&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;editPart&lt;/td&gt;&lt;td&gt;the edit-part under consideration. This is also the default variable&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;view&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;editPart&lt;/tt&gt;&apos;s notation view&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;element&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;view&lt;/tt&gt;&apos;s semantic element&lt;/th&gt;&lt;/tr&gt;
+&lt;/table&gt;
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+ </sequence>
+ <attribute name="editPart" type="string">
+ <annotation>
+ <documentation>
+ A class implementing the EditPart interface whose instances will be synchronized. If both this attribute and an &amp;lt;enablement&amp;gt; expression are supplied, then strategies will only be used that match both.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.gef.EditPart"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ A strategy computing the list of visual notation elements that are canonical children and connections of the referenced EditPart.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.IVisualChildrenStrategy"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string">
+ <annotation>
+ <documentation>
+ Visual children strategies are matched in priority order, from highest priority first to lowest priority last.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ 1.1.0
+ </documentation>
+ </annotation>
+
+
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ The Composite Structure Diagram provided by Papyrus supports the presentation of nested composite structure in a part rectangle&apos;s structure compartment and ports around its border, according to the structure of the part&apos;s type (if any):
+
+&lt;pre&gt;
+ &lt;extension
+ point=&quot;org.eclipse.papyrus.infra.gmfdiag.canonical.strategies&quot;&gt;
+ &lt;semanticChildrenStrategy
+ editPart=&quot;org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartCompartmentEditPartCN&quot;
+ class=&quot;org.eclipse.papyrus.uml.diagram.composite.PropertyPartCompartmentSemanticChildrenStrategy&quot;&gt;
+ &lt;/semanticChildrenStrategy&gt;
+ &lt;semanticChildrenStrategy
+ editPart=&quot;org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartEditPartCN&quot;
+ class=&quot;org.eclipse.papyrus.uml.diagram.composite.PropertyPartCompartmentSemanticChildrenStrategy&quot;&gt;
+ &lt;/semanticChildrenStrategy&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+
+And for diagrams that do not need any more specific strategies, Papyrus provides defaults for owned elements and relationships to be presented as child views and edges, respectively:
+
+&lt;pre&gt;
+ &lt;extension
+ point=&quot;org.eclipse.papyrus.infra.gmfdiag.canonical.strategies&quot;&gt;
+ &lt;defaultSemanticChildrenStrategy
+ class=&quot;org.eclipse.papyrus.uml.diagram.common.canonical.DefaultUMLSemanticChildrenStrategy&quot;
+ priority=&quot;10&quot;&gt;
+ &lt;enablement&gt;
+ &lt;with
+ variable=&quot;element&quot;&gt;
+ &lt;instanceof
+ value=&quot;org.eclipse.uml2.uml.Element&quot;&gt;
+ &lt;/instanceof&gt;
+ &lt;/with&gt;
+ &lt;/enablement&gt;
+ &lt;/defaultSemanticChildrenStrategy&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+
+The Activity diagram cusomizes the edit part from which canonical creation of activity edges incoming and outgoing pins and groups is requested:
+
+&lt;pre&gt;
+ &lt;extension
+ point=&quot;org.eclipse.papyrus.infra.gmfdiag.canonical.strategies&quot;&gt;
+ &lt;creationTargetStrategy
+ class=&quot;org.eclipse.papyrus.uml.diagram.activity.canonical.ActivityCanonicalCreationTargetStrategy&quot;&gt;
+ &lt;enablement&gt;
+ &lt;with
+ variable=&quot;element&quot;&gt;
+ &lt;or&gt;
+ &lt;instanceof
+ value=&quot;org.eclipse.uml2.uml.Pin&quot;&gt;
+ &lt;/instanceof&gt;
+ &lt;instanceof
+ value=&quot;org.eclipse.uml2.uml.ActivityGroup&quot;&gt;
+ &lt;/instanceof&gt;
+ &lt;/or&gt;
+ &lt;/with&gt;
+ &lt;/enablement&gt;
+ &lt;/creationTargetStrategy&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="copyright"/>
+ </appinfo>
+ <documentation>
+ Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/CanonicalStateListener.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/CanonicalStateListener.java
new file mode 100644
index 00000000000..ecb6081bafa
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/CanonicalStateListener.java
@@ -0,0 +1,308 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy;
+
+import java.util.List;
+import java.util.concurrent.ConcurrentMap;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker;
+import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.util.EditPartUtil;
+import org.eclipse.gmf.runtime.notation.CanonicalStyle;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.tools.util.ReferenceCounted;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.MapMaker;
+
+/**
+ * A {@link DiagramEventBroker} listener that is notified when the {@link CanonicalStyle} of a view changes.
+ */
+public class CanonicalStateListener extends ReferenceCounted<CanonicalStateListener> implements NotificationListener {
+ private static final ConcurrentMap<IGraphicalEditPart, CanonicalStateListener> listeners = new MapMaker().weakKeys().weakValues().makeMap();
+
+ private final IGraphicalEditPart owner;
+
+ private List<Handler> handlers = Lists.newArrayListWithExpectedSize(2);
+
+ private CanonicalStateListener(IGraphicalEditPart owner) {
+ super();
+
+ this.owner = owner;
+
+ install();
+ }
+
+ @Override
+ protected void dispose() {
+ listeners.remove(owner, this);
+ uninstall();
+ }
+
+ /**
+ * <p>
+ * Obtains the shared canonical state listener for a given {@code editPart}.
+ * </p>
+ * <p>
+ * <b>Note</b> that the resulting listener is automatically {@linkplain ReferenceCounted#retain() retained} on the caller's behalf. The caller will have to {@linkplain ReferenceCounted#release() release} the listener when it is no longer needed.
+ * </p>
+ *
+ * @param editPart
+ * an edit part
+ * @return its shared canonical state listener. Do not {@linkplain ReferenceCounted#retain() retain} it, otherwise you will
+ * have doubly retained it
+ *
+ * @see ReferenceCounted#retain()
+ * @see ReferenceCounted#release()
+ */
+ public static CanonicalStateListener getInstance(IGraphicalEditPart editPart) {
+ CanonicalStateListener result = listeners.get(editPart);
+ if (result == null) {
+ result = new CanonicalStateListener(editPart);
+ CanonicalStateListener clash = listeners.putIfAbsent(editPart, result);
+ if (clash != null) {
+ result.dispose();
+ result = clash;
+ }
+ }
+ return result.retain();
+ }
+
+ public void addCanonicalRefreshHandler(Handler refreshHandler) {
+ handlers.add(refreshHandler);
+ }
+
+ public void removeCanonicalRefreshHandler(Handler refreshHandler) {
+ handlers.remove(refreshHandler);
+ }
+
+ private void install() {
+ View view = owner.getNotationView();
+
+ DiagramEventBroker broker = getDiagramEventBroker();
+ broker.addNotificationListener(view, NotationPackage.Literals.VIEW__STYLES, this);
+
+ // If provided by CSS, the style could be a transient floating object. In that case, don't listen to
+ // it (CSS cannot change its state). Or, if the view itself is a CanonicalStyle, then we're already
+ // listening to it
+ CanonicalStyle style = (CanonicalStyle) view.getStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ if ((style != null) && (style.eContainer() == view)) {
+ install(style);
+ }
+ }
+
+ private IGraphicalEditPart getOwner() {
+ return owner;
+ }
+
+ private void install(CanonicalStyle style) {
+ DiagramEventBroker broker = getDiagramEventBroker();
+ broker.addNotificationListener(style, NotationPackage.Literals.CANONICAL_STYLE__CANONICAL, this);
+ }
+
+ private void uninstall() {
+ View view = getOwner().getNotationView();
+
+ CanonicalStyle style = (CanonicalStyle) view.getStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ if ((style != null) && (style != view)) {
+ uninstall(style);
+ }
+
+ DiagramEventBroker broker = getDiagramEventBroker();
+ if (broker != null) {
+ broker.removeNotificationListener(view, NotationPackage.Literals.VIEW__STYLES, this);
+ }
+ }
+
+ private void uninstall(CanonicalStyle style) {
+ DiagramEventBroker broker = getDiagramEventBroker();
+ if (broker != null) {
+ broker.removeNotificationListener(style, NotationPackage.Literals.CANONICAL_STYLE__CANONICAL, this);
+ }
+ }
+
+ protected DiagramEventBroker getDiagramEventBroker() {
+ IGraphicalEditPart owner = getOwner();
+ TransactionalEditingDomain domain = (owner == null) ? null : owner.getEditingDomain();
+ return (domain == null) ? null : DiagramEventBroker.getInstance(domain);
+ }
+
+ @Override
+ public void notifyChanged(Notification notification) {
+ Object notifier = notification.getNotifier();
+
+ if ((notifier instanceof CanonicalStyle) && (notification.getFeature() == NotationPackage.Literals.CANONICAL_STYLE__CANONICAL)) {
+ // Already listening to CanonicalStyle::canonical, so don't use internalHandleAdd
+ handleAdd((CanonicalStyle) notifier, null);
+ } else if (notification.getFeature() == NotationPackage.Literals.VIEW__STYLES) {
+ switch (notification.getEventType()) {
+ case Notification.ADD:
+ if (notification.getNewValue() instanceof CanonicalStyle) {
+ internalHandleAdd((CanonicalStyle) notification.getNewValue());
+ }
+ break;
+ case Notification.ADD_MANY:
+ for (Object next : (Iterable<?>) notification.getNewValue()) {
+ if (next instanceof CanonicalStyle) {
+ internalHandleAdd((CanonicalStyle) next);
+ break;
+ }
+ }
+ break;
+ case Notification.REMOVE:
+ if (notification.getOldValue() instanceof CanonicalStyle) {
+ internalHandleRemove((CanonicalStyle) notification.getOldValue());
+ }
+ break;
+ case Notification.REMOVE_MANY:
+ for (Object next : (Iterable<?>) notification.getOldValue()) {
+ if (next instanceof CanonicalStyle) {
+ internalHandleRemove((CanonicalStyle) next);
+ break;
+ }
+ }
+ break;
+ case Notification.SET:
+ case Notification.UNSET:
+ CanonicalStyle added = (notification.getNewValue() instanceof CanonicalStyle) ? (CanonicalStyle) notification.getNewValue() : null;
+ CanonicalStyle removed = (notification.getOldValue() instanceof CanonicalStyle) ? (CanonicalStyle) notification.getOldValue() : null;
+
+ if (added != null) {
+ if (removed != null) {
+ uninstall(removed);
+ }
+
+ // Doesn't matter whether the old style was a canonical. It matters that this one is
+ internalHandleAdd((CanonicalStyle) notification.getNewValue());
+ } else if (notification.getOldValue() instanceof CanonicalStyle) {
+ // Canonical style was replaced by a different kind
+ internalHandleRemove((CanonicalStyle) notification.getOldValue());
+ }
+ break;
+ }
+ }
+ }
+
+ private void internalHandleAdd(CanonicalStyle style) {
+ // If provided by CSS, the style could be a transient floating object. In that case, don't listen to
+ // it (CSS cannot change its state)
+ if (style.eContainer() == owner.getNotationView()) {
+ install(style);
+ }
+ handleAdd(style, null);
+ }
+
+ void handleAdd(CanonicalStyle style, Predicate<? super Handler> filter) {
+ if (!handlers.isEmpty()) {
+ Iterable<Handler> filtered = (filter == null) ? handlers : Iterables.filter(handlers, filter);
+ for (Handler next : filtered) {
+ Runnable update = next.handleAdd(style);
+ if (update != null) {
+ EditPartUtil.synchronizeRunnableToMainThread(getOwner(), update);
+ }
+ }
+ }
+ }
+
+ private void internalHandleRemove(CanonicalStyle style) {
+ uninstall(style);
+ handleRemove(style, null);
+ }
+
+ void handleRemove(CanonicalStyle style, Predicate<? super Handler> filter) {
+ if (!handlers.isEmpty()) {
+ Iterable<Handler> filtered = (filter == null) ? handlers : Iterables.filter(handlers, filter);
+ for (Handler next : filtered) {
+ Runnable update = next.handleRemove(style);
+ if (update != null) {
+ EditPartUtil.synchronizeRunnableToMainThread(getOwner(), update);
+ }
+ }
+ }
+ }
+
+ /**
+ * Handles a change in the implicit canonical style of a notation view (such as from changes in CSS stylesheets).
+ *
+ * @param requestor
+ * the handler of the entity making the poke request, which should be skipped in the poke
+ * (presumably because it already knows about the canonical state change)
+ * @param enabled
+ * whether the edit-policy has become enabled ({@code true}) or disabled ({@code false})
+ */
+ void pokeHandlers(Handler requestor, boolean enabled) {
+ View view = owner.getNotationView();
+ if (view != null) {
+ CanonicalStyle style = (CanonicalStyle) view.getStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ if (style == null) {
+ // Only need to fake a removal if CSS told us that we're not enabled
+ if (!enabled) {
+ CanonicalStyle fakeStyle = NotationFactory.eINSTANCE.createCanonicalStyle();
+ handleRemove(fakeStyle, not(requestor));
+ }
+ } else if (style.eContainer() == null) {
+ // Only need to fake an addition if CSS told us that we're enabled
+ if (enabled) {
+ handleAdd(style, not(requestor));
+ }
+ }
+ }
+ }
+
+ private static Predicate<Object> not(final Object excluded) {
+ return (excluded == null) ? null : new Predicate<Object>() {
+ @Override
+ public boolean apply(Object input) {
+ return input != excluded;
+ }
+ };
+ }
+
+ //
+ // Nested types
+ //
+
+ public interface Handler {
+
+ /**
+ * Obtains a runnable that will be invoked on the display thread (for safe access to diagram edit parts)
+ * to handle the addition/update of the canonical {@code style}.
+ *
+ * @param style
+ * the added or changed canonical style
+ *
+ * @return a runnable to run in response, or {@code null} if no response is needed
+ */
+ Runnable handleAdd(CanonicalStyle style);
+
+ /**
+ * Obtains a runnable that will be invoked on the display thread (for safe access to diagram edit parts)
+ * to handle the removal of the canonical {@code style}.
+ *
+ * @param style
+ * the removed canonical style
+ *
+ * @return a runnable to run in response, or {@code null} if no response is needed
+ */
+ Runnable handleRemove(CanonicalStyle style);
+
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/PapyrusCanonicalEditPolicy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/PapyrusCanonicalEditPolicy.java
new file mode 100644
index 00000000000..ab83e95bd7c
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/PapyrusCanonicalEditPolicy.java
@@ -0,0 +1,790 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.WeakHashMap;
+import java.util.concurrent.Callable;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gef.requests.CreateRequest;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.DeferredLayoutCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderItemEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IResizableCompartmentEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.TopGraphicEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest.ViewDescriptor;
+import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.CanonicalStyle;
+import org.eclipse.gmf.runtime.notation.DecorationNode;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.commands.util.CommandTreeIterator;
+import org.eclipse.papyrus.commands.wrappers.GEFCommandWrapper;
+import org.eclipse.papyrus.infra.core.utils.AdapterUtils;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ICreationTargetStrategy;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ISemanticChildrenStrategy;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.IVisualChildrenStrategy;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.SemanticChildrenStrategyRegistry;
+import org.eclipse.papyrus.infra.gmfdiag.common.commands.requests.CanonicalDropObjectsRequest;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IPapyrusCanonicalEditPolicy;
+import org.eclipse.papyrus.infra.gmfdiag.common.helper.DiagramHelper;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * A specialization of the GMF {@link CanonicalEditPolicy} that alters the standard behaviour in a few key ways:
+ * <ul>
+ * <li>rather than using the View Service to create child views, delegate to the core drag-and-drop implementation generated for each diagram (by-passing the Papyrus exensible/pluggable drop strategies). This avoids the problems of determining a priori the
+ * identifiers of child views to create in each compartment</li>
+ * <li>treat incoming and outgoing edges on a top shape as child views for canonical synchronization</li>
+ * <li>delegate determination of semantic children to pluggable strategies on an extension point</li>
+ * </ul>
+ */
+public class PapyrusCanonicalEditPolicy extends CanonicalEditPolicy implements IPapyrusCanonicalEditPolicy {
+
+ static final String FILTER_ID = "org.eclipse.papyrus.canonicalDependents"; //$NON-NLS-1$
+ static final String SEMI_ACTIVE_FILTER_ID = "org.eclipse.papyrus.semiCanonical"; //$NON-NLS-1$
+
+ private static final Set<View> createdByCanonical = Sets.newSetFromMap(new WeakHashMap<View, Boolean>());
+
+ private ISemanticChildrenStrategy semanticChildrenStrategy = null;
+ private ICreationTargetStrategy creationTargetStrategy;
+
+ private Collection<? extends EObject> dependents = null;
+
+ private CanonicalStateListener canonicalStateListener;
+ private CanonicalStateListener.Handler refreshHandler;
+
+ private State state = State.INACTIVE;
+
+ private boolean overrideEnabled;
+
+ @Override
+ public final void activate() {
+ if (host().getNotationView() != null) {
+ final SemanticChildrenStrategyRegistry reg = SemanticChildrenStrategyRegistry.getInstance();
+ semanticChildrenStrategy = reg.getSemanticChildrenStrategy(getHost());
+ creationTargetStrategy = ICreationTargetStrategy.Safe.safe(reg.getCreationTargetStrategy(getHost()));
+
+ hookCanonicalStateListener();
+ if (isEnabled()) {
+ doActivate();
+ } else {
+ transition(State.SEMIACTIVE);
+ }
+ }
+ }
+
+ protected final void basicActivate() {
+ transition(State.ACTIVE);
+ super.activate();
+ }
+
+ protected void doActivate() {
+ basicActivate();
+
+ if (semanticChildrenStrategy != null) {
+ dependents = semanticChildrenStrategy.getCanonicalDependents((getSemanticHost()));
+ hookDependentsListener(dependents);
+ }
+ }
+
+ @Override
+ public final void deactivate() {
+ if (host().getNotationView() != null) {
+ unhookCanonicalStateListener();
+ }
+
+ doDeactivate();
+
+ transition(State.INACTIVE);
+ }
+
+ protected final void basicDeactivate() {
+ super.deactivate();
+ transition(State.SEMIACTIVE);
+ }
+
+ protected void doDeactivate() {
+ basicDeactivate();
+ }
+
+ private State transition(State newState) {
+ final State result = state;
+
+ if (newState != state) {
+ if (!state.validateTransition(newState)) {
+ Activator.log.warn(String.format("PapyrusCanonicalEditPolicy forcing invalid transition %s => %s ", state, newState)); //$NON-NLS-1$
+ }
+
+ switch (newState) {
+ case INACTIVE:
+ removeListenerFilter(SEMI_ACTIVE_FILTER_ID);
+ break;
+ case SEMIACTIVE:
+ // Enter a semi-active state in which we only delete obsolete views that we had
+ // originally created canonically while we were active
+ EObject semanticHost = getSemanticHost();
+ if (semanticHost != null) {
+ addListenerFilter(SEMI_ACTIVE_FILTER_ID, this, semanticHost);
+ }
+ break;
+ case ACTIVE:
+ removeListenerFilter(SEMI_ACTIVE_FILTER_ID);
+ break;
+ }
+
+ state = newState;
+ }
+
+ return result;
+ }
+
+ protected final boolean isInState(State state) {
+ return this.state == state;
+ }
+
+ @Override
+ public void enableRefresh(boolean enable) {
+ // Only set ourselves 'enabled' when at least semi-active
+ if (!isInState(State.INACTIVE)) {
+ super.enableRefresh(enable);
+ }
+ }
+
+ @Override
+ public void refreshActive() {
+ if (canonicalStateListener != null) {
+ if (!isActive()) {
+ if (isCanonicalStyleEnabled()) {
+ doActivate();
+
+ // I will not get this poke
+ canonicalStateListener.pokeHandlers(refreshHandler, true);
+ }
+ } else {
+ if (!isCanonicalStyleEnabled()) {
+ doDeactivate();
+
+ // I will not get this poke
+ canonicalStateListener.pokeHandlers(refreshHandler, false);
+ }
+ }
+ }
+ }
+
+ /**
+ * For CSS support, the canonical style of a compartment is inherited from its parent shape.
+ */
+ @Override
+ protected CanonicalStyle getCanonicalStyle() {
+ return (CanonicalStyle) canonicalHost().getNotationView().getStyle(NotationPackage.eINSTANCE.getCanonicalStyle());
+ }
+
+ /**
+ * For CSS support, the canonical style of a compartment is inherited from its parent shape.
+ */
+ protected final IGraphicalEditPart canonicalHost() {
+ IGraphicalEditPart result = host();
+ if (result instanceof IResizableCompartmentEditPart) {
+ result = result.getTopGraphicEditPart();
+ }
+ return result;
+ }
+
+ private void hookCanonicalStateListener() {
+ class Activate implements Runnable {
+ @Override
+ public void run() {
+ doActivate();
+ }
+ }
+ class Deactivate implements Runnable {
+ @Override
+ public void run() {
+ doDeactivate();
+ }
+ }
+
+ refreshHandler = new CanonicalStateListener.Handler() {
+ @Override
+ public Runnable handleAdd(CanonicalStyle style) {
+ Runnable result = null;
+
+ if (style.isCanonical()) {
+ if (!isActive()) {
+ result = new Activate();
+ }
+ } else if (isActive()) {
+ result = new Deactivate();
+ }
+
+ return result;
+ }
+
+ @Override
+ public Runnable handleRemove(CanonicalStyle style) {
+ Runnable result = null;
+
+ if (isActive()) {
+ result = new Deactivate();
+ }
+
+ return result;
+ }
+ };
+
+ canonicalStateListener = CanonicalStateListener.getInstance(canonicalHost());
+ canonicalStateListener.addCanonicalRefreshHandler(refreshHandler);
+ }
+
+ private void unhookCanonicalStateListener() {
+ if (canonicalStateListener != null) {
+ canonicalStateListener.removeCanonicalRefreshHandler(refreshHandler);
+ canonicalStateListener.release();
+ canonicalStateListener = null;
+ }
+ }
+
+ protected void hookDependentsListener(Iterable<? extends EObject> dependents) {
+ if (dependents != null) {
+ for (EObject next : dependents) {
+ addListenerFilter(FILTER_ID, this, next);
+ }
+ }
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (overrideEnabled) {
+ return true;
+ }
+
+ // by default there is no synchronization
+ if (getCanonicalStyle() == null) {
+ return false;
+ }
+ return super.isEnabled();
+ }
+
+ /**
+ * Queries whether I have the {@linkplain CanonicalStyle canonical style} applied and that style
+ * is {@linkplain CanonicalStyle#isCanonical() enabled}.
+ */
+ protected boolean isCanonicalStyleEnabled() {
+ CanonicalStyle style = getCanonicalStyle();
+ return (style != null) && style.isCanonical();
+ }
+
+ @Override
+ protected List<EObject> getSemanticChildrenList() {
+ List<EObject> result = getSemanticChildrenList(ChildrenKind.NODE);
+
+ if (isManageConnections()) {
+ result = concat(result, getSemanticChildrenList());
+ }
+
+ return result;
+ }
+
+ static <E> List<E> concat(Iterable<? extends E> list1, Iterable<? extends E> list2) {
+ List<E> result = null;
+
+ if (list1 != null) {
+ result = Lists.newArrayList(list1);
+ }
+
+ if (list2 != null) {
+ if (result != null) {
+ Iterables.addAll(result, list2);
+ } else {
+ result = Lists.newArrayList(list2);
+ }
+ }
+
+ return (result == null) ? Collections.<E> emptyList() : result;
+ }
+
+ protected List<EObject> getSemanticChildrenList(ChildrenKind kind) {
+ if (semanticChildrenStrategy != null) {
+ ArrayList<EObject> ancestor = getAllEObjectAncestor();
+
+ List<? extends EObject> children;
+ switch (kind) {
+ case NODE:
+ children = semanticChildrenStrategy.getCanonicalSemanticChildren(getSemanticHost(), host().getNotationView());
+ break;
+ case CONNECTION:
+ children = semanticChildrenStrategy.getCanonicalSemanticConnections(getSemanticHost(), host().getNotationView());
+ break;
+ default:
+ throw new IllegalArgumentException(kind.name());
+ }
+
+ if (children != null) {
+ for (EObject next : children) {
+ if (ancestor.contains(next)) {
+ return Collections.emptyList();
+ }
+ }
+ return Collections.unmodifiableList(children);
+ }
+ }
+
+ return Collections.emptyList();
+ }
+
+
+ /**
+ * This method is used to calculate if a semantic element has been already display in parent to avoid loop of display
+ *
+ * @return the list of all semantic element display by parents edipart.
+ */
+ protected ArrayList<EObject> getAllEObjectAncestor() {
+ ArrayList<EObject> ancestor = new ArrayList<EObject>();
+ EditPart currentEditPart = getHost();
+ if (currentEditPart.getModel() instanceof View) {
+ ancestor.add(((View) currentEditPart.getModel()).getElement());
+ }
+ while (currentEditPart.getParent() != null) {
+ currentEditPart = currentEditPart.getParent();
+ if (currentEditPart.getModel() instanceof View) {
+ ancestor.add(((View) currentEditPart.getModel()).getElement());
+ }
+ }
+ return ancestor;
+
+ }
+
+ @Override
+ protected void handleNotificationEvent(Notification event) {
+ // Override the enabled state to process deletions
+ final boolean oldOverride = overrideEnabled;
+ overrideEnabled = overrideEnabled || isInState(State.SEMIACTIVE);
+
+ try {
+ super.handleNotificationEvent(event);
+ if (semanticChildrenStrategy != null) {
+ if (dependents == null) {
+ dependents = semanticChildrenStrategy.getCanonicalDependents(getSemanticHost());
+ hookDependentsListener(dependents);
+ }
+ }
+ } finally {
+ overrideEnabled = oldOverride;
+ }
+ }
+
+ /**
+ * @see org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy#refreshSemantic()
+ * In order to connect the drop mechanism this method has be overloaded
+ */
+ @Override
+ protected void refreshSemantic() {
+ // First, process all child nodes now
+ List<IAdaptable> createdViews = refreshSemanticChildren(ChildrenKind.NODE);
+ makeViewsImmutable(createdViews);
+
+ // Then, repeat later with connections included, if appropriate
+ if (isManageConnections()) {
+ ListenableFuture<List<IAdaptable>> createdConnections = DiagramHelper.submit(getHost(), new Callable<List<IAdaptable>>() {
+ @Override
+ public List<IAdaptable> call() throws Exception {
+ return refreshSemanticChildren(ChildrenKind.CONNECTION);
+ }
+ });
+ Futures.addCallback(createdConnections, new FutureCallback<List<IAdaptable>>() {
+ @Override
+ public void onSuccess(List<IAdaptable> result) {
+ makeViewsImmutable(result);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ Activator.log.error(t);
+ }
+ });
+ }
+ }
+
+
+
+ /**
+ * this method is extracted from refreshSemanticChildren
+ * but instead of using the service view it uses the drop
+ *
+ * @return
+ */
+ protected List<IAdaptable> refreshSemanticChildren(ChildrenKind kind) {
+ // -------------- code from superClass----------------
+ // Don't try to refresh children if the semantic element
+ // cannot be resolved.
+ if (resolveSemanticElement() == null) {
+ return Collections.emptyList();
+ }
+
+ if (isInState(State.SEMIACTIVE) && createdByCanonical.isEmpty()) {
+ // No point in calculating anything because we have nothing to clean up
+ return Collections.emptyList();
+ }
+
+ // current views
+ List<View> viewChildren = getViewChildren(kind);
+ List<EObject> semanticChildren = new ArrayList<EObject>(getSemanticChildrenList(kind));
+
+ boolean changed = false;
+
+ if (!isInState(State.INACTIVE)) {
+ //
+ // delete all the remaining orphaned views
+ List<View> orphaned = cleanCanonicalSemanticChildren(viewChildren, semanticChildren);
+ if (!orphaned.isEmpty() && isInState(State.SEMIACTIVE)) {
+ // Furthermore, if we're only semiactive, then we should only delete views that we
+ // had created canonically while we were active
+ filterCanonicallyCreated(orphaned);
+ }
+ if (!orphaned.isEmpty()) {
+ // We may be asynchronously processing the deletion of a relationship that
+ // requires deletion of edges. If so, we may be only semi-active (the edge
+ // could have been created by the edit-part at the other end)
+ changed = deleteViews(orphaned);
+ }
+ }
+
+ //
+ // create a view for each remaining semantic element, if requested.
+ List<IAdaptable> createdViews = Collections.emptyList();
+ if (isInState(State.ACTIVE)) {
+ if (!semanticChildren.isEmpty()) {
+ createdViews = createViews(semanticChildren);
+ }
+ }
+
+ if (changed || !createdViews.isEmpty()) {
+ postProcessRefreshSemantic(createdViews);
+ }
+
+ return createdViews;
+ }
+
+ /**
+ * As {@link CanonicalEditPolicy#deleteViews(Iterator)}, deletes a list of views.
+ * The views will be deleted <tt>iff</tt> their semantic element has also been deleted.
+ *
+ * @param views
+ * an iterator on a list of views.
+ * @return <tt>true</tt> if the host editpart should be refreshed; either one one of the supplied
+ * views was deleted or has been reparented.
+ */
+ protected boolean deleteViews(Iterable<? extends View> views) {
+ // Copied from CanonicalEditPolicy::deleteViews because that method is final, and
+ // we need to be able to delete views even when we are only semi-active
+ if (!isEnabled() && isInState(State.INACTIVE)) {
+ return false;
+ }
+ final CompoundCommand cc = new CompoundCommand(DiagramUIMessages.DeleteCommand_Label);
+ for (View view : views) {
+ if (shouldDeleteView(view)) {
+ cc.add(getDeleteViewCommand(view));
+ }
+ }
+
+ boolean doDelete = !cc.isEmpty() && cc.canExecute();
+ if (doDelete) {
+ executeCommand(cc);
+ }
+ return doDelete;
+ }
+
+ @Override
+ protected Command getCreateViewCommand(CreateRequest request) {
+ Command result;
+
+ if (!(request instanceof CreateViewRequest)) {
+ result = super.getCreateViewCommand(request);
+ } else {
+ // Transform the request to a drop request serviced by the canonical drop policy
+ CreateViewRequest createViewRequest = (CreateViewRequest) request;
+ Iterable<? extends ViewDescriptor> descriptors = createViewRequest.getViewDescriptors();
+
+ CompoundCommand compoundCommand = new CompoundCommand();
+ for (ViewDescriptor viewDescriptor : descriptors) {
+ EObject element = (EObject) viewDescriptor.getElementAdapter().getAdapter(EObject.class);
+
+ if (element != null) {
+ List<EObject> elementToDrop = Collections.singletonList(element);
+ DropObjectsRequest dropRequest = new DropObjectsRequest();
+ dropRequest.setObjects(elementToDrop);
+ dropRequest.setLocation(createViewRequest.getLocation());
+ CanonicalDropObjectsRequest canonicalRequest = new CanonicalDropObjectsRequest(dropRequest);
+
+ Command cmd = creationTargetStrategy.getTargetEditPart(getHost(), element).getCommand(canonicalRequest);
+ if ((cmd != null) && cmd.canExecute()) {
+ compoundCommand.add(cmd);
+ }
+ }
+ }
+
+ result = compoundCommand.unwrap();
+ if (result.canExecute()) {
+ result = tagAndArrange(result);
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ protected List<View> getViewChildren() {
+ List<View> result = getViewChildren(ChildrenKind.NODE);
+
+ if (isManageConnections()) {
+ result.addAll(getViewChildren(ChildrenKind.CONNECTION));
+ }
+
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected List<View> getViewChildren(ChildrenKind kind) {
+ final IGraphicalEditPart host = host();
+ final View view = host.getNotationView();
+ final IVisualChildrenStrategy strategy = SemanticChildrenStrategyRegistry.getInstance().getVisualChildrenStrategy(host);
+
+ List<View> result;
+
+ if (strategy != null) {
+ List<? extends View> childViews;
+ switch (kind) {
+ case NODE:
+ childViews = strategy.getCanonicalChildren(host, view);
+ break;
+ case CONNECTION:
+ childViews = strategy.getCanonicalEdges(host, view);
+ break;
+ default:
+ throw new IllegalArgumentException(kind.name());
+ }
+ result = (childViews == null) ? Collections.<View> emptyList() : Lists.newArrayList(childViews);
+ } else {
+ // Default strategy
+ switch (kind) {
+ case NODE:
+ result = super.getViewChildren();
+
+ // Filter out child views that visualize the same element as my view (these
+ // should be compartments, decorations, labels)
+ final EObject semantic = getSemanticHost();
+ for (Iterator<? extends View> iter = result.iterator(); iter.hasNext();) {
+ if (iter.next().getElement() == semantic) {
+ iter.remove();
+ }
+ }
+ break;
+ case CONNECTION:
+ // Get distinct incoming and outgoing edges of top shapes and border items.
+ // Compartments of top shapes take care of their own contents
+ List<View> edges = Lists.newArrayList();
+ result = edges;
+ if (view.eIsSet(NotationPackage.Literals.VIEW__SOURCE_EDGES)) {
+ edges.addAll(view.getSourceEdges());
+ }
+ if (view.eIsSet(NotationPackage.Literals.VIEW__TARGET_EDGES)) {
+ for (Edge next : (Iterable<? extends Edge>) view.getTargetEdges()) {
+ if (next.getSource() != view) {
+ // Didn't already get a self-edge from the source edges
+ edges.add(next);
+ }
+ }
+ }
+ break;
+ default:
+ throw new IllegalArgumentException(kind.name());
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Queries whether I manage canonical connections. Edit parts such as top shapes and border items manage connections;
+ * other edit parts such as compartments manage contained views only.
+ *
+ * @return whether I manage canonical connections
+ */
+ protected boolean isManageConnections() {
+ final EditPart host = host();
+ return (host instanceof TopGraphicEditPart) || (host instanceof IBorderItemEditPart);
+ }
+
+ private Command tagAndArrange(Command creationCommand) {
+ return new PostCreationWrapperCommand<List<IAdaptable>>(creationCommand) {
+
+ @Override
+ protected List<IAdaptable> createAccumulator() {
+ return Lists.newArrayList();
+ }
+
+ @Override
+ protected void postProcessView(Object viewish, List<IAdaptable> accumulator) {
+ if (viewish instanceof IAdaptable) {
+ View view = (View) ((IAdaptable) viewish).getAdapter(View.class);
+ if (view != null) {
+ // Arrange the parent of a label, not the label
+ if (view instanceof DecorationNode) {
+ view = (View) view.eContainer();
+ viewish = new EObjectAdapter(view);
+ }
+
+ }
+ accumulator.add((IAdaptable) viewish);
+ }
+ super.postProcessView(viewish, accumulator);
+ }
+
+ @Override
+ protected void postProcessView(View view, List<IAdaptable> accumulator) {
+ createdByCanonical.add(view);
+ }
+
+ @Override
+ protected void complete(List<IAdaptable> accumulator) {
+ if (!accumulator.isEmpty()) {
+ final DeferredLayoutCommand layout = new DeferredLayoutCommand(host().getEditingDomain(), accumulator, host());
+ if (layout.canExecute()) {
+ DiagramHelper.asyncExec(getHost(), new Runnable() {
+
+ @Override
+ public void run() {
+ executeCommand(new ICommandProxy(layout));
+ }
+ });
+ }
+ }
+ }
+ };
+ }
+
+ private <C extends Collection<? extends View>> C filterCanonicallyCreated(C views) {
+ for (Iterator<? extends View> iter = views.iterator(); iter.hasNext();) {
+ if (!createdByCanonical.contains(iter.next())) {
+ iter.remove();
+ }
+ }
+
+ return views;
+ }
+
+ //
+ // Nested types
+ //
+
+ protected enum State {
+ INACTIVE,
+ SEMIACTIVE,
+ ACTIVE;
+
+ boolean validateTransition(State next) {
+ switch (this) {
+ case INACTIVE:
+ case SEMIACTIVE:
+ return next != this;
+ case ACTIVE:
+ return next == SEMIACTIVE;
+ default:
+ throw new IllegalStateException("No such state: " + this); //$NON-NLS-1$
+ }
+ }
+ }
+
+ protected enum ChildrenKind {
+ NODE, CONNECTION;
+ }
+
+ protected static abstract class PostCreationWrapperCommand<A> extends GEFCommandWrapper {
+ public PostCreationWrapperCommand(Command command) {
+ super(command);
+ }
+
+ @Override
+ public void execute() {
+ super.execute();
+
+ A accumulator = createAccumulator();
+ postProcessViews(getCommand(), accumulator);
+ complete(accumulator);
+ }
+
+ protected A createAccumulator() {
+ return null;
+ }
+
+ protected void complete(A accumulator) {
+ // Pass
+ }
+
+ private void postProcessViews(Command command, A accumulator) {
+ for (Iterator<ICommand> iter = CommandTreeIterator.iterateGMF(command); iter.hasNext();) {
+ CommandResult result = iter.next().getCommandResult();
+ if ((result != null) && ((result.getStatus() == null) || result.getStatus().isOK())) {
+ Object returnValue = result.getReturnValue();
+ if (returnValue instanceof Iterable<?>) {
+ for (Object next : (Iterable<?>) returnValue) {
+ postProcessView(next, accumulator);
+ }
+ } else if (returnValue != null) {
+ postProcessView(returnValue, accumulator);
+ }
+ }
+ }
+ }
+
+ protected void postProcessView(Object viewish, A accumulator) {
+ Optional<View> view = AdapterUtils.adapt(viewish, View.class);
+ if (view.isPresent()) {
+ postProcessView(view.get(), accumulator);
+ }
+ }
+
+ protected void postProcessView(View view, A accumulator) {
+ // Pass
+ }
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/Activator.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/Activator.java
new file mode 100644
index 00000000000..1be3b2c8644
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/Activator.java
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.internal;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.gmfdiag.canonical"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /** Logging helper */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+
+ plugin = this;
+
+ // register the login helper
+ log = new LogHelper(this);
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ log = null;
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/provider/PapyrusCanonicalEditPolicyProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/provider/PapyrusCanonicalEditPolicyProvider.java
new file mode 100644
index 00000000000..895cd804954
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/provider/PapyrusCanonicalEditPolicyProvider.java
@@ -0,0 +1,76 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.internal.provider;
+
+import org.eclipse.gef.EditPart;
+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.editparts.CompartmentEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderedShapeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
+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.core.services.ServiceException;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy.PapyrusCanonicalEditPolicy;
+import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart;
+
+/**
+ * this is an editpolicy provider in charge to install a canonical edit policy on papyrus editpart
+ */
+public class PapyrusCanonicalEditPolicyProvider extends AbstractProvider implements IEditPolicyProvider {
+
+ @Override
+ public void createEditPolicies(EditPart editPart) {
+ if (supportsCanonical(editPart)) {
+ if (editPart instanceof DiagramEditPart || editPart instanceof CompartmentEditPart || editPart instanceof IBorderedShapeEditPart) {
+ editPart.installEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CANONICAL_ROLE, new PapyrusCanonicalEditPolicy());
+ }
+ }
+ }
+
+ protected boolean supportsCanonical(EditPart editPart) {
+ boolean result = false;
+
+ if (!(editPart instanceof ITextAwareEditPart)) {
+ result = (editPart instanceof DiagramEditPart)
+ || (editPart instanceof CompartmentEditPart)
+ || (editPart instanceof IBorderedShapeEditPart);
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean provides(IOperation operation) {
+ CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation;
+
+ EditPart gep = epOperation.getEditPart();
+ // test if the edipart is a papyrus editpart
+ try {
+ if (ServiceUtilsForEditPart.getInstance().getServiceRegistry(gep) == null) {
+ return false;
+ }
+ } catch (org.osgi.framework.ServiceException ex) {
+ return false;
+ } catch (ServiceException e) {
+ return false;
+ }
+
+ // we are sure that this is a papyrus editpart
+ return supportsCanonical(gep);
+ }
+
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/BasicSemanticChildrenStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/BasicSemanticChildrenStrategy.java
new file mode 100644
index 00000000000..28f48594476
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/BasicSemanticChildrenStrategy.java
@@ -0,0 +1,82 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST, Christian W. Damus, 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:
+ * CEA LIST - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.util.EContentsEList;
+import org.eclipse.gmf.runtime.notation.View;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * A default implementation of the semantic children strategy that is parameterized
+ * by features providing children and
+ */
+public class BasicSemanticChildrenStrategy implements ISemanticChildrenStrategy {
+
+ private EReference[] childReferences;
+ private EReference[] connectionReferences;
+ private EReference[] dependentReferences;
+
+ public BasicSemanticChildrenStrategy(EReference[] childReferences, EReference[] connectionReferences, EReference[] dependentReferences) {
+ super();
+
+ this.childReferences = (childReferences == null) || (childReferences.length == 0) ? null
+ : Arrays.copyOf(childReferences, childReferences.length);
+ this.connectionReferences = (connectionReferences == null) || (connectionReferences.length == 0) ? null
+ : Arrays.copyOf(connectionReferences, connectionReferences.length);
+ this.dependentReferences = (dependentReferences == null) || (dependentReferences.length == 0) ? null
+ : Arrays.copyOf(dependentReferences, dependentReferences.length);
+ }
+
+ public BasicSemanticChildrenStrategy(Iterable<? extends EReference> childReferences, Iterable<? extends EReference> connectionReferences, Iterable<? extends EReference> dependentReferences) {
+ super();
+
+ this.childReferences = (childReferences == null) || Iterables.isEmpty(childReferences) ? null
+ : Iterables.toArray(childReferences, EReference.class);
+ this.connectionReferences = (connectionReferences == null) || Iterables.isEmpty(connectionReferences) ? null
+ : Iterables.toArray(connectionReferences, EReference.class);
+ this.dependentReferences = (dependentReferences == null) || Iterables.isEmpty(dependentReferences) ? null
+ : Iterables.toArray(dependentReferences, EReference.class);
+ }
+
+ @Override
+ public List<? extends EObject> getCanonicalSemanticChildren(EObject semanticFromEditPart, View viewFromEditPart) {
+ return (childReferences == null)
+ ? ECollections.<EObject> emptyEList()
+ : new EContentsEList<EObject>(semanticFromEditPart, childReferences);
+ }
+
+ @Override
+ public List<? extends EObject> getCanonicalSemanticConnections(EObject semanticFromEditPart, View viewFromEditPart) {
+ return (connectionReferences == null)
+ ? ECollections.<EObject> emptyEList()
+ : new EContentsEList<EObject>(semanticFromEditPart, connectionReferences);
+ }
+
+ @Override
+ public Collection<? extends EObject> getCanonicalDependents(EObject semanticFromEditPart) {
+ return (dependentReferences == null)
+ ? ECollections.<EObject> emptyEList()
+ : new EContentsEList<EObject>(semanticFromEditPart, dependentReferences);
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/CreationTargetStrategyRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/CreationTargetStrategyRegistration.java
new file mode 100644
index 00000000000..0688a69c684
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/CreationTargetStrategyRegistration.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+
+/**
+ * The registration of a creation target strategy.
+ */
+class CreationTargetStrategyRegistration extends Registration<ICreationTargetStrategy, CreationTargetStrategyRegistration> {
+
+ CreationTargetStrategyRegistration(IConfigurationElement config) throws CoreException {
+ super(config, ICreationTargetStrategy.class);
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/DefaultSemanticChildrenStrategyRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/DefaultSemanticChildrenStrategyRegistration.java
new file mode 100644
index 00000000000..dc2e31e3d73
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/DefaultSemanticChildrenStrategyRegistration.java
@@ -0,0 +1,29 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+
+/**
+ * The registration of a default semantic children strategy.
+ */
+class DefaultSemanticChildrenStrategyRegistration extends Registration<ISemanticChildrenStrategy, DefaultSemanticChildrenStrategyRegistration> {
+
+ DefaultSemanticChildrenStrategyRegistration(IConfigurationElement config) throws CoreException {
+ super(config, ISemanticChildrenStrategy.class);
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/EditPartBasedRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/EditPartBasedRegistration.java
new file mode 100644
index 00000000000..50123913ff6
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/EditPartBasedRegistration.java
@@ -0,0 +1,78 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.gef.EditPart;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator;
+import org.osgi.framework.Bundle;
+
+import com.google.common.base.Strings;
+
+/**
+ * Abstraction of an {@link EditPart}-based registration on the extension point.
+ */
+abstract class EditPartBasedRegistration<T, R extends EditPartBasedRegistration<? extends T, R>> extends Registration<T, R> {
+
+ private static final String EDITPART = "editPart"; //$NON-NLS-1$
+
+ private final String editPartClassName;
+
+ private Class<?> editPartType;
+
+ private IStatus editPartTypeFailure;
+
+ public EditPartBasedRegistration(IConfigurationElement config, Class<T> extensionType) throws CoreException {
+ super(config, extensionType);
+
+ this.editPartClassName = Strings.emptyToNull(config.getAttribute(EDITPART));
+ }
+
+ private Class<?> getEditPartType() {
+ if ((editPartType == null) && (editPartTypeFailure == null) && (editPartClassName != null)) {
+ IConfigurationElement config = getConfigurationElement();
+ Bundle bundle = Platform.getBundle(config.getContributor().getName());
+ if ((bundle != null) && (bundle.getState() == Bundle.ACTIVE)) {
+ try {
+ editPartType = bundle.loadClass(editPartClassName).asSubclass(EditPart.class);
+ } catch (Exception e) {
+ editPartType = Void.class; // Forget matching anything, ever
+ Activator.log.error("Failed to load edit-part type " + editPartClassName, e); //$NON-NLS-1$
+ }
+ }
+ }
+
+ return editPartType;
+ }
+
+ boolean matchesEditPartType(Class<?> editPartType) {
+ boolean result = (editPartClassName == null);
+
+ if (!result) {
+ // The declaring bundle may not be loaded, in which case we don't want its strategy
+ Class<?> myEditPartType = getEditPartType();
+ result = (myEditPartType != null) && myEditPartType.isAssignableFrom(editPartType);
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean isApplicableTo(EditPart editPart) {
+ return matchesEditPartType(editPart.getClass()) && super.isApplicableTo(editPart);
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ICreationTargetStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ICreationTargetStrategy.java
new file mode 100644
index 00000000000..9a663619aa1
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ICreationTargetStrategy.java
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+
+/**
+ * A pluggable strategy for determining which edit part should be requested to create
+ * canonical views on behalf of a requesting edit part.
+ */
+public interface ICreationTargetStrategy {
+ /**
+ * A creation-target strategy that always returns the requesting host edit-part as the creation target.
+ */
+ ICreationTargetStrategy IDENTITY = new ICreationTargetStrategy() {
+
+ @Override
+ public EditPart getTargetEditPart(EditPart host, EObject element) {
+ return host;
+ }
+ };
+
+ /**
+ * Obtains the edit part to which the view creation request should be sent
+ * for the given model {@code element}, which was provided as a {@linkplain ISemanticChildrenStrategy semantic child} of the specified {@code host} edit-part.
+ *
+ * @param host
+ * the host edit-part of the {@link CanonicalEditPolicy} requesting creation of a view of an {@code element}
+ * @param element
+ * the element for which a view is required
+ *
+ * @return the target edit part, which may just be the {@code host} as is, or {@code null} if this strategy does not
+ * provide a target
+ */
+ EditPart getTargetEditPart(EditPart host, EObject element);
+
+ //
+ // Nested types
+ //
+
+ /**
+ * A factory for null-safe creation-target strategies.
+ */
+ class Safe implements ICreationTargetStrategy {
+ private final ICreationTargetStrategy delegate;
+
+ private Safe(ICreationTargetStrategy delegate) {
+ super();
+
+ this.delegate = delegate;
+ }
+
+ /**
+ * Obtains a creation-target strategy that is ensured never to return a {@code null} target edit part.
+ *
+ * @param strategy
+ * a strategy to wrap. May be {@code null} if no actual strategy is applicable
+ *
+ * @return a strategy, perhaps a wrapper or perhaps the original {@code strategy}, that is guaranteed always to provide a creation target
+ */
+ public static ICreationTargetStrategy safe(ICreationTargetStrategy strategy) {
+ return (strategy == null) ? IDENTITY : (strategy instanceof Safe) ? strategy : new Safe(strategy);
+ }
+
+ @Override
+ public EditPart getTargetEditPart(EditPart host, EObject element) {
+ EditPart specific = delegate.getTargetEditPart(host, element);
+ return (specific == null) ? host : specific;
+ }
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ISemanticChildrenStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ISemanticChildrenStrategy.java
new file mode 100644
index 00000000000..7e48536ee74
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ISemanticChildrenStrategy.java
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.notation.View;
+
+/**
+ * A pluggable strategy for determination of semantic "children" of an element, those being
+ * either contained elements, relationships of the element, or other related elements.
+ */
+public interface ISemanticChildrenStrategy {
+ /**
+ * Queries the semantic elements that should be presented visually as children of the specified element.
+ *
+ * @param semanticFromEditPart
+ * the semantic model element represented by a canonical edit-part in the diagram
+ * @param viewFromEditPart
+ * the visual (notational) representation of the semantic element, to provide diagram context if required (such as
+ * for determining the appropriate part-with-port match of a connector end)
+ * @return list of semantic elements, or {@code null} to indicate that the strategy does not support the given element.
+ * <b>Note</b> that the result is specifically a {@link List} type because the GMF {@link CanonicalEditPolicy} expects lists of children, not other kinds of collections
+ */
+ public List<? extends EObject> getCanonicalSemanticChildren(EObject semanticFromEditPart, View viewFromEditPart);
+
+ /**
+ * Queries the semantic elements that should be presented visually as connections attached to the specified element.
+ *
+ * @param semanticFromEditPart
+ * the semantic model element represented by a canonical edit-part in the diagram
+ * @param viewFromEditPart
+ * the visual (notational) representation of the semantic element, to provide diagram context if required (such as
+ * for determining the appropriate part-with-port match of a connector end)
+ * @return list of semantic connection elements, or {@code null} to indicate that the strategy does not support the given element.
+ * <b>Note</b> that the result is specifically a {@link List} type because the GMF {@link CanonicalEditPolicy} expects lists of children, not other kinds of collections
+ */
+ public List<? extends EObject> getCanonicalSemanticConnections(EObject semanticFromEditPart, View viewFromEditPart);
+
+ /**
+ * Retrieves objects, if any, related to the element behind a canonical edit-part
+ * on which the that element depends for canonical refresh updates.
+ *
+ * @return dependents of the semantic element, or {@code null} to indicate that it does not support dependents
+ */
+ public Collection<? extends EObject> getCanonicalDependents(EObject semanticFromEditPart);
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/IVisualChildrenStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/IVisualChildrenStrategy.java
new file mode 100644
index 00000000000..a23a05a67ce
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/IVisualChildrenStrategy.java
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import java.util.List;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.notation.View;
+
+/**
+ * A pluggable strategy for determination of visual "children" of an element, those being
+ * either child nodes or connected edges.
+ */
+public interface IVisualChildrenStrategy {
+ /**
+ * Queries the visual elements that are children a view that should be synchronized
+ * with the represented element's semantic "children".
+ *
+ * @param editPart
+ * the edit-part being synchronized
+ * @param view
+ * the edit-part's notation view
+ * @return a list of child views, or {@code null} to indicate that the strategy does not support the given edit-part.
+ * <b>Note</b> that the result is specifically a {@link List} type because the GMF {@link CanonicalEditPolicy} expects lists of views, not other kinds of collections
+ */
+ public List<? extends View> getCanonicalChildren(EditPart editPart, View view);
+
+ /**
+ * Queries the visual elements that are edges connected to a view that should be synchronized
+ * with the represented element's semantic "children" or "connections". The returned views may
+ * alternatively or also include child views of connected edges, in the case that those children
+ * (e.g., labels) are the significant representative views.
+ *
+ * @param editPart
+ * the edit-part being synchronized
+ * @param view
+ * the edit-part's notation view
+ * @return a list of connected edges (or some child views of connected edges), or {@code null} to indicate that the strategy does not support the given edit-part.
+ * <b>Note</b> that the result is specifically a {@link List} type because the GMF {@link CanonicalEditPolicy} expects lists of views, not other kinds of collections
+ */
+ public List<? extends View> getCanonicalEdges(EditPart editPart, View view);
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/Registration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/Registration.java
new file mode 100644
index 00000000000..8c257ebb672
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/Registration.java
@@ -0,0 +1,165 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionConverter;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator;
+import org.eclipse.papyrus.infra.gmfdiag.common.helper.NotationHelper;
+
+import com.google.common.base.Strings;
+
+/**
+ * Abstract implementation of an optionally filtered lazy-loading extension-point registration with priority ordering.
+ * Extensions compare in priority order (least priority is last).
+ */
+abstract class Registration<T, R extends Registration<? extends T, R>> implements Comparable<R> {
+
+ private static final String ENABLEMENT = "enablement"; //$NON-NLS-1$
+
+ private static final String CLASS = "class"; //$NON-NLS-1$
+
+ private static final String PRIORITY = "priority"; //$NON-NLS-1$
+
+ private final IConfigurationElement config;
+
+ private final Class<? extends T> extensionType;
+
+ private final int priority;
+
+ private final Expression filterExpression;
+
+ private T extension;
+
+ private IStatus extensionFailure;
+
+ protected Registration(IConfigurationElement config, Class<? extends T> extensionType) throws CoreException {
+ super();
+
+ this.config = config;
+ this.extensionType = extensionType;
+ this.filterExpression = parseExpression(config, ENABLEMENT);
+ this.priority = parseInt(config, PRIORITY);
+ }
+
+ /**
+ * Obtains the extension's priority relative to others that match the same filter criteria (if any).
+ */
+ public int getPriority() {
+ return priority;
+ }
+
+ @Override
+ public int compareTo(R o) {
+ return this.getPriority() - o.getPriority();
+ }
+
+ public boolean isApplicableTo(EditPart editPart) {
+ boolean result = !hasFilterExpression(); // In case there's no filter
+
+ if (!result) {
+ try {
+ IEvaluationContext context = new EvaluationContext(null, editPart);
+ View view = NotationHelper.findView(editPart);
+ if (view != null) {
+ EObject element = view.getElement();
+ if (element != null) {
+ context.addVariable("editPart", editPart); //$NON-NLS-1$
+ context.addVariable("view", view); //$NON-NLS-1$
+ context.addVariable("element", element); //$NON-NLS-1$
+ result = EvaluationResult.TRUE.equals(filterExpression.evaluate(context));
+ }
+ }
+ } catch (CoreException e) {
+ Activator.getDefault().getLog().log(e.getStatus());
+ }
+ }
+
+ return result;
+ }
+
+ protected boolean hasFilterExpression() {
+ return filterExpression != null;
+ }
+
+ protected final IConfigurationElement getConfigurationElement() {
+ return config;
+ }
+
+ /**
+ * Obtains the extension instance, creating it if necessary.
+ *
+ * @return the extension instance
+ */
+ public T getExtension() {
+ T result = extension;
+
+ if ((result == null) && (extensionFailure == null)) {
+ synchronized (this) {
+ try {
+ Object instance = config.createExecutableExtension(CLASS);
+ if (!extensionType.isInstance(instance)) {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Extension is not an instance of " + extensionType.getClass().getName())); //$NON-NLS-1$
+ }
+ if (extension == null) {
+ extension = extensionType.cast(instance);
+ }
+ } catch (CoreException e) {
+ extensionFailure = e.getStatus();
+ Activator.log.error("Failed to instantiate extension.", e); //$NON-NLS-1$
+ }
+
+ result = extension;
+ }
+ }
+
+ return result;
+ }
+
+ static int parseInt(IConfigurationElement config, String attribute) {
+ int result = 0;
+
+ String attrValue = config.getAttribute(attribute);
+ if (!Strings.isNullOrEmpty(attrValue)) {
+ try {
+ result = Integer.parseInt(attrValue);
+ } catch (Exception e) {
+ Activator.log.warn(String.format("Not an integer value in '%s' attribute of '%s' element from plug-in '%s': %s", //$NON-NLS-1$
+ attribute, config.getName(), config.getContributor().getName(), attrValue));
+ }
+ }
+
+ return result;
+ }
+
+ static Expression parseExpression(IConfigurationElement config, String elementName) throws CoreException {
+ Expression result = null;
+
+ IConfigurationElement[] enablement = config.getChildren(elementName);
+ if (enablement.length > 0) {
+ result = ExpressionConverter.getDefault().perform(enablement[0]);
+ }
+
+ return result;
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistration.java
new file mode 100644
index 00000000000..67e9af2b8b0
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistration.java
@@ -0,0 +1,27 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * Registration of an {@link ISemanticChildrenStrategy} on the extension point.
+ */
+class SemanticChildrenStrategyRegistration extends EditPartBasedRegistration<ISemanticChildrenStrategy, SemanticChildrenStrategyRegistration> {
+
+ public SemanticChildrenStrategyRegistration(IConfigurationElement config) throws CoreException {
+ super(config, ISemanticChildrenStrategy.class);
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistry.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistry.java
new file mode 100644
index 00000000000..d694c066b5b
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistry.java
@@ -0,0 +1,177 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, 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:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.gef.EditPart;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator;
+
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Ordering;
+
+/**
+ * This the registry of to get the class that can give info about childreen of an editpart. this is a singleton.
+ */
+public class SemanticChildrenStrategyRegistry {
+
+ private final List<SemanticChildrenStrategyRegistration> strategies;
+ private final Multimap<Class<?>, SemanticChildrenStrategyRegistration> strategiesByEditPart = ArrayListMultimap.create();
+ private final List<DefaultSemanticChildrenStrategyRegistration> defaultStrategies;
+ private final List<VisualChildrenStrategyRegistration> visualChildrenStrategies;
+ private final Multimap<Class<?>, VisualChildrenStrategyRegistration> visualChildrenStrategiesByEditPart = ArrayListMultimap.create();
+ private final List<CreationTargetStrategyRegistration> creationTargetStrategies;
+
+ private static SemanticChildrenStrategyRegistry INSTANCE = new SemanticChildrenStrategyRegistry();
+
+ public static SemanticChildrenStrategyRegistry getInstance() {
+ return INSTANCE;
+ }
+
+ private SemanticChildrenStrategyRegistry() {
+ super();
+
+ List<SemanticChildrenStrategyRegistration> strategies = Lists.newArrayList();
+ List<DefaultSemanticChildrenStrategyRegistration> defaultStrategies = Lists.newArrayListWithExpectedSize(1);
+ List<CreationTargetStrategyRegistration> creationTargetStrategies = Lists.newArrayList();
+ List<VisualChildrenStrategyRegistration> visualChildrenStrategies = Lists.newArrayList();
+
+ // Reading data from plugins
+ IConfigurationElement[] configElements = Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".strategies"); //$NON-NLS-1$
+ for (int i = 0; i < configElements.length; i++) {
+ IConfigurationElement config = configElements[i];
+
+ try {
+ switch (config.getName()) {
+ case "semanticChildrenStrategy": //$NON-NLS-1$
+ strategies.add(new SemanticChildrenStrategyRegistration(config));
+ break;
+ case "defaultSemanticChildrenStrategy": //$NON-NLS-1$
+ defaultStrategies.add(new DefaultSemanticChildrenStrategyRegistration(config));
+ break;
+ case "creationTargetStrategy": //$NON-NLS-1$
+ creationTargetStrategies.add(new CreationTargetStrategyRegistration(config));
+ break;
+ case "visualChildrenStrategy": //$NON-NLS-1$
+ visualChildrenStrategies.add(new VisualChildrenStrategyRegistration(config));
+ break;
+ default:
+ Activator.log.warn(String.format("Unrecognized configuration element <%s> from plug-in %s", config.getName(), config.getContributor().getName())); //$NON-NLS-1$
+ break;
+ }
+ } catch (Exception e) {
+ Activator.log.error("Error loading extension from plug-in " + config.getContributor().getName(), e); //$NON-NLS-1$
+ }
+ }
+
+ // Sort from highest to lowest priority
+ this.strategies = Ordering.natural().reverse().immutableSortedCopy(strategies);
+ this.defaultStrategies = Ordering.natural().reverse().immutableSortedCopy(defaultStrategies);
+ this.creationTargetStrategies = Ordering.natural().reverse().immutableSortedCopy(creationTargetStrategies);
+ this.visualChildrenStrategies = Ordering.natural().reverse().immutableSortedCopy(visualChildrenStrategies);
+ }
+
+ /**
+ * Queries the best semantic children strategy matching an {@code editPart}.
+ *
+ * @param editPart
+ * an edit part in a diagram
+ *
+ * @return the {@link ISemanticChildrenStrategy} or {@code null} if no applicable strategy is registered
+ */
+ public ISemanticChildrenStrategy getSemanticChildrenStrategy(EditPart editPart) {
+ ISemanticChildrenStrategy result = getStrategy(editPart, strategiesByEditPart, strategies);
+
+ if (result == null) {
+ // Look for a default.
+ for (DefaultSemanticChildrenStrategyRegistration next : defaultStrategies) {
+ if (next.isApplicableTo(editPart) && (next.getExtension() != null)) {
+ result = next.getExtension();
+ break;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private static <T, R extends EditPartBasedRegistration<T, R>> T getStrategy(EditPart editPart, Multimap<Class<?>, R> byEditPart, List<R> registrations) {
+ Class<?> key = editPart.getClass();
+ R reg = null;
+
+ if (!byEditPart.containsKey(key)) {
+ for (R next : registrations) {
+ if (next.matchesEditPartType(key)) {
+ // Add all of these
+ byEditPart.put(key, next);
+
+ // But only take the first matching
+ if ((reg == null) && next.isApplicableTo(editPart) && (next.getExtension() != null)) {
+ reg = next;
+ }
+ }
+ }
+ } else {
+ for (R next : byEditPart.get(key)) {
+ if (next.isApplicableTo(editPart) && (next.getExtension() != null)) {
+ reg = next;
+ break;
+ }
+ }
+ }
+
+ return (reg == null) ? null : reg.getExtension();
+ }
+
+ private static <T, R extends Registration<T, R>> T getStrategy(EditPart editPart, List<R> registrations) {
+ R reg = null;
+
+ for (R next : registrations) {
+ if (next.isApplicableTo(editPart)) {
+ reg = next;
+ break;
+ }
+ }
+
+ return (reg == null) ? null : reg.getExtension();
+ }
+
+ /**
+ * Queries the best creation target strategy matching an {@code editPart}.
+ *
+ * @param editPart
+ * an edit part in a diagram
+ *
+ * @return the {@link ICreationTargetStrategy} or {@code null} if no applicable strategy is registered
+ */
+ public ICreationTargetStrategy getCreationTargetStrategy(EditPart editPart) {
+ return getStrategy(editPart, creationTargetStrategies);
+ }
+
+ /**
+ * Queries the best visual children strategy matching an {@code editPart}.
+ *
+ * @param editPart
+ * an edit part in a diagram
+ *
+ * @return the {@link IVisualChildrenStrategy} or {@code null} if no applicable strategy is registered
+ */
+ public IVisualChildrenStrategy getVisualChildrenStrategy(EditPart editPart) {
+ return getStrategy(editPart, visualChildrenStrategiesByEditPart, visualChildrenStrategies);
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/VisualChildrenStrategyRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/VisualChildrenStrategyRegistration.java
new file mode 100644
index 00000000000..bd162a6e989
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/VisualChildrenStrategyRegistration.java
@@ -0,0 +1,26 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * Registration of an {@link IVisualChildrenStrategy} on the extension point.
+ */
+class VisualChildrenStrategyRegistration extends EditPartBasedRegistration<IVisualChildrenStrategy, VisualChildrenStrategyRegistration> {
+
+ public VisualChildrenStrategyRegistration(IConfigurationElement config) throws CoreException {
+ super(config, IVisualChildrenStrategy.class);
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/util/CommandTreeIterator.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/util/CommandTreeIterator.java
new file mode 100644
index 00000000000..3e2637de3bd
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/util/CommandTreeIterator.java
@@ -0,0 +1,203 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.commands.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.CommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.papyrus.commands.wrappers.EMFtoGEFCommandWrapper;
+import org.eclipse.papyrus.commands.wrappers.EMFtoGMFCommandWrapper;
+import org.eclipse.papyrus.commands.wrappers.GEFtoEMFCommandWrapper;
+import org.eclipse.papyrus.commands.wrappers.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.commands.wrappers.GMFtoGEFCommandWrapper;
+import org.eclipse.papyrus.commands.wrappers.OperationToGEFCommandWrapper;
+
+/**
+ * An iterator over the tree structure of EMF, GEF, and GMF commands that returns leaf commands of one or all of these kinds,
+ * with accounting for the various kinds of wrappers employed to intermix them. This iterator does not support the
+ * optional {@link Iterator#remove()} operation.
+ */
+public class CommandTreeIterator<C> implements Iterator<C> {
+ private final Class<C> type;
+
+ private Iterator<?> current;
+ private List<Iterator<?>> iterators = new ArrayList<Iterator<?>>();
+
+ private C preparedNext;
+ private boolean done;
+
+ private CommandTreeIterator(Object root, Class<C> type) {
+ super();
+
+ this.type = type;
+
+ root = unwrap(root);
+
+ if (isCompound(root)) {
+ pushIterator(root);
+ } else {
+ done = !prepareNext(root);
+ }
+ }
+
+ public static CommandTreeIterator<Command> iterateEMF(Object command) {
+ return iterate(command, Command.class);
+ }
+
+ public static CommandTreeIterator<org.eclipse.gef.commands.Command> iterateGEF(Object command) {
+ return iterate(command, org.eclipse.gef.commands.Command.class);
+ }
+
+ public static CommandTreeIterator<ICommand> iterateGMF(Object command) {
+ return iterate(command, ICommand.class);
+ }
+
+ public static CommandTreeIterator<?> iterate(Object command) {
+ return iterate(command, Object.class);
+ }
+
+ public static <C> CommandTreeIterator<C> iterate(Object command, Class<C> leafCommandType) {
+ return new CommandTreeIterator<C>(command, leafCommandType);
+ }
+
+ private boolean prepareNext(Object command) {
+ if (type.isInstance(command)) {
+ preparedNext = type.cast(command);
+ }
+
+ return preparedNext != null;
+ }
+
+ private Iterator<?> pushIterator(Object compoundCommand) {
+ if (current != null) {
+ iterators.add(current);
+ }
+ current = iterator(compoundCommand);
+ return current;
+ }
+
+ private Iterator<?> popIterator() {
+ if (iterators.isEmpty()) {
+ current = null;
+ done = true;
+ } else {
+ current = iterators.remove(iterators.size() - 1);
+ }
+
+ return current;
+ }
+
+ private Object internalNext() {
+ Object result = null;
+
+ while ((result == null) && (current != null)) {
+ if (current.hasNext()) {
+ Object next = unwrap(current.next());
+ if (isCompound(next)) {
+ // Dive into it
+ pushIterator(next);
+ } else {
+ // We have the next leaf
+ result = next;
+ }
+ } else {
+ popIterator();
+ }
+ }
+
+ return result;
+ }
+
+ public boolean hasNext() {
+ while (!done && (preparedNext == null)) {
+ Object next = internalNext();
+ if (type.isInstance(next)) {
+ preparedNext = type.cast(next);
+ }
+ }
+
+ return preparedNext != null;
+ }
+
+ public C next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+
+ C result = preparedNext;
+ preparedNext = null;
+ return result;
+ }
+
+ /**
+ * Remove is not supported.
+ */
+ public void remove() {
+ throw new UnsupportedOperationException("remove"); //$NON-NLS-1$
+ }
+
+ private Object unwrap(Object command) {
+ Object result = command;
+
+ if (command instanceof ICommandProxy) {
+ result = ((ICommandProxy) command).getICommand();
+ } else if (command instanceof CommandProxy) {
+ result = ((CommandProxy) command).getCommand();
+ } else if (result instanceof EMFtoGEFCommandWrapper) {
+ result = ((EMFtoGEFCommandWrapper) result).getEMFCommand();
+ } else if (result instanceof EMFtoGMFCommandWrapper) {
+ result = ((EMFtoGMFCommandWrapper) command).getEMFCommand();
+ } else if (result instanceof GEFtoEMFCommandWrapper) {
+ result = ((GEFtoEMFCommandWrapper) command).getGEFCommand();
+ } else if (result instanceof GMFtoEMFCommandWrapper) {
+ result = ((GMFtoEMFCommandWrapper) command).getGMFCommand();
+ } else if (result instanceof GMFtoGEFCommandWrapper) {
+ result = ((GMFtoGEFCommandWrapper) command).getGMFCommand();
+ } else if (result instanceof OperationToGEFCommandWrapper) {
+ result = ((OperationToGEFCommandWrapper) command).getOperation();
+ }
+
+ if (result != command) {
+ // Could be turtles all the way down
+ result = unwrap(result);
+ }
+
+ return result;
+ }
+
+ private boolean isCompound(Object command) {
+ return ((command instanceof CompoundCommand) || (command instanceof org.eclipse.gef.commands.CompoundCommand) || (command instanceof ICompositeCommand));
+ }
+
+ private Iterator<?> iterator(Object compoundCommand) {
+ if (compoundCommand instanceof CompoundCommand) {
+ return ((CompoundCommand) compoundCommand).getCommandList().iterator();
+ } else if (compoundCommand instanceof org.eclipse.gef.commands.CompoundCommand) {
+ return ((org.eclipse.gef.commands.CompoundCommand) compoundCommand).getCommands().iterator();
+ } else if (compoundCommand instanceof ICompositeCommand) {
+ return ((ICompositeCommand) compoundCommand).iterator();
+ } else {
+ return Collections.emptyList().iterator();
+ }
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/wrappers/GEFCommandWrapper.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/wrappers/GEFCommandWrapper.java
new file mode 100644
index 00000000000..43bc2f3f0cc
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/wrappers/GEFCommandWrapper.java
@@ -0,0 +1,117 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.commands.wrappers;
+
+import org.eclipse.gef.commands.Command;
+
+/**
+ * A general-purpose wrapper for GEF {@link Command}s.
+ */
+public class GEFCommandWrapper extends Command {
+ private Command wrapped;
+
+ /**
+ * Initializes me with my wrapped command.
+ *
+ * @param wrapped
+ * the command to wrap. I will {@linkplain Command#dispose() dispose} it when I am {@linkplain #dispose() disposed}
+ */
+ public GEFCommandWrapper(Command wrapped) {
+ super(wrapped.getLabel());
+ this.wrapped = wrapped;
+ }
+
+ /**
+ * Initializes me without a wrapped command, which {@linkplain #createCommand() creation} is deferred until later.
+ *
+ * @param label
+ * a label to present in the edit menu
+ */
+ public GEFCommandWrapper(String label) {
+ super(label);
+ }
+
+ /**
+ * Initializes me without a wrapped command, which {@linkplain #createCommand() creation} is deferred until later.
+ */
+ public GEFCommandWrapper() {
+ super();
+ }
+
+ @Override
+ public void dispose() {
+ if (wrapped != null) {
+ wrapped.dispose();
+ }
+ }
+
+ /**
+ * Obtains the wrapped command. If necessary, it will be {@linkplain #createCommand() created} on the fly.
+ *
+ * @return the wrapped command (not {@code null})
+ */
+ protected Command getCommand() {
+ if (wrapped == null) {
+ wrapped = createCommand();
+ }
+
+ return wrapped;
+ }
+
+ /**
+ * Must be overridden by subclasses that do not provide the wrapped command in the constructor, to create or
+ * otherwise obtain the wrapped command.
+ *
+ * @return the wrapped command (not {@code null})
+ */
+ protected Command createCommand() {
+ throw new UnsupportedOperationException("createCommand"); //$NON-NLS-1$
+ }
+
+ @Override
+ public boolean canExecute() {
+ return getCommand().canExecute();
+ }
+
+ @Override
+ public boolean canUndo() {
+ return getCommand().canUndo();
+ }
+
+ @Override
+ public boolean canRedo() {
+ return getCommand().canRedo();
+ }
+
+ @Override
+ public void execute() {
+ getCommand().execute();
+ }
+
+ @Override
+ public void undo() {
+ getCommand().undo();
+ }
+
+ @Override
+ public void redo() {
+ getCommand().redo();
+ }
+
+ @Override
+ public String toString() {
+ return String.format("Wrapped %s", wrapped);
+ }
+
+}
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 7594aa3a2ae..b5dddc1ef67 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
@@ -186,6 +186,13 @@
properties="isTextZone"
type="org.eclipse.swt.widgets.Shell">
</propertyTester>
+ <propertyTester
+ class="org.eclipse.papyrus.infra.gmfdiag.common.utils.EditPartPropertyTester"
+ id="org.eclipse.papyrus.infra.gmfdiag.common.editPartProperties"
+ namespace="org.eclipse.papyrus.infra.gmfdiag"
+ properties="hasEditPolicy"
+ type="org.eclipse.gef.EditPart">
+ </propertyTester>
</extension>
<extension
point="org.eclipse.ui.menus">
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/CommonDeferredCreateConnectionViewCommand.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/CommonDeferredCreateConnectionViewCommand.java
index 213a83e292d..dc38627a7a0 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/CommonDeferredCreateConnectionViewCommand.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/CommonDeferredCreateConnectionViewCommand.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2008 CEA LIST.
+ * Copyright (c) 2008, 2015 CEA LIST, Christian W. Damus, and others.
*
*
* All rights reserved. This program and the accompanying materials
@@ -10,6 +10,7 @@
* Contributors:
* Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr
+ * Christian W. Damus - bug 433206
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.common.commands;
@@ -180,7 +181,7 @@ public class CommonDeferredCreateConnectionViewCommand extends DeferredCreateCon
((View) (createRequest.getConnectionViewDescriptor().getAdapter(View.class))).setElement(element);
}
viewer = null;// for garbage collection
- return CommandResult.newOKCommandResult();
+ return CommandResult.newOKCommandResult(viewDescriptor);
}
public void setElement(EObject element) {
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/SetCanonicalCommand.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/SetCanonicalCommand.java
new file mode 100644
index 00000000000..ff66058f890
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/SetCanonicalCommand.java
@@ -0,0 +1,110 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.common.commands;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.notation.CanonicalStyle;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.Style;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IPapyrusCanonicalEditPolicy;
+import org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramEditPartsUtil;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * A command that sets the canonical synchronization state of an {@link EditPart}.
+ */
+public class SetCanonicalCommand extends AbstractTransactionalCommand {
+ private View view;
+ private boolean canonical;
+
+ public SetCanonicalCommand(TransactionalEditingDomain domain, View view, boolean canonical) {
+ super(domain, "Set Canonical", getWorkspaceFiles(view));
+
+ this.view = view;
+ this.canonical = canonical;
+ }
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ CommandResult result = null;
+
+ Iterable<EditPart> editParts = DiagramEditPartsUtil.findEditParts(view);
+ if (Iterables.isEmpty(editParts)) {
+ result = CommandResult.newErrorCommandResult("Notation view has no EditParts");
+ } else {
+ setCanonical(view, canonical);
+ refreshCanonical(editParts);
+ result = CommandResult.newOKCommandResult(canonical);
+ }
+
+ return result;
+ }
+
+ protected void setCanonical(View view, boolean canonical) {
+ CanonicalStyle style = (CanonicalStyle) view.getStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ if (style == null) {
+ style = (CanonicalStyle) view.createStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ }
+ style.setCanonical(canonical);
+ if (style.eContainer() == null) {
+ // It's a CSS-inferred style. Persist it
+ @SuppressWarnings("unchecked")
+ List<Style> styles = view.getStyles();
+ styles.add(style);
+ }
+ }
+
+ protected void refreshCanonical(Iterable<? extends EditPart> editParts) {
+ for (Iterator<? extends EditPart> all = DiagramEditPartsUtil.getAllContents(editParts); all.hasNext();) {
+ // Make sure that we record the creation of new views now for potential undo/redo
+ EditPolicy editPolicy = all.next().getEditPolicy(EditPolicyRoles.CANONICAL_ROLE);
+ if (editPolicy instanceof IPapyrusCanonicalEditPolicy) {
+ // Now it should be able to activate or deactivate
+ ((IPapyrusCanonicalEditPolicy) editPolicy).refreshActive();
+ }
+ }
+ }
+
+ @Override
+ protected IStatus doUndo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ IStatus result = super.doUndo(monitor, info);
+
+ refreshCanonical(DiagramEditPartsUtil.findEditParts(view));
+
+ return result;
+ }
+
+ @Override
+ protected IStatus doRedo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ IStatus result = super.doRedo(monitor, info);
+
+ refreshCanonical(DiagramEditPartsUtil.findEditParts(view));
+
+ return result;
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/requests/CanonicalDropObjectsRequest.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/requests/CanonicalDropObjectsRequest.java
new file mode 100644
index 00000000000..577576cbd57
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/commands/requests/CanonicalDropObjectsRequest.java
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.common.commands.requests;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest;
+
+/**
+ * A request to drop objects into an {@link EditPart} as canonical children,
+ * which is a "canonical drop".
+ */
+public class CanonicalDropObjectsRequest extends Request {
+ /** The request type for the "canonical drop" command. */
+ public static final String REQ_CANONICAL_DROP_OBJECTS = "org.eclipse.papyrus.CANONICAL_DROP_OBJECTS";
+
+ private final DropObjectsRequest dropRequest;
+
+ /**
+ * Initializes me with a {@code dropRequest} that I encapsulate as a "canonical drop".
+ *
+ * @param dropRequest
+ * the drop request to encapsulate
+ */
+ public CanonicalDropObjectsRequest(DropObjectsRequest dropRequest) {
+ super(REQ_CANONICAL_DROP_OBJECTS);
+
+ this.dropRequest = dropRequest;
+ }
+
+ /**
+ * Obtains the request that provides details of the "canonical drop".
+ * Edit policies may choose to forward this to other edit policies if they need to.
+ *
+ * @return the drop request
+ */
+ public final DropObjectsRequest getDropObjectsRequest() {
+ return dropRequest;
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpart/PapyrusDiagramEditPart.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpart/PapyrusDiagramEditPart.java
index 3e40deb3f32..653dab6f261 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpart/PapyrusDiagramEditPart.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpart/PapyrusDiagramEditPart.java
@@ -11,10 +11,16 @@
* Christian W. Damus (CEA) - support pluggable edit-part conflict detection (CDO)
* C�line Janssens (ALL4TEC) - Override getDragTracker with the PapyrusRubberbandDragTracker
* Christian W. Damus - bug 451230
+ * Christian W. Damus - bug 461629
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.common.editpart;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
+
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
@@ -23,12 +29,17 @@ import org.eclipse.gef.requests.SelectionRequest;
import org.eclipse.gef.tools.DeselectAllTracker;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.PapyrusPopupBarEditPolicy;
import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.XYLayoutWithConstrainedResizedEditPolicy;
import org.eclipse.papyrus.infra.gmfdiag.common.selection.PapyrusRubberbandDragTracker;
+import com.google.common.collect.Sets;
+
public class PapyrusDiagramEditPart extends DiagramEditPart {
+ // We store weak-referencing sets in the values
+ private static final Map<Diagram, Set<PapyrusDiagramEditPart>> diagrams = new WeakHashMap<Diagram, Set<PapyrusDiagramEditPart>>();
private IConflictingEditPartFilter conflictFilter = IConflictingEditPartFilter.DEFAULT;
@@ -39,6 +50,46 @@ public class PapyrusDiagramEditPart extends DiagramEditPart {
public PapyrusDiagramEditPart(View diagramView) {
super(diagramView);
+
+ register(diagramView, this);
+ }
+
+ private static void register(View diagramView, PapyrusDiagramEditPart editPart) {
+ if (diagramView instanceof Diagram) {
+ Diagram diagram = (Diagram) diagramView;
+
+ synchronized (diagrams) {
+ Set<PapyrusDiagramEditPart> diagramEditParts = diagrams.get(diagram);
+ if (diagramEditParts == null) {
+ // A weak-referencing set
+ diagramEditParts = Sets.newSetFromMap(new WeakHashMap<PapyrusDiagramEditPart, Boolean>());
+ diagrams.put(diagram, diagramEditParts);
+ }
+ diagramEditParts.add(editPart);
+ }
+ }
+ }
+
+ /**
+ * Obtains the edit-parts currently managing the specified {@code diagram} in editors.
+ *
+ * @param diagram
+ * a diagram (may be {@code null})
+ *
+ * @return the set of edit-parts for the diagram, or an empty set if none (such as when the {@code diagram} is {@code null})
+ */
+ public static Set<? extends DiagramEditPart> getDiagramEditPartsFor(Diagram diagram) {
+ Set<? extends PapyrusDiagramEditPart> result;
+
+ synchronized (diagrams) {
+ result = diagrams.get(diagram);
+ }
+
+ if (result == null) {
+ result = Collections.emptySet();
+ }
+
+ return result;
}
@Override
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpolicies/IPapyrusCanonicalEditPolicy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpolicies/IPapyrusCanonicalEditPolicy.java
new file mode 100644
index 00000000000..7aef2a23687
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/editpolicies/IPapyrusCanonicalEditPolicy.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.common.editpolicies;
+
+import org.eclipse.gef.EditPolicy;
+
+/**
+ * A mix-in interface for Papyrus implementations of the canonical edit policy that support conditional activation.
+ */
+public interface IPapyrusCanonicalEditPolicy {
+
+ /**
+ * Queries whether I am currently active.
+ *
+ * @return whether I am active
+ *
+ * @see EditPolicy#activate()
+ */
+ boolean isActive();
+
+ /**
+ * Refreshes my activation state, checking perhaps whether I need to be activated or deactivated according to
+ * my activation condition.
+ *
+ * @see #isActive()
+ * @see EditPolicy#activate()
+ * @see EditPolicy#deactivate()
+ */
+ void refreshActive();
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/helper/DiagramHelper.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/helper/DiagramHelper.java
index 67d36dab551..aa04586a4be 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/helper/DiagramHelper.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/helper/DiagramHelper.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,15 +8,23 @@
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ * Christian W. Damus - bug 461629
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.common.helper;
import java.util.Collections;
-import java.util.LinkedList;
import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer;
@@ -24,29 +32,75 @@ import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
import org.eclipse.papyrus.infra.core.utils.EditorUtils;
import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
+import org.eclipse.papyrus.infra.core.utils.TransactionHelper;
import org.eclipse.papyrus.infra.gmfdiag.common.Activator;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IPapyrusCanonicalEditPolicy;
+import org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramEditPartsUtil;
+import org.eclipse.papyrus.infra.tools.util.UIUtil;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.MapMaker;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListenableFutureTask;
+
public class DiagramHelper {
+ private static final AtomicBoolean refreshPending = new AtomicBoolean();
+
+ private static final ConcurrentMap<DiagramEditPart, Boolean> pendingDiagramRefresh = new MapMaker().concurrencyLevel(4).weakKeys().makeMap();
+
+ private static final Executor uiExecutor = UIUtil.createUIExecutor(Display.getDefault());
+
+ // Don't need weak values because the executor doesn't retain a reference to the domain
+ private static final LoadingCache<TransactionalEditingDomain, Executor> domainExecutors = CacheBuilder.newBuilder().weakKeys().build(new CacheLoader<TransactionalEditingDomain, Executor>() {
+ @Override
+ public Executor load(TransactionalEditingDomain domain) {
+ // Edit-parts will be asked to refresh, and they would do this in read-only transaction, which subsequently
+ // requires canonical edit policies invoked recursively to run unprotected transactions, breaking undo/redo
+ return TransactionHelper.createTransactionExecutor(domain, uiExecutor, TransactionHelper.mergeReadOnlyOption(true));
+ }
+ });
public static void refresh(EditPart editPart, boolean recursive) {
editPart.refresh();
+
+ // CSS styles may have altered canonical synchronization properties
+ refreshCanonical(editPart);
+
if (recursive) {
- for (EditPart childEditPart : (List<EditPart>) editPart.getChildren()) {
+ @SuppressWarnings("unchecked")
+ List<? extends EditPart> children = editPart.getChildren();
+ for (EditPart childEditPart : children) {
refresh(childEditPart, true);
}
}
}
+ private static void refreshCanonical(EditPart editPart) {
+ EditPolicy editPolicy = editPart.getEditPolicy(EditPolicyRoles.CANONICAL_ROLE);
+ if (editPolicy instanceof IPapyrusCanonicalEditPolicy) {
+ ((IPapyrusCanonicalEditPolicy) editPolicy).refreshActive();
+ }
+ }
+
public static void refresh(DiagramEditPart diagramEditPart, boolean recursive) {
+ setNeedsRefresh(diagramEditPart, false);
diagramEditPart.refresh();
if (recursive) {
- List<EditPart> childrenToRefresh = new LinkedList<EditPart>(diagramEditPart.getChildren());
+ // Defensive copy
+ @SuppressWarnings("unchecked")
+ List<EditPart> childrenToRefresh = ImmutableList.copyOf((List<? extends EditPart>) diagramEditPart.getChildren());
for (EditPart childEditPart : childrenToRefresh) {
refresh(childEditPart, true);
}
- List<EditPart> connectionsToRefresh = new LinkedList<EditPart>(diagramEditPart.getConnections());
+ // Defensive copy
+ @SuppressWarnings("unchecked")
+ List<EditPart> connectionsToRefresh = ImmutableList.copyOf((List<? extends EditPart>) diagramEditPart.getConnections());
for (EditPart childEditPart : connectionsToRefresh) {
refresh(childEditPart, true);
}
@@ -87,29 +141,188 @@ public class DiagramHelper {
}
}
- private static boolean needsRefresh = false;
+ /**
+ * Posts an asynchronous refresh that will aggregate all subsequent refresh requests until the
+ * refresh is actually performed.
+ *
+ * @see #forceRefresh(DiagramEditPart)
+ * @see #scheduleRefresh()
+ *
+ * @since 1.1
+ */
+ public static void scheduleRefresh(final DiagramEditPart diagram) {
+ if (setNeedsRefresh(diagram, true)) {
+ asyncExec(diagram, new Runnable() {
+
+ @Override
+ public void run() {
+ if (setNeedsRefresh(diagram, false) && diagram.isActive() && (diagram.getViewer() != null)) {
+ refresh(diagram, true);
+ }
+ }
+ });
+ }
+ }
+
+ private static boolean setNeedsRefresh(DiagramEditPart diagram, boolean refresh) {
+ if (refresh) {
+ return pendingDiagramRefresh.putIfAbsent(diagram, Boolean.TRUE) == null;
+ } else {
+ return pendingDiagramRefresh.remove(diagram, Boolean.TRUE);
+ }
+ }
+
+ private static Executor getExecutor(DiagramEditPart diagram) {
+ TransactionalEditingDomain domain = diagram.getEditingDomain();
+ return (domain != null) ? domainExecutors.getUnchecked(domain) : uiExecutor;
+ }
/**
- * Refreshes all opened diagrams
+ * Forces a asynchronous refresh of a {@code diagram}. Generally, an {@linkplain #scheduleRefresh(DiagramEditPart) asynchronous refresh} is preferred.
+ *
+ * @see #scheduleRefresh(DiagramEditPart)
+ *
+ * @since 1.1
*/
+ public static void forceRefresh(DiagramEditPart diagram) {
+ setNeedsRefresh(diagram, true);
+ refresh(diagram, true);
+ }
+
+ /**
+ * Refreshes all opened diagrams, if we currently {@link #setNeedsRefresh() need to}.
+ *
+ * @deprecated Use the {@link #scheduleRefresh()} or {@link #forceRefresh()} API, instead
+ *
+ * @see #setNeedsRefresh()
+ * @see #scheduleRefresh()
+ */
+ @Deprecated
public static void refreshDiagrams() {
- synchronized (DiagramHelper.class) {
- if (!needsRefresh) {
+ if (refreshPending.compareAndSet(true, false)) {
+ IMultiDiagramEditor[] editors = EditorUtils.getMultiDiagramEditors();
+ if (editors == null || editors.length < 1) {
return;
}
- needsRefresh = false;
+ for (IMultiDiagramEditor activeMultiEditor : editors) {
+ refresh(activeMultiEditor);
+ }
}
+ }
+
+ /**
+ * Indicates that diagrams are in need of refresh, to be performed later (perhaps asynchronously).
+ * Has no effect if the needs-refresh state is already set.
+ *
+ * @return whether the refresh state of the diagrams was changed by this call. A {@code false} result
+ * indicates that refresh was already pending
+ *
+ * @deprecated Use the {@link #scheduleRefresh()} or {@link #forceRefresh()} API, instead
+ *
+ * @see #scheduleRefresh()
+ * @see #refreshDiagrams()
+ */
+ @Deprecated
+ public static boolean setNeedsRefresh() {
+ return refreshPending.compareAndSet(false, true);
+ }
+
+ /**
+ * Posts an asynchronous refresh that will aggregate all subsequent refresh requests until the
+ * refresh is actually performed.
+ *
+ * @see #setNeedsRefresh()
+ * @see #refreshDiagrams()
+ *
+ * @since 1.1
+ */
+ public static void scheduleRefresh() {
+ if (setNeedsRefresh()) {
+ Display.getDefault().asyncExec(new Runnable() {
- IMultiDiagramEditor[] editors = EditorUtils.getMultiDiagramEditors();
- if (editors == null || editors.length < 1) {
- return;
+ @Override
+ public void run() {
+ refreshDiagrams();
+ }
+ });
}
- for (IMultiDiagramEditor activeMultiEditor : editors) {
- refresh(activeMultiEditor);
+ }
+
+ /**
+ * Forces a asynchronous refresh of all open diagrams. Generally, an {@linkplain #scheduleRefresh() asynchronous refresh} is preferred.
+ *
+ * @see #scheduleRefresh()
+ *
+ * @since 1.1
+ */
+ public static void forceRefresh() {
+ setNeedsRefresh();
+ refreshDiagrams();
+ }
+
+ /**
+ * Schedules a {@code task} for asynchronous execution in the {@code context} of a particular diagram.
+ *
+ * @param context
+ * the diagram context. Must not be {@code null}
+ * @param task
+ * the task to execute asynchronously
+ */
+ public static void asyncExec(DiagramEditPart context, Runnable task) {
+ getExecutor(context).execute(task);
+ }
+
+ /**
+ * Schedules a {@code task} for asynchronous execution in the {@code context} of an edit-part in a diagram.
+ *
+ * @param context
+ * the edit-part context. Must not be {@code null}
+ * @param task
+ * the task to execute asynchronously
+ */
+ public static void asyncExec(EditPart context, Runnable task) {
+ DiagramEditPart diagram = DiagramEditPartsUtil.getDiagramEditPart(context);
+ if (diagram != null) {
+ asyncExec(diagram, task);
+ } else {
+ uiExecutor.execute(task);
}
}
- public synchronized static void setNeedsRefresh() {
- needsRefresh = true;
+ /**
+ * Schedules a {@code task} for asynchronous execution in the {@code context} of a particular diagram.
+ *
+ * @param context
+ * the diagram context. Must not be {@code null}
+ * @param task
+ * the task to execute asynchronously
+ */
+ public static <V> ListenableFuture<V> submit(DiagramEditPart context, Callable<V> task) {
+ ListenableFutureTask<V> result = ListenableFutureTask.create(task);
+ getExecutor(context).execute(result);
+ return result;
+ }
+
+ /**
+ * Schedules a {@code task} for asynchronous execution in the {@code context} of an edit-part in a diagram.
+ *
+ * @param context
+ * the edit-part context. Must not be {@code null}
+ * @param task
+ * the task to execute asynchronously
+ */
+ public static <V> ListenableFuture<V> submit(EditPart context, Callable<V> task) {
+ ListenableFuture<V> result;
+ DiagramEditPart diagram = DiagramEditPartsUtil.getDiagramEditPart(context);
+
+ if (diagram != null) {
+ result = submit(diagram, task);
+ } else {
+ ListenableFutureTask<V> runnable = ListenableFutureTask.create(task);
+ uiExecutor.execute(runnable);
+ result = runnable;
+ }
+
+ return result;
}
}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java
index 8dcd08b33d0..eaa4756b8b7 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
*
* All rights reserved. This program and the accompanying materials
@@ -9,6 +9,7 @@
*
* Contributors:
* CEA LIST - Initial API and implementation
+ * Christian W. Damus - bug 433206
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.common.utils;
@@ -22,6 +23,8 @@ import java.util.List;
import java.util.NoSuchElementException;
import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.AbstractTreeIterator;
+import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
@@ -44,12 +47,14 @@ import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramGraphicalViewer;
import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramGraphicalViewer;
import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
+import org.eclipse.gmf.runtime.notation.CanonicalStyle;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusDiagramEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
import org.eclipse.papyrus.infra.tools.util.EditorHelper;
import org.eclipse.ui.IEditorPart;
@@ -58,16 +63,18 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
/**
* Different utility methods to manage and manipulate edit parts in diagrams.
*/
public class DiagramEditPartsUtil {
- protected DiagramEditPartsUtil() { // FIXME : protected instate of private for non regression purposes
- // should be removed as soon as org.eclipse.papyrus.uml.diagram.common.util.DiagramEditPartsUtil
- // is removed
+ protected DiagramEditPartsUtil() { // FIXME : protected instate of private for non regression purposes
+ // should be removed as soon as org.eclipse.papyrus.uml.diagram.common.util.DiagramEditPartsUtil
+ // is removed
// to prevent instanciation
}
@@ -297,7 +304,7 @@ public class DiagramEditPartsUtil {
}
return 1.0;
}
-
+
/** The Constant BelongToDiagramSource. */
// @unused
public static final String BelongToDiagramSource = "es.cv.gvcase.mdt.uml2.diagram.common.Belongs_To_This_Diagram";
@@ -596,6 +603,32 @@ public class DiagramEditPartsUtil {
}
/**
+ * Finds all of the {@link EditPart}s in currently open editors that present a given notation {@code view}.
+ *
+ * @param view
+ * a view that may be presented by zero or more open diagram editors
+ * @return all edit parts in all diagrams that currently present the {@code view} (so could be empty)
+ */
+ public static Iterable<EditPart> findEditParts(View view) {
+ List<EditPart> result;
+
+ Diagram diagram = view.getDiagram();
+ if (diagram == null) {
+ result = Collections.emptyList();
+ } else {
+ result = Lists.newArrayListWithExpectedSize(1);
+ for (Iterator<EditPart> iter = getAllContents(PapyrusDiagramEditPart.getDiagramEditPartsFor(diagram)); iter.hasNext();) {
+ EditPart next = iter.next();
+ if (next.getModel() == view) {
+ result.add(next);
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
* Finds the <EditPart>s for the <EObject>s in the selection.
*
* @param selection
@@ -801,5 +834,72 @@ public class DiagramEditPartsUtil {
}
return Collections.EMPTY_LIST;
}
-
+
+ public static TreeIterator<EditPart> getAllContents(EditPart editPart, boolean includeRoot) {
+ return internalGetAllContents(editPart, includeRoot);
+ }
+
+ public static TreeIterator<EditPart> getAllContents(Iterable<? extends EditPart> editParts) {
+ return internalGetAllContents(editParts, false);
+ }
+
+ private static final TreeIterator<EditPart> internalGetAllContents(final Object root, boolean includeRoot) {
+ return new AbstractTreeIterator<EditPart>(root, includeRoot) {
+ private static final long serialVersionUID = 1L;
+
+ // Let's do this instanceof check only once. And take a defensive copy, of course
+ @SuppressWarnings("unchecked")
+ private final Iterable<EditPart> rootCollection = root instanceof Iterable<?> ? (Iterable<EditPart>) root : null;
+
+ @Override
+ @SuppressWarnings("unchecked")
+ protected Iterator<? extends EditPart> getChildren(Object object) {
+ Iterator<? extends EditPart> result;
+
+ if (object == rootCollection) {
+ // Defensive copy
+ result = ImmutableList.copyOf(rootCollection).iterator();
+ } else {
+ // Defensive copy
+ ImmutableList.Builder<EditPart> copy = ImmutableList.builder();
+ EditPart editPart = (EditPart) object;
+ copy.addAll(editPart.getChildren());
+ if (editPart instanceof DiagramEditPart) {
+ // The view's edit-part registry is required to get connections
+ if (editPart.getViewer() != null) {
+ copy.addAll(((DiagramEditPart) editPart).getConnections());
+ }
+ }
+ result = copy.build().iterator();
+ }
+
+ return result;
+ }
+ };
+ }
+
+
+ /**
+ * Queries whether an {@code editPart} has canonical synchronization enabled.
+ *
+ * @param editPart
+ * an edit part
+ * @return whether it has canonical synchronization enabled
+ */
+ public static boolean isCanonical(EditPart editPart) {
+ boolean result = false;
+
+ if (editPart instanceof IGraphicalEditPart) {
+ View view = ((IGraphicalEditPart) editPart).getNotationView();
+ if (view != null) {
+ CanonicalStyle style = (CanonicalStyle) view.getStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ if (style != null) {
+ result = style.isCanonical();
+ }
+ }
+ }
+
+ return result;
+ }
+
}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/EditPartPropertyTester.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/EditPartPropertyTester.java
new file mode 100644
index 00000000000..ec462be563f
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/EditPartPropertyTester.java
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.common.utils;
+
+import static org.eclipse.papyrus.infra.tools.util.TypeUtils.as;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.gef.EditPart;
+
+/**
+ * A tester for core-expressions {@link EditPart} properties.
+ */
+public class EditPartPropertyTester extends PropertyTester {
+ public static final String PROPERTY_HAS_EDIT_POLICY = "hasEditPolicy"; //$NON-NLS-1$
+
+ public EditPartPropertyTester() {
+ super();
+ }
+
+ @Override
+ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+ boolean result = false;
+
+ if (PROPERTY_HAS_EDIT_POLICY.equals(property)) {
+ result = hasEditPolicy(as(receiver, EditPart.class), as(args, 0, String.class)) == defaultTrue(expectedValue);
+ }
+
+ return result;
+ }
+
+ private static boolean defaultTrue(Object value) {
+ return as(value, true);
+ }
+
+ static boolean hasEditPolicy(EditPart editPart, String role) {
+ return (editPart != null) && (role != null) && (editPart.getEditPolicy(role) != null);
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicy.java
index a937f01ccd1..77d12badcf8 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicy.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.dnd/src/org/eclipse/papyrus/infra/gmfdiag/dnd/policy/CustomizableDropEditPolicy.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2012, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.dnd.policy;
@@ -39,6 +40,7 @@ import org.eclipse.gmf.runtime.notation.Shape;
import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
import org.eclipse.papyrus.infra.gmfdiag.common.commands.DefaultActionHandler;
import org.eclipse.papyrus.infra.gmfdiag.common.commands.SelectAndExecuteCommand;
+import org.eclipse.papyrus.infra.gmfdiag.common.commands.requests.CanonicalDropObjectsRequest;
import org.eclipse.papyrus.infra.gmfdiag.dnd.Activator;
import org.eclipse.papyrus.infra.gmfdiag.dnd.strategy.DefaultDropStrategy;
import org.eclipse.papyrus.infra.gmfdiag.dnd.strategy.DropStrategy;
@@ -97,8 +99,13 @@ public class CustomizableDropEditPolicy extends DragDropEditPolicy {
command = getCustomCommand(request);
}
} else if (this.understands(request)) {
- // Add request
- command = getCreationCommand(request);
+ if (CanonicalDropObjectsRequest.REQ_CANONICAL_DROP_OBJECTS.equals(request.getType())) {
+ // Forward canonical drop to the default drop policy
+ command = getCanonicalDropObjectsCommand(request);
+ } else {
+ // Add request
+ command = getCreationCommand(request);
+ }
} else if (defaultCreationEditPolicy != null) {
// Creation request
if (defaultCreationEditPolicy.understandsRequest(request)) {
@@ -129,7 +136,8 @@ public class CustomizableDropEditPolicy extends DragDropEditPolicy {
}
protected boolean understands(Request request) {
- return org.eclipse.gef.RequestConstants.REQ_ADD.equals(request.getType());
+ return org.eclipse.gef.RequestConstants.REQ_ADD.equals(request.getType())
+ || CanonicalDropObjectsRequest.REQ_CANONICAL_DROP_OBJECTS.equals(request.getType());
}
protected boolean isCustomRequest(Request request) {
@@ -140,6 +148,16 @@ public class CustomizableDropEditPolicy extends DragDropEditPolicy {
return getCustomCommand(request);
}
+ protected Command getCanonicalDropObjectsCommand(Request request) {
+ Command result = null;
+
+ if ((defaultDropEditPolicy != null) && (request instanceof CanonicalDropObjectsRequest)) {
+ result = defaultDropEditPolicy.getCommand(((CanonicalDropObjectsRequest) request).getDropObjectsRequest());
+ }
+
+ return result;
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/plugin.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/plugin.xml
index 242db91c3c6..bf9cec982ff 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/plugin.xml
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/plugin.xml
@@ -374,6 +374,23 @@
</and>
</activeWhen>
</handler>
+ <handler
+ commandId="org.eclipse.papyrus.infra.gmfdiag.menu.toggleCanonical">
+ <activeWhen>
+ <iterate operator="and" ifEmpty="false">
+ <adapt
+ type="org.eclipse.gef.EditPart">
+ <test
+ property="org.eclipse.papyrus.infra.gmfdiag.hasEditPolicy"
+ args="Canonical">
+ </test>
+ </adapt>
+ </iterate>
+ </activeWhen>
+ <class
+ class="org.eclipse.papyrus.infra.gmfdiag.menu.handlers.ToggleCanonicalHandler">
+ </class>
+ </handler>
</extension>
<extension
point="org.eclipse.ui.commands">
@@ -411,6 +428,16 @@
id="org.eclipse.papyrus.uml.diagram.common.commands.DeleteFromDiagram"
name="Delete From Diagram Command">
</command>
+ <command
+ categoryId="org.eclipse.papyrus.editor.category"
+ description="Automatically synchronize contents with the underlying model elements"
+ id="org.eclipse.papyrus.infra.gmfdiag.menu.toggleCanonical"
+ name="Synchronized with Model">
+ <state
+ class="org.eclipse.papyrus.infra.gmfdiag.menu.handlers.CanonicalState"
+ id="org.eclipse.ui.commands.toggleState">
+ </state>
+ </command>
</extension>
<extension
point="org.eclipse.ui.bindings">
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/AbstractGraphicalCommandHandler.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/AbstractGraphicalCommandHandler.java
index e302579468d..4bb2e32b307 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/AbstractGraphicalCommandHandler.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/AbstractGraphicalCommandHandler.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2010, 2014 CEA LIST and others.
+ * Copyright (c) 2010, 2015 CEA LIST, Christian W. Damus, and others.
*
*
* All rights reserved. This program and the accompanying materials
@@ -12,6 +12,7 @@
* Christian W. Damus (CEA) - bug 430701
* Christian W. Damus (CEA) - bug 433320
* Gabriel Pascual (ALL4TEC) gabriel.pascual@all4tec.net - Bug 454891
+ * Christian W. Damus - bug 433206
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.menu.handlers;
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/CanonicalState.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/CanonicalState.java
new file mode 100644
index 00000000000..0efd3fa6e0a
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/CanonicalState.java
@@ -0,0 +1,91 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.menu.handlers;
+
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
+
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.jface.commands.ToggleState;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.infra.core.utils.AdapterUtils;
+import org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramEditPartsUtil;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * The canonical state of a command's selection.
+ */
+public class CanonicalState extends ToggleState implements ISelectionListener {
+
+ private ISelectionService selectionService = null;
+
+ private Reference<IGraphicalEditPart> selectedEditPart;
+
+ public CanonicalState() {
+ super();
+
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+
+ if (window != null) {
+ selectionService = window.getSelectionService();
+ if (selectionService != null) {
+ selectionService.addSelectionListener(this);
+ update(selectionService.getSelection());
+ }
+ }
+ }
+
+ @Override
+ public void dispose() {
+ if (selectionService != null) {
+ selectionService.removeSelectionListener(this);
+ }
+
+ super.dispose();
+ }
+
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ update(selection);
+ }
+
+ private void update(ISelection selection) {
+ // Default state is not canonical
+ boolean state = false;
+
+ selectedEditPart = null;
+
+ if (selection instanceof IStructuredSelection) {
+ IGraphicalEditPart editPart = AdapterUtils.adapt(((IStructuredSelection) selection).getFirstElement(), IGraphicalEditPart.class, null);
+ if (editPart != null) {
+ selectedEditPart = new WeakReference<IGraphicalEditPart>(editPart);
+ state = DiagramEditPartsUtil.isCanonical(editPart);
+ }
+ }
+
+ // Fires notification if changed from previous state
+ setValue(state);
+ }
+
+ // I am a computed value, actually
+ @Override
+ public Object getValue() {
+ IGraphicalEditPart editPart = (selectedEditPart == null) ? null : selectedEditPart.get();
+ return (editPart != null) ? DiagramEditPartsUtil.isCanonical(editPart) : super.getValue();
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/ToggleCanonicalHandler.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/ToggleCanonicalHandler.java
new file mode 100644
index 00000000000..281b76beea8
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.menu/src/org/eclipse/papyrus/infra/gmfdiag/menu/handlers/ToggleCanonicalHandler.java
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.menu.handlers;
+
+import static org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramEditPartsUtil.isCanonical;
+
+import java.util.Collection;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.UnexecutableCommand;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.papyrus.infra.gmfdiag.common.commands.SetCanonicalCommand;
+
+/**
+ * Handler for the toggle-canonical command.
+ */
+public class ToggleCanonicalHandler extends AbstractGraphicalCommandHandler {
+
+ public ToggleCanonicalHandler() {
+ super();
+ }
+
+ @Override
+ protected Command getCommand() {
+ Command result;
+ final Collection<? extends IGraphicalEditPart> selection = getSelectedElements();
+
+ if (selection.isEmpty()) {
+ result = UnexecutableCommand.INSTANCE;
+ } else {
+ ICommand command = new CompositeTransactionalCommand(getEditingDomain(), "Toggle Synchronize with Model");
+
+ for (final IGraphicalEditPart editPart : getSelectedElements()) {
+ if (editPart.getNotationView() != null) {
+ command = command.compose(new SetCanonicalCommand(getEditingDomain(), editPart.getNotationView(), !isCanonical(editPart)));
+ }
+ }
+
+ result = new ICommandProxy(command.reduce());
+ }
+
+ return result;
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF
index 40ff432ce8e..2ffe2cdaf3e 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF
@@ -22,7 +22,10 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.papyrus.uml.tools;bundle-version="1.1.0",
org.eclipse.papyrus.infra.services.labelprovider;bundle-version="1.1.0",
org.eclipse.papyrus.infra.gmfdiag.preferences;bundle-version="1.1.0",
- org.eclipse.papyrus.infra.viewpoints.policy;bundle-version="1.1.0"
+ org.eclipse.papyrus.infra.viewpoints.policy;bundle-version="1.1.0",
+ com.google.guava;bundle-version="11.0.0",
+ org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="1.1.0",
+ org.eclipse.papyrus.infra.gmfdiag.canonical;bundle-version="1.1.0"
Bundle-Vendor: %Bundle-Vendor
Bundle-ActivationPolicy: lazy
Bundle-Version: 1.1.0.qualifier
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/Environment.xmi b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/Environment.xmi
index 2f94e101562..430f9bfeabf 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/Environment.xmi
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/Environment.xmi
@@ -33,6 +33,9 @@
<modelElementFactories
name="Rulers And Grid Element Factory"
factoryClass="org.eclipse.papyrus.infra.gmfdiag.properties.modelelement.RulersAndGridModelElementFactory"/>
+ <modelElementFactories
+ name="GMF Synchronization Factory"
+ factoryClass="org.eclipse.papyrus.infra.gmfdiag.properties.modelelement.SynchronizationModelElementFactory"/>
<widgetTypes
label="DiagramPreferencesDefaultButton"
widgetClass="DiagramPreferencesDefaultButton"
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/synchronization.ctx b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/synchronization.ctx
new file mode 100644
index 00000000000..0b9b1edd0d5
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/synchronization.ctx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ASCII"?>
+<contexts:Context xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9" xmi:id="_SsfbQMElEeS_u7hIvAIReA" name="synchronization">
+ <tabs xmi:id="_SsfbQcElEeS_u7hIvAIReA" label="Appearance" id="appearance" category="org.eclipse.papyrus" priority="75">
+ <sections xmi:id="_SsgCV8ElEeS_u7hIvAIReA" name="Single CanonicalStyle" sectionFile="ui/SingleCanonicalStyle.xwt">
+ <widget href="ui/SingleCanonicalStyle.xwt#/"/>
+ </sections>
+ <sections xmi:id="_SsgpdsElEeS_u7hIvAIReA" name="Multiple CanonicalStyle" sectionFile="ui/MultipleCanonicalStyle.xwt">
+ <widget href="ui/MultipleCanonicalStyle.xwt#/"/>
+ </sections>
+ </tabs>
+ <views xmi:id="_Ssiem8ElEeS_u7hIvAIReA" name="Single CanonicalStyle" sections="_SsgCV8ElEeS_u7hIvAIReA" automaticContext="true" datacontexts="_SsmJGsElEeS_u7hIvAIReA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_SsienMElEeS_u7hIvAIReA" name="isSingleCanonicalStyle">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.gmfdiag.properties/model/Environment.xmi#//@constraintTypes.1"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_SsiencElEeS_u7hIvAIReA" name="editPolicy" value="Canonical"/>
+ </constraints>
+ </views>
+ <views xmi:id="_SskT2MElEeS_u7hIvAIReA" elementMultiplicity="-1" name="Multiple CanonicalStyle" sections="_SsgpdsElEeS_u7hIvAIReA" automaticContext="true" datacontexts="_SsmJGsElEeS_u7hIvAIReA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_SskT2cElEeS_u7hIvAIReA" name="isMultipleCanonicalStyle">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.gmfdiag.properties/model/Environment.xmi#//@constraintTypes.1"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_SskT2sElEeS_u7hIvAIReA" name="editPolicy" value="Canonical"/>
+ </constraints>
+ </views>
+ <dataContexts xmi:id="_SsmI-cElEeS_u7hIvAIReA" name="synchronization" label="synchronization">
+ <elements xmi:id="_SsmI-sElEeS_u7hIvAIReA" name="ImpliedStyle"/>
+ <elements xmi:id="_SsmJGsElEeS_u7hIvAIReA" name="CanonicalStyle" supertypes="_SsmI-sElEeS_u7hIvAIReA">
+ <properties xmi:id="_SsmJG8ElEeS_u7hIvAIReA" name="syncWithModel" label="Synchronize with model" type="Boolean" description="Whether the diagram view's contents are automatically synchronized with the model."/>
+ </elements>
+ <modelElementFactory href="ppe:/environment/org.eclipse.papyrus.infra.gmfdiag.properties/model/Environment.xmi#//@modelElementFactories.5"/>
+ </dataContexts>
+</contexts:Context>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/ui/MultipleCanonicalStyle.xwt b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/ui/MultipleCanonicalStyle.xwt
new file mode 100644
index 00000000000..b4c43a97557
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/ui/MultipleCanonicalStyle.xwt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.views.properties.widgets.layout"
+ xmlns:ppe="clr-namespace:org.eclipse.papyrus.views.properties.widgets"
+ xmlns:x="http://www.eclipse.org/xwt" xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:j="clr-namespace:java.lang">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Group text="Synchronization">
+ <Group.layout>
+ <ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
+ </Group.layout>
+ <ppe:BooleanRadio input="{Binding}"
+ property="synchronization:CanonicalStyle:syncWithModel" customLabel="Sync with model"></ppe:BooleanRadio>
+ </Group>
+</Composite> \ No newline at end of file
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/ui/SingleCanonicalStyle.xwt b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/ui/SingleCanonicalStyle.xwt
new file mode 100644
index 00000000000..65ddb8dab33
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/synchronization/ui/SingleCanonicalStyle.xwt
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:x="http://www.eclipse.org/xwt" xmlns:ppe="clr-namespace:org.eclipse.papyrus.views.properties.widgets"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.views.properties.widgets.layout"
+ xmlns:j="clr-namespace:java.lang">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <Group text="Synchronization">
+ <Group.layout>
+ <ppel:PropertiesLayout numColumns="2"></ppel:PropertiesLayout>
+ </Group.layout>
+ <ppe:BooleanRadio input="{Binding}"
+ property="synchronization:CanonicalStyle:syncWithModel" customLabel="Sync with model"></ppe:BooleanRadio>
+ </Group>
+</Composite> \ No newline at end of file
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/plugin.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/plugin.xml
index 821bcac39e2..7fae26889a7 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/plugin.xml
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/plugin.xml
@@ -10,6 +10,9 @@
<context
contextModel="model/notation/notation.ctx">
</context>
+ <context
+ contextModel="model/synchronization/synchronization.ctx">
+ </context>
</extension>
<extension
point="org.eclipse.papyrus.views.properties.environment">
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/constraint/HasEditPolicy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/constraint/HasEditPolicy.java
index 439b5c37baa..e8368db3517 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/constraint/HasEditPolicy.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/constraint/HasEditPolicy.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2011 CEA LIST.
+ * Copyright (c) 2011, 2015 CEA LIST, Christian W. Damus, and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
*
* Contributors:
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.properties.constraint;
@@ -16,6 +17,8 @@ import org.eclipse.papyrus.infra.constraints.SimpleConstraint;
import org.eclipse.papyrus.infra.constraints.constraints.AbstractConstraint;
import org.eclipse.papyrus.infra.constraints.constraints.Constraint;
+import com.google.common.base.Objects;
+
/**
*
* A constraint to test whether an object has the given EditPolicy or not
@@ -59,7 +62,7 @@ public class HasEditPolicy extends AbstractConstraint {
return false;
}
- return constraint instanceof HasEditPolicy && ((HasEditPolicy) constraint).editPolicyID == editPolicyID;
+ return constraint instanceof HasEditPolicy && Objects.equal(((HasEditPolicy) constraint).editPolicyID, editPolicyID);
}
}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/databinding/CanonicalObservableValue.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/databinding/CanonicalObservableValue.java
new file mode 100644
index 00000000000..74c45972252
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/databinding/CanonicalObservableValue.java
@@ -0,0 +1,125 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.properties.databinding;
+
+import org.eclipse.core.databinding.observable.Diffs;
+import org.eclipse.core.databinding.observable.IObservable;
+import org.eclipse.core.databinding.observable.IObserving;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.notation.CanonicalStyle;
+import org.eclipse.papyrus.commands.wrappers.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy.CanonicalStateListener;
+import org.eclipse.papyrus.infra.gmfdiag.common.commands.SetCanonicalCommand;
+import org.eclipse.papyrus.infra.gmfdiag.common.helper.NotationHelper;
+import org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramEditPartsUtil;
+import org.eclipse.papyrus.infra.gmfdiag.properties.modelelement.SynchronizationModelElement;
+import org.eclipse.papyrus.infra.tools.databinding.AggregatedObservable;
+import org.eclipse.papyrus.infra.tools.databinding.ReferenceCountedObservable;
+import org.eclipse.papyrus.uml.tools.databinding.AggregatedPapyrusObservableValue;
+import org.eclipse.papyrus.uml.tools.databinding.CommandBasedObservableValue;
+
+/**
+ * The observable boolean "canonical synchronization" state of an {@link EditPart}, as represented by
+ * a {@link SynchronizationModelElement}.
+ */
+public class CanonicalObservableValue extends ReferenceCountedObservable.Value implements CommandBasedObservableValue, AggregatedObservable, IObserving {
+ private TransactionalEditingDomain domain;
+ private EditPart editPart;
+ private boolean lastComputed;
+
+ private CanonicalStateListener canonicalStateListener;
+ private CanonicalStateListener.Handler refreshHandler;
+
+ public CanonicalObservableValue(TransactionalEditingDomain domain, EditPart editPart) {
+ super();
+
+ this.domain = domain;
+ this.editPart = editPart;
+
+ final Runnable update = new Runnable() {
+ public void run() {
+ boolean oldValue = lastComputed; // doGetValue updates this
+ fireValueChange(Diffs.createValueDiff(oldValue, doGetValue()));
+ }
+ };
+
+ if (editPart instanceof IGraphicalEditPart) {
+ IGraphicalEditPart graphical = (IGraphicalEditPart) editPart;
+ canonicalStateListener = CanonicalStateListener.getInstance(graphical);
+
+ refreshHandler = new CanonicalStateListener.Handler() {
+
+ public Runnable handleAdd(CanonicalStyle style) {
+ return update;
+ }
+
+ public Runnable handleRemove(CanonicalStyle style) {
+ return update;
+ }
+ };
+ canonicalStateListener.addCanonicalRefreshHandler(refreshHandler);
+ }
+ }
+
+ @Override
+ public synchronized void dispose() {
+ try {
+ if (canonicalStateListener != null) {
+ canonicalStateListener.removeCanonicalRefreshHandler(refreshHandler);
+ canonicalStateListener.release();
+ canonicalStateListener = null;
+ }
+ } finally {
+ super.dispose();
+ }
+ }
+
+ public Object getObserved() {
+ return editPart;
+ }
+
+ public Object getValueType() {
+ return Boolean.class;
+ }
+
+ @Override
+ protected Object doGetValue() {
+ boolean result = DiagramEditPartsUtil.isCanonical(editPart);
+ lastComputed = result;
+ return result;
+ }
+
+ @Override
+ protected void doSetValue(Object value) {
+ Command command = getCommand(value);
+ domain.getCommandStack().execute(command);
+ }
+
+ public Command getCommand(Object value) {
+ boolean canonical = (value instanceof Boolean) && ((Boolean) value).booleanValue();
+
+ return GMFtoEMFCommandWrapper.wrap(new SetCanonicalCommand(domain, NotationHelper.findView(editPart), canonical));
+ }
+
+ public AggregatedObservable aggregate(IObservable observable) {
+ return new AggregatedPapyrusObservableValue(domain, this, observable);
+ }
+
+ public boolean hasDifferentValues() {
+ return false; // Primitive component has only one value
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/SynchronizationModelElement.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/SynchronizationModelElement.java
new file mode 100644
index 00000000000..73e13cec874
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/SynchronizationModelElement.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.properties.modelelement;
+
+import org.eclipse.core.databinding.observable.IObservable;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.papyrus.infra.gmfdiag.properties.databinding.CanonicalObservableValue;
+import org.eclipse.papyrus.views.properties.modelelement.AbstractModelElement;
+
+/**
+ * An encapsulation of the synthetic synchronization-related properties of an {@link EditPart} in the diagrams.
+ */
+public class SynchronizationModelElement extends AbstractModelElement {
+ TransactionalEditingDomain domain;
+ EditPart editPart;
+
+ public SynchronizationModelElement(TransactionalEditingDomain domain, EditPart source) {
+ super();
+
+ this.domain = domain;
+ this.editPart = source;
+ }
+
+ @Override
+ protected IObservable doGetObservable(String propertyPath) {
+ IObservable result = null;
+
+ if (propertyPath.endsWith("syncWithModel")) {
+ result = new CanonicalObservableValue(domain, editPart);
+ }
+
+ return result;
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/SynchronizationModelElementFactory.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/SynchronizationModelElementFactory.java
new file mode 100644
index 00000000000..b6fba3be817
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/SynchronizationModelElementFactory.java
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus 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:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.properties.modelelement;
+
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.papyrus.infra.core.utils.AdapterUtils;
+import org.eclipse.papyrus.infra.gmfdiag.properties.Activator;
+import org.eclipse.papyrus.views.properties.contexts.DataContextElement;
+import org.eclipse.papyrus.views.properties.modelelement.AbstractModelElementFactory;
+
+/**
+ * Model-element factory for synthetic synchronization properties of GMF notation views.
+ */
+public class SynchronizationModelElementFactory extends AbstractModelElementFactory<SynchronizationModelElement> {
+ @Override
+ protected SynchronizationModelElement doCreateFromSource(Object sourceElement, DataContextElement context) {
+ SynchronizationModelElement result = null;
+ IGraphicalEditPart editPart = AdapterUtils.adapt(sourceElement, IGraphicalEditPart.class, null);
+
+ if (editPart == null) {
+ Activator.log.warn("The selected element cannot be resolved to a GEF EditPart");
+ } else {
+ result = new SynchronizationModelElement(editPart.getEditingDomain(), editPart);
+ }
+
+ return result;
+ }
+
+ @Override
+ protected void updateModelElement(SynchronizationModelElement modelElement, Object newSourceElement) {
+ IGraphicalEditPart editPart = AdapterUtils.adapt(newSourceElement, IGraphicalEditPart.class, null);
+ if (editPart == null) {
+ throw new IllegalArgumentException("Cannot resolve EditPart selection: " + newSourceElement);
+ }
+
+ modelElement.domain = editPart.getEditingDomain();
+ modelElement.editPart = editPart;
+ }
+}

Back to the top