]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/TransferableGraphConfiguration2.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / TransferableGraphConfiguration2.java
diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/TransferableGraphConfiguration2.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/TransferableGraphConfiguration2.java
new file mode 100644 (file)
index 0000000..f122560
--- /dev/null
@@ -0,0 +1,174 @@
+package org.simantics.db.layer0.util;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
+\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RequestProcessor;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.db.common.NamedResource;\r
+import org.simantics.db.common.request.UniqueRead;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.adapter.SubgraphExtent.ExtentStatus;\r
+import org.simantics.db.layer0.util.DomainProcessor3.ExclusionDecision;\r
+import org.simantics.scl.runtime.function.Function1;\r
+\r
+public class TransferableGraphConfiguration2 {\r
+       \r
+       public static class RootSpec {\r
+               public final Resource resource;\r
+               public final String name;\r
+               public final boolean internal;\r
+\r
+               public RootSpec(Resource resource, String name, boolean internal) {\r
+                       if (resource == null)\r
+                               throw new NullPointerException("null resource");\r
+                       if (name == null)\r
+                               throw new NullPointerException("null name");\r
+                       this.resource = resource;\r
+                       this.name = name;\r
+                       this.internal = internal;\r
+               }\r
+\r
+               @Override\r
+               public String toString() {\r
+                       return "RootSpec[" + name + ", " + resource + ", " + internal + "]"; \r
+               }\r
+\r
+               @Override\r
+               public int hashCode() {\r
+                       final int prime = 31;\r
+                       int result = 1;\r
+                       result = prime * result + (internal ? 1231 : 1237);\r
+                       result = prime * result + resource.hashCode();\r
+                       result = prime * result + name.hashCode();\r
+                       return result;\r
+               }\r
+\r
+               @Override\r
+               public boolean equals(Object obj) {\r
+                       if (this == obj)\r
+                               return true;\r
+                       if (obj == null)\r
+                               return false;\r
+                       if (getClass() != obj.getClass())\r
+                               return false;\r
+                       RootSpec other = (RootSpec) obj;\r
+                       return internal == other.internal && resource.equals(other.resource) && name.equals(other.name);\r
+               }\r
+       }\r
+       \r
+       final public TreeMap<String, Variant> baseExtensions = new TreeMap<String,Variant>();\r
+       final public Resource indexRoot;\r
+       final public Collection<RootSpec> roots;\r
+       final public Map<Resource, ExtentStatus> preStatus;\r
+       final public boolean ignoreVirtualResources;\r
+       final public boolean validate;\r
+       \r
+       /**\r
+        * <code>true</code> to export values, <code>false</code> to skip the actual\r
+        * values and only write the resource id.\r
+        */\r
+       public boolean values = true;\r
+\r
+       public Collection<TGValueModifier> valueModifiers;\r
+       public Function1<Statement,ExclusionDecision> exclusionFunction;\r
+\r
+       public TransferableGraphConfiguration2(Resource indexRoot, Collection<RootSpec> roots, Map<Resource, ExtentStatus> preStatus, boolean ignoreVirtualResources, boolean validate) {\r
+               this.indexRoot = indexRoot;\r
+               this.roots = roots;\r
+               this.preStatus = preStatus;\r
+               this.ignoreVirtualResources = ignoreVirtualResources;\r
+               this.validate = validate;\r
+               this.valueModifiers = null;\r
+       }\r
+\r
+       public TransferableGraphConfiguration2(Resource indexRoot, Collection<RootSpec> roots, Map<Resource, ExtentStatus> preStatus, boolean ignoreVirtualResources) {\r
+               this(indexRoot, roots, preStatus, ignoreVirtualResources, true);\r
+       }\r
+\r
+       public TransferableGraphConfiguration2(Resource indexRoot, Collection<RootSpec> roots, Map<Resource, ExtentStatus> preStatus) {\r
+               this(indexRoot, roots, preStatus, true);\r
+       }\r
+\r
+       public TransferableGraphConfiguration2(TransferableGraphConfiguration2 conf) throws DatabaseException {\r
+               this(conf.indexRoot, conf.roots, conf.preStatus, conf.ignoreVirtualResources, conf.validate);\r
+       }\r
+\r
+       public TransferableGraphConfiguration2(ReadGraph graph, Resource model, boolean ignoreVirtualResources, boolean validate) throws DatabaseException {\r
+               this(new TGConfigurer(graph, ignoreVirtualResources, validate).roots2(Collections.singletonList(model)).create());\r
+       }\r
+\r
+       public TransferableGraphConfiguration2(ReadGraph graph, Collection<Resource> roots, boolean ignoreVirtualResources, boolean validate) throws DatabaseException {\r
+           this(new TGConfigurer(graph, ignoreVirtualResources, validate).roots2(roots).create());\r
+       }\r
+\r
+       public TransferableGraphConfiguration2(ReadGraph graph, Resource model, boolean ignoreVirtualResources) throws DatabaseException {\r
+               this(graph, model, ignoreVirtualResources, true);\r
+       }\r
+\r
+       public TransferableGraphConfiguration2(ReadGraph graph, Resource model) throws DatabaseException {\r
+               this(graph, model, true);\r
+       }\r
+       \r
+       public TransferableGraphConfiguration2(ReadGraph graph, Collection<RootSpec> roots, Collection<Resource> resourceRoots, Collection<Resource> exclusions) throws DatabaseException {\r
+               this(new TGConfigurer(graph, true).roots(roots).roots2(resourceRoots).exclusions(exclusions).create());\r
+       }\r
+\r
+       public TransferableGraphConfiguration2(ReadGraph graph, Collection<RootSpec> roots, Collection<Resource> resourceRoots, Collection<Resource> exclusions, boolean ignoreVirtualResource, boolean validate) throws DatabaseException {\r
+               this(new TGConfigurer(graph, ignoreVirtualResource, validate).roots(roots).roots2(resourceRoots).exclusions(exclusions).create());\r
+       }\r
+\r
+       public static TransferableGraphConfiguration2 createWithNames(RequestProcessor processor, final Collection<NamedResource> roots, final Collection<Resource> exclusions, final boolean ignoreVirtualResource, final boolean validate) throws DatabaseException {\r
+               return processor.sync(new UniqueRead<TransferableGraphConfiguration2>() {\r
+\r
+                       @Override\r
+                       public TransferableGraphConfiguration2 perform(ReadGraph graph) throws DatabaseException {\r
+                               return new TransferableGraphConfiguration2(graph, translate(roots), Collections.<Resource>emptyList(), exclusions, ignoreVirtualResource, validate);\r
+                       }\r
+                       \r
+               });\r
+       }\r
+\r
+       public static TransferableGraphConfiguration2 createWithNames2(RequestProcessor processor, final Collection<RootSpec> roots, final Collection<Resource> exclusions, final boolean ignoreVirtualResource, final boolean validate) throws DatabaseException {\r
+               return processor.sync(new UniqueRead<TransferableGraphConfiguration2>() {\r
+\r
+                       @Override\r
+                       public TransferableGraphConfiguration2 perform(ReadGraph graph) throws DatabaseException {\r
+                               return new TransferableGraphConfiguration2(graph, roots, Collections.<Resource>emptyList(), exclusions, ignoreVirtualResource, validate);\r
+                       }\r
+                       \r
+               });\r
+       }\r
+\r
+       public static TransferableGraphConfiguration2 createWithNames(RequestProcessor processor, final Collection<NamedResource> roots, final Collection<Resource> exclusions) throws DatabaseException {\r
+               return createWithNames(processor, roots, exclusions, true, true);\r
+       }\r
+\r
+       public static TransferableGraphConfiguration2 createWithResources(RequestProcessor processor, final Collection<Resource> roots, final Collection<Resource> exclusions) throws DatabaseException {\r
+               return processor.sync(new UniqueRead<TransferableGraphConfiguration2>() {\r
+\r
+                       @Override\r
+                       public TransferableGraphConfiguration2 perform(ReadGraph graph) throws DatabaseException {\r
+                               return new TransferableGraphConfiguration2(graph, Collections.<RootSpec>emptyList(), roots, exclusions);\r
+                       }\r
+                       \r
+               });\r
+       }\r
+\r
+       public static TransferableGraphConfiguration2 createForModel(RequestProcessor processor, final Resource model) throws DatabaseException {\r
+               return createWithResources(processor, Collections.singletonList(model), Collections.<Resource>emptyList());\r
+       }\r
+\r
+       private static Collection<RootSpec> translate(Collection<NamedResource> roots) {\r
+               ArrayList<RootSpec> result = new ArrayList<RootSpec>();\r
+               for(NamedResource nr : roots) result.add(new RootSpec(nr.getResource(), nr.getName(), true));\r
+               return result;\r
+       }\r
+       \r
+}\r