]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/RunActiveValidations.java
Allow batch issue validation to remove issues with disconnected context
[simantics/platform.git] / bundles / org.simantics.issues.ui / src / org / simantics / issues / ui / handler / RunActiveValidations.java
index d2e2572115681744f5f150239cef17ee59f0e2b1..0ab0ef98cb75b824978d0ca3743ecd2cad225f7e 100644 (file)
@@ -31,6 +31,7 @@ import org.simantics.Simantics;
 import org.simantics.SleepingDatabaseJob;
 import org.simantics.db.Issue;
 import org.simantics.db.ReadGraph;
+import org.simantics.db.RequestProcessor;
 import org.simantics.db.Resource;
 import org.simantics.db.Session;
 import org.simantics.db.common.request.Queries;
@@ -66,11 +67,11 @@ public class RunActiveValidations extends AbstractHandler {
         final Session session = Simantics.getSession();
 
         // 1. query for which composites to run the validation
-        final Collection<BatchIssueSource> validations = new ArrayList<BatchIssueSource>();
+        final Collection<BatchIssueSource> validations = new ArrayList<>();
         final BatchIssueValidationContext context = new BatchIssueValidationContext();
 
         try {
-            SleepingDatabaseJob dbLock = new SleepingDatabaseJob("Validation Preparation").scheduleAndWaitForRunning();
+            SleepingDatabaseJob dbLock = new SleepingDatabaseJob(Messages.RunActiveValidations_ValidationPreparation).scheduleAndWaitForRunning();
             try {
                 PlatformUI.getWorkbench().getProgressService().run(true, true, new IRunnableWithProgress() {
                     @Override
@@ -79,14 +80,11 @@ public class RunActiveValidations extends AbstractHandler {
                             Resource model = session.sync(new PossibleActiveModel(Simantics.getProjectResource()));
                             if(model == null) return;
 
-                            Collection<Resource> activeSources = session.syncRequest(new SelectedModelBatchIssueSources(model));
-                            for(Resource source : activeSources) {
-                                BatchIssueSource bis = session.syncRequest(Queries.adapt(source, BatchIssueSource.class, true));
-                                if(bis != null)
-                                    validations.add(bis);
-                            }
+                            toBatchIssueSources(session,
+                                    session.syncRequest(new SelectedModelBatchIssueSources(model)),
+                                    validations);
 
-                            SubMonitor.convert(monitor, "Preparing resources for validation", 100);
+                            SubMonitor.convert(monitor, Messages.RunActiveValidations_MonitorPreparingResourcesForValidation, 100);
                             context.contexts = Collections.singletonList(model);
                             context.domain = ModelTransferableGraphSourceRequest.getDomainOnly(session, monitor, model);
 
@@ -111,15 +109,24 @@ public class RunActiveValidations extends AbstractHandler {
             // Operation cancelled, ignore.
             return;
         }
-        
+
         if(!validations.isEmpty() && !context.contexts.isEmpty())
             run(postValidation, validations, context);
 
     }
 
+    static Collection<BatchIssueSource> toBatchIssueSources(RequestProcessor processor, Collection<Resource> sources, Collection<BatchIssueSource> result) throws DatabaseException {
+        for (Resource source : sources) {
+            BatchIssueSource bis = processor.syncRequest(Queries.adapt(source, BatchIssueSource.class, true));
+            if (bis != null)
+                result.add(bis);
+        }
+        return result;
+    }
+
     public static void run(Runnable postValidation, final Collection<BatchIssueSource> validations, final BatchIssueValidationContext context) {
         // Run the validations for the selected composites
-        SleepingDatabaseJob dbLock = new SleepingDatabaseJob("Validation");
+        SleepingDatabaseJob dbLock = new SleepingDatabaseJob(Messages.RunActiveValidations_Validation);
         try {
             dbLock.scheduleAndWaitForRunning();
             try {
@@ -127,7 +134,7 @@ public class RunActiveValidations extends AbstractHandler {
                     @Override
                     public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                         try {
-                            SubMonitor progress = SubMonitor.convert(monitor, "Validate Model", 100);
+                            SubMonitor progress = SubMonitor.convert(monitor, Messages.RunActiveValidations_ValidateModel, 100);
                             int maxWrittenIssues = IssuePreferenceUtil.getPreferences().maxBatchIssuesToWrite;
                             int writtenIssues = 0;
                             for (BatchIssueSource source : validations) {
@@ -139,13 +146,13 @@ public class RunActiveValidations extends AbstractHandler {
                                     @Override
                                     public Collection<Resource> perform(ReadGraph graph) throws DatabaseException {
                                         IssueResource ISSUE = IssueResource.getInstance(graph);
-                                        ArrayList<Resource> result = new ArrayList<Resource>();
+                                        ArrayList<Resource> result = new ArrayList<>();
                                         for (Resource issue : graph.syncRequest(new ManagedIssues(resource))) {
                                             Resource list = graph.getSingleObject(issue, ISSUE.Issue_HasContexts);
                                             List<Resource> l = ListUtils.toList(graph, list);
                                             if (l.size() > 0) {
                                                 Resource mainContext = l.get(0); 
-                                                if (!graph.hasStatement(mainContext))
+                                                if (!BatchValidations.isLinkedToOtherThan(graph, mainContext, issue))
                                                     result.add(mainContext);
                                             }
                                         }