-package org.simantics.graph.db;\r
-\r
-import java.util.Map;\r
-\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.WriteOnlyGraph;\r
-import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;\r
-import org.simantics.db.common.uri.UnescapedChildMapOfResource;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.exception.ResourceNotFoundException;\r
-import org.simantics.db.service.SerialisationSupport;\r
-import org.simantics.graph.representation.External;\r
-import org.simantics.graph.representation.Identity;\r
-import org.simantics.graph.representation.IdentityDefinition;\r
-import org.simantics.graph.representation.Internal;\r
-import org.simantics.graph.representation.Root;\r
-import org.simantics.graph.representation.TransferableGraph1;\r
-import org.simantics.graph.representation.Value;\r
-\r
-public class TGToGraphMap {\r
- private TransferableGraph1 tg;\r
- private Resource[] resources;\r
- \r
- private Resource RootLibrary;\r
- private Resource String;\r
- //private Resource Library;\r
- \r
- private Resource InstanceOf;\r
- private Resource ConsistsOf;\r
- private Resource PartOf;\r
- private Resource HasName;\r
- private Resource NameOf;\r
- \r
- private void findBuiltins(WriteOnlyGraph g) throws DatabaseException {\r
- RootLibrary = g.getBuiltin("http:/");\r
- String = g.getBuiltin(CoreInitialization.LAYER0 + "String");\r
- //Library = g.getBuiltin(CoreInitialization.LAYER0 + "Library");\r
- InstanceOf = g.getBuiltin(CoreInitialization.LAYER0 + "InstanceOf");\r
- ConsistsOf = g.getBuiltin(CoreInitialization.LAYER0 + "ConsistsOf");\r
- PartOf = g.getBuiltin(CoreInitialization.LAYER0 + "PartOf");\r
- HasName = g.getBuiltin(CoreInitialization.LAYER0 + "HasName");\r
- NameOf = g.getBuiltin(CoreInitialization.LAYER0 + "NameOf");\r
- }\r
- \r
- private void findBuiltins(ReadGraph g) throws DatabaseException {\r
- RootLibrary = g.getBuiltin("http:/");\r
- String = g.getBuiltin(CoreInitialization.LAYER0 + "String");\r
- //Library = g.getBuiltin(CoreInitialization.LAYER0 + "Library");\r
- InstanceOf = g.getBuiltin(CoreInitialization.LAYER0 + "InstanceOf");\r
- ConsistsOf = g.getBuiltin(CoreInitialization.LAYER0 + "ConsistsOf");\r
- PartOf = g.getBuiltin(CoreInitialization.LAYER0 + "PartOf");\r
- HasName = g.getBuiltin(CoreInitialization.LAYER0 + "HasName");\r
- NameOf = g.getBuiltin(CoreInitialization.LAYER0 + "NameOf");\r
- }\r
- \r
- public TGToGraphMap(TransferableGraph1 tg) {\r
- this.tg = tg;\r
- this.resources = new Resource[tg.resourceCount];\r
- } \r
- \r
- public long[] getResources(SerialisationSupport serializer) throws DatabaseException {\r
- final int count = resources.length;\r
- long[] resourceIds = new long[count];\r
- for(int i=0;i<count;++i)\r
- resourceIds[i] = serializer.getRandomAccessId(resources[i]);\r
- return resourceIds;\r
- } \r
- \r
- public Resource[] getResources() {\r
- return resources;\r
- }\r
- \r
- private void claimChild(WriteOnlyGraph graph, Resource parent, String name, Resource child) throws DatabaseException {\r
- //graph.claim(parent, ConsistsOf, PartOf, child);\r
- Resource nameResource = graph.newResource();\r
- graph.claim(nameResource, InstanceOf, null, String);\r
- graph.claimValue(nameResource, name, Bindings.STRING);\r
- graph.claim(child, HasName, NameOf, nameResource);\r
- }\r
- \r
- public void addMappedOldResources(\r
- SerialisationSupport serializer,\r
- int[] oldToNew,\r
- Resource[] oldResources) throws DatabaseException {\r
- assert(oldToNew.length == oldResources.length);\r
- for(int i=0;i<oldToNew.length;++i) {\r
- int id = oldToNew[i];\r
- if(id >= 0)\r
- resources[id] = oldResources[i];\r
- }\r
- }\r
- \r
- public void addOldResources(\r
- SerialisationSupport serializer, \r
- long[] oldResources) throws DatabaseException {\r
- assert(oldResources.length == resources.length);\r
- for(int i=0;i<oldResources.length;++i) {\r
- resources[i] = serializer.getResource(oldResources[i]);\r
- }\r
- }\r
-\r
- public void prepare(ReadGraph graph) throws DatabaseException {\r
- if(RootLibrary == null)\r
- findBuiltins(graph);\r
- Resource[] resources = this.resources; \r
- \r
- for(Identity identity : tg.identities) {\r
- IdentityDefinition definition = identity.definition;\r
- if(definition instanceof External) {\r
- External def = (External)definition;\r
- Resource parent = resources[def.parent];\r
- Resource child = graph.syncRequest(\r
- new UnescapedChildMapOfResource(parent), \r
- new TransientCacheAsyncListener<Map<String, Resource>>())\r
- .get(def.name);\r
- if(child == null)\r
- throw new ResourceNotFoundException(def.name);\r
- resources[identity.resource] = child;\r
- }\r
- else if(definition instanceof Root) {\r
- resources[identity.resource] = RootLibrary; \r
- }\r
- }\r
- }\r
- \r
- public void claim(WriteOnlyGraph graph) throws DatabaseException {\r
- if(RootLibrary == null)\r
- findBuiltins(graph);\r
- Resource[] resources = this.resources;\r
- \r
- // Create blank resources\r
- for(int i=0;i<resources.length;++i)\r
- if(resources[i] == null)\r
- resources[i] = graph.newResource();\r
- \r
- // Internal identities \r
- for(Identity identity : tg.identities) {\r
- IdentityDefinition definition = identity.definition;\r
- if(definition instanceof Internal) {\r
- Internal def = (Internal)definition;\r
- claimChild(graph, resources[def.parent], def.name, resources[identity.resource]);\r
- } \r
- } \r
- \r
- // Write statements\r
- int[] statements = tg.statements;\r
- for(int i=0;i<statements.length;i+=4) {\r
- int inv = statements[i+2];\r
- graph.claim(\r
- resources[statements[i]],\r
- resources[statements[i+1]],\r
- inv < 0 ? null : resources[inv],\r
- resources[statements[i+3]]\r
- );\r
- }\r
- \r
- // Write values\r
- for(Value value : tg.values)\r
- graph.claimValue(resources[value.resource], \r
- value.value.getValue(), value.value.getBinding());\r
- }\r
- \r
- public boolean checkClaim(ReadGraph graph) throws DatabaseException {\r
- \r
- if(RootLibrary == null)\r
- findBuiltins(graph);\r
- \r
- Resource[] resources = this.resources;\r
- \r
- // Create blank resources\r
- for(int i=0;i<resources.length;++i)\r
- if(resources[i] == null)\r
- return true;\r
- \r
- // Internal identities \r
- for(Identity identity : tg.identities) {\r
- IdentityDefinition definition = identity.definition;\r
- if(definition instanceof Internal) {\r
- return true;\r
- } \r
- } \r
- \r
- if(tg.statements.length > 0) return true;\r
- if(tg.values.length > 0) return true;\r
- \r
- return false;\r
- \r
- }\r
-\r
- public void deny(WriteGraph graph) throws DatabaseException {\r
- if(RootLibrary == null)\r
- findBuiltins((ReadGraph)graph);\r
- Resource[] resources = this.resources;\r
- \r
- // Internal identities \r
- for(Identity identity : tg.identities) {\r
- IdentityDefinition definition = identity.definition;\r
- if(definition instanceof Internal) {\r
-// Internal def = (Internal)definition;\r
- /*graph.deny(resources[identity.resource],\r
- PartOf,\r
- resources[def.parent]\r
- );*/\r
- graph.deny(resources[identity.resource], HasName);\r
- }\r
- } \r
- \r
- // Deny statements\r
- int[] statements = tg.statements;\r
- for(int i=0;i<statements.length;i+=4) {\r
- int inv = statements[i+2];\r
- graph.deny(\r
- resources[statements[i]],\r
- resources[statements[i+1]],\r
- inv < 0 ? null : resources[inv],\r
- resources[statements[i+3]]\r
- );\r
- }\r
- \r
- // Deny values\r
- for(Value value : tg.values)\r
- graph.denyValue(resources[value.resource]);\r
- }\r
-\r
- public boolean checkDeny(ReadGraph graph) throws DatabaseException {\r
- \r
- if(RootLibrary == null)\r
- findBuiltins((ReadGraph)graph);\r
- \r
- // Internal identities \r
- for(Identity identity : tg.identities) {\r
- IdentityDefinition definition = identity.definition;\r
- if(definition instanceof Internal) {\r
- return true;\r
- }\r
- } \r
- \r
- if(tg.statements.length > 0) return true;\r
- if(tg.values.length > 0) return true;\r
- \r
- return false;\r
- \r
- }\r
- \r
-}\r
+package org.simantics.graph.db;
+
+import java.util.Map;
+
+import org.simantics.databoard.Bindings;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.WriteOnlyGraph;
+import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;
+import org.simantics.db.common.uri.UnescapedChildMapOfResource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.ResourceNotFoundException;
+import org.simantics.db.service.SerialisationSupport;
+import org.simantics.graph.representation.External;
+import org.simantics.graph.representation.Identity;
+import org.simantics.graph.representation.IdentityDefinition;
+import org.simantics.graph.representation.Internal;
+import org.simantics.graph.representation.Root;
+import org.simantics.graph.representation.TransferableGraph1;
+import org.simantics.graph.representation.Value;
+
+public class TGToGraphMap {
+ private TransferableGraph1 tg;
+ private Resource[] resources;
+
+ private Resource RootLibrary;
+ private Resource String;
+ //private Resource Library;
+
+ private Resource InstanceOf;
+ private Resource ConsistsOf;
+ private Resource PartOf;
+ private Resource HasName;
+ private Resource NameOf;
+
+ private void findBuiltins(WriteOnlyGraph g) throws DatabaseException {
+ RootLibrary = g.getBuiltin("http:/");
+ String = g.getBuiltin(CoreInitialization.LAYER0 + "String");
+ //Library = g.getBuiltin(CoreInitialization.LAYER0 + "Library");
+ InstanceOf = g.getBuiltin(CoreInitialization.LAYER0 + "InstanceOf");
+ ConsistsOf = g.getBuiltin(CoreInitialization.LAYER0 + "ConsistsOf");
+ PartOf = g.getBuiltin(CoreInitialization.LAYER0 + "PartOf");
+ HasName = g.getBuiltin(CoreInitialization.LAYER0 + "HasName");
+ NameOf = g.getBuiltin(CoreInitialization.LAYER0 + "NameOf");
+ }
+
+ private void findBuiltins(ReadGraph g) throws DatabaseException {
+ RootLibrary = g.getBuiltin("http:/");
+ String = g.getBuiltin(CoreInitialization.LAYER0 + "String");
+ //Library = g.getBuiltin(CoreInitialization.LAYER0 + "Library");
+ InstanceOf = g.getBuiltin(CoreInitialization.LAYER0 + "InstanceOf");
+ ConsistsOf = g.getBuiltin(CoreInitialization.LAYER0 + "ConsistsOf");
+ PartOf = g.getBuiltin(CoreInitialization.LAYER0 + "PartOf");
+ HasName = g.getBuiltin(CoreInitialization.LAYER0 + "HasName");
+ NameOf = g.getBuiltin(CoreInitialization.LAYER0 + "NameOf");
+ }
+
+ public TGToGraphMap(TransferableGraph1 tg) {
+ this.tg = tg;
+ this.resources = new Resource[tg.resourceCount];
+ }
+
+ public long[] getResources(SerialisationSupport serializer) throws DatabaseException {
+ final int count = resources.length;
+ long[] resourceIds = new long[count];
+ for(int i=0;i<count;++i)
+ resourceIds[i] = serializer.getRandomAccessId(resources[i]);
+ return resourceIds;
+ }
+
+ public Resource[] getResources() {
+ return resources;
+ }
+
+ private void claimChild(WriteOnlyGraph graph, Resource parent, String name, Resource child) throws DatabaseException {
+ //graph.claim(parent, ConsistsOf, PartOf, child);
+ Resource nameResource = graph.newResource();
+ graph.claim(nameResource, InstanceOf, null, String);
+ graph.claimValue(nameResource, name, Bindings.STRING);
+ graph.claim(child, HasName, NameOf, nameResource);
+ }
+
+ public void addMappedOldResources(
+ SerialisationSupport serializer,
+ int[] oldToNew,
+ Resource[] oldResources) throws DatabaseException {
+ assert(oldToNew.length == oldResources.length);
+ for(int i=0;i<oldToNew.length;++i) {
+ int id = oldToNew[i];
+ if(id >= 0)
+ resources[id] = oldResources[i];
+ }
+ }
+
+ public void addOldResources(
+ SerialisationSupport serializer,
+ long[] oldResources) throws DatabaseException {
+ assert(oldResources.length == resources.length);
+ for(int i=0;i<oldResources.length;++i) {
+ resources[i] = serializer.getResource(oldResources[i]);
+ }
+ }
+
+ public void prepare(ReadGraph graph) throws DatabaseException {
+ if(RootLibrary == null)
+ findBuiltins(graph);
+ Resource[] resources = this.resources;
+
+ for(Identity identity : tg.identities) {
+ IdentityDefinition definition = identity.definition;
+ if(definition instanceof External) {
+ External def = (External)definition;
+ Resource parent = resources[def.parent];
+ Resource child = graph.syncRequest(
+ new UnescapedChildMapOfResource(parent),
+ new TransientCacheAsyncListener<Map<String, Resource>>())
+ .get(def.name);
+ if(child == null)
+ throw new ResourceNotFoundException(def.name);
+ resources[identity.resource] = child;
+ }
+ else if(definition instanceof Root) {
+ resources[identity.resource] = RootLibrary;
+ }
+ }
+ }
+
+ public void claim(WriteOnlyGraph graph) throws DatabaseException {
+ if(RootLibrary == null)
+ findBuiltins(graph);
+ Resource[] resources = this.resources;
+
+ // Create blank resources
+ for(int i=0;i<resources.length;++i)
+ if(resources[i] == null)
+ resources[i] = graph.newResource();
+
+ // Internal identities
+ for(Identity identity : tg.identities) {
+ IdentityDefinition definition = identity.definition;
+ if(definition instanceof Internal) {
+ Internal def = (Internal)definition;
+ claimChild(graph, resources[def.parent], def.name, resources[identity.resource]);
+ }
+ }
+
+ // Write statements
+ int[] statements = tg.statements;
+ for(int i=0;i<statements.length;i+=4) {
+ int inv = statements[i+2];
+ graph.claim(
+ resources[statements[i]],
+ resources[statements[i+1]],
+ inv < 0 ? null : resources[inv],
+ resources[statements[i+3]]
+ );
+ }
+
+ // Write values
+ for(Value value : tg.values)
+ graph.claimValue(resources[value.resource],
+ value.value.getValue(), value.value.getBinding());
+ }
+
+ public boolean checkClaim(ReadGraph graph) throws DatabaseException {
+
+ if(RootLibrary == null)
+ findBuiltins(graph);
+
+ Resource[] resources = this.resources;
+
+ // Create blank resources
+ for(int i=0;i<resources.length;++i)
+ if(resources[i] == null)
+ return true;
+
+ // Internal identities
+ for(Identity identity : tg.identities) {
+ IdentityDefinition definition = identity.definition;
+ if(definition instanceof Internal) {
+ return true;
+ }
+ }
+
+ if(tg.statements.length > 0) return true;
+ if(tg.values.length > 0) return true;
+
+ return false;
+
+ }
+
+ public void deny(WriteGraph graph) throws DatabaseException {
+ if(RootLibrary == null)
+ findBuiltins((ReadGraph)graph);
+ Resource[] resources = this.resources;
+
+ // Internal identities
+ for(Identity identity : tg.identities) {
+ IdentityDefinition definition = identity.definition;
+ if(definition instanceof Internal) {
+// Internal def = (Internal)definition;
+ /*graph.deny(resources[identity.resource],
+ PartOf,
+ resources[def.parent]
+ );*/
+ graph.deny(resources[identity.resource], HasName);
+ }
+ }
+
+ // Deny statements
+ int[] statements = tg.statements;
+ for(int i=0;i<statements.length;i+=4) {
+ int inv = statements[i+2];
+ graph.deny(
+ resources[statements[i]],
+ resources[statements[i+1]],
+ inv < 0 ? null : resources[inv],
+ resources[statements[i+3]]
+ );
+ }
+
+ // Deny values
+ for(Value value : tg.values)
+ graph.denyValue(resources[value.resource]);
+ }
+
+ public boolean checkDeny(ReadGraph graph) throws DatabaseException {
+
+ if(RootLibrary == null)
+ findBuiltins((ReadGraph)graph);
+
+ // Internal identities
+ for(Identity identity : tg.identities) {
+ IdentityDefinition definition = identity.definition;
+ if(definition instanceof Internal) {
+ return true;
+ }
+ }
+
+ if(tg.statements.length > 0) return true;
+ if(tg.values.length > 0) return true;
+
+ return false;
+
+ }
+
+}