]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/flag/IOTablesInfo.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / flag / IOTablesInfo.java
1 package org.simantics.diagram.flag;
2
3 import java.util.ArrayList;
4
5 import org.simantics.databoard.Bindings;
6 import org.simantics.db.Resource;
7 import org.simantics.db.WriteGraph;
8 import org.simantics.db.exception.DatabaseException;
9 import org.simantics.diagram.stubs.DiagramResource;
10 import org.simantics.scl.runtime.tuple.Tuple2;
11
12 public class IOTablesInfo {
13     public static final IOTablesInfo EMPTY = new IOTablesInfo();
14     
15     ArrayList<IOTableInfo> tables = new ArrayList<IOTableInfo>();
16
17     public Tuple2 getBindingRef(double x, double y) {
18         for(IOTableInfo table : tables) {
19             if(x < table.x || x > table.x + table.width)
20                 continue;
21             return new Tuple2(table.name, (int)((y-table.y)/table.rowHeight));
22         }
23         return null;
24     }
25
26     public boolean updateBinding(WriteGraph graph, DiagramResource DIA, Resource flagResource, double flagX, double flagY) throws DatabaseException {
27         Tuple2 bindingRef = getBindingRef(flagX, flagY);
28         
29         if(bindingRef != null) {
30             graph.claimLiteral(flagResource, DIA.Flag_HasIOTableBinding, (String)bindingRef.c0, Bindings.STRING);
31             graph.claimLiteral(flagResource, DIA.Flag_HasIOTableRowIndex, (Integer)bindingRef.c1, Bindings.INTEGER);
32             return true;
33         }
34         else {
35             String currentBinding = graph.getPossibleRelatedValue(flagResource,  DIA.Flag_HasIOTableBinding);
36             if(currentBinding != null && !currentBinding.isEmpty()) {
37                 graph.claimLiteral(flagResource, DIA.Flag_HasIOTableBinding, "", Bindings.STRING);
38                 double[] transform = graph.getRelatedValue(flagResource, DIA.HasTransform, Bindings.DOUBLE_ARRAY);
39                 transform[4] = flagX;
40                 transform[5] = flagY;
41                 graph.claimLiteral(flagResource, DIA.HasTransform, transform);
42                 return true;
43             }
44             return false;
45         }
46     } 
47 }