--- /dev/null
+package org.simantics.datatypes.utils;\r
+\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+import org.simantics.databoard.util.Bean;\r
+import org.simantics.datatypes.DatatypeResource;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.primitiverequest.PossibleRelatedValue;\r
+import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.service.SerialisationSupport;\r
+import org.simantics.db.service.XSupport;\r
+\r
+final public class BTreeContentBean extends Bean {\r
+ public static int counter = 0;\r
+ public boolean leaf;\r
+ public int n;\r
+ public PossibleVariant[] key;\r
+ public PossibleResource[] value;\r
+ public PossibleResource[] c;\r
+ public BTreeContentBean() {\r
+ }\r
+ public static BTreeContentBean create(int t) {\r
+ BTreeContentBean result = new BTreeContentBean();\r
+ result.leaf = true;\r
+ result.n = 0;\r
+ result.key = new PossibleVariant[2*t-1];\r
+ result.value = new PossibleResource[2*t-1];\r
+ for(int i=0;i<2*t-1;i++) {\r
+ result.key[i] = new PossibleVariant();\r
+ result.value[i] = new PossibleResource();\r
+ }\r
+ result.c = new PossibleResource[2*t];\r
+ for(int i=0;i<2*t;i++) result.c[i] = new PossibleResource();\r
+ return result;\r
+ }\r
+ \r
+ public void reduceSize() {\r
+ assert (n > 0);\r
+ key[n - 1] = new PossibleVariant();\r
+ value[n - 1] = new PossibleResource();\r
+ c[n] = new PossibleResource();\r
+ n--;\r
+ }\r
+ \r
+ public Variant getKey(int index) {\r
+ return key[index].v;\r
+ }\r
+\r
+ public Resource getValue(int index) {\r
+ return value[index].r;\r
+ }\r
+\r
+ public Resource getChild(int index) {\r
+ return c[index].r;\r
+ }\r
+\r
+ public static BTreeContentBean readPossible(ReadGraph graph, Resource r) throws DatabaseException {\r
+ DatatypeResource DATA = DatatypeResource.getInstance(graph);\r
+ SerialisationSupport ss = graph.getService(SerialisationSupport.class);\r
+ XSupport xs = graph.getService(XSupport.class);\r
+ BTreeContentBinding CONTENT_BEAN_BINDING = new BTreeContentBinding(ss, xs);\r
+ return graph.syncRequest(new PossibleRelatedValue<BTreeContentBean>(r, DATA.BTreeNode_content, CONTENT_BEAN_BINDING), TransientCacheListener.<BTreeContentBean>instance());\r
+ }\r
+ \r
+ \r
+}
\ No newline at end of file