]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.graphfile/src/org/simantics/graphfile/adapters/SystemResourcePasteHandler.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.graphfile / src / org / simantics / graphfile / adapters / SystemResourcePasteHandler.java
1 /*******************************************************************************\r
2  * Copyright (c) 2013 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.graphfile.adapters;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.Collection;\r
16 import java.util.HashSet;\r
17 import java.util.Set;\r
18 \r
19 import org.simantics.Simantics;\r
20 import org.simantics.db.Resource;\r
21 import org.simantics.db.WriteGraph;\r
22 import org.simantics.db.exception.DatabaseException;\r
23 import org.simantics.db.layer0.adapter.PasteHandlerAdapter;\r
24 import org.simantics.db.layer0.util.ClipboardUtils;\r
25 import org.simantics.db.layer0.util.PasteEventHandler;\r
26 import org.simantics.db.layer0.util.RemoverUtil;\r
27 import org.simantics.db.layer0.util.SimanticsClipboard;\r
28 import org.simantics.db.layer0.util.SimanticsClipboard.Representation;\r
29 import org.simantics.db.layer0.util.SimanticsKeys;\r
30 import org.simantics.graph.db.IImportAdvisor;\r
31 import org.simantics.graph.db.TransferableGraphException;\r
32 import org.simantics.graph.db.TransferableGraphs;\r
33 import org.simantics.graph.representation.TransferableGraph1;\r
34 \r
35 public class SystemResourcePasteHandler  extends PasteHandlerAdapter  \r
36 \r
37 {\r
38         private Resource resource;\r
39 \r
40     public SystemResourcePasteHandler(Resource resource) {\r
41         this.resource = resource;\r
42     }\r
43 \r
44     public static void defaultExecute(TransferableGraph1 tg, Resource resource, IImportAdvisor advisor) throws DatabaseException, TransferableGraphException {\r
45         TransferableGraphs.importGraph1(Simantics.getSession(), tg, advisor);\r
46     }\r
47 \r
48     public static void defaultExecute(WriteGraph graph, TransferableGraph1 tg, Resource resource, IImportAdvisor advisor) throws DatabaseException {\r
49         TransferableGraphs.importGraph1(graph, tg, advisor);\r
50     }\r
51 \r
52     public void execute(WriteGraph graph, TransferableGraph1 tg, Resource resource, IImportAdvisor advisor) throws DatabaseException {\r
53         defaultExecute(graph, tg, resource, advisor);\r
54     }\r
55 \r
56     /**\r
57      * Override this in your inherited class if post processing is done.\r
58      */\r
59     public void onPasteBegin(WriteGraph graph) throws DatabaseException {\r
60     }\r
61 \r
62     /**\r
63      * Override this in your inherited class if post processing is done\r
64      * advisor.getTarget() returns an object under which data is copied\r
65      * advisor.getRoot() returns the object which have been pasted.\r
66      * @param representations TODO\r
67      */\r
68     public void onPaste(WriteGraph graph, SystemResourcePasteImportAdvisor advisor, Set<Representation> representations) throws DatabaseException {\r
69         advisor.attachRoot(graph);\r
70     }\r
71 \r
72     /**\r
73      * Override this in your inherited class if post processing is done.\r
74      */\r
75     public void onPasteEnd(WriteGraph graph) throws DatabaseException{\r
76     }\r
77 \r
78     public Collection<Resource> pasteObject(WriteGraph graph, Set<Representation> object) throws DatabaseException {\r
79         Collection<Resource> result = new ArrayList<Resource>();\r
80         TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH);\r
81         if (tg != null) {\r
82            SystemResourcePasteImportAdvisor advisor = new SystemResourcePasteImportAdvisor(graph, resource); \r
83             execute(graph, tg, resource, advisor);\r
84             result.add(advisor.getRoot());\r
85             try {\r
86                 onPaste(graph, advisor, object);\r
87             } catch (Throwable e) {\r
88             }\r
89         }\r
90         return result;\r
91     }\r
92 \r
93     @Override\r
94     public Collection<Resource> pasteFromClipboard(WriteGraph graph, SimanticsClipboard clipboard, PasteEventHandler handler) throws DatabaseException {\r
95         \r
96         Collection<Resource> result = new ArrayList<Resource>();\r
97         \r
98         try {\r
99             onPasteBegin(graph);\r
100         } catch (Throwable e) {\r
101         }\r
102 \r
103         final Set<Resource> cuts = new HashSet<Resource>();\r
104         for(Set<Representation> object : clipboard.getContents()) {\r
105             result.addAll(pasteObject(graph, object));\r
106             Collection<Resource> cut = ClipboardUtils.accept(object, SimanticsKeys.KEY_CUT_RESOURCES);\r
107             if (cut != null)\r
108                 cuts.addAll(cut);\r
109         }\r
110 \r
111         try {\r
112             onPasteEnd(graph);\r
113         } catch (Throwable e) {\r
114         }\r
115 \r
116         if(!cuts.isEmpty()) {\r
117                 for (Resource cut : cuts)\r
118                         RemoverUtil.remove(graph, cut);\r
119         }\r
120         \r
121         return result;\r
122         \r
123     }\r
124 \r
125     @SuppressWarnings("rawtypes")\r
126     @Override\r
127     public Object getAdapter(Class adapter) {\r
128         if(Resource.class == adapter) return resource;\r
129         return null;\r
130     }\r
131 \r
132         \r
133 \r
134 }\r