]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/BuiltinSupportImpl.java
Fixed ClusterTable cluster hash/importance map book-keeping problem
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / BuiltinSupportImpl.java
index 482af7d5b5744c457a522c13808e18fe644684ad..cb13884fd9052dac4b0c532554266a8bf8efb454 100644 (file)
@@ -1,94 +1,94 @@
-package fi.vtt.simantics.procore.internal;\r
-\r
-import gnu.trove.map.hash.THashMap;\r
-\r
-import java.lang.ref.SoftReference;\r
-import java.util.HashSet;\r
-\r
-import org.simantics.db.common.utils.Logger;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.exception.ValidationException;\r
-import org.simantics.db.impl.ClusterBase;\r
-import org.simantics.db.impl.ClusterSupport;\r
-import org.simantics.db.impl.ResourceImpl;\r
-import org.simantics.db.impl.support.BuiltinSupport;\r
-import org.simantics.db.procore.cluster.ClusterTraits;\r
-import org.simantics.db.service.ClusterUID;\r
-import org.simantics.db.service.InitSupport;\r
-import org.simantics.graph.db.CoreInitialization;\r
-\r
-public class BuiltinSupportImpl implements BuiltinSupport {\r
-    private final boolean DEBUG = false;\r
-    private final SessionImplSocket session;\r
-    private ClusterBase builtinCluster;\r
-    private THashMap<String, BuiltinData> builtinMap;\r
-    BuiltinSupportImpl(SessionImplSocket session) {\r
-        this.session = session;\r
-        this.builtinMap = null;\r
-        this.builtinCluster = null;\r
-    }\r
-    @Override\r
-    public int getBuiltin(String uri) {\r
-        try {\r
-            ResourceImpl impl = getBuiltinResource(uri);\r
-            if (impl != null)\r
-                return impl.id;\r
-        } catch (DatabaseException e) {\r
-            if (DEBUG)\r
-                e.printStackTrace();\r
-            Logger.defaultLogError("Failed to get builtin for " + uri, e);\r
-        }\r
-        return 0;\r
-    }\r
-    private ResourceImpl getBuiltinResource(String name)\r
-    throws DatabaseException {\r
-        Logger.defaultLogTrace("Asking for builtin " + name);\r
-        synchronized (this) {\r
-            if (null == builtinMap) {\r
-                ClusterSupport cs = session.getService(ClusterSupport.class);\r
-                builtinCluster = cs.getClusterByClusterUIDOrMake(ClusterUID.Builtin);\r
-                builtinMap = initBuiltinMap();\r
-            }\r
-        }\r
-        ResourceImpl resource = null;\r
-        BuiltinData builtin = null;\r
-        synchronized (this) {\r
-            builtin = builtinMap.get(name);\r
-            if (null == builtin) {\r
-                Logger.defaultLogInfo("Asking for missing builtin " + name);\r
-                return null;\r
-            }\r
-            if (null != builtin.weakResource) { \r
-                resource = builtin.weakResource.get();\r
-                if (resource != null)\r
-                    return resource;\r
-            }\r
-        }\r
-        int id = ClusterTraits.createResourceKey(builtinCluster.getClusterKey(), builtin.index);\r
-        resource = session.getResource(id);\r
-        if (null == resource)\r
-            throw new ValidationException("Builtin not found index=" + builtin.index);\r
-        builtin.weakResource = new SoftReference<ResourceImpl>(resource); \r
-        return resource;\r
-    }\r
-    private THashMap<String, BuiltinData> initBuiltinMap()\r
-            throws DatabaseException {\r
-        THashMap<String, BuiltinData> builtins = new THashMap<String, BuiltinData>();\r
-        HashSet<InitSupport.Builtin> t = CoreInitialization.getBuiltins();\r
-        int size = t.size();\r
-        for (InitSupport.Builtin b : t) {\r
-            if (b.index < 1 || b.index > size)\r
-                throw new ValidationException("Illegal builtin resource index=" + b.index);\r
-            BuiltinData bd = new BuiltinData(b.index);\r
-            builtins.put(b.uri, bd);\r
-        }\r
-        return builtins;\r
-    }\r
-    static class BuiltinData {\r
-        final int index; // resource index\r
-        SoftReference<ResourceImpl> weakResource = null;\r
-        BuiltinData(int index) {\r
-            this.index = index;\r
-        }\r
-    }\r
-}\r
+package fi.vtt.simantics.procore.internal;
+
+import gnu.trove.map.hash.THashMap;
+
+import java.lang.ref.SoftReference;
+import java.util.HashSet;
+
+import org.simantics.db.common.utils.Logger;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.ValidationException;
+import org.simantics.db.impl.ClusterBase;
+import org.simantics.db.impl.ClusterSupport;
+import org.simantics.db.impl.ResourceImpl;
+import org.simantics.db.impl.support.BuiltinSupport;
+import org.simantics.db.procore.cluster.ClusterTraits;
+import org.simantics.db.service.ClusterUID;
+import org.simantics.db.service.InitSupport;
+import org.simantics.graph.db.CoreInitialization;
+
+public class BuiltinSupportImpl implements BuiltinSupport {
+    private final boolean DEBUG = false;
+    private final SessionImplSocket session;
+    private ClusterBase builtinCluster;
+    private THashMap<String, BuiltinData> builtinMap;
+    BuiltinSupportImpl(SessionImplSocket session) {
+        this.session = session;
+        this.builtinMap = null;
+        this.builtinCluster = null;
+    }
+    @Override
+    public int getBuiltin(String uri) {
+        try {
+            ResourceImpl impl = getBuiltinResource(uri);
+            if (impl != null)
+                return impl.id;
+        } catch (DatabaseException e) {
+            if (DEBUG)
+                e.printStackTrace();
+            Logger.defaultLogError("Failed to get builtin for " + uri, e);
+        }
+        return 0;
+    }
+    private ResourceImpl getBuiltinResource(String name)
+    throws DatabaseException {
+        Logger.defaultLogTrace("Asking for builtin " + name);
+        synchronized (this) {
+            if (null == builtinMap) {
+                ClusterSupport cs = session.getService(ClusterSupport.class);
+                builtinCluster = cs.getClusterByClusterUIDOrMake(ClusterUID.Builtin);
+                builtinMap = initBuiltinMap();
+            }
+        }
+        ResourceImpl resource = null;
+        BuiltinData builtin = null;
+        synchronized (this) {
+            builtin = builtinMap.get(name);
+            if (null == builtin) {
+                Logger.defaultLogInfo("Asking for missing builtin " + name);
+                return null;
+            }
+            if (null != builtin.weakResource) { 
+                resource = builtin.weakResource.get();
+                if (resource != null)
+                    return resource;
+            }
+        }
+        int id = ClusterTraits.createResourceKey(builtinCluster.getClusterKey(), builtin.index);
+        resource = session.getResource(id);
+        if (null == resource)
+            throw new ValidationException("Builtin not found index=" + builtin.index);
+        builtin.weakResource = new SoftReference<ResourceImpl>(resource); 
+        return resource;
+    }
+    private THashMap<String, BuiltinData> initBuiltinMap()
+            throws DatabaseException {
+        THashMap<String, BuiltinData> builtins = new THashMap<String, BuiltinData>();
+        HashSet<InitSupport.Builtin> t = CoreInitialization.getBuiltins();
+        int size = t.size();
+        for (InitSupport.Builtin b : t) {
+            if (b.index < 1 || b.index > size)
+                throw new ValidationException("Illegal builtin resource index=" + b.index);
+            BuiltinData bd = new BuiltinData(b.index);
+            builtins.put(b.uri, bd);
+        }
+        return builtins;
+    }
+    static class BuiltinData {
+        final int index; // resource index
+        SoftReference<ResourceImpl> weakResource = null;
+        BuiltinData(int index) {
+            this.index = index;
+        }
+    }
+}