--- /dev/null
+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