]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/TGElementCopyAdvisor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / mapping / TGElementCopyAdvisor.java
1 package org.simantics.modeling.mapping;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Map;\r
5 import java.util.Set;\r
6 \r
7 import org.simantics.db.ReadGraph;\r
8 import org.simantics.db.Resource;\r
9 import org.simantics.db.WriteGraph;\r
10 import org.simantics.db.common.NamedResource;\r
11 import org.simantics.db.common.utils.NameUtils;\r
12 import org.simantics.db.exception.DatabaseException;\r
13 import org.simantics.db.layer0.util.ClipboardUtils;\r
14 import org.simantics.db.layer0.util.SimanticsClipboard.Representation;\r
15 import org.simantics.db.layer0.util.SimanticsClipboardImpl;\r
16 import org.simantics.db.layer0.util.SimanticsKeys;\r
17 import org.simantics.diagram.stubs.DiagramResource;\r
18 import org.simantics.diagram.synchronization.ISynchronizationContext;\r
19 import org.simantics.graph.db.TransferableGraphs;\r
20 import org.simantics.graph.representation.TransferableGraph1;\r
21 import org.simantics.modeling.mapping.ComponentAndElementCopyHandler;\r
22 import org.simantics.modeling.mapping.ComponentAndElementPasteImportAdvisor;\r
23 \r
24 /**\r
25  * TG-based ElementCopyAdvisor.\r
26  * \r
27  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
28  *\r
29  */\r
30 public class TGElementCopyAdvisor extends ElementCopyAdvisor {\r
31         \r
32         public Object copy(ISynchronizationContext context, WriteGraph graph, Resource source, Resource sourceContainer,\r
33             Resource targetContainer, Map<Object, Object> map) throws DatabaseException {\r
34                 \r
35 \r
36                 DiagramResource DIA = DiagramResource.getInstance(graph);\r
37                 if (!graph.isInstanceOf(source, DIA.Connection)) {\r
38                         // Connections cannot be copied with TG. \r
39                         SimanticsClipboardImpl builder = new SimanticsClipboardImpl();\r
40                         \r
41                         ComponentAndElementCopyHandler handler = new ComponentAndElementCopyHandler(source,false,true) {\r
42                                 @Override\r
43                                 protected void processElement(ReadGraph graph, Resource element,\r
44                                                 boolean includeElement, ArrayList<NamedResource> roots,\r
45                                                 ArrayList<Resource> exclusions) throws DatabaseException {\r
46                                         super.processElement(graph, element, includeElement, roots, exclusions);\r
47                                         TGElementCopyAdvisor.this.processElement(graph, element, includeElement, roots, exclusions);\r
48                                 }\r
49                         };\r
50                         \r
51                         ComponentAndElementPasteImportAdvisor advisor = new ComponentAndElementPasteImportAdvisor(graph, targetContainer, false,true);\r
52                         \r
53                         handler.copyToClipboard(graph, builder);\r
54                         for(Set<Representation> object : builder.getContents()) {\r
55                     TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH);\r
56                     if(tg != null) {\r
57                         \r
58                         TransferableGraphs.importGraph1(graph, tg, advisor);\r
59                         advisor.attach(graph);\r
60                         Resource copy = advisor.getElement();\r
61                         map.put(source, copy);\r
62                         return copy;\r
63                     }\r
64                 }\r
65                 } else {\r
66                         return super.copy(context, graph, source, sourceContainer, targetContainer, map);\r
67                 }\r
68                 \r
69                  throw new DatabaseException("Failed to copy resource " + NameUtils.getSafeName(graph, source, true)\r
70                         + " under " + NameUtils.getSafeName(graph, targetContainer, true));\r
71         }\r
72 \r
73         /**\r
74          * Callback for custom element handling.\r
75          * \r
76          * @param graph\r
77          * @param element\r
78          * @param includeElement\r
79          * @param roots\r
80          * @param exclusions\r
81          * @throws DatabaseException\r
82          */\r
83         protected void processElement(ReadGraph graph, Resource element, boolean includeElement, ArrayList<NamedResource> roots, ArrayList<Resource> exclusions) throws DatabaseException {\r
84                 \r
85         }\r
86 }\r