1 package org.simantics.db.layer0.util;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collection;
\r
5 import java.util.HashMap;
\r
6 import java.util.Map;
\r
8 import org.simantics.databoard.Bindings;
\r
9 import org.simantics.db.ReadGraph;
\r
10 import org.simantics.db.Resource;
\r
11 import org.simantics.db.common.NamedResource;
\r
12 import org.simantics.db.common.request.PossibleIndexRoot;
\r
13 import org.simantics.db.common.utils.CommonDBUtils;
\r
14 import org.simantics.db.exception.DatabaseException;
\r
15 import org.simantics.db.layer0.adapter.SubgraphExtent.ExtentStatus;
\r
16 import org.simantics.db.layer0.util.TransferableGraphConfiguration2.RootSpec;
\r
17 import org.simantics.layer0.Layer0;
\r
19 public class TGConfigurer {
\r
21 final private ReadGraph graph;
\r
22 final Collection<RootSpec> roots = new ArrayList<RootSpec>();
\r
23 final Map<Resource, ExtentStatus> preStatus = new HashMap<Resource, ExtentStatus>();
\r
24 final boolean ignoreVirtualResources;
\r
25 final boolean validate;
\r
27 public TGConfigurer(ReadGraph graph, boolean ignoreVirtualResources, boolean validate) {
\r
29 this.ignoreVirtualResources = ignoreVirtualResources;
\r
30 this.validate = validate;
\r
33 public TGConfigurer(ReadGraph graph, boolean ignoreVirtualResources) {
\r
34 this(graph, ignoreVirtualResources, true);
\r
37 public TGConfigurer exclusions(Collection<Resource> exclusions) {
\r
38 for(Resource r : exclusions) {
\r
39 preStatus.put(r, ExtentStatus.EXCLUDED);
\r
44 public TGConfigurer roots(Collection<RootSpec> rs) throws DatabaseException {
\r
45 Layer0 L0 = Layer0.getInstance(graph);
\r
46 for(RootSpec root : rs) {
\r
47 Resource nameResource = graph.getPossibleObject(root.resource, L0.HasName);
\r
48 if(nameResource != null) preStatus.put(nameResource, ExtentStatus.EXCLUDED);
\r
49 // String name = graph.getValue(nameResource, Bindings.STRING);
\r
50 roots.add(new RootSpec(root.resource, root.name, root.internal));
\r
51 preStatus.put(root.resource, ExtentStatus.INTERNAL);
\r
56 public TGConfigurer roots2(Collection<Resource> rs) throws DatabaseException {
\r
57 Layer0 L0 = Layer0.getInstance(graph);
\r
58 for(Resource root : rs) {
\r
59 Resource nameResource = graph.getPossibleObject(root, L0.HasName);
\r
60 String name = "<no name>";
\r
61 if(nameResource != null) {
\r
62 name = graph.getPossibleValue(nameResource, Bindings.STRING);
\r
63 if(name == null) name = "<no name>";
\r
64 preStatus.put(nameResource, ExtentStatus.EXCLUDED);
\r
66 roots.add(new RootSpec(root, name, true));
\r
67 preStatus.put(root, ExtentStatus.INTERNAL);
\r
72 public TGConfigurer roots3(Collection<NamedResource> rs) throws DatabaseException {
\r
73 Layer0 L0 = Layer0.getInstance(graph);
\r
74 for(NamedResource root : rs) {
\r
75 Resource nameResource = graph.getPossibleObject(root.getResource(), L0.HasName);
\r
76 // String name = graph.getValue(nameResource, Bindings.STRING);
\r
77 roots.add(new RootSpec(root.getResource(), root.getName(), true));
\r
78 preStatus.put(root.getResource(), ExtentStatus.INTERNAL);
\r
79 preStatus.put(nameResource, ExtentStatus.EXCLUDED);
\r
84 public TransferableGraphConfiguration2 create() throws DatabaseException {
\r
86 // Final preparation
\r
88 // -Exclude root library if not explicitly included
\r
89 if (!roots.contains(graph.getRootLibrary()))
\r
90 preStatus.put(graph.getRootLibrary(), ExtentStatus.EXCLUDED);
\r
92 // -Exclude owners if not explicitly defined
\r
93 Layer0 L0 = Layer0.getInstance(graph);
\r
94 ArrayList<Resource> rootList = new ArrayList<Resource>();
\r
95 for (RootSpec root : roots) {
\r
97 rootList.add(root.resource);
\r
98 for (Resource owner : graph.getObjects(root.resource, L0.IsOwnedBy)) {
\r
99 ExtentStatus ownerStatus = preStatus.get(owner);
\r
100 if(ownerStatus == null)
\r
101 preStatus.put(owner, ExtentStatus.EXCLUDED);
\r
104 preStatus.put(root.resource, ExtentStatus.EXTERNAL);
\r
108 Resource owner = CommonDBUtils.getNearestOwner(graph, rootList);
\r
109 if(owner != null) {
\r
110 Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(owner));
\r
111 return new TransferableGraphConfiguration2(indexRoot, roots, preStatus, ignoreVirtualResources, validate);
\r
113 return new TransferableGraphConfiguration2(null, roots, preStatus, ignoreVirtualResources, validate);
\r