]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.layer0.utils/src/org/simantics/layer0/utils/direct/GraphUtils.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.layer0.utils / src / org / simantics / layer0 / utils / direct / GraphUtils.java
index 9e2f0161649370bc9c6111e9105f69930ba8c669..273b092bb5ea48ff6e05c616b5bbfb545d361dbf 100644 (file)
-/*******************************************************************************\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);
+    }
+}