[Layers] Update and correct missing custom code

Change-Id: I8407a2d4324c28bf63802938652d5dd5fe52ab0d
Signed-off-by: Quentin Le Menez <quentin.lemenez@cea.fr>
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorImpl.java
index 7ee5856..4ac4262 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomStackedLayerOperatorImpl.java
@@ -228,6 +228,26 @@
 	}
 
 	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorImpl#isDescriptorSet()
+	 *
+	 * @return
+	 */
+	@Override
+	public boolean isDescriptorSet() {
+		return getLayerOperatorDescriptor() != null;
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#isLayerEnabledInternal()
+	 *
+	 * @return
+	 */
+	@Override
+	public boolean isLayerEnabledInternal() {
+		return isLayerEnabled && isDescriptorSet();
+	}
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *
diff --git a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorImpl.java b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorImpl.java
index 2ec8246..d3da420 100755
--- a/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorImpl.java
+++ b/layers/plugins/org.eclipse.papyrus.infra.gmfdiag.layers.model/src/org/eclipse/papyrus/internal/infra/gmfdiag/layers/model/layers/impl/custom/CustomTopLayerOperatorImpl.java
@@ -13,13 +13,17 @@
 
 package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
 
+import static org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.Activator.log;
+
 import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.NotFoundException;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerExpression;
+import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayerOperatorDescriptor;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
 import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorImpl;
@@ -74,7 +78,7 @@
 		// TODO Check if we can optimize
 
 		// the result list
-		List<ComputePropertyValueCommand> resCmds = new ArrayList<ComputePropertyValueCommand>(properties.size());
+		List<ComputePropertyValueCommand> resCmds = new ArrayList<>(properties.size());
 		boolean isCmdFound = false;
 
 		for (Property property : properties) {
@@ -118,7 +122,7 @@
 		// TODO Check if we can optimize
 
 		// the result list
-		List<ComputePropertyValueCommand> resCmds = new ArrayList<ComputePropertyValueCommand>(views.size());
+		List<ComputePropertyValueCommand> resCmds = new ArrayList<>(views.size());
 		boolean isCmdFound = false;
 
 		for (View view : views) {
@@ -234,6 +238,56 @@
 	}
 
 	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerOperatorImpl#isDescriptorSet()
+	 *
+	 * @return
+	 */
+	@Override
+	public boolean isDescriptorSet() {
+		return getLayerOperatorDescriptor() != null;
+	}
+
+	/**
+	 * Reset the descriptor accordingly to the descriptor name.
+	 * The descriptor is resseted only if the ::application and ::layerOperatorDescriptorName are set.
+	 * Nothing is done if one of the attribute is not set.
+	 * Nothing is done if the descriptor can not be found (maybe a log is issue).
+	 * <!-- begin-user-doc -->
+	 * Not used ?
+	 * <!-- end-user-doc -->
+	 *
+	 */
+	@Override
+	public void resetDescriptor() {
+
+		if (getApplication() == null || getLayerOperatorDescriptorName() == null) {
+			// A property is not yet set.
+			// do nothing
+			return;
+		}
+
+		try {
+			LayerOperatorDescriptor descriptor = getApplication().getLayerOperatorDescriptorRegistry().getLayerOperatorDescriptor(getLayerOperatorDescriptorName());
+			setLayerOperatorDescriptor(descriptor);
+		} catch (NotFoundException e) {
+			// Not found
+			log.error(this.getClass().getName()
+					+ "- Can't get LayerOperatorDescriptor for descriptorName '" + getLayerOperatorDescriptorName() + "'.", e);
+		}
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#isLayerEnabledInternal()
+	 *
+	 * @return
+	 */
+	@Override
+	public boolean isLayerEnabledInternal() {
+		return isLayerEnabled && isDescriptorSet();
+	}
+
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 *