X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fmapping%2FTGElementCopyAdvisor.java;h=8b486943746def717dcc7641decb8679422902bf;hb=4e402f51b0e34d40c3f9d33a4bec7feffeb8d339;hp=05f0cf712777a898c343eab07ebf0eb1389a636d;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/TGElementCopyAdvisor.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/TGElementCopyAdvisor.java index 05f0cf712..8b4869437 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/TGElementCopyAdvisor.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/TGElementCopyAdvisor.java @@ -1,86 +1,87 @@ -package org.simantics.modeling.mapping; - -import java.util.ArrayList; -import java.util.Map; -import java.util.Set; - -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.WriteGraph; -import org.simantics.db.common.NamedResource; -import org.simantics.db.common.utils.NameUtils; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.util.ClipboardUtils; -import org.simantics.db.layer0.util.SimanticsClipboard.Representation; -import org.simantics.db.layer0.util.SimanticsClipboardImpl; -import org.simantics.db.layer0.util.SimanticsKeys; -import org.simantics.diagram.stubs.DiagramResource; -import org.simantics.diagram.synchronization.ISynchronizationContext; -import org.simantics.graph.db.TransferableGraphs; -import org.simantics.graph.representation.TransferableGraph1; -import org.simantics.modeling.mapping.ComponentAndElementCopyHandler; -import org.simantics.modeling.mapping.ComponentAndElementPasteImportAdvisor; - -/** - * TG-based ElementCopyAdvisor. - * - * @author Marko Luukkainen - * - */ -public class TGElementCopyAdvisor extends ElementCopyAdvisor { - - public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, - Resource targetContainer, Map map) throws DatabaseException { - - - DiagramResource DIA = DiagramResource.getInstance(graph); - if (!graph.isInstanceOf(source, DIA.Connection)) { - // Connections cannot be copied with TG. - SimanticsClipboardImpl builder = new SimanticsClipboardImpl(); - - ComponentAndElementCopyHandler handler = new ComponentAndElementCopyHandler(source,false,true) { - @Override - protected void processElement(ReadGraph graph, Resource element, - boolean includeElement, ArrayList roots, - ArrayList exclusions) throws DatabaseException { - super.processElement(graph, element, includeElement, roots, exclusions); - TGElementCopyAdvisor.this.processElement(graph, element, includeElement, roots, exclusions); - } - }; - - ComponentAndElementPasteImportAdvisor advisor = new ComponentAndElementPasteImportAdvisor(graph, targetContainer, false,true); - - handler.copyToClipboard(graph, builder); - for(Set object : builder.getContents()) { - TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH); - if(tg != null) { - - TransferableGraphs.importGraph1(graph, tg, advisor); - advisor.attach(graph); - Resource copy = advisor.getElement(); - map.put(source, copy); - return copy; - } - } - } else { - return super.copy(context, graph, source, sourceContainer, targetContainer, map); - } - - throw new DatabaseException("Failed to copy resource " + NameUtils.getSafeName(graph, source, true) - + " under " + NameUtils.getSafeName(graph, targetContainer, true)); - } - - /** - * Callback for custom element handling. - * - * @param graph - * @param element - * @param includeElement - * @param roots - * @param exclusions - * @throws DatabaseException - */ - protected void processElement(ReadGraph graph, Resource element, boolean includeElement, ArrayList roots, ArrayList exclusions) throws DatabaseException { - - } -} +package org.simantics.modeling.mapping; + +import java.util.ArrayList; +import java.util.Map; +import java.util.Set; + +import org.eclipse.core.runtime.NullProgressMonitor; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.NamedResource; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.util.ClipboardUtils; +import org.simantics.db.layer0.util.SimanticsClipboard.Representation; +import org.simantics.db.layer0.util.SimanticsClipboardImpl; +import org.simantics.db.layer0.util.SimanticsKeys; +import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.diagram.synchronization.ISynchronizationContext; +import org.simantics.graph.db.TransferableGraphs; +import org.simantics.graph.representation.TransferableGraph1; +import org.simantics.modeling.mapping.ComponentAndElementCopyHandler; +import org.simantics.modeling.mapping.ComponentAndElementPasteImportAdvisor; + +/** + * TG-based ElementCopyAdvisor. + * + * @author Marko Luukkainen + * + */ +public class TGElementCopyAdvisor extends ElementCopyAdvisor { + + public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer, + Resource targetContainer, Map map) throws DatabaseException { + + + DiagramResource DIA = DiagramResource.getInstance(graph); + if (!graph.isInstanceOf(source, DIA.Connection)) { + // Connections cannot be copied with TG. + SimanticsClipboardImpl builder = new SimanticsClipboardImpl(); + + ComponentAndElementCopyHandler handler = new ComponentAndElementCopyHandler(source,false,true) { + @Override + protected void processElement(ReadGraph graph, Resource element, + boolean includeElement, ArrayList roots, + ArrayList exclusions) throws DatabaseException { + super.processElement(graph, element, includeElement, roots, exclusions); + TGElementCopyAdvisor.this.processElement(graph, element, includeElement, roots, exclusions); + } + }; + + ComponentAndElementPasteImportAdvisor advisor = new ComponentAndElementPasteImportAdvisor(graph, targetContainer, false,true); + + handler.copyToClipboard(graph, builder, new NullProgressMonitor()); + for(Set object : builder.getContents()) { + TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH); + if(tg != null) { + + TransferableGraphs.importGraph1(graph, tg, advisor); + advisor.attach(graph); + Resource copy = advisor.getElement(); + map.put(source, copy); + return copy; + } + } + } else { + return super.copy(context, graph, source, sourceContainer, targetContainer, map); + } + + throw new DatabaseException("Failed to copy resource " + NameUtils.getSafeName(graph, source, true) + + " under " + NameUtils.getSafeName(graph, targetContainer, true)); + } + + /** + * Callback for custom element handling. + * + * @param graph + * @param element + * @param includeElement + * @param roots + * @param exclusions + * @throws DatabaseException + */ + protected void processElement(ReadGraph graph, Resource element, boolean includeElement, ArrayList roots, ArrayList exclusions) throws DatabaseException { + + } +}