]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.update/src/org/simantics/interop/update/editor/ModelUpdateEditor.java
Allow existing nodes to contain No-operation update for dependency
[simantics/interop.git] / org.simantics.interop.update / src / org / simantics / interop / update / editor / ModelUpdateEditor.java
index a3b60332ce9e1552bbe68f9e14bdb182f65a86d1..94b24619675049ff0bf1489fd4c4fcbd4935a1eb 100644 (file)
@@ -49,20 +49,18 @@ import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.exception.DoesNotContainValueException;
 import org.simantics.db.exception.ManyObjectsForFunctionalRelationException;
-import org.simantics.db.exception.NoSingleResultException;
 import org.simantics.db.exception.ServiceException;
+import org.simantics.db.layer0.util.Layer0Utils;
 import org.simantics.db.request.Read;
 import org.simantics.interop.test.GraphChanges;
 import org.simantics.interop.test.GraphComparator;
-import org.simantics.interop.test.NameComparator;
 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.layer0.Layer0;
 import org.simantics.ui.workbench.ResourceEditorPart2;
-import org.simantics.utils.datastructures.BijectionMap;
 import org.simantics.utils.datastructures.Callback;
 import org.simantics.utils.datastructures.Pair;
 import org.simantics.utils.ui.ExceptionUtils;
@@ -160,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() {
                                
@@ -330,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);
@@ -401,6 +405,8 @@ public abstract class ModelUpdateEditor extends ResourceEditorPart2 {
                getSession().asyncRequest(new WriteRequest(){
                        @Override
                        public void perform(WriteGraph graph) throws DatabaseException {
+                               Layer0Utils.addCommentMetadata(graph, "Apply all model updates");
+                               graph.markUndoPoint();
                                for (Pair<Statement, Statement> mod : changes.getModifications()) {
                                        applyLiteralChange(graph, mod);
                                }
@@ -452,6 +458,8 @@ public abstract class ModelUpdateEditor extends ResourceEditorPart2 {
                getSession().asyncRequest(new WriteRequest(){
                        @Override
                        public void perform(WriteGraph graph) throws DatabaseException {
+                               Layer0Utils.addCommentMetadata(graph, "Apply selected model updates");
+                               graph.markUndoPoint();
                                for (Pair<Statement, Statement> mod : selected) {
                                        changes.getModifications().remove(mod);
                                        applyLiteralChange(graph, mod);
@@ -657,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) {