-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.layer0.utils.direct;\r
-\r
-import java.util.Collection;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
-import java.util.Stack;\r
-\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Statement;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.uri.UnescapedChildMapOfResource;\r
-import org.simantics.db.common.utils.NameUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.exception.ServiceException;\r
-import org.simantics.db.exception.ValidationException;\r
-import org.simantics.db.procedure.MultiProcedure;\r
-import org.simantics.db.procedure.SyncMultiProcedure;\r
-import org.simantics.layer0.Layer0;\r
-\r
-\r
-public final class GraphUtils {\r
-\r
- public static Resource createScalarString(WriteGraph graph, String string) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- Resource ret = graph.newResource();\r
- graph.claim(ret, b.InstanceOf, null, b.String);\r
- graph.claimValue(ret, string);\r
- return ret;\r
- }\r
-\r
- public static Resource createScalarInteger(WriteGraph graph, int value) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- Resource ret = graph.newResource();\r
- graph.claim(ret, b.InstanceOf, null, b.Integer);\r
- graph.claimValue(ret, value);\r
- return ret;\r
- }\r
-\r
- public static Resource createScalarLong(WriteGraph graph, long value) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- Resource ret = graph.newResource();\r
- graph.claim(ret, b.InstanceOf, null, b.Long);\r
- graph.claimValue(ret, value);\r
- return ret;\r
- }\r
-\r
- public static Resource createScalarFloat(WriteGraph graph, float value) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- Resource ret = graph.newResource();\r
- graph.claim(ret, b.InstanceOf, null, b.Float);\r
- graph.claimValue(ret, value);\r
- return ret;\r
- }\r
-\r
- public static Resource createScalarBoolean(WriteGraph graph, boolean value) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- Resource ret = graph.newResource();\r
- graph.claim(ret, b.InstanceOf, null, b.Boolean);\r
- graph.claimValue(ret, value);\r
- return ret;\r
- }\r
-\r
- public static Resource createScalarDouble(WriteGraph graph, double value) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- Resource ret = graph.newResource();\r
- graph.claim(ret, b.InstanceOf, null, b.Double);\r
- graph.claimValue(ret, value);\r
- return ret;\r
- }\r
-\r
- public static void addRelatedScalarString(WriteGraph graph, Resource resource, Resource relation, String string) throws DatabaseException {\r
- graph.claim(resource, relation, createScalarString(graph, string));\r
- }\r
-\r
- public static void addRelatedScalarInteger(WriteGraph graph, Resource resource, Resource relation, int value) throws DatabaseException {\r
- graph.claim(resource, relation, createScalarInteger(graph, value));\r
- }\r
-\r
- public static Resource createDoubleArray(WriteGraph graph, double[] array, Resource type) throws DatabaseException {\r
- Resource ret = graph.newResource();\r
- Layer0 b = Layer0.getInstance(graph);\r
- graph.claim(ret, b.InstanceOf, null, type);\r
- graph.claimValue(ret, array);\r
- return ret;\r
- }\r
-\r
- public static Resource createDoubleArray(WriteGraph graph, double[] array) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- return createDoubleArray(graph, array, b.DoubleArray);\r
- }\r
-\r
- public static Resource createIntegerArray(WriteGraph graph, int[] array, Resource type) throws DatabaseException {\r
- Resource ret = graph.newResource();\r
- Layer0 b = Layer0.getInstance(graph);\r
- graph.claim(ret, b.InstanceOf, null, type);\r
- graph.claimValue(ret, array);\r
- return ret;\r
- }\r
-\r
- public static Resource createIntegerArray(WriteGraph graph, int[] array) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- return createIntegerArray(graph, array, b.IntegerArray);\r
- }\r
-\r
- public static Resource createLongArray(WriteGraph graph, long[] array, Resource type) throws DatabaseException {\r
- Resource ret = graph.newResource();\r
- Layer0 b = Layer0.getInstance(graph);\r
- graph.claim(ret, b.InstanceOf, null, type);\r
- graph.claimValue(ret, array);\r
- return ret;\r
- }\r
-\r
- public static Resource createLongArray(WriteGraph graph, long[] array) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- return createLongArray(graph, array, b.LongArray);\r
- }\r
-\r
- public static Resource createFloatArray(WriteGraph graph, float[] array, Resource type) throws DatabaseException {\r
- Resource ret = graph.newResource();\r
- Layer0 b = Layer0.getInstance(graph);\r
- graph.claim(ret, b.InstanceOf, null, type);\r
- graph.claimValue(ret, array);\r
- return ret;\r
- }\r
-\r
- public static Resource createFloatArray(WriteGraph graph, float[] array) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- return createFloatArray(graph, array, b.FloatArray);\r
- }\r
-\r
- public static Resource createBooleanArray(WriteGraph graph, boolean[] array, Resource type) throws DatabaseException {\r
- Resource ret = graph.newResource();\r
- Layer0 b = Layer0.getInstance(graph);\r
- graph.claim(ret, b.InstanceOf, null, type);\r
- graph.claimValue(ret, array);\r
- return ret;\r
- }\r
-\r
- public static Resource createBooleanArray(WriteGraph graph, boolean[] array) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- return createBooleanArray(graph, array, b.BooleanArray);\r
- }\r
-\r
- public static Resource createStringArray(WriteGraph graph, String[] array, Resource type) throws DatabaseException {\r
- Resource ret = graph.newResource();\r
- Layer0 b = Layer0.getInstance(graph);\r
- graph.claim(ret, b.InstanceOf, null, type);\r
- graph.claimValue(ret, array);\r
- return ret;\r
- }\r
-\r
- public static Resource createStringArray(WriteGraph graph, String[] array) throws DatabaseException {\r
- Layer0 b = Layer0.getInstance(graph);\r
- return createStringArray(graph, array, b.StringArray);\r
- }\r
-\r
- public interface ResourceTester {\r
- boolean test(ReadGraph graph, Resource resource) throws DatabaseException ;\r
- }\r
-\r
- public static class AcceptAll implements ResourceTester {\r
-\r
- @Override\r
- public boolean test(ReadGraph graph, Resource resource) throws DatabaseException {\r
- return true;\r
- }\r
-\r
- }\r
-\r
- public static class InstanceOf implements ResourceTester {\r
-\r
- private final Resource type;\r
-\r
- public InstanceOf(Resource type) {\r
- this.type = type;\r
- }\r
-\r
- @Override\r
- public boolean test(ReadGraph graph, Resource resource) throws DatabaseException {\r
- return graph.isInstanceOf(resource, type);\r
- }\r
-\r
- }\r
-\r
- public static class Inherits implements ResourceTester {\r
-\r
- private final Resource superType;\r
-\r
- public Inherits(Resource superType) {\r
- this.superType = superType;\r
- }\r
-\r
- @Override\r
- public boolean test(ReadGraph graph, Resource resource) throws DatabaseException {\r
- return graph.isInheritedFrom(resource, superType);\r
- }\r
-\r
- }\r
-\r
- public static void findResources(ReadGraph graph, Collection<Resource> roots, Resource relation, ResourceTester tester, MultiProcedure<Resource> procedure) throws DatabaseException {\r
-\r
- Set<Resource> visited = new HashSet<Resource>();\r
- Stack<Resource> process = new Stack<Resource>();\r
-\r
- process.addAll(roots);\r
- visited.addAll(roots);\r
-\r
- while(!process.isEmpty()) {\r
- Resource cur = process.pop();\r
- for(Resource r : graph.getObjects(cur, relation))\r
- if(!visited.contains(r)) {\r
- visited.add(r);\r
- if(tester.test(graph, r))\r
- procedure.execute(r);\r
- process.add(r);\r
- }\r
- }\r
-\r
- procedure.finished();\r
-\r
- }\r
-\r
-\r
- public static void findResources(ReadGraph graph, Collection<Resource> roots, Resource relation, ResourceTester tester, SyncMultiProcedure<Resource> procedure) throws DatabaseException {\r
-\r
- Set<Resource> visited = new HashSet<Resource>();\r
- Stack<Resource> process = new Stack<Resource>();\r
-\r
- process.addAll(roots);\r
- visited.addAll(roots);\r
-\r
- while(!process.isEmpty()) {\r
- Resource cur = process.pop();\r
- for(Resource r : graph.getObjects(cur, relation))\r
- if(!visited.contains(r)) {\r
- visited.add(r);\r
- if(tester.test(graph, r))\r
- procedure.execute(graph, r);\r
- process.add(r);\r
- }\r
- }\r
-\r
- procedure.finished(graph);\r
-\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#getSafeName(ReadGraph, Resource)}\r
- */\r
- public static String getReadableName(ReadGraph graph, Resource resource) throws ValidationException, ServiceException {\r
- return NameUtils.getSafeName(graph, resource);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findReservedNames(ReadGraph, String, Resource, Resource, Set)}\r
- */\r
- public static Set<String> findReservedNames(ReadGraph g, String proposition, Resource container, Resource consistRelation, Set<String> result) throws DatabaseException {\r
- return NameUtils.findReservedNames(g, proposition, container, consistRelation, result);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findReservedNames(ReadGraph, String, Resource, Resource)\r
- */\r
- public static Set<String> findReservedNames(ReadGraph g, String proposition, Resource container, Resource consistRelation) throws DatabaseException {\r
- return NameUtils.findReservedNames(g, proposition, container, consistRelation);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findFreshName(ReadGraph, String, Resource)}\r
- */\r
- public static String findFreshName(ReadGraph g, String proposition, Resource container) throws DatabaseException {\r
- return NameUtils.findFreshName(g, proposition, container);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findFreshEscapedName(ReadGraph, String, Resource)}\r
- */\r
- public static String findFreshEscapedName(ReadGraph g, String proposition, Resource container) throws DatabaseException {\r
- return NameUtils.findFreshEscapedName(g, proposition, container);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findFreshName(ReadGraph, String, Resource, Resource)}\r
- */\r
- public static String findFreshName(ReadGraph g, String proposition, Resource container, Resource consistRelation) throws DatabaseException {\r
- return NameUtils.findFreshName(g, proposition, container, consistRelation);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findFreshEscapedName(ReadGraph, String, Resource, Resource)}\r
- */\r
- public static String findFreshEscapedName(ReadGraph g, String proposition, Resource container, Resource consistRelation) throws DatabaseException {\r
- return NameUtils.findFreshEscapedName(g, proposition, container, consistRelation);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findFreshName(ReadGraph, String, Resource, Resource, String)}\r
- */\r
- public static String findFreshName(ReadGraph g, String proposition, Resource container, Resource consistRelation, String nameFormat) throws DatabaseException {\r
- return NameUtils.findFreshName(g, proposition, container, consistRelation, nameFormat);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findFreshInstanceName(ReadGraph, Resource, Resource)}\r
- */\r
- public static String findFreshInstanceName(ReadGraph g, Resource type, Resource container) throws DatabaseException {\r
- return NameUtils.findFreshInstanceName(g, type, container);\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#findFreshInstanceName(ReadGraph, Resource, Resource, Resource)}\r
- */\r
- public static String findFreshInstanceName(ReadGraph g, Resource type, Resource container, Resource relation) throws DatabaseException {\r
- return NameUtils.findFreshInstanceName(g, type, container, relation);\r
- }\r
-\r
- public static Resource create(WriteGraph g, Resource ... predicateObjectPairs) throws DatabaseException {\r
- assert(predicateObjectPairs.length % 2 == 0);\r
- Resource resource = g.newResource();\r
- for(int i=0;i<predicateObjectPairs.length;i+=2)\r
- g.claim(resource, predicateObjectPairs[i], predicateObjectPairs[i+1]);\r
- return resource;\r
- }\r
-\r
- private static Resource getObjectOrCreatePrimitiveValue(WriteGraph g, Object object) throws DatabaseException {\r
- if (object == null)\r
- throw new NullPointerException("null object");\r
-\r
- Class<?> clazz = object.getClass();\r
-\r
- if (object instanceof Resource)\r
- return (Resource) object;\r
-\r
- if (String.class.equals(clazz))\r
- return createScalarString(g, (String) object);\r
- else if (String[].class.equals(clazz))\r
- return createStringArray(g, (String[]) object);\r
- else if (Integer.class.equals(clazz))\r
- return createScalarInteger(g, (Integer) object);\r
- else if (int[].class.equals(clazz))\r
- return createIntegerArray(g, (int[]) object);\r
- else if (Long.class.equals(clazz))\r
- return createScalarLong(g, (Long) object);\r
- else if (long[].class.equals(clazz))\r
- return createLongArray(g, (long[]) object);\r
- else if (Float.class.equals(clazz))\r
- return createScalarFloat(g, (Float) object);\r
- else if (float[].class.equals(clazz))\r
- return createFloatArray(g, (float[]) object);\r
- else if (Double.class.equals(clazz))\r
- return createScalarDouble(g, (Double) object);\r
- else if (double[].class.equals(clazz))\r
- return createDoubleArray(g, (double[]) object);\r
- else if (Boolean.class.equals(clazz))\r
- return createScalarBoolean(g, (Boolean) object);\r
- else if (boolean[].class.equals(clazz))\r
- return createBooleanArray(g, (boolean[]) object);\r
-\r
- throw new UnsupportedOperationException("unsupported object type: " + object);\r
- }\r
-\r
- public static Resource create(WriteGraph g, Object ... predicateObjectPairs) throws DatabaseException {\r
- assert(predicateObjectPairs.length % 2 == 0);\r
- Resource resource = g.newResource();\r
- for(int i=0;i<predicateObjectPairs.length;i+=2) {\r
- Resource predicate = (Resource)predicateObjectPairs[i];\r
- Object _object = predicateObjectPairs[i+1];\r
- Resource object = getObjectOrCreatePrimitiveValue(g, _object);\r
- g.claim(resource, predicate, object);\r
- }\r
- return resource;\r
- }\r
-\r
- public static Resource create2(WriteGraph g, Resource type, Object ... predicateObjectPairs) throws DatabaseException {\r
- assert(predicateObjectPairs.length % 2 == 0);\r
- assert(type != null);\r
- Resource resource = g.newResource();\r
- Layer0 b = Layer0.getInstance(g);\r
- g.claim(resource, b.InstanceOf, null, type);\r
- for(int i=0;i<predicateObjectPairs.length;i+=2) {\r
- Resource predicate = (Resource)predicateObjectPairs[i];\r
- Object _object = predicateObjectPairs[i+1];\r
- Resource object = getObjectOrCreatePrimitiveValue(g, _object);\r
- g.claim(resource, predicate, object);\r
- }\r
- return resource;\r
- }\r
-\r
- /**\r
- * @deprecated use {@link NameUtils#toString(ReadGraph, Statement)}\r
- */\r
- public static String toString(ReadGraph g, Statement stm) throws DatabaseException {\r
- return NameUtils.toString(g, stm);\r
- }\r
-\r
-// public static Resource getPossiblePath(ReadGraph graph, Resource resource, Resource ... path) throws DatabaseException {\r
-//\r
-// for(Resource p : path) {\r
-// resource = graph.getPossibleObject(resource, p);\r
-// if(resource == null) return null;\r
-// }\r
-// return resource;\r
-//\r
-// }\r
- \r
- public static Resource getPossibleChild(ReadGraph g, Resource parent, String name) throws DatabaseException {\r
- return g.syncRequest(new UnescapedChildMapOfResource(parent)).get(name);\r
- }\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.layer0.utils.direct;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.Stack;
+
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.Statement;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.uri.UnescapedChildMapOfResource;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.ServiceException;
+import org.simantics.db.exception.ValidationException;
+import org.simantics.db.procedure.MultiProcedure;
+import org.simantics.db.procedure.SyncMultiProcedure;
+import org.simantics.layer0.Layer0;
+
+
+public final class GraphUtils {
+
+ public static Resource createScalarString(WriteGraph graph, String string) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ Resource ret = graph.newResource();
+ graph.claim(ret, b.InstanceOf, null, b.String);
+ graph.claimValue(ret, string);
+ return ret;
+ }
+
+ public static Resource createScalarInteger(WriteGraph graph, int value) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ Resource ret = graph.newResource();
+ graph.claim(ret, b.InstanceOf, null, b.Integer);
+ graph.claimValue(ret, value);
+ return ret;
+ }
+
+ public static Resource createScalarLong(WriteGraph graph, long value) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ Resource ret = graph.newResource();
+ graph.claim(ret, b.InstanceOf, null, b.Long);
+ graph.claimValue(ret, value);
+ return ret;
+ }
+
+ public static Resource createScalarFloat(WriteGraph graph, float value) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ Resource ret = graph.newResource();
+ graph.claim(ret, b.InstanceOf, null, b.Float);
+ graph.claimValue(ret, value);
+ return ret;
+ }
+
+ public static Resource createScalarBoolean(WriteGraph graph, boolean value) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ Resource ret = graph.newResource();
+ graph.claim(ret, b.InstanceOf, null, b.Boolean);
+ graph.claimValue(ret, value);
+ return ret;
+ }
+
+ public static Resource createScalarDouble(WriteGraph graph, double value) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ Resource ret = graph.newResource();
+ graph.claim(ret, b.InstanceOf, null, b.Double);
+ graph.claimValue(ret, value);
+ return ret;
+ }
+
+ public static void addRelatedScalarString(WriteGraph graph, Resource resource, Resource relation, String string) throws DatabaseException {
+ graph.claim(resource, relation, createScalarString(graph, string));
+ }
+
+ public static void addRelatedScalarInteger(WriteGraph graph, Resource resource, Resource relation, int value) throws DatabaseException {
+ graph.claim(resource, relation, createScalarInteger(graph, value));
+ }
+
+ public static Resource createDoubleArray(WriteGraph graph, double[] array, Resource type) throws DatabaseException {
+ Resource ret = graph.newResource();
+ Layer0 b = Layer0.getInstance(graph);
+ graph.claim(ret, b.InstanceOf, null, type);
+ graph.claimValue(ret, array);
+ return ret;
+ }
+
+ public static Resource createDoubleArray(WriteGraph graph, double[] array) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ return createDoubleArray(graph, array, b.DoubleArray);
+ }
+
+ public static Resource createIntegerArray(WriteGraph graph, int[] array, Resource type) throws DatabaseException {
+ Resource ret = graph.newResource();
+ Layer0 b = Layer0.getInstance(graph);
+ graph.claim(ret, b.InstanceOf, null, type);
+ graph.claimValue(ret, array);
+ return ret;
+ }
+
+ public static Resource createIntegerArray(WriteGraph graph, int[] array) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ return createIntegerArray(graph, array, b.IntegerArray);
+ }
+
+ public static Resource createLongArray(WriteGraph graph, long[] array, Resource type) throws DatabaseException {
+ Resource ret = graph.newResource();
+ Layer0 b = Layer0.getInstance(graph);
+ graph.claim(ret, b.InstanceOf, null, type);
+ graph.claimValue(ret, array);
+ return ret;
+ }
+
+ public static Resource createLongArray(WriteGraph graph, long[] array) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ return createLongArray(graph, array, b.LongArray);
+ }
+
+ public static Resource createFloatArray(WriteGraph graph, float[] array, Resource type) throws DatabaseException {
+ Resource ret = graph.newResource();
+ Layer0 b = Layer0.getInstance(graph);
+ graph.claim(ret, b.InstanceOf, null, type);
+ graph.claimValue(ret, array);
+ return ret;
+ }
+
+ public static Resource createFloatArray(WriteGraph graph, float[] array) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ return createFloatArray(graph, array, b.FloatArray);
+ }
+
+ public static Resource createBooleanArray(WriteGraph graph, boolean[] array, Resource type) throws DatabaseException {
+ Resource ret = graph.newResource();
+ Layer0 b = Layer0.getInstance(graph);
+ graph.claim(ret, b.InstanceOf, null, type);
+ graph.claimValue(ret, array);
+ return ret;
+ }
+
+ public static Resource createBooleanArray(WriteGraph graph, boolean[] array) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ return createBooleanArray(graph, array, b.BooleanArray);
+ }
+
+ public static Resource createStringArray(WriteGraph graph, String[] array, Resource type) throws DatabaseException {
+ Resource ret = graph.newResource();
+ Layer0 b = Layer0.getInstance(graph);
+ graph.claim(ret, b.InstanceOf, null, type);
+ graph.claimValue(ret, array);
+ return ret;
+ }
+
+ public static Resource createStringArray(WriteGraph graph, String[] array) throws DatabaseException {
+ Layer0 b = Layer0.getInstance(graph);
+ return createStringArray(graph, array, b.StringArray);
+ }
+
+ public interface ResourceTester {
+ boolean test(ReadGraph graph, Resource resource) throws DatabaseException ;
+ }
+
+ public static class AcceptAll implements ResourceTester {
+
+ @Override
+ public boolean test(ReadGraph graph, Resource resource) throws DatabaseException {
+ return true;
+ }
+
+ }
+
+ public static class InstanceOf implements ResourceTester {
+
+ private final Resource type;
+
+ public InstanceOf(Resource type) {
+ this.type = type;
+ }
+
+ @Override
+ public boolean test(ReadGraph graph, Resource resource) throws DatabaseException {
+ return graph.isInstanceOf(resource, type);
+ }
+
+ }
+
+ public static class Inherits implements ResourceTester {
+
+ private final Resource superType;
+
+ public Inherits(Resource superType) {
+ this.superType = superType;
+ }
+
+ @Override
+ public boolean test(ReadGraph graph, Resource resource) throws DatabaseException {
+ return graph.isInheritedFrom(resource, superType);
+ }
+
+ }
+
+ public static void findResources(ReadGraph graph, Collection<Resource> roots, Resource relation, ResourceTester tester, MultiProcedure<Resource> procedure) throws DatabaseException {
+
+ Set<Resource> visited = new HashSet<Resource>();
+ Stack<Resource> process = new Stack<Resource>();
+
+ process.addAll(roots);
+ visited.addAll(roots);
+
+ while(!process.isEmpty()) {
+ Resource cur = process.pop();
+ for(Resource r : graph.getObjects(cur, relation))
+ if(!visited.contains(r)) {
+ visited.add(r);
+ if(tester.test(graph, r))
+ procedure.execute(r);
+ process.add(r);
+ }
+ }
+
+ procedure.finished();
+
+ }
+
+
+ public static void findResources(ReadGraph graph, Collection<Resource> roots, Resource relation, ResourceTester tester, SyncMultiProcedure<Resource> procedure) throws DatabaseException {
+
+ Set<Resource> visited = new HashSet<Resource>();
+ Stack<Resource> process = new Stack<Resource>();
+
+ process.addAll(roots);
+ visited.addAll(roots);
+
+ while(!process.isEmpty()) {
+ Resource cur = process.pop();
+ for(Resource r : graph.getObjects(cur, relation))
+ if(!visited.contains(r)) {
+ visited.add(r);
+ if(tester.test(graph, r))
+ procedure.execute(graph, r);
+ process.add(r);
+ }
+ }
+
+ procedure.finished(graph);
+
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#getSafeName(ReadGraph, Resource)}
+ */
+ public static String getReadableName(ReadGraph graph, Resource resource) throws ValidationException, ServiceException {
+ return NameUtils.getSafeName(graph, resource);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findReservedNames(ReadGraph, String, Resource, Resource, Set)}
+ */
+ public static Set<String> findReservedNames(ReadGraph g, String proposition, Resource container, Resource consistRelation, Set<String> result) throws DatabaseException {
+ return NameUtils.findReservedNames(g, proposition, container, consistRelation, result);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findReservedNames(ReadGraph, String, Resource, Resource)
+ */
+ public static Set<String> findReservedNames(ReadGraph g, String proposition, Resource container, Resource consistRelation) throws DatabaseException {
+ return NameUtils.findReservedNames(g, proposition, container, consistRelation);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findFreshName(ReadGraph, String, Resource)}
+ */
+ public static String findFreshName(ReadGraph g, String proposition, Resource container) throws DatabaseException {
+ return NameUtils.findFreshName(g, proposition, container);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findFreshEscapedName(ReadGraph, String, Resource)}
+ */
+ public static String findFreshEscapedName(ReadGraph g, String proposition, Resource container) throws DatabaseException {
+ return NameUtils.findFreshEscapedName(g, proposition, container);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findFreshName(ReadGraph, String, Resource, Resource)}
+ */
+ public static String findFreshName(ReadGraph g, String proposition, Resource container, Resource consistRelation) throws DatabaseException {
+ return NameUtils.findFreshName(g, proposition, container, consistRelation);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findFreshEscapedName(ReadGraph, String, Resource, Resource)}
+ */
+ public static String findFreshEscapedName(ReadGraph g, String proposition, Resource container, Resource consistRelation) throws DatabaseException {
+ return NameUtils.findFreshEscapedName(g, proposition, container, consistRelation);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findFreshName(ReadGraph, String, Resource, Resource, String)}
+ */
+ public static String findFreshName(ReadGraph g, String proposition, Resource container, Resource consistRelation, String nameFormat) throws DatabaseException {
+ return NameUtils.findFreshName(g, proposition, container, consistRelation, nameFormat);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findFreshInstanceName(ReadGraph, Resource, Resource)}
+ */
+ public static String findFreshInstanceName(ReadGraph g, Resource type, Resource container) throws DatabaseException {
+ return NameUtils.findFreshInstanceName(g, type, container);
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#findFreshInstanceName(ReadGraph, Resource, Resource, Resource)}
+ */
+ public static String findFreshInstanceName(ReadGraph g, Resource type, Resource container, Resource relation) throws DatabaseException {
+ return NameUtils.findFreshInstanceName(g, type, container, relation);
+ }
+
+ public static Resource create(WriteGraph g, Resource ... predicateObjectPairs) throws DatabaseException {
+ assert(predicateObjectPairs.length % 2 == 0);
+ Resource resource = g.newResource();
+ for(int i=0;i<predicateObjectPairs.length;i+=2)
+ g.claim(resource, predicateObjectPairs[i], predicateObjectPairs[i+1]);
+ return resource;
+ }
+
+ private static Resource getObjectOrCreatePrimitiveValue(WriteGraph g, Object object) throws DatabaseException {
+ if (object == null)
+ throw new NullPointerException("null object");
+
+ Class<?> clazz = object.getClass();
+
+ if (object instanceof Resource)
+ return (Resource) object;
+
+ if (String.class.equals(clazz))
+ return createScalarString(g, (String) object);
+ else if (String[].class.equals(clazz))
+ return createStringArray(g, (String[]) object);
+ else if (Integer.class.equals(clazz))
+ return createScalarInteger(g, (Integer) object);
+ else if (int[].class.equals(clazz))
+ return createIntegerArray(g, (int[]) object);
+ else if (Long.class.equals(clazz))
+ return createScalarLong(g, (Long) object);
+ else if (long[].class.equals(clazz))
+ return createLongArray(g, (long[]) object);
+ else if (Float.class.equals(clazz))
+ return createScalarFloat(g, (Float) object);
+ else if (float[].class.equals(clazz))
+ return createFloatArray(g, (float[]) object);
+ else if (Double.class.equals(clazz))
+ return createScalarDouble(g, (Double) object);
+ else if (double[].class.equals(clazz))
+ return createDoubleArray(g, (double[]) object);
+ else if (Boolean.class.equals(clazz))
+ return createScalarBoolean(g, (Boolean) object);
+ else if (boolean[].class.equals(clazz))
+ return createBooleanArray(g, (boolean[]) object);
+
+ throw new UnsupportedOperationException("unsupported object type: " + object);
+ }
+
+ public static Resource create(WriteGraph g, Object ... predicateObjectPairs) throws DatabaseException {
+ assert(predicateObjectPairs.length % 2 == 0);
+ Resource resource = g.newResource();
+ for(int i=0;i<predicateObjectPairs.length;i+=2) {
+ Resource predicate = (Resource)predicateObjectPairs[i];
+ Object _object = predicateObjectPairs[i+1];
+ Resource object = getObjectOrCreatePrimitiveValue(g, _object);
+ g.claim(resource, predicate, object);
+ }
+ return resource;
+ }
+
+ public static Resource create2(WriteGraph g, Resource type, Object ... predicateObjectPairs) throws DatabaseException {
+ assert(predicateObjectPairs.length % 2 == 0);
+ assert(type != null);
+ Resource resource = g.newResource();
+ Layer0 b = Layer0.getInstance(g);
+ g.claim(resource, b.InstanceOf, null, type);
+ for(int i=0;i<predicateObjectPairs.length;i+=2) {
+ Resource predicate = (Resource)predicateObjectPairs[i];
+ Object _object = predicateObjectPairs[i+1];
+ Resource object = getObjectOrCreatePrimitiveValue(g, _object);
+ g.claim(resource, predicate, object);
+ }
+ return resource;
+ }
+
+ /**
+ * @deprecated use {@link NameUtils#toString(ReadGraph, Statement)}
+ */
+ public static String toString(ReadGraph g, Statement stm) throws DatabaseException {
+ return NameUtils.toString(g, stm);
+ }
+
+// public static Resource getPossiblePath(ReadGraph graph, Resource resource, Resource ... path) throws DatabaseException {
+//
+// for(Resource p : path) {
+// resource = graph.getPossibleObject(resource, p);
+// if(resource == null) return null;
+// }
+// return resource;
+//
+// }
+
+ public static Resource getPossibleChild(ReadGraph g, Resource parent, String name) throws DatabaseException {
+ return g.syncRequest(new UnescapedChildMapOfResource(parent)).get(name);
+ }
+}