]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/VirtualGraphObjectSource.java
Merge commit 'bf75fd9'
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / VirtualGraphObjectSource.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.db.common;\r
13 \r
14 import org.simantics.databoard.binding.Binding;\r
15 import org.simantics.db.VirtualGraphContext;\r
16 import org.simantics.db.VirtualGraphSource;\r
17 import org.simantics.utils.datastructures.BijectionMap;\r
18 import org.simantics.utils.datastructures.Pair;\r
19 \r
20 public abstract class VirtualGraphObjectSource implements VirtualGraphSource {\r
21 \r
22     private BijectionMap<Object, Integer> hash = new BijectionMap<Object, Integer>();\r
23     \r
24     class ResourceObject {\r
25         public int id;\r
26         public ResourceObject(int id) {\r
27             this.id = id;\r
28         }\r
29         @Override\r
30         public int hashCode() {\r
31             return id;\r
32         }\r
33         @Override\r
34         public boolean equals(Object object) {\r
35             if (this == object)\r
36                 return true;\r
37             else if (object == null)\r
38                 return false;\r
39             else if (ResourceObject.class != object.getClass())\r
40                 return false;\r
41             ResourceObject r = (ResourceObject)object;\r
42             return r.id == id;\r
43         }\r
44     }\r
45     \r
46 //    protected void invalidate(VirtualGraphContext context, Object subject, Object predicate) {\r
47 //        context.invalidate(getOrCreate(context, subject), getOrCreate(context, predicate));\r
48 //    }\r
49 \r
50 //    protected Object getObject(VirtualGraphContext context, org.simantics.db.Resource resource) {\r
51 //        int id = context.getIndex(resource);\r
52 //        Object result = new Resource(id);\r
53 //        hash.map(result, id);\r
54 //        return result;\r
55 //    }\r
56     \r
57 //    private int getOrCreate(VirtualGraphContext context, Object object) {\r
58 //        if(object instanceof org.simantics.db.Resource) return context.getIndex((org.simantics.db.Resource)object);\r
59 //        Integer value = hash.getRight(object);\r
60 //        if(value == null) {\r
61 //            value = context.newResource();\r
62 //            hash.map(object, value);\r
63 //        }\r
64 //        return value;\r
65 //    }\r
66     \r
67     private Object existingOrResource(VirtualGraphContext context, int id) {\r
68         Object value = hash.getLeft(id);\r
69         if(value == null) return context.getResource(id);\r
70         else return value;\r
71     }\r
72 \r
73 //    @Override\r
74 //    final public int[] getStatements(VirtualGraphContext context, int resource) {\r
75 //        Object[] stms = getStatements(existingOrResource(context, resource));\r
76 //        int[] result = new int[stms.length];\r
77 //        for(int i=0;i<stms.length;i++) result[i] = getOrCreate(context, stms[i]);\r
78 //        return result;\r
79 //    }\r
80 //\r
81 //    @Override\r
82 //    final public Pair<Object, Binding> getValue(VirtualGraphContext context, int resource) {\r
83 //        return getValue(context, existingOrResource(context, resource));\r
84 //    }\r
85     \r
86 //    public org.simantics.db.Resource getResource(VirtualGraphContext context, Object virtual) {\r
87 //        return (org.simantics.db.Resource)context.getResource(getOrCreate(context, virtual));\r
88 //    }\r
89 \r
90     abstract public Object[] getStatements(Object resource);\r
91     abstract public Pair<Object, Binding> getValue(VirtualGraphContext context, Object resource);\r
92     \r
93 }\r