From 9bd86654cac32a19b20ade8391f4298e2f21bf24 Mon Sep 17 00:00:00 2001 From: Luca Cristoforetti <cristofo@fbk.eu> Date: Wed, 20 May 2020 18:29:38 +0200 Subject: [PATCH] Use join to wait for job to finish --- .../checkers/core/checkerManager/Checker.java | 10 +++++ .../core/checkerManager/CheckerManager.java | 39 +++++++------------ .../checkerManager/CheckersContainer.java | 2 +- 3 files changed, 26 insertions(+), 25 deletions(-) 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 a58de8526..efd620848 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 @@ import org.eclipse.uml2.uml.Package; 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 @@ public abstract class Checker { // 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 51700bf55..40aba6d5e 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.ArrayList; 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.IProject; 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 @@ public class CheckerManager { * @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(); - } - 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(); + + // 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(); } + 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 3b37d2d8c..05007a9e4 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 @@ public class CheckersContainer { * @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); -- GitLab