]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/TGRepresentation.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / TGRepresentation.java
1 package org.simantics.db.layer0.util;\r
2 \r
3 import java.util.Arrays;\r
4 import java.util.Map;\r
5 \r
6 import org.simantics.db.ReadGraph;\r
7 import org.simantics.db.RequestProcessor;\r
8 import org.simantics.db.Resource;\r
9 import org.simantics.db.common.request.UniqueRead;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.db.layer0.util.SimanticsClipboard.Representation;\r
12 import org.simantics.graph.db.TransferableGraphs;\r
13 import org.simantics.graph.representation.TransferableGraph1;\r
14 import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
15 \r
16 public class TGRepresentation implements Representation {\r
17 \r
18         protected boolean ignoreVirtualResources = false;\r
19         protected Resource[] resources;\r
20         private TransferableGraph1 value = null;\r
21         private TransferableGraphConfiguration2 configuration;\r
22         \r
23         public TGRepresentation(Resource ... resources) {\r
24                 this.resources = resources;\r
25         }\r
26 \r
27         public TGRepresentation(boolean ignoreVirtualResources, Resource ... resources) {\r
28                 this.ignoreVirtualResources = ignoreVirtualResources;\r
29                 this.resources = resources;\r
30         }\r
31 \r
32         public TGRepresentation(TransferableGraphConfiguration2 configuration) {\r
33                 this.configuration = configuration;\r
34         }\r
35 \r
36         public TGRepresentation(TransferableGraph1 value) {\r
37                 this.value = value;\r
38         }\r
39 \r
40         @Override\r
41         public Key getKey() {\r
42                 return SimanticsKeys.KEY_TRANSFERABLE_GRAPH;\r
43         }\r
44         \r
45         public TransferableGraph1 compute(ReadGraph graph, Map<String,Object> hints) throws DatabaseException {\r
46                 \r
47                 if(configuration == null) {\r
48                         configuration = new TransferableGraphConfiguration2(graph, Arrays.asList(resources), ignoreVirtualResources, false);\r
49                         configuration.exclusionFunction = TGRepresentationUtils.computeExclusionFunction(graph, resources, hints);\r
50                 }\r
51                 \r
52                 ModelTransferableGraphSource source = graph.syncRequest(new ModelTransferableGraphSourceRequest(configuration));\r
53                 return TransferableGraphs.create(graph, source);\r
54                 \r
55         }\r
56         \r
57         @SuppressWarnings("unchecked")\r
58         @Override\r
59         public <T> T getValue(RequestProcessor processor, Map<String,Object> hints) throws DatabaseException {\r
60                 \r
61                 if(value == null) {\r
62 \r
63                         value = processor.syncRequest(new UniqueRead<TransferableGraph1>() {\r
64 \r
65                                 @Override\r
66                                 public TransferableGraph1 perform(ReadGraph graph) throws DatabaseException {\r
67                                         return compute(graph, hints);\r
68                                 }\r
69 \r
70                         });\r
71 \r
72                 }\r
73                 \r
74                 return (T)value;\r
75                 \r
76         }\r
77         \r
78 }