From 6af8d67b9d34bb9e8cc4b4c8bd5e95e70c16f104 Mon Sep 17 00:00:00 2001 From: Marko Luukkainen Date: Fri, 3 Mar 2017 14:32:53 +0200 Subject: [PATCH] Allow existing nodes to contain No-operation update for dependency evaluation refs #7045 Change-Id: I5589a337d5ba1f16ad201921a00a675330acc6d0 --- .../update/editor/ModelUpdateEditor.java | 33 ++++++----- .../simantics/interop/update/model/NopOp.java | 57 +++++++++++++++++++ .../interop/update/model/UpdateNode.java | 6 ++ .../interop/update/model/UpdateTree.java | 18 +++--- 4 files changed, 94 insertions(+), 20 deletions(-) create mode 100644 org.simantics.interop.update/src/org/simantics/interop/update/model/NopOp.java diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/editor/ModelUpdateEditor.java b/org.simantics.interop.update/src/org/simantics/interop/update/editor/ModelUpdateEditor.java index 8ecaaa7..94b2461 100644 --- a/org.simantics.interop.update/src/org/simantics/interop/update/editor/ModelUpdateEditor.java +++ b/org.simantics.interop.update/src/org/simantics/interop/update/editor/ModelUpdateEditor.java @@ -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 index 0000000..2dfb30f --- /dev/null +++ b/org.simantics.interop.update/src/org/simantics/interop/update/model/NopOp.java @@ -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; + } + +} diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateNode.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateNode.java index da78b90..de9d685 100644 --- a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateNode.java +++ b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateNode.java @@ -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 { diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java index de5ea90..107c2b8 100644 --- a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java +++ b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateTree.java @@ -21,7 +21,7 @@ public class UpdateTree { public UpdateTree(ReadGraph g, GraphChanges changes, UpdateOperations updateOps) throws DatabaseException { this.changes = changes; this.nodes = new HashMap(); - 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; } -- 2.45.2