1 package org.simantics.db.layer0.util;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collection;
\r
5 import java.util.Collections;
\r
6 import java.util.Map;
\r
7 import java.util.TreeMap;
\r
9 import org.simantics.databoard.binding.mutable.Variant;
\r
10 import org.simantics.db.ReadGraph;
\r
11 import org.simantics.db.RequestProcessor;
\r
12 import org.simantics.db.Resource;
\r
13 import org.simantics.db.Statement;
\r
14 import org.simantics.db.common.NamedResource;
\r
15 import org.simantics.db.common.request.UniqueRead;
\r
16 import org.simantics.db.exception.DatabaseException;
\r
17 import org.simantics.db.layer0.adapter.SubgraphExtent.ExtentStatus;
\r
18 import org.simantics.db.layer0.util.DomainProcessor3.ExclusionDecision;
\r
19 import org.simantics.scl.runtime.function.Function1;
\r
21 public class TransferableGraphConfiguration2 {
\r
23 public static class RootSpec {
\r
24 public final Resource resource;
\r
25 public final String name;
\r
26 public final boolean internal;
\r
28 public RootSpec(Resource resource, String name, boolean internal) {
\r
29 if (resource == null)
\r
30 throw new NullPointerException("null resource");
\r
32 throw new NullPointerException("null name");
\r
33 this.resource = resource;
\r
35 this.internal = internal;
\r
39 public String toString() {
\r
40 return "RootSpec[" + name + ", " + resource + ", " + internal + "]";
\r
44 public int hashCode() {
\r
45 final int prime = 31;
\r
47 result = prime * result + (internal ? 1231 : 1237);
\r
48 result = prime * result + resource.hashCode();
\r
49 result = prime * result + name.hashCode();
\r
54 public boolean equals(Object obj) {
\r
59 if (getClass() != obj.getClass())
\r
61 RootSpec other = (RootSpec) obj;
\r
62 return internal == other.internal && resource.equals(other.resource) && name.equals(other.name);
\r
66 final public TreeMap<String, Variant> baseExtensions = new TreeMap<String,Variant>();
\r
67 final public Resource indexRoot;
\r
68 final public Collection<RootSpec> roots;
\r
69 final public Map<Resource, ExtentStatus> preStatus;
\r
70 final public boolean ignoreVirtualResources;
\r
71 final public boolean validate;
\r
74 * <code>true</code> to export values, <code>false</code> to skip the actual
\r
75 * values and only write the resource id.
\r
77 public boolean values = true;
\r
79 public Collection<TGValueModifier> valueModifiers;
\r
80 public Function1<Statement,ExclusionDecision> exclusionFunction;
\r
82 public TransferableGraphConfiguration2(Resource indexRoot, Collection<RootSpec> roots, Map<Resource, ExtentStatus> preStatus, boolean ignoreVirtualResources, boolean validate) {
\r
83 this.indexRoot = indexRoot;
\r
85 this.preStatus = preStatus;
\r
86 this.ignoreVirtualResources = ignoreVirtualResources;
\r
87 this.validate = validate;
\r
88 this.valueModifiers = null;
\r
91 public TransferableGraphConfiguration2(Resource indexRoot, Collection<RootSpec> roots, Map<Resource, ExtentStatus> preStatus, boolean ignoreVirtualResources) {
\r
92 this(indexRoot, roots, preStatus, ignoreVirtualResources, true);
\r
95 public TransferableGraphConfiguration2(Resource indexRoot, Collection<RootSpec> roots, Map<Resource, ExtentStatus> preStatus) {
\r
96 this(indexRoot, roots, preStatus, true);
\r
99 public TransferableGraphConfiguration2(TransferableGraphConfiguration2 conf) throws DatabaseException {
\r
100 this(conf.indexRoot, conf.roots, conf.preStatus, conf.ignoreVirtualResources, conf.validate);
\r
103 public TransferableGraphConfiguration2(ReadGraph graph, Resource model, boolean ignoreVirtualResources, boolean validate) throws DatabaseException {
\r
104 this(new TGConfigurer(graph, ignoreVirtualResources, validate).roots2(Collections.singletonList(model)).create());
\r
107 public TransferableGraphConfiguration2(ReadGraph graph, Collection<Resource> roots, boolean ignoreVirtualResources, boolean validate) throws DatabaseException {
\r
108 this(new TGConfigurer(graph, ignoreVirtualResources, validate).roots2(roots).create());
\r
111 public TransferableGraphConfiguration2(ReadGraph graph, Resource model, boolean ignoreVirtualResources) throws DatabaseException {
\r
112 this(graph, model, ignoreVirtualResources, true);
\r
115 public TransferableGraphConfiguration2(ReadGraph graph, Resource model) throws DatabaseException {
\r
116 this(graph, model, true);
\r
119 public TransferableGraphConfiguration2(ReadGraph graph, Collection<RootSpec> roots, Collection<Resource> resourceRoots, Collection<Resource> exclusions) throws DatabaseException {
\r
120 this(new TGConfigurer(graph, true).roots(roots).roots2(resourceRoots).exclusions(exclusions).create());
\r
123 public TransferableGraphConfiguration2(ReadGraph graph, Collection<RootSpec> roots, Collection<Resource> resourceRoots, Collection<Resource> exclusions, boolean ignoreVirtualResource, boolean validate) throws DatabaseException {
\r
124 this(new TGConfigurer(graph, ignoreVirtualResource, validate).roots(roots).roots2(resourceRoots).exclusions(exclusions).create());
\r
127 public static TransferableGraphConfiguration2 createWithNames(RequestProcessor processor, final Collection<NamedResource> roots, final Collection<Resource> exclusions, final boolean ignoreVirtualResource, final boolean validate) throws DatabaseException {
\r
128 return processor.sync(new UniqueRead<TransferableGraphConfiguration2>() {
\r
131 public TransferableGraphConfiguration2 perform(ReadGraph graph) throws DatabaseException {
\r
132 return new TransferableGraphConfiguration2(graph, translate(roots), Collections.<Resource>emptyList(), exclusions, ignoreVirtualResource, validate);
\r
138 public static TransferableGraphConfiguration2 createWithNames2(RequestProcessor processor, final Collection<RootSpec> roots, final Collection<Resource> exclusions, final boolean ignoreVirtualResource, final boolean validate) throws DatabaseException {
\r
139 return processor.sync(new UniqueRead<TransferableGraphConfiguration2>() {
\r
142 public TransferableGraphConfiguration2 perform(ReadGraph graph) throws DatabaseException {
\r
143 return new TransferableGraphConfiguration2(graph, roots, Collections.<Resource>emptyList(), exclusions, ignoreVirtualResource, validate);
\r
149 public static TransferableGraphConfiguration2 createWithNames(RequestProcessor processor, final Collection<NamedResource> roots, final Collection<Resource> exclusions) throws DatabaseException {
\r
150 return createWithNames(processor, roots, exclusions, true, true);
\r
153 public static TransferableGraphConfiguration2 createWithResources(RequestProcessor processor, final Collection<Resource> roots, final Collection<Resource> exclusions) throws DatabaseException {
\r
154 return processor.sync(new UniqueRead<TransferableGraphConfiguration2>() {
\r
157 public TransferableGraphConfiguration2 perform(ReadGraph graph) throws DatabaseException {
\r
158 return new TransferableGraphConfiguration2(graph, Collections.<RootSpec>emptyList(), roots, exclusions);
\r
164 public static TransferableGraphConfiguration2 createForModel(RequestProcessor processor, final Resource model) throws DatabaseException {
\r
165 return createWithResources(processor, Collections.singletonList(model), Collections.<Resource>emptyList());
\r
168 private static Collection<RootSpec> translate(Collection<NamedResource> roots) {
\r
169 ArrayList<RootSpec> result = new ArrayList<RootSpec>();
\r
170 for(NamedResource nr : roots) result.add(new RootSpec(nr.getResource(), nr.getName(), true));
\r