--- /dev/null
+package org.simantics.db.layer0.util;\r
+\r
+import java.util.Arrays;\r
+import java.util.Map;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RequestProcessor;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.UniqueRead;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.util.SimanticsClipboard.Representation;\r
+import org.simantics.graph.db.TransferableGraphs;\r
+import org.simantics.graph.representation.TransferableGraph1;\r
+import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
+\r
+public class TGRepresentation implements Representation {\r
+\r
+ protected boolean ignoreVirtualResources = false;\r
+ protected Resource[] resources;\r
+ private TransferableGraph1 value = null;\r
+ private TransferableGraphConfiguration2 configuration;\r
+ \r
+ public TGRepresentation(Resource ... resources) {\r
+ this.resources = resources;\r
+ }\r
+\r
+ public TGRepresentation(boolean ignoreVirtualResources, Resource ... resources) {\r
+ this.ignoreVirtualResources = ignoreVirtualResources;\r
+ this.resources = resources;\r
+ }\r
+\r
+ public TGRepresentation(TransferableGraphConfiguration2 configuration) {\r
+ this.configuration = configuration;\r
+ }\r
+\r
+ public TGRepresentation(TransferableGraph1 value) {\r
+ this.value = value;\r
+ }\r
+\r
+ @Override\r
+ public Key getKey() {\r
+ return SimanticsKeys.KEY_TRANSFERABLE_GRAPH;\r
+ }\r
+ \r
+ public TransferableGraph1 compute(ReadGraph graph, Map<String,Object> hints) throws DatabaseException {\r
+ \r
+ if(configuration == null) {\r
+ configuration = new TransferableGraphConfiguration2(graph, Arrays.asList(resources), ignoreVirtualResources, false);\r
+ configuration.exclusionFunction = TGRepresentationUtils.computeExclusionFunction(graph, resources, hints);\r
+ }\r
+ \r
+ ModelTransferableGraphSource source = graph.syncRequest(new ModelTransferableGraphSourceRequest(configuration));\r
+ return TransferableGraphs.create(graph, source);\r
+ \r
+ }\r
+ \r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ public <T> T getValue(RequestProcessor processor, Map<String,Object> hints) throws DatabaseException {\r
+ \r
+ if(value == null) {\r
+\r
+ value = processor.syncRequest(new UniqueRead<TransferableGraph1>() {\r
+\r
+ @Override\r
+ public TransferableGraph1 perform(ReadGraph graph) throws DatabaseException {\r
+ return compute(graph, hints);\r
+ }\r
+\r
+ });\r
+\r
+ }\r
+ \r
+ return (T)value;\r
+ \r
+ }\r
+ \r
+}
\ No newline at end of file