]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ClipboardUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / ClipboardUtils.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 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.db.layer0.util;\r
13 \r
14 import java.io.File;\r
15 import java.io.IOException;\r
16 import java.util.ArrayList;\r
17 import java.util.Collection;\r
18 import java.util.Collections;\r
19 import java.util.Map;\r
20 import java.util.Set;\r
21 \r
22 import org.simantics.databoard.adapter.AdaptException;\r
23 import org.simantics.databoard.container.DataContainer;\r
24 import org.simantics.databoard.container.DataContainers;\r
25 import org.simantics.db.ReadGraph;\r
26 import org.simantics.db.RequestProcessor;\r
27 import org.simantics.db.Resource;\r
28 import org.simantics.db.common.request.ResourceRead;\r
29 import org.simantics.db.common.utils.Logger;\r
30 import org.simantics.db.exception.DatabaseException;\r
31 import org.simantics.db.layer0.adapter.PasteHandler;\r
32 import org.simantics.db.layer0.internal.SimanticsInternal;\r
33 import org.simantics.db.layer0.util.SimanticsClipboard.Representation;\r
34 import org.simantics.db.layer0.variable.Variable;\r
35 import org.simantics.db.request.Read;\r
36 import org.simantics.graph.representation.TransferableGraph1;\r
37 import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
38 \r
39 public class ClipboardUtils {\r
40         \r
41         public static String HINT_TARGET_RESOURCE = "HINT_TARGET_RESOURCE";\r
42 \r
43         public static <T> T accept(Set<Representation> set, Key key) throws DatabaseException {\r
44                 return accept(set, key, Collections.emptyMap());\r
45         }\r
46 \r
47         public static <T> T accept(Set<Representation> set, Key key, Map<String,Object> hints) throws DatabaseException {\r
48                 for(Representation r : set) if(r.getKey().equals(key)) return r.getValue(SimanticsInternal.getSession(), hints);\r
49                 return null;\r
50         }\r
51         \r
52         public static <T> T accept(RequestProcessor processor, Set<Representation> set, Key key) throws DatabaseException {\r
53                 return accept(processor, set, key, Collections.emptyMap());\r
54         }\r
55 \r
56         public static <T> T accept(RequestProcessor processor, Set<Representation> set, Key key, Map<String,Object> hints) throws DatabaseException {\r
57                 for(Representation r : set) if(r.getKey().equals(key)) return r.getValue(processor, hints);\r
58                 return null;\r
59         }\r
60 \r
61         public static <T> T accept(ReadGraph graph, Set<Representation> set, Key key) throws DatabaseException {\r
62                 return accept(graph, set, key, Collections.<String, Object>emptyMap());\r
63         }\r
64 \r
65         public static <T> T accept(ReadGraph graph, Set<Representation> set, Key key, Map<String,Object> hints) throws DatabaseException {\r
66                 for(Representation r : set) if(r.getKey().equals(key)) return r.getValue(graph, hints);\r
67                 return null;\r
68         }\r
69         \r
70         public static <T> T acceptPossible(ReadGraph graph, Key key) throws DatabaseException {\r
71                 return acceptPossible(graph, key, Collections.emptyMap());\r
72         }\r
73 \r
74         public static <T> T acceptPossible(ReadGraph graph, Key key, Map<String,Object> hints) throws DatabaseException {\r
75             Collection<T> results = accept(graph, key, hints);\r
76             if(results.size() == 1) return results.iterator().next();\r
77             else return null;\r
78         }\r
79 \r
80     @SuppressWarnings("unchecked")\r
81     public static <T> Collection<T> accept(ReadGraph graph, Key key, Map<String,Object> hints) throws DatabaseException {\r
82         ArrayList<T> result = new ArrayList<T>();\r
83         for(Set<Representation> rs : SimanticsInternal.getClipboard().getContents()) {\r
84             for(Representation r : rs) {\r
85                 if(r.getKey().equals(key)) {\r
86                     result.add((T)r.getValue(graph, hints));\r
87                     continue;\r
88                 }\r
89             }\r
90         }\r
91         return result;\r
92     }\r
93 \r
94         public static SimanticsClipboard fileClipboard(String fileName) throws IOException {\r
95                 \r
96                 DataContainer container = DataContainers.readFile(new File(fileName));\r
97                 \r
98                 try {\r
99                         Representation tgRep = new TGRepresentation((TransferableGraph1)container.content.getValue(TransferableGraph1.BINDING));\r
100                         Representation dcRep = new DataContainerRepresentation(container);\r
101                         return SimanticsClipboardImpl.make(dcRep, tgRep);\r
102                 } catch (AdaptException e) {\r
103                         Logger.defaultLogError(e);\r
104                         return SimanticsClipboardImpl.EMPTY;\r
105                 }\r
106                 \r
107                 \r
108         }\r
109         \r
110         public static Representation createTransferableGraph(Resource ... resources) {\r
111                 return new TGRepresentation(resources);\r
112         }\r
113 \r
114         public static Representation createTransferableGraph(TransferableGraphConfiguration2 configuration) {\r
115                 return new TGRepresentation(configuration);\r
116         }\r
117 \r
118         public static Representation createTransferableGraph(boolean ignoreVirtualResources, Resource ... resources) {\r
119                 return new TGRepresentation(ignoreVirtualResources, resources);\r
120         }\r
121 \r
122         public static Representation createVariable(String uri) {\r
123                 return new VariableRepresentation(uri);\r
124         }\r
125 \r
126         public static Representation createVariable(RequestProcessor processor, final Variable var) {\r
127                 \r
128                 try {\r
129                         \r
130                         return new VariableRepresentation(processor.syncRequest(new Read<String>() {\r
131 \r
132                                 @Override\r
133                                 public String perform(ReadGraph graph) throws DatabaseException {\r
134                                         return var.getURI(graph);\r
135                                 }\r
136                                 \r
137                         }));\r
138                         \r
139                 } catch (DatabaseException e) {\r
140                         Logger.defaultLogError(e);\r
141                 }\r
142                 \r
143                 return null;\r
144                 \r
145         }\r
146 \r
147     public static Representation createCopyResources(final Collection<Resource> resources) {\r
148         return new ResourceCopyRepresentation(resources);\r
149     }\r
150 \r
151     public static Representation createCutResources(final Collection<Resource> resources) {\r
152         return new ResourceCutRepresentation(resources);\r
153     }\r
154     \r
155     public static PasteHandler pasteHandler(Resource resource) throws DatabaseException {\r
156         return SimanticsInternal.sync(new ResourceRead<PasteHandler>(resource) {\r
157 \r
158                         @Override\r
159                         public PasteHandler perform(ReadGraph graph) throws DatabaseException {\r
160                                 return graph.adapt(resource, PasteHandler.class);\r
161                         }\r
162                 \r
163         });\r
164     }\r
165 \r
166 }\r