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;
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;
......
......@@ -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;
}
......
......@@ -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);
......
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