]> gerrit.simantics Code Review - simantics/interop.git/commitdiff
Allow existing nodes to contain No-operation update for dependency
authorMarko Luukkainen <marko.luukkainen@vtt.fi>
Fri, 3 Mar 2017 12:32:53 +0000 (14:32 +0200)
committerMarko Luukkainen <marko.luukkainen@vtt.fi>
Fri, 3 Mar 2017 12:32:53 +0000 (14:32 +0200)
evaluation

refs #7045

Change-Id: I5589a337d5ba1f16ad201921a00a675330acc6d0

org.simantics.interop.update/src/org/simantics/interop/update/editor/ModelUpdateEditor.java
org.simantics.interop.update/src/org/simantics/interop/update/model/NopOp.java [new file with mode: 0644]
org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateNode.java
org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java

index 8ecaaa77f36157d55d836c16ee25a63be5e693aa..94b24619675049ff0bf1489fd4c4fcbd4935a1eb 100644 (file)
@@ -57,6 +57,7 @@ import org.simantics.interop.test.GraphComparator;
 import org.simantics.interop.update.Activator;
 import org.simantics.interop.update.model.UpdateNode;
 import org.simantics.interop.update.model.UpdateNode.Status;
+import org.simantics.interop.update.model.UpdateOp;
 import org.simantics.interop.update.model.UpdateTree;
 import org.simantics.interop.utils.TableUtils;
 import org.simantics.ui.workbench.ResourceEditorPart2;
@@ -157,7 +158,7 @@ public abstract class ModelUpdateEditor extends ResourceEditorPart2 {
                        
                        TreeViewerColumn dataColumn = TableUtils.addColumn(changeBrowser, "Data", true, 600);
 
-                       dataColumn.setLabelProvider(new UpdateNodeLabelProvicer());
+                       dataColumn.setLabelProvider(new UpdateNodeLabelProvider());
                        
                        changeBrowser.addCheckStateListener(new ICheckStateListener() {
                                
@@ -327,21 +328,27 @@ public abstract class ModelUpdateEditor extends ResourceEditorPart2 {
                while (!nodeStack.isEmpty()) {
                        UpdateNode n = nodeStack.pop();
                        if (n.getOp() != null) {
-                               boolean applied = n.getOp().applied();
-                               if (applied) {
-                                       changeBrowser.setChecked(n, true);
+                               UpdateOp op = n.getOp();
+                               if (!op.isAdd() && !op.isDelete()) {
                                        changeBrowser.setGrayed(n, true);
-                                       selectedStructure.remove(n);
+                                       changeBrowser.setChecked(n, true);
                                } else {
-                                       boolean sel = n.getOp().selected();
-                                       if (sel) {
-                                               selectedStructure.add(n);
-                                               
-                                       } else {
+                                       boolean applied = op.applied();
+                                       if (applied) {
+                                               changeBrowser.setChecked(n, true);
+                                               changeBrowser.setGrayed(n, true);
                                                selectedStructure.remove(n);
+                                       } else {
+                                               boolean sel = op.selected();
+                                               if (sel) {
+                                                       selectedStructure.add(n);
+                                                       
+                                               } else {
+                                                       selectedStructure.remove(n);
+                                               }
+                                               changeBrowser.setChecked(n, sel);
+                                               changeBrowser.setGrayed(n, false);
                                        }
-                                       changeBrowser.setChecked(n, sel);
-                                       changeBrowser.setGrayed(n, false);
                                }
                        } else {
                                changeBrowser.setGrayed(n, true);
@@ -658,7 +665,7 @@ public abstract class ModelUpdateEditor extends ResourceEditorPart2 {
                }
        }
        
-       private class UpdateNodeLabelProvicer extends ColumnLabelProvider {
+       private class UpdateNodeLabelProvider extends ColumnLabelProvider {
                
                @Override
                public String getText(Object element) {
diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/NopOp.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/NopOp.java
new file mode 100644 (file)
index 0000000..2dfb30f
--- /dev/null
@@ -0,0 +1,57 @@
+package org.simantics.interop.update.model;
+
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.interop.test.GraphChanges;
+
+/**
+ * No-operation.
+ * 
+ * @author MLMARKO
+ *
+ */
+public class NopOp extends UpdateOp{
+       
+       private Resource r;
+       public NopOp(Resource r, GraphChanges changes) {
+               super(changes);
+               this.r = r;
+       }
+
+       @Override
+       protected void _apply(WriteGraph g) throws DatabaseException {
+               
+       }
+       
+       @Override
+       public Resource getCreatedResource() {
+               return r;
+       }
+       
+       @Override
+       public Resource getResource() {
+               return r;
+       }
+       
+       @Override
+       public boolean isAdd() {
+               return false;
+       }
+       
+       @Override
+       public boolean isDelete() {
+               return false;
+       }
+       
+       @Override
+       public boolean requiresParentOps() {
+               return false;
+       }
+       
+       @Override
+       public boolean requiresSubOps() {
+               return false;
+       }
+
+}
index da78b9016638aceb359281f304cdcf2a8844c0ee..de9d685abd84fafdeccf9ab69914555f23bc608d 100644 (file)
@@ -67,6 +67,12 @@ public class UpdateNode {
        
        public void addChild(UpdateNode node) {
                children.add(node);
+               if (op != null && node.op != null) {
+                       if (!op.getSubOps().contains(node.op)) {
+                               op.addSubOp(node.op);
+                               node.op.addParentOp(op);
+                       }
+               }
        }
 
        public ImageDescriptor getImage(ReadGraph graph) throws DatabaseException {
index de5ea90e48a94af527c240dd90778ba5493efaaa..107c2b89a4b1e5ef1444659677e626b6cf3a371b 100644 (file)
@@ -21,7 +21,7 @@ public class UpdateTree {
        public UpdateTree(ReadGraph g, GraphChanges changes, UpdateOperations updateOps) throws DatabaseException {
                this.changes = changes;
                this.nodes = new HashMap<Resource, UpdateNode>();
-               this.rootNode = createNode(Status.EXIST, changes.getResource1());
+               this.rootNode = createNode(g, Status.EXIST, changes.getResource1());
                nodes.put(changes.getResource1(), rootNode);
                nodes.put(changes.getResource2(), rootNode);
                this.updateOps = updateOps;
@@ -37,7 +37,11 @@ public class UpdateTree {
                return rootNode;
        }
        
-       protected UpdateNode createNode(Status status, Resource r) {
+       public GraphChanges getChanges() {
+               return changes;
+       }
+       
+       protected UpdateNode createNode(ReadGraph g, Status status, Resource r) throws DatabaseException {
                return new UpdateNode(status, r);
        }
        
@@ -45,10 +49,10 @@ public class UpdateTree {
                return new UpdateNode(status, op);
        }
        
-       private UpdateNode createNode(Resource r1, Resource r2) {
+       private UpdateNode createNode(ReadGraph g, Resource r1, Resource r2) throws DatabaseException {
                UpdateNode node = null;
                if (r1 != null && r2 != null) {
-                       node =  createNode(Status.EXIST, r1);
+                       node =  createNode(g, Status.EXIST, r1);
                        nodes.put(r1, node);
                        nodes.put(r2, node);
                } else if (r1 != null) {
@@ -70,7 +74,7 @@ public class UpdateTree {
                if (nodes.containsKey(r2))
                        return nodes.get(r2);
                
-               UpdateNode node = createNode(r1, r2);
+               UpdateNode node = createNode(g, r1, r2);
                connectParent(g,node);
                return node;
        }
@@ -104,9 +108,9 @@ public class UpdateTree {
                UpdateNode parent = nodes.get(parentResource);
                if (parent == null) {
                        if (changes.getComparable().containsLeft(parentResource)) {
-                               parent = createNode(parentResource, changes.getComparable().getRight(parentResource));
+                               parent = createNode(g, parentResource, changes.getComparable().getRight(parentResource));
                        } else if (changes.getComparable().containsRight(parentResource)) {
-                               parent = createNode(changes.getComparable().getLeft(parentResource) ,parentResource);
+                               parent = createNode(g, changes.getComparable().getLeft(parentResource) ,parentResource);
                        } else {
                                return null;
                        }