]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/PartialIC.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / PartialIC.java
diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/PartialIC.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/PartialIC.java
new file mode 100644 (file)
index 0000000..379aaf1
--- /dev/null
@@ -0,0 +1,62 @@
+package org.simantics.modeling;\r
+\r
+import java.util.Arrays;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.variable.RVI;\r
+import org.simantics.db.layer0.variable.Variable;\r
+\r
+public class PartialIC {\r
+\r
+       public static Binding BINDING = Bindings.getBindingUnchecked(PartialIC.class);\r
+       \r
+       public RVI[] rvis = {};\r
+       public Variant[] variants = {};\r
+       \r
+       //public TreeMap<RVI, Variant> values = new TreeMap<RVI, Variant>(); \r
+       \r
+       public void add(RVI rvi, Variant value) {\r
+           rvis = Arrays.copyOf(rvis, rvis.length + 1);\r
+           rvis[rvis.length - 1] = rvi;\r
+           variants = Arrays.copyOf(variants, variants.length + 1);\r
+        variants[rvis.length - 1] = value;\r
+        \r
+               //values.put(rvi, value);\r
+       }\r
+       \r
+       public void apply(WriteGraph graph, Variable base) throws DatabaseException {\r
+//             for(Map.Entry<RVI,Variant> entry : values.entrySet()) {\r
+//                     RVI rvi = entry.getKey();\r
+//                     Variant variant = entry.getValue();\r
+//                     Variable v = rvi.resolvePossible(graph, base);\r
+//                     if(v != null) {\r
+////                           System.err.println("apply " + v.getURI(graph) + " => " + variant);\r
+//                             v.setValue(graph, variant.getValue(), variant.getBinding());\r
+//                     } else {\r
+//                             System.err.println("failed to resolve " + rvi);\r
+//                     }\r
+//             }\r
+           \r
+           if (rvis.length != variants.length) {\r
+               throw new DatabaseException("PartialIC has broken RVI and Variant data arrays. Tried to apply to " + base.getURI(graph));\r
+           }\r
+           \r
+           for (int i = 0; i < rvis.length; i++) {\r
+               RVI rvi = rvis[i];\r
+               Variant variant = variants[i];\r
+               Variable v = rvi.resolvePossible(graph, base);\r
+               if (v != null) {\r
+//              System.err.println("apply " + v.getURI(graph) + " => " + variant);\r
+                v.setValue(graph, variant.getValue(), variant.getBinding());\r
+            } else {\r
+                System.err.println("failed to resolve " + rvi);\r
+            }\r
+        }\r
+           \r
+       }\r
+       \r
+}\r