]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/base/UpdateComponentUids.java
Merge "Refactoring of simulator toolkit"
[simantics/platform.git] / bundles / org.simantics.structural.synchronization.client / src / org / simantics / structural / synchronization / base / UpdateComponentUids.java
index d3233115254aecb5863bd31d2874241849e618a5..df63ada0525911d50cd84c636989f1fe8e30d34c 100644 (file)
@@ -5,13 +5,16 @@ import org.simantics.db.ReadGraph;
 import org.simantics.db.exception.CancelTransactionException;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.variable.Variable;
+import org.simantics.structural.synchronization.utils.ComponentBase;
+
+import gnu.trove.map.hash.THashMap;
 
 /**
  * Utility for updating UIDs in the given component to correspond
  * the RVIs of the given variable. This operation is needed when
  * the mapping is part of a model that is imported to a new database
  * and resource ids have been changed.
- * 
+ *
  * @author Hannu Niemistö
  * @author Tuukka Lehtonen
  */
@@ -21,10 +24,11 @@ public class UpdateComponentUids<T extends ComponentBase<T>> {
         void componentsDone(int components, int componentCount);
     }
 
+    private THashMap<String, String> oldToNewUids;
     private IProgressMonitor monitor;
     private ComponentUpdateProgressMonitor componentMonitor;
     private ReadGraph graph;
-       private int componentCount;
+    private int componentCount;
     private int counter;
 
     private UpdateComponentUids(IProgressMonitor monitor, ReadGraph graph, int componentCount) {
@@ -32,10 +36,13 @@ public class UpdateComponentUids<T extends ComponentBase<T>> {
         this.componentMonitor = monitor instanceof ComponentUpdateProgressMonitor ? (ComponentUpdateProgressMonitor) monitor : null;
         this.graph = graph;
         this.componentCount = componentCount;
+        this.oldToNewUids = new THashMap<>(componentCount);
     }
 
     private void update(T component, Variable variable) throws DatabaseException {
-        component.uid = variable.getRVI(graph).toString();
+        String newUid = variable.getRVI(graph).toString();
+        oldToNewUids.put(component.uid, newUid);
+        component.uid = newUid;
 
         // Handle progress monitoring and cancellation
         counter++;
@@ -54,12 +61,14 @@ public class UpdateComponentUids<T extends ComponentBase<T>> {
         }
     }
 
-    public static <T extends ComponentBase<T>> void update(ReadGraph graph, T component, Variable variable) throws DatabaseException {
-        update(null, graph, component, variable);
+    public static <T extends ComponentBase<T>> THashMap<String, String> update(ReadGraph graph, T component, Variable variable) throws DatabaseException {
+        return update(null, graph, component, variable);
     }
 
-    public static <T extends ComponentBase<T>> void update(IProgressMonitor monitor, ReadGraph graph, T component, Variable variable) throws DatabaseException {
-        new UpdateComponentUids<T>(monitor, graph, countComponents(component)).update(component, variable);
+    public static <T extends ComponentBase<T>> THashMap<String, String> update(IProgressMonitor monitor, ReadGraph graph, T component, Variable variable) throws DatabaseException {
+        UpdateComponentUids<T> updateComponentUids = new UpdateComponentUids<T>(monitor, graph, countComponents(component));
+        updateComponentUids.update(component, variable);
+        return updateComponentUids.oldToNewUids;
     }
 
     public static <T extends ComponentBase<T>> int countComponents(T component) {