-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.diagram.synchronization.graph;\r
-\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.utils.OrderedSetUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.diagram.content.ConnectionUtil;\r
-import org.simantics.diagram.stubs.DiagramResource;\r
-import org.simantics.diagram.synchronization.CopyAdvisor;\r
-import org.simantics.diagram.synchronization.IModifiableSynchronizationContext;\r
-import org.simantics.diagram.synchronization.ModificationAdapter;\r
-import org.simantics.diagram.synchronization.SynchronizationHints;\r
-import org.simantics.diagram.synchronization.graph.layer.GraphLayerManager;\r
-import org.simantics.diagram.ui.DiagramModelHints;\r
-import org.simantics.g2d.diagram.DiagramHints;\r
-import org.simantics.g2d.diagram.DiagramMutator;\r
-import org.simantics.g2d.diagram.IDiagram;\r
-import org.simantics.g2d.element.ElementHints;\r
-import org.simantics.g2d.element.ElementUtils;\r
-import org.simantics.g2d.element.IElement;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.structural.stubs.StructuralResource2;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class AddConnection extends ModificationAdapter {\r
-\r
- IModifiableSynchronizationContext context;\r
- IDiagram diagram;\r
- Resource diagramResource;\r
- IElement element;\r
- Resource copyOf;\r
- Resource connectionClassResource;\r
-\r
- public AddConnection(IModifiableSynchronizationContext context, IDiagram diagram, IElement element) {\r
- super(ADD_CONNECTION_PRIORITY);\r
- this.context = context;\r
- this.diagram = diagram;\r
- this.diagramResource = diagram.getHint(DiagramModelHints.KEY_DIAGRAM_RESOURCE);\r
- assert this.diagramResource != null;\r
- this.element = element;\r
- this.copyOf = element.getHint(ElementHints.KEY_COPY_OF_OBJECT);\r
-\r
- this.connectionClassResource = ElementUtils.checkedAdapt(element.getElementClass(), Resource.class);\r
- }\r
-\r
- @Override\r
- public void perform(WriteGraph graph) throws DatabaseException {\r
- ConnectionUtil cu = new ConnectionUtil(graph);\r
- DiagramMutator mutator = diagram.getHint(DiagramHints.KEY_MUTATOR);\r
-\r
- Resource resource = null;\r
-\r
- // 3. Try to copy the element from an existing element if requested.\r
- if (copyOf != null) {\r
- CopyAdvisor ca = diagram.getHint(SynchronizationHints.COPY_ADVISOR);\r
- if (ca != null) {\r
- Resource sourceDiagram = graph.getPossibleObject(copyOf, Layer0.getInstance(graph).PartOf);\r
- if (sourceDiagram == null)\r
- sourceDiagram = OrderedSetUtils.getSingleOwnerList(graph, copyOf, DiagramResource.getInstance(graph).Diagram);\r
- resource = CopyAdvisorUtil.copy(context, graph, ca, copyOf, sourceDiagram, diagramResource);\r
- if (resource != null) {\r
- OrderedSetUtils.addFirst(graph, diagramResource, resource);\r
- }\r
- }\r
- }\r
-\r
- if (resource == null)\r
- resource = cu.newConnection(diagramResource, connectionClassResource);\r
-\r
- if (copyOf != null)\r
- copyConnectionType(graph, copyOf, resource);\r
-\r
- element.setHint(ElementHints.KEY_OBJECT, resource);\r
- mutator.register(element, resource);\r
-\r
- GraphLayerManager glm = context.get(GraphSynchronizationHints.GRAPH_LAYER_MANAGER);\r
- if (glm != null) {\r
- glm.removeFromAllLayers(graph, resource);\r
- glm.putElementOnVisibleLayers(diagram, graph, resource);\r
- }\r
- }\r
-\r
- public static void copyConnectionType(WriteGraph graph, Resource source, Resource target) throws DatabaseException {\r
- // Copy HasConnectionType relation\r
- StructuralResource2 sr = StructuralResource2.getInstance(graph);\r
- Resource connectionType = graph.getPossibleObject(source, sr.HasConnectionType);\r
- if (connectionType != null) {\r
- graph.deny(target, sr.HasConnectionType);\r
- graph.claim(target, sr.HasConnectionType, null, connectionType);\r
- }\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * 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:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.diagram.synchronization.graph;
+
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.utils.OrderedSetUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.diagram.content.ConnectionUtil;
+import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.diagram.synchronization.CopyAdvisor;
+import org.simantics.diagram.synchronization.IModifiableSynchronizationContext;
+import org.simantics.diagram.synchronization.ModificationAdapter;
+import org.simantics.diagram.synchronization.SynchronizationHints;
+import org.simantics.diagram.synchronization.graph.layer.GraphLayerManager;
+import org.simantics.diagram.ui.DiagramModelHints;
+import org.simantics.g2d.diagram.DiagramHints;
+import org.simantics.g2d.diagram.DiagramMutator;
+import org.simantics.g2d.diagram.IDiagram;
+import org.simantics.g2d.element.ElementHints;
+import org.simantics.g2d.element.ElementUtils;
+import org.simantics.g2d.element.IElement;
+import org.simantics.layer0.Layer0;
+import org.simantics.structural.stubs.StructuralResource2;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class AddConnection extends ModificationAdapter {
+
+ IModifiableSynchronizationContext context;
+ IDiagram diagram;
+ Resource diagramResource;
+ IElement element;
+ Resource copyOf;
+ Resource connectionClassResource;
+
+ public AddConnection(IModifiableSynchronizationContext context, IDiagram diagram, IElement element) {
+ super(ADD_CONNECTION_PRIORITY);
+ this.context = context;
+ this.diagram = diagram;
+ this.diagramResource = diagram.getHint(DiagramModelHints.KEY_DIAGRAM_RESOURCE);
+ assert this.diagramResource != null;
+ this.element = element;
+ this.copyOf = element.getHint(ElementHints.KEY_COPY_OF_OBJECT);
+
+ this.connectionClassResource = ElementUtils.checkedAdapt(element.getElementClass(), Resource.class);
+ }
+
+ @Override
+ public void perform(WriteGraph graph) throws DatabaseException {
+ ConnectionUtil cu = new ConnectionUtil(graph);
+ DiagramMutator mutator = diagram.getHint(DiagramHints.KEY_MUTATOR);
+
+ Resource resource = null;
+
+ // 3. Try to copy the element from an existing element if requested.
+ if (copyOf != null) {
+ CopyAdvisor ca = diagram.getHint(SynchronizationHints.COPY_ADVISOR);
+ if (ca != null) {
+ Resource sourceDiagram = graph.getPossibleObject(copyOf, Layer0.getInstance(graph).PartOf);
+ if (sourceDiagram == null)
+ sourceDiagram = OrderedSetUtils.getSingleOwnerList(graph, copyOf, DiagramResource.getInstance(graph).Diagram);
+ resource = CopyAdvisorUtil.copy(context, graph, ca, copyOf, sourceDiagram, diagramResource);
+ if (resource != null) {
+ OrderedSetUtils.addFirst(graph, diagramResource, resource);
+ }
+ }
+ }
+
+ if (resource == null)
+ resource = cu.newConnection(diagramResource, connectionClassResource);
+
+ if (copyOf != null)
+ copyConnectionType(graph, copyOf, resource);
+
+ element.setHint(ElementHints.KEY_OBJECT, resource);
+ mutator.register(element, resource);
+
+ GraphLayerManager glm = context.get(GraphSynchronizationHints.GRAPH_LAYER_MANAGER);
+ if (glm != null) {
+ glm.removeFromAllLayers(graph, resource);
+ glm.putElementOnVisibleLayers(diagram, graph, resource);
+ }
+ }
+
+ public static void copyConnectionType(WriteGraph graph, Resource source, Resource target) throws DatabaseException {
+ // Copy HasConnectionType relation
+ StructuralResource2 sr = StructuralResource2.getInstance(graph);
+ Resource connectionType = graph.getPossibleObject(source, sr.HasConnectionType);
+ if (connectionType != null) {
+ graph.deny(target, sr.HasConnectionType);
+ graph.claim(target, sr.HasConnectionType, null, connectionType);
+ }
+ }
+
+}