1 package org.simantics.db.layer0.util;
\r
3 import java.util.Arrays;
\r
4 import java.util.Map;
\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
16 public class TGRepresentation implements Representation {
\r
18 protected boolean ignoreVirtualResources = false;
\r
19 protected Resource[] resources;
\r
20 private TransferableGraph1 value = null;
\r
21 private TransferableGraphConfiguration2 configuration;
\r
23 public TGRepresentation(Resource ... resources) {
\r
24 this.resources = resources;
\r
27 public TGRepresentation(boolean ignoreVirtualResources, Resource ... resources) {
\r
28 this.ignoreVirtualResources = ignoreVirtualResources;
\r
29 this.resources = resources;
\r
32 public TGRepresentation(TransferableGraphConfiguration2 configuration) {
\r
33 this.configuration = configuration;
\r
36 public TGRepresentation(TransferableGraph1 value) {
\r
41 public Key getKey() {
\r
42 return SimanticsKeys.KEY_TRANSFERABLE_GRAPH;
\r
45 public TransferableGraph1 compute(ReadGraph graph, Map<String,Object> hints) throws DatabaseException {
\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
52 ModelTransferableGraphSource source = graph.syncRequest(new ModelTransferableGraphSourceRequest(configuration));
\r
53 return TransferableGraphs.create(graph, source);
\r
57 @SuppressWarnings("unchecked")
\r
59 public <T> T getValue(RequestProcessor processor, Map<String,Object> hints) throws DatabaseException {
\r
63 value = processor.syncRequest(new UniqueRead<TransferableGraph1>() {
\r
66 public TransferableGraph1 perform(ReadGraph graph) throws DatabaseException {
\r
67 return compute(graph, hints);
\r