import java.util.Comparator;\r
import java.util.Set;\r
\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.NullProgressMonitor;\r
import org.simantics.Simantics;\r
import org.simantics.databoard.Bindings;\r
import org.simantics.databoard.util.URIStringUtils;\r
import org.simantics.db.common.utils.NameUtils;\r
import org.simantics.db.common.utils.VersionMap;\r
import org.simantics.db.common.utils.Versions;\r
+import org.simantics.db.exception.CancelTransactionException;\r
import org.simantics.db.exception.DatabaseException;\r
import org.simantics.db.layer0.adapter.Instances;\r
import org.simantics.db.layer0.request.ActiveModels;\r
}\r
}\r
if (!result.isEmpty())\r
- doMigration(graph, result);\r
+ doMigration(new NullProgressMonitor(), graph, result);\r
}\r
\r
- public static String doMigration(WriteGraph graph, final ArrayList<MigrationOperation> result) throws DatabaseException {\r
+ public static String doMigration(IProgressMonitor monitor, WriteGraph graph, final ArrayList<MigrationOperation> operations) throws DatabaseException {\r
graph.markUndoPoint();\r
StringBuilder b = new StringBuilder();\r
int success = 0;\r
int problem = 0;\r
- for(MigrationOperation op : result) {\r
+ int no = 1;\r
+ int count = operations.size();\r
+ monitor.setTaskName("Migrating " + count + " User Components");\r
+ for(MigrationOperation op : operations) {\r
+ if (monitor.isCanceled())\r
+ throw new CancelTransactionException();\r
+ monitor.subTask("(" + (no++) + "/" + count + ") " + op.toString());\r
String problems = op.perform(graph);\r
if(problems != null) {\r
b.insert(0, problems);\r
return b.toString();\r
}\r
\r
- public static void doPostMigration(WriteGraph graph, ArrayList<MigrationOperation> result) throws DatabaseException {\r
+ public static void doPostMigration(IProgressMonitor monitor, WriteGraph graph, ArrayList<MigrationOperation> result) throws DatabaseException {\r
THashSet<Resource> roots = new THashSet<>();\r
for(MigrationOperation op : result) {\r
Resource root = graph.syncRequest(new PossibleIndexRoot(op.instanceToMigrate.getResource()));\r
if(root != null)\r
roots.add(root);\r
}\r
+ if (monitor.isCanceled())\r
+ throw new CancelTransactionException();\r
for(Resource root : roots) {\r
UserComponentPostMigrationAction action = graph.getPossibleAdapter(root, UserComponentPostMigrationAction.class);\r
if(action != null)\r
- action.perform(graph);\r
+ action.perform(monitor, graph);\r
}\r
}\r
\r