Updating to the new Sirius API.

Change-Id: Ia6fac5e789e55200bd9552d93d56a8da11a4c6fa
Signed-off-by: Boubekeur Zendagui <boubekeur.zendagui@obeo.fr>
diff --git a/portfolio/org.eclipse.egf.portfolio.genchain.ecoretools/src/org/eclipse/egf/portfolio/genchain/ecoretools/command/CreateNodeCommand.java b/portfolio/org.eclipse.egf.portfolio.genchain.ecoretools/src/org/eclipse/egf/portfolio/genchain/ecoretools/command/CreateNodeCommand.java
index f075e54..e69ff13 100644
--- a/portfolio/org.eclipse.egf.portfolio.genchain.ecoretools/src/org/eclipse/egf/portfolio/genchain/ecoretools/command/CreateNodeCommand.java
+++ b/portfolio/org.eclipse.egf.portfolio.genchain.ecoretools/src/org/eclipse/egf/portfolio/genchain/ecoretools/command/CreateNodeCommand.java
@@ -1,160 +1,162 @@
-/**

- * <copyright>

- * 

- * Copyright (c) 2014 Thales Corporate Services S.A.S.

- * 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:

- * Thales Corporate Services S.A.S - initial API and implementation

- * 

- * </copyright>

- */

-

-package org.eclipse.egf.portfolio.genchain.ecoretools.command;

-

-import java.util.ArrayList;

-import java.util.Collection;

-

-import org.eclipse.emf.common.util.BasicEList;

-import org.eclipse.emf.common.util.EList;

-import org.eclipse.emf.ecore.EObject;

-import org.eclipse.emf.transaction.RecordingCommand;

-import org.eclipse.emf.transaction.TransactionalEditingDomain;

-import org.eclipse.sirius.business.api.session.Session;

-import org.eclipse.sirius.common.tools.api.interpreter.EvaluationException;

-import org.eclipse.sirius.common.tools.api.interpreter.IInterpreter;

-import org.eclipse.sirius.diagram.AbstractDNode;

-import org.eclipse.sirius.diagram.DDiagram;

-import org.eclipse.sirius.diagram.DSemanticDiagram;

-import org.eclipse.sirius.diagram.DragAndDropTarget;

-import org.eclipse.sirius.diagram.business.api.componentization.DiagramMappingsManager;

-import org.eclipse.sirius.diagram.business.api.query.AbstractNodeMappingQuery;

-import org.eclipse.sirius.diagram.business.internal.componentization.mappings.DiagramMappingsManagerRegistryImpl;

-import org.eclipse.sirius.diagram.business.internal.experimental.sync.AbstractDNodeCandidate;

-import org.eclipse.sirius.diagram.business.internal.experimental.sync.DDiagramSynchronizer;

-import org.eclipse.sirius.diagram.description.AbstractNodeMapping;

-import org.eclipse.sirius.diagram.description.ContainerMapping;

-import org.eclipse.sirius.diagram.description.DiagramElementMapping;

-import org.eclipse.sirius.diagram.description.NodeMapping;

-import org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor;

-

-//import org.eclipse.sirius.business.internal.componentization.mappings.DiagramMappingsManagerRegistryImpl;

-//import org.eclipse.sirius.business.internal.experimental.sync.AbstractDNodeCandidate;

-//import org.eclipse.sirius.business.internal.experimental.sync.DDiagramSynchronizer;

-//import org.eclipse.sirius.business.api.componentization.DiagramMappingsManager;

-//import org.eclipse.sirius.business.api.query.AbstractNodeMappingQuery;

-

-/**

- * Recording command allowing to create a node in a diagram

- * 

- * @see CreateEdgeCommand

- * 

- * @author Boubekeur Zendagui

- */

-

-@SuppressWarnings("restriction")

-public class CreateNodeCommand extends RecordingCommand {

-

-	/** Command properties **/

-	private DDiagram _diagram;

-	private Session _session;

-	private AbstractNodeMapping _mapping;

-	private EObject _target;

-	

-	/** Internal properties **/

-	private DDiagramSynchronizer diagramSynchronizer;

-	private DiagramMappingsManager diagramMappingsManager;

-	private IInterpreter interpreter;

-	private ModelAccessor modelAccessor;

-	

-	/**

-	 * Default constructor

-	 * @param session used {@link Session} to create representations

-	 * @param diagram {@link DDiagram} wherein the node will be created

-	 * @param mapping an {@link AbstractNodeMapping} used to create the node

-	 * @param target semantic element

-	 */

-	public CreateNodeCommand(Session session, DDiagram diagram, AbstractNodeMapping mapping, EObject target ) {

-		this(session.getTransactionalEditingDomain());

-		this._diagram = diagram;

-		this._session = session;

-		this._mapping = mapping;

-		this._target = target;

-		/* This properties are set as class properties because they are used in a recursive method #createOneNode().

-		 * This allows to control created instance number. */

-		this.interpreter = _session.getInterpreter();

-		this.diagramSynchronizer = new DDiagramSynchronizer(this.interpreter, _diagram.getDescription(), _session.getModelAccessor());

-		this.diagramSynchronizer.setDiagram((DSemanticDiagram)_diagram);

-		this.diagramMappingsManager = DiagramMappingsManagerRegistryImpl.INSTANCE.getDiagramMappingsManager(_session, _diagram);

-		this.modelAccessor = _session.getModelAccessor();

-	}

-	

-	/**

-	 * Hidden constructor

-	 * @param domain {@link TransactionalEditingDomain}

-	 */

-	private CreateNodeCommand(TransactionalEditingDomain domain) {

-		super(domain);

-	}

-

-	@Override

-	protected void doExecute() {

-		AbstractNodeMappingQuery abstractNodeMappingQuery = new AbstractNodeMappingQuery(_mapping);

-		boolean preCondition = abstractNodeMappingQuery.evaluatePrecondition((DSemanticDiagram)_diagram, _diagram, interpreter, _target);

-		if (preCondition)

-		{

-			createNodeAndItChildrenNodes(_target, _mapping, _diagram);

-		}

-	}

-	

-	

-	/**

-	 * Create node and its sub nodes if there is sub mappings defined in it description 

-	 * @param nodeMapping current {@link AbstractNodeMapping} which can be a {@link NodeMapping} or a {@link ContainerMapping}

-	 * @param semantic current root semantic element

-	 * @param parent a {@link DragAndDropTarget} element wherein the node will be created

-	 */

-	private void createNodeAndItChildrenNodes(EObject semantic, AbstractNodeMapping nodeMapping, DragAndDropTarget parent){

-		// create concerned node

-		AbstractDNode parentNode = createOneNode(semantic, nodeMapping, parent);

-		

-		// create it sub nodes

-		EList<AbstractNodeMapping> childrenNodeMapping = new BasicEList<AbstractNodeMapping>();

-		for (DiagramElementMapping iDiagramElementMapping : nodeMapping.getAllMappings())

-		{

-			if (iDiagramElementMapping instanceof AbstractNodeMapping)

-				childrenNodeMapping.add((AbstractNodeMapping) iDiagramElementMapping);

-		}

-		

-		for (AbstractNodeMapping childNodeMapping : childrenNodeMapping) 

-		{

-			Collection<EObject> candidatesSemanticChildren = new ArrayList<EObject>();

-			try {

-				candidatesSemanticChildren = interpreter.evaluateCollection(semantic, childNodeMapping.getSemanticCandidatesExpression());

-			} catch (EvaluationException e) {

-				e.printStackTrace();

-			}

-

-			for (EObject childSemantic : candidatesSemanticChildren) 

-			{

-				if (modelAccessor.eInstanceOf(childSemantic, childNodeMapping.getDomainClass()))

-					createNodeAndItChildrenNodes(childSemantic, childNodeMapping, (DragAndDropTarget) parentNode);

-			}

-		}

-	}

-

-	/**

-	 * Create one node in the current {@link DDiagram}

-	 * @param mapping {@link AbstractNodeMapping} describing the node to create

-	 * @param target {@link EObject} used to create the node

-	 * @param parent a {@link DragAndDropTarget} element wherein the node will be created

-	 */

-	private AbstractDNode createOneNode(EObject target, AbstractNodeMapping mapping, DragAndDropTarget parent){

-		final AbstractDNodeCandidate abstractDNodeCandidate = new AbstractDNodeCandidate(mapping, target, parent, null); 

-		return diagramSynchronizer.getElementSynchronizer().createNewNode(diagramMappingsManager, abstractDNodeCandidate, false);

-	}

-

-}

+/**
+ * <copyright>
+ * 
+ * Copyright (c) 2014 Thales Corporate Services S.A.S.
+ * 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:
+ * Thales Corporate Services S.A.S - initial API and implementation
+ * 
+ * </copyright>
+ */
+
+package org.eclipse.egf.portfolio.genchain.ecoretools.command;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.sirius.common.tools.api.interpreter.EvaluationException;
+import org.eclipse.sirius.common.tools.api.interpreter.IInterpreter;
+import org.eclipse.sirius.common.tools.api.util.RefreshIdsHolder;
+import org.eclipse.sirius.diagram.AbstractDNode;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DSemanticDiagram;
+import org.eclipse.sirius.diagram.DragAndDropTarget;
+import org.eclipse.sirius.diagram.business.api.componentization.DiagramMappingsManager;
+import org.eclipse.sirius.diagram.business.api.query.AbstractNodeMappingQuery;
+import org.eclipse.sirius.diagram.business.internal.componentization.mappings.DiagramMappingsManagerRegistryImpl;
+import org.eclipse.sirius.diagram.business.internal.experimental.sync.AbstractDNodeCandidate;
+import org.eclipse.sirius.diagram.business.internal.experimental.sync.DDiagramSynchronizer;
+import org.eclipse.sirius.diagram.description.AbstractNodeMapping;
+import org.eclipse.sirius.diagram.description.ContainerMapping;
+import org.eclipse.sirius.diagram.description.DiagramElementMapping;
+import org.eclipse.sirius.diagram.description.NodeMapping;
+import org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor;
+
+//import org.eclipse.sirius.business.internal.componentization.mappings.DiagramMappingsManagerRegistryImpl;
+//import org.eclipse.sirius.business.internal.experimental.sync.AbstractDNodeCandidate;
+//import org.eclipse.sirius.business.internal.experimental.sync.DDiagramSynchronizer;
+//import org.eclipse.sirius.business.api.componentization.DiagramMappingsManager;
+//import org.eclipse.sirius.business.api.query.AbstractNodeMappingQuery;
+
+/**
+ * Recording command allowing to create a node in a diagram
+ * 
+ * @see CreateEdgeCommand
+ * 
+ * @author Boubekeur Zendagui
+ */
+
+@SuppressWarnings("restriction")
+public class CreateNodeCommand extends RecordingCommand {
+
+	/** Command properties **/
+	private DDiagram _diagram;
+	private Session _session;
+	private AbstractNodeMapping _mapping;
+	private EObject _target;
+	
+	/** Internal properties **/
+	private DDiagramSynchronizer diagramSynchronizer;
+	private DiagramMappingsManager diagramMappingsManager;
+	private IInterpreter interpreter;
+	private ModelAccessor modelAccessor;
+	
+	/**
+	 * Default constructor
+	 * @param session used {@link Session} to create representations
+	 * @param diagram {@link DDiagram} wherein the node will be created
+	 * @param mapping an {@link AbstractNodeMapping} used to create the node
+	 * @param target semantic element
+	 */
+	public CreateNodeCommand(Session session, DDiagram diagram, AbstractNodeMapping mapping, EObject target ) {
+		this(session.getTransactionalEditingDomain());
+		this._diagram = diagram;
+		this._session = session;
+		this._mapping = mapping;
+		this._target = target;
+		/* This properties are set as class properties because they are used in a recursive method #createOneNode().
+		 * This allows to control created instance number. */
+		this.interpreter = _session.getInterpreter();
+		this.diagramSynchronizer = new DDiagramSynchronizer(this.interpreter, _diagram.getDescription(), _session.getModelAccessor());
+		this.diagramSynchronizer.setDiagram((DSemanticDiagram)_diagram);
+		this.diagramMappingsManager = DiagramMappingsManagerRegistryImpl.INSTANCE.getDiagramMappingsManager(_session, _diagram);
+		this.modelAccessor = _session.getModelAccessor();
+	}
+	
+	/**
+	 * Hidden constructor
+	 * @param domain {@link TransactionalEditingDomain}
+	 */
+	private CreateNodeCommand(TransactionalEditingDomain domain) {
+		super(domain);
+	}
+
+	@Override
+	protected void doExecute() {
+		AbstractNodeMappingQuery abstractNodeMappingQuery = new AbstractNodeMappingQuery(_mapping);
+		boolean preCondition = abstractNodeMappingQuery.evaluatePrecondition((DSemanticDiagram)_diagram, _diagram, interpreter, _target);
+		if (preCondition)
+		{
+			createNodeAndItChildrenNodes(_target, _mapping, _diagram);
+		}
+	}
+	
+	
+	/**
+	 * Create node and its sub nodes if there is sub mappings defined in it description 
+	 * @param nodeMapping current {@link AbstractNodeMapping} which can be a {@link NodeMapping} or a {@link ContainerMapping}
+	 * @param semantic current root semantic element
+	 * @param parent a {@link DragAndDropTarget} element wherein the node will be created
+	 */
+	private void createNodeAndItChildrenNodes(EObject semantic, AbstractNodeMapping nodeMapping, DragAndDropTarget parent){
+		// create concerned node
+		AbstractDNode parentNode = createOneNode(semantic, nodeMapping, parent);
+		
+		// create it sub nodes
+		EList<AbstractNodeMapping> childrenNodeMapping = new BasicEList<AbstractNodeMapping>();
+		for (DiagramElementMapping iDiagramElementMapping : nodeMapping.getAllMappings())
+		{
+			if (iDiagramElementMapping instanceof AbstractNodeMapping)
+				childrenNodeMapping.add((AbstractNodeMapping) iDiagramElementMapping);
+		}
+		
+		for (AbstractNodeMapping childNodeMapping : childrenNodeMapping) 
+		{
+			Collection<EObject> candidatesSemanticChildren = new ArrayList<EObject>();
+			try {
+				candidatesSemanticChildren = interpreter.evaluateCollection(semantic, childNodeMapping.getSemanticCandidatesExpression());
+			} catch (EvaluationException e) {
+				e.printStackTrace();
+			}
+
+			for (EObject childSemantic : candidatesSemanticChildren) 
+			{
+				if (modelAccessor.eInstanceOf(childSemantic, childNodeMapping.getDomainClass()))
+					createNodeAndItChildrenNodes(childSemantic, childNodeMapping, (DragAndDropTarget) parentNode);
+			}
+		}
+	}
+
+	/**
+	 * Create one node in the current {@link DDiagram}
+	 * @param mapping {@link AbstractNodeMapping} describing the node to create
+	 * @param target {@link EObject} used to create the node
+	 * @param parent a {@link DragAndDropTarget} element wherein the node will be created
+	 */
+	private AbstractDNode createOneNode(EObject target, AbstractNodeMapping mapping, DragAndDropTarget parent){
+		RefreshIdsHolder refreshIdsHolder = new RefreshIdsHolder();
+		final AbstractDNodeCandidate abstractDNodeCandidate = new AbstractDNodeCandidate(mapping, target, parent, refreshIdsHolder); 
+		return diagramSynchronizer.getElementSynchronizer().createNewNode(diagramMappingsManager, abstractDNodeCandidate, false);
+	}
+
+}