]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.update/src/org/simantics/interop/update/model/ModelUpdate.java
Adapt GraphChanges to copied model.
[simantics/interop.git] / org.simantics.interop.update / src / org / simantics / interop / update / model / ModelUpdate.java
index 32da62bb523bcc67c72baaddf0fac74fe305687d..6e5175707080e7f5587c7b9ea7d52b5ab4b43261 100644 (file)
@@ -82,8 +82,10 @@ public abstract class ModelUpdate {
                                showWarning(result2.second);
                        comparator2.test(getSession(), monitor);
                        changes2 = comparator2.getChanges();
-                       if (monitor.isCanceled())
+                       if (monitor.isCanceled()) {
+                               dispose();
                                return;
+                       }
                        changes2 = getSession().syncRequest(createFilterRead(changes2, filters));
                        Pair<UpdateTree, UpdateList> chg2 = createChangeObjects(changes2, null);
                        updateTree2 = chg2.first;
@@ -98,8 +100,10 @@ public abstract class ModelUpdate {
                        changes3 = comparator3.getChanges();
                        changes3 = getSession().syncRequest(createFilterRead(changes3, filters));
                }
-               if (monitor.isCanceled())
+               if (monitor.isCanceled()) {
+                       dispose();
                        return;
+               }
                
                Pair<GraphComparator,String> result = getChanges(oldModel,newModel);
                GraphComparator comparator  = result.first;
@@ -138,14 +142,44 @@ public abstract class ModelUpdate {
                                }
                        }
                }
-               if (monitor.isCanceled())
+               if (monitor.isCanceled()) {
+                       dispose();
                        return;
+               }
                comparator.test(getSession(), monitor);
                monitor.setTaskName("Processing changes...");
                monitor.subTask("");
                changes = comparator.getChanges();
                changes = getSession().syncRequest(createFilterRead(changes, filters));
                Pair<UpdateTree, UpdateList> chg = createChangeObjects(changes, monitor);
+               if (chg == null) {
+                       dispose();
+                       return;
+               }
+        updateTree = chg.first;
+        updateList = chg.second;
+               if (userFilters.size() != 0) {
+                       refreshUserFilters();
+               }
+               
+               
+               if (originalModel != null) {
+                       defaultSelections();
+               }
+               init = true;
+       }
+       
+       public void setInput(Resource oldModel, Resource newModel, GraphChanges changes, IProgressMonitor monitor) throws DatabaseException{
+               if (!oldModel.equals(changes.getResource1()) ||
+                       !newModel.equals(changes.getResource2())) {
+                       throw new DatabaseException("GraphChanges does not match input models");
+               }
+               this.changes = getSession().syncRequest(createFilterRead(changes, filters));
+               Pair<UpdateTree, UpdateList> chg = createChangeObjects(changes, monitor);
+               if (chg == null) {
+                       dispose();
+                       return;
+               }
         updateTree = chg.first;
         updateList = chg.second;
                if (userFilters.size() != 0) {
@@ -270,14 +304,23 @@ public abstract class ModelUpdate {
        protected abstract Pair<GraphComparator,String> getChanges(Resource r1, Resource r2)  throws DatabaseException;
        
        protected Pair<UpdateTree, UpdateList> createChangeObjects(GraphChanges changes, IProgressMonitor monitor) throws DatabaseException{
-               if (monitor != null)
+               if (monitor != null) {
+                       if (monitor.isCanceled())
+                               return null;
                        monitor.subTask("Processing structural changes");
+               }
                UpdateTree updateTree = getUpdateTree(changes);
-               if (monitor != null)
+               if (monitor != null) {
+                       if (monitor.isCanceled())
+                               return null;
                        monitor.subTask("Processing property changes");
+               }
         UpdateList updateList = getUpdateList(changes);
-        if (monitor != null)
+        if (monitor != null) {
+               if (monitor.isCanceled())
+                               return null;
                monitor.subTask("Postprocessing changes");
+        }
         postProcess(updateTree, updateList);
         return new Pair<UpdateTree, UpdateList>(updateTree, updateList);
        }
@@ -342,9 +385,9 @@ public abstract class ModelUpdate {
        }
        public UpdateList getUpdateList3() throws DatabaseException {
                if (updateList3 == null && changes3 != null) {
-                   Pair<UpdateTree, UpdateList> chg3 = createChangeObjects(changes3, null);
-            updateTree3 = chg3.first;
-            updateList3 = chg3.second;
+                       Pair<UpdateTree, UpdateList> chg3 = createChangeObjects(changes3, null);
+                       updateTree3 = chg3.first;
+                       updateList3 = chg3.second;
                }
                return updateList3;
        }
@@ -622,5 +665,6 @@ public abstract class ModelUpdate {
                updateTree2 = null;
                updateTree3 = null;
                updateNode3 = null;
+               init = false;
        }
 }