Use join to wait for job to finish
diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
index a58de85..efd6208 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
@@ -18,6 +18,7 @@
public abstract class Checker {
private static final Logger logger = Logger.getLogger(Checker.class);
+ public static String FAMILY = "checkers";
// private static String pluginID = "org.polarsys.chess.checkers";
@@ -122,6 +123,15 @@
// use this to open a Shell in the UI thread
return Status.OK_STATUS;
}
+
+ @Override
+ public boolean belongsTo(Object family) {
+ if (Checker.FAMILY.equals(family)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
};
job.schedule();
return job;
diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
index 51700bf..40aba6d 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
@@ -4,10 +4,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map.Entry;
import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
@@ -15,6 +12,7 @@
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EValidator;
@@ -85,36 +83,29 @@
* @param pkg
* @return
*/
- public List<Exception> runSync(Set<String> selectedCheckersTags, Package pkg, IProgressMonitor monitor) {
+ public List<Exception> checkSync(Set<String> selectedCheckersTags, Package pkg, IProgressMonitor monitor) {
logger.debug("runSync");
final List<Exception> errors = new ArrayList<Exception>();
checkerStatus = new HashMap<String, Boolean>();
messages = new ArrayList<CheckerMessage>();
final List<Job> jobs = new ArrayList<Job>();
+
+ // Start all the checks()
for (CheckersContainer checkersContainer : checkersContainers) {
logger.debug("run checkersContainer");
- jobs.addAll(checkersContainer.runSync(selectedCheckersTags, pkg));
+ jobs.addAll(checkersContainer.checkSync(selectedCheckersTags, pkg));
}
-
- boolean allEnded = false;
- while(!allEnded) {
- allEnded = true;
- for (Entry<String, Boolean> entry : checkerStatus.entrySet()) {
- allEnded &= entry.getValue();
+
+ // Wait for the checks to finish
+ try {
+ Job.getJobManager().join(Checker.FAMILY, monitor);
+ } catch (OperationCanceledException | InterruptedException e1) {
+ logger.debug("Checker execution interrupted");
+ for (Job job : jobs) {
+ job.cancel();
}
- if (allEnded) break;
- if (monitor.isCanceled()) {
- for (Job job : jobs) {
- job.cancel();
- }
- errors.add(new Exception("Esecuzione checker interrotta"));
- break;
- }
- try {
- TimeUnit.SECONDS.sleep(5);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ errors.add(new Exception("Esecuzione checker interrotta"));
+ e1.printStackTrace();
}
return errors;
}
diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
index 3b37d2d..05007a9 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
@@ -56,7 +56,7 @@
* @param checkersTags
* @return the list of scheduled jobs
*/
- public List<Job> runSync(Set<String> checkersTags, Package pkg) {
+ public List<Job> checkSync(Set<String> checkersTags, Package pkg) {
final List<Job> jobs = new ArrayList<Job>();
for (Checker checker : checkers) {
checkerManager.updateCheckerStatus(checker.unifiedName, false);