From 3d043ce1b73ca9f565b8636933e62359603a4260 Mon Sep 17 00:00:00 2001 From: Brita Keller Date: Tue, 3 Dec 2019 22:19:56 +0100 Subject: [PATCH] Fixed #20 - NPE gets caught when opening a damaged file and info popup is shown --- .../scviewer/database/text/TextDbLoader.groovy | 2 ++ .../database/swt/internal/WaveformViewer.java | 1 + .../e4/application/parts/WaveformViewer.java | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy index c915e0e..1461b08 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy @@ -80,6 +80,7 @@ public class TextDbLoader implements IWaveformDbLoader{ .allocateStartSize(64*1024*1024) .allocateIncrement(64*1024*1024) .make() + // NPE here ---> parseInput(gzipped?new GZIPInputStream(new FileInputStream(file)):new FileInputStream(file)) calculateConcurrencyIndicees() return true @@ -87,6 +88,7 @@ public class TextDbLoader implements IWaveformDbLoader{ } catch(EOFException e) { return true; } catch(Exception e) { + System.out.println("---->>> Exception caught while loading database. StackTrace following... "); e.printStackTrace() } return false; diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java index 57933fc..ca5a566 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java @@ -158,6 +158,7 @@ public class WaveformViewer implements IWaveformViewer { @Override public void mouseUp(MouseEvent e) { + if(start==null) return; if((e.stateMask&SWT.MODIFIER_MASK&~SWT.SHIFT)!=0) return; //don't react on modifier if (e.button == 1 && ((e.stateMask&SWT.SHIFT)==0)) { if(Math.abs(e.x-start.x)<3 && Math.abs(e.y-start.y)<3){ diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java index ab0ea06..26d42c6 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java @@ -74,7 +74,8 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.TypedListener; +import org.eclipse.swt.widgets.MessageBox; + import com.minres.scviewer.database.ITx; import com.minres.scviewer.database.ITxEvent; import com.minres.scviewer.database.ITxRelation; @@ -489,7 +490,17 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis job.addJobChangeListener(new JobChangeAdapter() { @Override public void done(IJobChangeEvent event) { - if (event.getResult().getCode() != Status.OK_STATUS.getCode()) return; + IStatus result = event.getResult(); + if( (!result.isMultiStatus() && result.getCode() != Status.OK_STATUS.getCode() ) || + (result.isMultiStatus() && result.getChildren().length > 0 && result.getChildren()[0].getCode() != Status.OK_STATUS.getCode() ) ){ + // kill editor and pop up warning for user + sync.asyncExec(() -> { + final Display display = myParent.getDisplay(); + MessageDialog.openWarning(display.getActiveShell(), "Error loading database", "Database cannot be loaded. Aborting..."); + ePartService.hidePart(myPart, true); + }); + return; + } sync.asyncExec(()->{ waveformPane.setMaxTime(database.getMaxTime()); if (state != null)