-package org.simantics.modeling.mapping;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.NamedResource;\r
-import org.simantics.db.common.utils.NameUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.util.ClipboardUtils;\r
-import org.simantics.db.layer0.util.SimanticsClipboard.Representation;\r
-import org.simantics.db.layer0.util.SimanticsClipboardImpl;\r
-import org.simantics.db.layer0.util.SimanticsKeys;\r
-import org.simantics.diagram.stubs.DiagramResource;\r
-import org.simantics.diagram.synchronization.ISynchronizationContext;\r
-import org.simantics.graph.db.TransferableGraphs;\r
-import org.simantics.graph.representation.TransferableGraph1;\r
-import org.simantics.modeling.mapping.ComponentAndElementCopyHandler;\r
-import org.simantics.modeling.mapping.ComponentAndElementPasteImportAdvisor;\r
-\r
-/**\r
- * TG-based ElementCopyAdvisor.\r
- * \r
- * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
- *\r
- */\r
-public class TGElementCopyAdvisor extends ElementCopyAdvisor {\r
- \r
- public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer,\r
- Resource targetContainer, Map<Object, Object> map) throws DatabaseException {\r
- \r
-\r
- DiagramResource DIA = DiagramResource.getInstance(graph);\r
- if (!graph.isInstanceOf(source, DIA.Connection)) {\r
- // Connections cannot be copied with TG. \r
- SimanticsClipboardImpl builder = new SimanticsClipboardImpl();\r
- \r
- ComponentAndElementCopyHandler handler = new ComponentAndElementCopyHandler(source,false,true) {\r
- @Override\r
- protected void processElement(ReadGraph graph, Resource element,\r
- boolean includeElement, ArrayList<NamedResource> roots,\r
- ArrayList<Resource> exclusions) throws DatabaseException {\r
- super.processElement(graph, element, includeElement, roots, exclusions);\r
- TGElementCopyAdvisor.this.processElement(graph, element, includeElement, roots, exclusions);\r
- }\r
- };\r
- \r
- ComponentAndElementPasteImportAdvisor advisor = new ComponentAndElementPasteImportAdvisor(graph, targetContainer, false,true);\r
- \r
- handler.copyToClipboard(graph, builder);\r
- for(Set<Representation> object : builder.getContents()) {\r
- TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH);\r
- if(tg != null) {\r
- \r
- TransferableGraphs.importGraph1(graph, tg, advisor);\r
- advisor.attach(graph);\r
- Resource copy = advisor.getElement();\r
- map.put(source, copy);\r
- return copy;\r
- }\r
- }\r
- } else {\r
- return super.copy(context, graph, source, sourceContainer, targetContainer, map);\r
- }\r
- \r
- throw new DatabaseException("Failed to copy resource " + NameUtils.getSafeName(graph, source, true)\r
- + " under " + NameUtils.getSafeName(graph, targetContainer, true));\r
- }\r
-\r
- /**\r
- * Callback for custom element handling.\r
- * \r
- * @param graph\r
- * @param element\r
- * @param includeElement\r
- * @param roots\r
- * @param exclusions\r
- * @throws DatabaseException\r
- */\r
- protected void processElement(ReadGraph graph, Resource element, boolean includeElement, ArrayList<NamedResource> roots, ArrayList<Resource> exclusions) throws DatabaseException {\r
- \r
- }\r
-}\r
+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 <marko.luukkainen@vtt.fi>
+ *
+ */
+public class TGElementCopyAdvisor extends ElementCopyAdvisor {
+
+ public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer,
+ Resource targetContainer, Map<Object, Object> 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<NamedResource> roots,
+ ArrayList<Resource> 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<Representation> 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<NamedResource> roots, ArrayList<Resource> exclusions) throws DatabaseException {
+
+ }
+}