X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fmapping%2FMappedElementCopyAdvisor.java;h=6d3121f3cfba32ba959755defcb90c56cabcbd6f;hp=31d52b9b9f55b05a24221a04968fab0d23ea2e77;hb=3a10ce856f7124f83cf03d6e7f7576da237a7cbb;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/MappedElementCopyAdvisor.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/MappedElementCopyAdvisor.java index 31d52b9b9..6d3121f3c 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/MappedElementCopyAdvisor.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/MappedElementCopyAdvisor.java @@ -1,163 +1,163 @@ -/******************************************************************************* - * 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.modeling.mapping; - -import gnu.trove.map.hash.THashMap; - -import java.util.Map; - -import org.simantics.db.Resource; -import org.simantics.db.WriteGraph; -import org.simantics.db.exception.DatabaseException; -import org.simantics.diagram.synchronization.CopyAdvisor; -import org.simantics.diagram.synchronization.ISynchronizationContext; -import org.simantics.diagram.synchronization.graph.GraphCopyAdvisor; -import org.simantics.modeling.ModelingResources; -import org.simantics.utils.datastructures.Pair; - -/** - * @author Tuukka Lehtonen - */ -public class MappedElementCopyAdvisor extends GraphCopyAdvisor { - - protected final CopyAdvisor elementAdvisor; - protected final CopyAdvisor componentAdvisor; - - public MappedElementCopyAdvisor(CopyAdvisor elementAdvisor, CopyAdvisor componentAdvisor) { - this.elementAdvisor = elementAdvisor; - this.componentAdvisor = componentAdvisor; - } - - @Override - public Evaluation canCopy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, Resource targetContainer) - throws DatabaseException { - if (CopyAdvisor.SUPPORTED.contains(elementAdvisor.canCopy(context, source, sourceContainer, targetContainer))) { - ModelingResources MOD = context.get(ModelingSynchronizationHints.MODELING_RESOURCE); - //Layer0 L0 = Layer0.getInstance(graph); - - Resource component = graph.getPossibleObject(source, MOD.ElementToComponent); - if (component != null) { - Resource sourceComposite = sourceContainer != null ? graph.getPossibleObject(sourceContainer, MOD.DiagramToComposite) : null; - Resource targetComposite = targetContainer != null ? graph.getPossibleObject(targetContainer, MOD.DiagramToComposite) : null; - //if(targetComposite == null) targetComposite = graph.getPossibleObject(component, L0.PartOf); - - Evaluation componentEval = componentAdvisor.canCopy(context, component, sourceComposite, targetComposite); - if (componentEval != Evaluation.SUPPORTED) - return componentEval; - } - - Resource connection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnection); - if (connection != null) { - Resource sourceComposite = graph.getPossibleObject(sourceContainer, MOD.DiagramToComposite); - Resource targetComposite = graph.getPossibleObject(targetContainer, MOD.DiagramToComposite); - //if (targetComposite == null) targetComposite = graph.getPossibleObject(component, L0.PartOf); - - Evaluation connectionEval = componentAdvisor.canCopy(context, connection, sourceComposite, targetComposite); - if (connectionEval != Evaluation.SUPPORTED) - return connectionEval; - - Resource specialConnection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnectionSpecial); - if (specialConnection != null) { - connectionEval = componentAdvisor.canCopy(context, specialConnection, sourceComposite, targetComposite); - } - - return connectionEval; - } - return Evaluation.SUPPORTED; - } - return Evaluation.NOT_SUPPORTED; - } - - @Override - public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, Resource targetContainer) throws DatabaseException { - return copy(context, graph, source, sourceContainer, targetContainer, new THashMap()); - } - - @Override - public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, Resource targetContainer, Map map) throws DatabaseException { - ModelingResources MOD = context.get(ModelingSynchronizationHints.MODELING_RESOURCE); - if (MOD == null) - throw new IllegalStateException("no ModelingSynchronizationHints.MODELING_RESOURCE hint"); - - Resource sourceComposite = sourceContainer != null ? graph.getPossibleObject(sourceContainer, MOD.DiagramToComposite) : null; - Resource targetComposite = targetContainer != null ? graph.getPossibleObject(targetContainer, MOD.DiagramToComposite) : null; - //if(targetComposite == null) targetComposite = graph.getPossibleObject(component, L0.PartOf); - - Resource elementCopy = (Resource) elementAdvisor.copy(context, source, sourceContainer, targetContainer, map); - - Resource component = graph.getPossibleObject(source, MOD.ElementToComponent); - Resource componentCopy = null; - if (component != null) { - componentCopy = (Resource) componentAdvisor.copy(context, component, sourceComposite, targetComposite, map); - if (componentCopy != null) { - graph.claim(elementCopy, MOD.ElementToComponent, componentCopy); - } - } - - Resource connection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnection); - if (connection != null) { - Resource connectionCopy = (Resource) componentAdvisor.copy(context, connection, sourceComposite, targetComposite, map); - if (connectionCopy != null) { - graph.claim(elementCopy, MOD.DiagramConnectionToConnection, connectionCopy); - } - - Resource specialConnection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnectionSpecial); - if (specialConnection != null) { - Resource specialConnectionCopy = (Resource) componentAdvisor.copy(context, specialConnection, sourceComposite, targetComposite, map); - if (specialConnectionCopy != null) { - graph.claim(elementCopy, MOD.DiagramConnectionToConnectionSpecial, specialConnectionCopy); - } - } - - // NOTICE: this does not copy MOD.ConnectorToComponent relations. - // Those are unfortunately reconstructed in Paster since they would - // be rather difficult to deterministically reconstruct here. - } - - return elementCopy; - } - - @Override - public Object cut(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, - Resource targetContainer) throws DatabaseException { - ModelingResources MOD = context.get(ModelingSynchronizationHints.MODELING_RESOURCE); - - Resource sourceComposite = graph.getPossibleObject(sourceContainer, MOD.DiagramToComposite); - Resource targetComposite = graph.getPossibleObject(targetContainer, MOD.DiagramToComposite); - - Resource component = graph.getPossibleObject(source, MOD.ElementToComponent); - Resource connection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnection); - - Object elementResult = elementAdvisor.cut(context, source, sourceContainer, targetContainer); - Object componentResult = null; - - if (sourceComposite != null && targetComposite != null) { - if (component != null) - componentResult = componentAdvisor.cut(context, component, sourceComposite, targetComposite); - if (connection != null) - componentResult = componentAdvisor.cut(context, connection, sourceComposite, targetComposite); - } - - if (elementResult == null && componentResult == null) - return null; - return Pair.make(elementResult, componentResult); - } - - @Override - public void onFinish(ISynchronizationContext context) { - super.onFinish(context); - elementAdvisor.onFinish(context); - componentAdvisor.onFinish(context); - } - - -} +/******************************************************************************* + * 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.modeling.mapping; + +import gnu.trove.map.hash.THashMap; + +import java.util.Map; + +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.diagram.synchronization.CopyAdvisor; +import org.simantics.diagram.synchronization.ISynchronizationContext; +import org.simantics.diagram.synchronization.graph.GraphCopyAdvisor; +import org.simantics.modeling.ModelingResources; +import org.simantics.utils.datastructures.Pair; + +/** + * @author Tuukka Lehtonen + */ +public class MappedElementCopyAdvisor extends GraphCopyAdvisor { + + protected final CopyAdvisor elementAdvisor; + protected final CopyAdvisor componentAdvisor; + + public MappedElementCopyAdvisor(CopyAdvisor elementAdvisor, CopyAdvisor componentAdvisor) { + this.elementAdvisor = elementAdvisor; + this.componentAdvisor = componentAdvisor; + } + + @Override + public Evaluation canCopy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, Resource targetContainer) + throws DatabaseException { + if (CopyAdvisor.SUPPORTED.contains(elementAdvisor.canCopy(context, source, sourceContainer, targetContainer))) { + ModelingResources MOD = context.get(ModelingSynchronizationHints.MODELING_RESOURCE); + //Layer0 L0 = Layer0.getInstance(graph); + + Resource component = graph.getPossibleObject(source, MOD.ElementToComponent); + if (component != null) { + Resource sourceComposite = sourceContainer != null ? graph.getPossibleObject(sourceContainer, MOD.DiagramToComposite) : null; + Resource targetComposite = targetContainer != null ? graph.getPossibleObject(targetContainer, MOD.DiagramToComposite) : null; + //if(targetComposite == null) targetComposite = graph.getPossibleObject(component, L0.PartOf); + + Evaluation componentEval = componentAdvisor.canCopy(context, component, sourceComposite, targetComposite); + if (componentEval != Evaluation.SUPPORTED) + return componentEval; + } + + Resource connection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnection); + if (connection != null) { + Resource sourceComposite = graph.getPossibleObject(sourceContainer, MOD.DiagramToComposite); + Resource targetComposite = graph.getPossibleObject(targetContainer, MOD.DiagramToComposite); + //if (targetComposite == null) targetComposite = graph.getPossibleObject(component, L0.PartOf); + + Evaluation connectionEval = componentAdvisor.canCopy(context, connection, sourceComposite, targetComposite); + if (connectionEval != Evaluation.SUPPORTED) + return connectionEval; + + Resource specialConnection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnectionSpecial); + if (specialConnection != null) { + connectionEval = componentAdvisor.canCopy(context, specialConnection, sourceComposite, targetComposite); + } + + return connectionEval; + } + return Evaluation.SUPPORTED; + } + return Evaluation.NOT_SUPPORTED; + } + + @Override + public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, Resource targetContainer) throws DatabaseException { + return copy(context, graph, source, sourceContainer, targetContainer, new THashMap()); + } + + @Override + public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, Resource targetContainer, Map map) throws DatabaseException { + ModelingResources MOD = context.get(ModelingSynchronizationHints.MODELING_RESOURCE); + if (MOD == null) + throw new IllegalStateException("no ModelingSynchronizationHints.MODELING_RESOURCE hint"); + + Resource sourceComposite = sourceContainer != null ? graph.getPossibleObject(sourceContainer, MOD.DiagramToComposite) : null; + Resource targetComposite = targetContainer != null ? graph.getPossibleObject(targetContainer, MOD.DiagramToComposite) : null; + //if(targetComposite == null) targetComposite = graph.getPossibleObject(component, L0.PartOf); + + Resource elementCopy = (Resource) elementAdvisor.copy(context, source, sourceContainer, targetContainer, map); + + Resource component = graph.getPossibleObject(source, MOD.ElementToComponent); + Resource componentCopy = null; + if (component != null) { + componentCopy = (Resource) componentAdvisor.copy(context, component, sourceComposite, targetComposite, map); + if (componentCopy != null) { + graph.claim(elementCopy, MOD.ElementToComponent, componentCopy); + } + } + + Resource connection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnection); + if (connection != null) { + Resource connectionCopy = (Resource) componentAdvisor.copy(context, connection, sourceComposite, targetComposite, map); + if (connectionCopy != null) { + graph.claim(elementCopy, MOD.DiagramConnectionToConnection, connectionCopy); + } + + Resource specialConnection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnectionSpecial); + if (specialConnection != null) { + Resource specialConnectionCopy = (Resource) componentAdvisor.copy(context, specialConnection, sourceComposite, targetComposite, map); + if (specialConnectionCopy != null) { + graph.claim(elementCopy, MOD.DiagramConnectionToConnectionSpecial, specialConnectionCopy); + } + } + + // NOTICE: this does not copy MOD.ConnectorToComponent relations. + // Those are unfortunately reconstructed in Paster since they would + // be rather difficult to deterministically reconstruct here. + } + + return elementCopy; + } + + @Override + public Object cut(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, + Resource targetContainer) throws DatabaseException { + ModelingResources MOD = context.get(ModelingSynchronizationHints.MODELING_RESOURCE); + + Resource sourceComposite = graph.getPossibleObject(sourceContainer, MOD.DiagramToComposite); + Resource targetComposite = graph.getPossibleObject(targetContainer, MOD.DiagramToComposite); + + Resource component = graph.getPossibleObject(source, MOD.ElementToComponent); + Resource connection = graph.getPossibleObject(source, MOD.DiagramConnectionToConnection); + + Object elementResult = elementAdvisor.cut(context, source, sourceContainer, targetContainer); + Object componentResult = null; + + if (sourceComposite != null && targetComposite != null) { + if (component != null) + componentResult = componentAdvisor.cut(context, component, sourceComposite, targetComposite); + if (connection != null) + componentResult = componentAdvisor.cut(context, connection, sourceComposite, targetComposite); + } + + if (elementResult == null && componentResult == null) + return null; + return Pair.make(elementResult, componentResult); + } + + @Override + public void onFinish(ISynchronizationContext context) { + super.onFinish(context); + elementAdvisor.onFinish(context); + componentAdvisor.onFinish(context); + } + + +}