]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.datatypes/src/org/simantics/datatypes/utils/BTreeContentBean.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.datatypes / src / org / simantics / datatypes / utils / BTreeContentBean.java
1 package org.simantics.datatypes.utils;\r
2 \r
3 import org.simantics.databoard.binding.mutable.Variant;\r
4 import org.simantics.databoard.util.Bean;\r
5 import org.simantics.datatypes.DatatypeResource;\r
6 import org.simantics.db.ReadGraph;\r
7 import org.simantics.db.Resource;\r
8 import org.simantics.db.common.primitiverequest.PossibleRelatedValue;\r
9 import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.db.service.SerialisationSupport;\r
12 import org.simantics.db.service.XSupport;\r
13 \r
14 final public class BTreeContentBean extends Bean {\r
15         public static int counter = 0;\r
16         public boolean leaf;\r
17         public int n;\r
18         public PossibleVariant[] key;\r
19         public PossibleResource[] value;\r
20         public PossibleResource[] c;\r
21         public BTreeContentBean() {\r
22         }\r
23         public static BTreeContentBean create(int t) {\r
24                 BTreeContentBean result = new BTreeContentBean();\r
25                 result.leaf = true;\r
26                 result.n = 0;\r
27                 result.key = new PossibleVariant[2*t-1];\r
28                 result.value = new PossibleResource[2*t-1];\r
29                 for(int i=0;i<2*t-1;i++) {\r
30                         result.key[i] = new PossibleVariant();\r
31                         result.value[i] = new PossibleResource();\r
32                 }\r
33                 result.c = new PossibleResource[2*t];\r
34                 for(int i=0;i<2*t;i++) result.c[i] = new PossibleResource();\r
35                 return result;\r
36         }\r
37         \r
38         public void reduceSize() {\r
39                 assert (n > 0);\r
40                 key[n - 1] = new PossibleVariant();\r
41                 value[n - 1] = new PossibleResource();\r
42                 c[n] = new PossibleResource();\r
43                 n--;\r
44         }\r
45         \r
46         public Variant getKey(int index) {\r
47                 return key[index].v;\r
48         }\r
49 \r
50         public Resource getValue(int index) {\r
51                 return value[index].r;\r
52         }\r
53 \r
54         public Resource getChild(int index) {\r
55                 return c[index].r;\r
56         }\r
57 \r
58         public static BTreeContentBean readPossible(ReadGraph graph, Resource r) throws DatabaseException {\r
59         DatatypeResource DATA = DatatypeResource.getInstance(graph);\r
60                 SerialisationSupport ss = graph.getService(SerialisationSupport.class);\r
61                 XSupport xs = graph.getService(XSupport.class);\r
62                 BTreeContentBinding CONTENT_BEAN_BINDING = new BTreeContentBinding(ss, xs);\r
63                 return graph.syncRequest(new PossibleRelatedValue<BTreeContentBean>(r, DATA.BTreeNode_content, CONTENT_BEAN_BINDING), TransientCacheListener.<BTreeContentBean>instance());\r
64         }\r
65         \r
66         \r
67 }