+package org.simantics.diagram.flag;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.scl.runtime.tuple.Tuple2;\r
+\r
+public class IOTablesInfo {\r
+ public static final IOTablesInfo EMPTY = new IOTablesInfo();\r
+ \r
+ ArrayList<IOTableInfo> tables = new ArrayList<IOTableInfo>();\r
+\r
+ public Tuple2 getBindingRef(double x, double y) {\r
+ for(IOTableInfo table : tables) {\r
+ if(x < table.x || x > table.x + table.width)\r
+ continue;\r
+ return new Tuple2(table.name, (int)((y-table.y)/table.rowHeight));\r
+ }\r
+ return null;\r
+ }\r
+\r
+ public boolean updateBinding(WriteGraph graph, DiagramResource DIA, Resource flagResource, double flagX, double flagY) throws DatabaseException {\r
+ Tuple2 bindingRef = getBindingRef(flagX, flagY);\r
+ \r
+ if(bindingRef != null) {\r
+ graph.claimLiteral(flagResource, DIA.Flag_HasIOTableBinding, (String)bindingRef.c0, Bindings.STRING);\r
+ graph.claimLiteral(flagResource, DIA.Flag_HasIOTableRowIndex, (Integer)bindingRef.c1, Bindings.INTEGER);\r
+ return true;\r
+ }\r
+ else {\r
+ String currentBinding = graph.getPossibleRelatedValue(flagResource, DIA.Flag_HasIOTableBinding);\r
+ if(currentBinding != null && !currentBinding.isEmpty()) {\r
+ graph.claimLiteral(flagResource, DIA.Flag_HasIOTableBinding, "", Bindings.STRING);\r
+ double[] transform = graph.getRelatedValue(flagResource, DIA.HasTransform, Bindings.DOUBLE_ARRAY);\r
+ transform[4] = flagX;\r
+ transform[5] = flagY;\r
+ graph.claimLiteral(flagResource, DIA.HasTransform, transform);\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ } \r
+}\r