[Layers] Add a new delete Properties menu

Change-Id: I79849c51b7ccd59085c7dcb6a5686d92be2b628b
Signed-off-by: Quentin Le Menez <quentin.lemenez@cea.fr>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/plugin.xml b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/plugin.xml
index 80084a9..01d7981 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/plugin.xml
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/plugin.xml
@@ -23,8 +23,12 @@
             name="Detach LayerStack">
       </command>
       <command
-            id="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.delete"
-            name="Delete">
+            id="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.deleteLayer"
+            name="Delete Layer">
+      </command>
+      <command
+            id="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.deleteProperty"
+            name="Delete Property">
       </command>
       <command
             id="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.createlayer"
@@ -60,7 +64,6 @@
       </command>
    </extension>
    <extension
-         name="Layers"
          point="org.eclipse.ui.handlers">
       <handler
             class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.commands.AttachLayerStackCommand"
@@ -88,7 +91,11 @@
       </handler>
       <handler
             class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.handlers.DeleteItemHandler"
-            commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.delete">
+            commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.deleteLayer">
+      </handler>
+      <handler
+            class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.handlers.DeleteItemHandler"
+            commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.deleteProperty">
       </handler>
       <handler
             class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.handlers.OpenLayerExplorerHandler"
@@ -114,10 +121,10 @@
          <menu
                label="Layers">
             <command
-                  commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.attachLayerStack"
-                  label="Attach Layer Stack"
+                  commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.openlayersexplorerview"
+                  label="Open Layers Explorer"
                   style="push"
-                  tooltip="Attach a Layer Stack to the diagram">
+                  tooltip="Open the Layers Explorer View">
             </command>
             <command
                   commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.detachLayerStack"
@@ -126,10 +133,10 @@
                   tooltip="Detach a Layer Stack to the diagram">
             </command>
             <command
-                  commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.openlayersexplorerview"
-                  label="Open Layers Explorer"
+                  commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.attachLayerStack"
+                  label="Attach Layer Stack"
                   style="push"
-                  tooltip="Open the Layers Explorer View">
+                  tooltip="Attach a Layer Stack to the diagram">
             </command>
          </menu>
       </menuContribution>
@@ -213,11 +220,11 @@
             </visibleWhen>
          </command>
          <command
-               commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.delete"
+               commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.deleteLayer"
                icon="IMG_TOOL_DELETE"
-               label="Delete"
+               label="Delete Layer"
                style="push"
-               tooltip="Delete Selected Item from the Layer Explorer">
+               tooltip="Delete Selected Layer from the Layer Explorer">
             <visibleWhen
                   checkEnabled="false">
                <and>
@@ -232,6 +239,26 @@
                </and>
             </visibleWhen>
          </command>
+         <command
+               commandId="org.eclipse.papyrus.infra.gmfdiag.layers.ui.commands.deleteProperty"
+               icon="IMG_TOOL_DELETE"
+               label="Delete Property"
+               style="push"
+               tooltip="Delete Selected Property from the Layer Explorer">
+            <visibleWhen
+                  checkEnabled="false">
+               <and>
+                  <with
+                        variable="selection">
+                     <test
+                           forcePluginActivation="true"
+                           property="org.eclipse.papyrus.infra.gmfdiag.layers.ui.tester.canDeleteProperty"
+                           value="true">
+                     </test>
+                  </with>
+               </and>
+            </visibleWhen>
+         </command>
          <separator
                name="endseparator"
                visible="false">
@@ -275,7 +302,7 @@
           class="org.eclipse.papyrus.internal.infra.gmfdiag.layers.ui.utils.LayersWidgetPropertyTester"
           id="org.eclipse.papyrus.infra.gmfdiag.layers.ui.tester"
           namespace="org.eclipse.papyrus.infra.gmfdiag.layers.ui.tester"
-          properties="canCreateLayer, canAttachProperties, canAttachCSS, canAttachCSSHide, canAttachViews, canDeleteLayer"
+          properties="canCreateLayer, canAttachProperties, canAttachCSS, canAttachCSSHide, canAttachViews, canDeleteLayer, canDeleteProperty"
           type="org.eclipse.jface.viewers.IStructuredSelection">
     </propertyTester>
     </extension>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/utils/LayersWidgetPropertyTester.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/utils/LayersWidgetPropertyTester.java
index e6a4ce6..b1c8186 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/utils/LayersWidgetPropertyTester.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.ui/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/ui/utils/LayersWidgetPropertyTester.java
@@ -17,6 +17,7 @@
 import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Layer;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TopLayerOperator;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance;
 
 /**
  * @author Quentin Le Menez
@@ -30,6 +31,8 @@
 
 	private static final String CAN_ATTACH_PROPERTIES = "canAttachProperties"; //$NON-NLS-1$
 
+	private static final String CAN_DELETE_PROPERTY = "canDeleteProperty"; //$NON-NLS-1$
+
 	private static final String CAN_ATTACH_CSS = "canAttachCSS"; //$NON-NLS-1$
 
 	private static final String CAN_ATTACH_CSS_HIDE = "canAttachCSSHide"; //$NON-NLS-1$
@@ -50,7 +53,10 @@
 	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
 
 		// TODO these cases should be handled better, e.g. directly through the plugin.xml filters
-		if (CAN_ATTACH_PROPERTIES.equals(property)) {
+		if (CAN_CREATE_LAYER.equals(property)) {
+			return stackMenu(receiver);
+		} 
+		else if (CAN_ATTACH_PROPERTIES.equals(property)) {
 			return layerMenu(receiver);
 		} else if (CAN_ATTACH_CSS.equals(property)) {
 			return layerMenu(receiver);
@@ -58,10 +64,11 @@
 			return layerMenu(receiver);
 		} else if (CAN_ATTACH_VIEWS.equals(property)) {
 			return layerMenu(receiver);
-		} else if (CAN_CREATE_LAYER.equals(property)) {
-			return stackMenu(receiver);
-		} else if (CAN_DELETE_LAYER.equals(property)) {
+		} else  if (CAN_DELETE_LAYER.equals(property)) {
 			return layerMenu(receiver);
+		} 
+		else if (CAN_DELETE_PROPERTY.equals(property)) {
+			return propertyMenu(receiver);
 		}
 
 		// the menu is not one of the above and should be added to the list if necessary
@@ -78,6 +85,16 @@
 		}
 		return false;
 	}
+	
+	private boolean propertyMenu(Object receiver) {
+		if (receiver instanceof TreeSelection) {
+			TreeSelection ts = (TreeSelection) receiver;
+			if (ts.getFirstElement() instanceof TypeInstance) {
+				return true;
+			}
+		}
+		return false;
+	}
 
 	private boolean stackMenu(Object receiver) {
 		if (receiver instanceof TreeSelection) {