From d8ecfacac9751e5dc6e18f1f6795c9538e1caba7 Mon Sep 17 00:00:00 2001 From: Phillipus Date: Fri, 21 Jul 2017 07:45:36 +0100 Subject: [PATCH] Catch exception in running Job and throw onward --- .../grafico/GraficoModelExporter.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/grafico/GraficoModelExporter.java b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/grafico/GraficoModelExporter.java index d009d965..903c4f7b 100644 --- a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/grafico/GraficoModelExporter.java +++ b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/grafico/GraficoModelExporter.java @@ -16,6 +16,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; @@ -53,6 +54,16 @@ */ public class GraficoModelExporter implements IGraficoConstants { + // Use a ProgressMonitor to cancel running Jobs and track Exception + static class ExceptionProgressMonitor extends NullProgressMonitor { + IOException ex; + + void catchException(IOException ex) { + this.ex = ex; + setCanceled(true); + } + } + /** * ResourceSet */ @@ -117,6 +128,8 @@ public void exportModel() throws IOException { // Now save all Resources JobGroup jobgroup = new JobGroup("GraficoModelExporter", 0, 1); //$NON-NLS-1$ + final ExceptionProgressMonitor pm = new ExceptionProgressMonitor(); + for(Resource resource : fResourceSet.getResources()) { Job job = new Job("Resource Save Job") { //$NON-NLS-1$ @Override @@ -125,11 +138,12 @@ protected IStatus run(IProgressMonitor monitor) { resource.save(null); } catch(IOException ex) { - ex.printStackTrace(); + pm.catchException(ex); } return Status.OK_STATUS; } }; + job.setJobGroup(jobgroup); job.schedule(); } @@ -138,13 +152,17 @@ protected IStatus run(IProgressMonitor monitor) { @Override public void run() { try { - jobgroup.join(0, null); + jobgroup.join(0, pm); } catch(OperationCanceledException | InterruptedException ex) { - ex.printStackTrace(); } } }); + + // Throw on any exception + if(pm.ex != null) { + throw pm.ex; + } } /**