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