Skip to content
Snippets Groups Projects
Commit 9bd86654 authored by Luca Cristoforetti's avatar Luca Cristoforetti
Browse files

Use join to wait for job to finish

parent b1ff679b
No related branches found
No related tags found
No related merge requests found
...@@ -18,6 +18,7 @@ import org.eclipse.uml2.uml.Package; ...@@ -18,6 +18,7 @@ import org.eclipse.uml2.uml.Package;
public abstract class Checker { public abstract class Checker {
private static final Logger logger = Logger.getLogger(Checker.class); private static final Logger logger = Logger.getLogger(Checker.class);
public static String FAMILY = "checkers";
// private static String pluginID = "org.polarsys.chess.checkers"; // private static String pluginID = "org.polarsys.chess.checkers";
...@@ -122,6 +123,15 @@ public abstract class Checker { ...@@ -122,6 +123,15 @@ public abstract class Checker {
// use this to open a Shell in the UI thread // use this to open a Shell in the UI thread
return Status.OK_STATUS; return Status.OK_STATUS;
} }
@Override
public boolean belongsTo(Object family) {
if (Checker.FAMILY.equals(family)) {
return true;
} else {
return false;
}
}
}; };
job.schedule(); job.schedule();
return job; return job;
......
...@@ -4,10 +4,7 @@ import java.util.ArrayList; ...@@ -4,10 +4,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IMarker;
...@@ -15,6 +12,7 @@ import org.eclipse.core.resources.IProject; ...@@ -15,6 +12,7 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EValidator; import org.eclipse.emf.ecore.EValidator;
...@@ -85,36 +83,29 @@ public class CheckerManager { ...@@ -85,36 +83,29 @@ public class CheckerManager {
* @param pkg * @param pkg
* @return * @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"); logger.debug("runSync");
final List<Exception> errors = new ArrayList<Exception>(); final List<Exception> errors = new ArrayList<Exception>();
checkerStatus = new HashMap<String, Boolean>(); checkerStatus = new HashMap<String, Boolean>();
messages = new ArrayList<CheckerMessage>(); messages = new ArrayList<CheckerMessage>();
final List<Job> jobs = new ArrayList<Job>(); final List<Job> jobs = new ArrayList<Job>();
// Start all the checks()
for (CheckersContainer checkersContainer : checkersContainers) { for (CheckersContainer checkersContainer : checkersContainers) {
logger.debug("run checkersContainer"); logger.debug("run checkersContainer");
jobs.addAll(checkersContainer.runSync(selectedCheckersTags, pkg)); jobs.addAll(checkersContainer.checkSync(selectedCheckersTags, pkg));
} }
boolean allEnded = false; // Wait for the checks to finish
while(!allEnded) { try {
allEnded = true; Job.getJobManager().join(Checker.FAMILY, monitor);
for (Entry<String, Boolean> entry : checkerStatus.entrySet()) { } catch (OperationCanceledException | InterruptedException e1) {
allEnded &= entry.getValue(); logger.debug("Checker execution interrupted");
} for (Job job : jobs) {
if (allEnded) break; job.cancel();
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; return errors;
} }
......
...@@ -56,7 +56,7 @@ public class CheckersContainer { ...@@ -56,7 +56,7 @@ public class CheckersContainer {
* @param checkersTags * @param checkersTags
* @return the list of scheduled jobs * @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>(); final List<Job> jobs = new ArrayList<Job>();
for (Checker checker : checkers) { for (Checker checker : checkers) {
checkerManager.updateCheckerStatus(checker.unifiedName, false); checkerManager.updateCheckerStatus(checker.unifiedName, false);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment