]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.common/src/org/simantics/db/common/utils/CommonDBUtils.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / utils / CommonDBUtils.java
index dcd3939a4f2e64d73ed288a1856b471c1ab8fd46..919f06b6847a51d876469bec47a5043ab65a6f77 100644 (file)
@@ -18,7 +18,9 @@ import org.simantics.db.common.request.ObjectsWithType;
 import org.simantics.db.common.request.PossibleChild;
 import org.simantics.db.common.request.PossibleObjectWithType;
 import org.simantics.db.common.request.PossibleOwner;
+import org.simantics.db.common.request.ResourceRead;
 import org.simantics.db.common.request.RuntimeEnvironmentRequest;
+import org.simantics.db.exception.AdaptionException;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.exception.InvalidResourceReferenceException;
 import org.simantics.db.service.ClusterUID;
@@ -318,6 +320,11 @@ public class CommonDBUtils {
        return xs.isClusterLoaded(clusterUID);
     }
     
+    public static void setImmutable(ReadGraph graph, Resource resource, boolean value) throws DatabaseException {
+        XSupport xs = graph.getService(XSupport.class);
+        xs.setImmutable(resource, value);
+    }
+
     public static Type getSCLType(ReadGraph graph, RuntimeEnvironment runtimeEnvironment, String typeText) throws DatabaseException {
         try {
             return Environments.getType(runtimeEnvironment.getEnvironment(), typeText);
@@ -345,5 +352,31 @@ public class CommonDBUtils {
         if(!graph.isInstanceOf(child, type)) return null;
         return child;
     }
-    
+
+    public static String getEnumerationValueName(ReadGraph graph, Resource resource) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        String label = graph.getPossibleRelatedValue(resource, L0.HasLabel, Bindings.STRING);
+        if(label != null)
+            return label;
+        return safeName(graph, resource);
+    }
+
+    private static String safeName(ReadGraph graph, Resource value) throws DatabaseException {
+        return graph.syncRequest(new StringAdapterRequest(value));
+    }
+
+    public static class StringAdapterRequest extends ResourceRead<String> {
+        public StringAdapterRequest(Resource resource) {
+            super(resource);
+        }
+        @Override
+        public String perform(ReadGraph graph) throws DatabaseException {
+            try {
+                return graph.adapt(resource, String.class);
+            } catch (AdaptionException e) {
+                return NameUtils.getSafeName(graph, resource);
+            }
+        }
+    }
+
 }