X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fsynchronization%2Fgraph%2FAddConnection.java;h=b8730f056925e1255c66f418289b7034031ff2f4;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=5dcbd23af6934e7ba3bed098983538b51bb2c7f9;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/AddConnection.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/AddConnection.java index 5dcbd23af..b8730f056 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/AddConnection.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/AddConnection.java @@ -1,106 +1,106 @@ -/******************************************************************************* - * 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); - } - } - -} +/******************************************************************************* + * 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); + } + } + +}