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;
+ }
}
/**