From 523c266e8d1e1af56e283098ca6eb0c0ce304f4c Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Tue, 23 Jan 2024 17:34:56 +0100 Subject: [PATCH] fixes locking issue preventing reload --- .../META-INF/MANIFEST.MF | 2 +- .../minres/scviewer/database/ftr/FtrDbLoader.java | 1 - .../scviewer/e4/application/parts/DesignBrowser.java | 6 +++++- .../e4/application/parts/WaveformViewer.java | 12 +++++++----- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/plugins/com.minres.scviewer.database.ftr/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.database.ftr/META-INF/MANIFEST.MF index a517a3d..716ed8c 100644 --- a/plugins/com.minres.scviewer.database.ftr/META-INF/MANIFEST.MF +++ b/plugins/com.minres.scviewer.database.ftr/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: CBOR transaction database Bundle-SymbolicName: com.minres.scviewer.database.ftr -Bundle-Version: 1.0.0.qualifier +Bundle-Version: 1.0.1.qualifier Bundle-Vendor: MINRES Technologies GmbH Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: org.osgi.framework;version="1.3.0", diff --git a/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/FtrDbLoader.java b/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/FtrDbLoader.java index a68dbb4..c65c702 100644 --- a/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/FtrDbLoader.java +++ b/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/FtrDbLoader.java @@ -178,7 +178,6 @@ public class FtrDbLoader implements IWaveformDbLoader { */ @Override public void load(File file) throws InputFormatException { - dispose(); this.file=file; try { fis = new FileInputStream(file); diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java index b01b1da..a224c12 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java @@ -366,10 +366,14 @@ public class DesignBrowser { } } - @SuppressWarnings("unchecked") public void setWaveformViewer(WaveformViewer waveformViewerPart) { this.waveformViewerPart=waveformViewerPart; IWaveformDb database = waveformViewerPart.getDatabase(); + setWaveformDb(database); + } + + @SuppressWarnings("unchecked") + public void setWaveformDb(IWaveformDb database) { Object input = treeViewer.getInput(); if(input instanceof List){ IWaveformDb db = ((List)input).get(0); diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java index 5d6ba8a..a0e5489 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java @@ -176,7 +176,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis /** The factory. */ WaveformViewFactory factory = new WaveformViewFactory(); - DesignBrowser browser = null; + DesignBrowser designBrowser = null; TransactionDetails detailsView = null; @@ -206,8 +206,6 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis IEclipsePreferences store = null; - @Inject @Optional DesignBrowser designBrowser; - /** The database. */ private IWaveformDb database; @@ -295,7 +293,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis middleSash.setWeights(new int[] {75, 25}); ctx.set(Composite.class, left); - browser = ContextInjectionFactory.make(DesignBrowser.class, ctx); + designBrowser = ContextInjectionFactory.make(DesignBrowser.class, ctx); ctx.set(Composite.class, right); detailsView = ContextInjectionFactory.make(TransactionDetails.class, ctx); @@ -623,6 +621,8 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis loadState(partConfig); if (state != null && !state.isEmpty()) restoreWaveformViewerState(state); + if(designBrowser!=null) + designBrowser.setWaveformDb(database); fileChecker = null; if (checkForUpdates) fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad, FILE_CHECK_INTERVAL); @@ -654,9 +654,11 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis Map state = new HashMap<>(); saveWaveformViewerState(state); waveformPane.getStreamList().clear(); + if(database.isLoaded()) + database.close(); database = dbFactory.getDatabase(); database.addPropertyChangeListener(evt -> { - if (IHierNode.WAVEFORMS.equals(evt.getPropertyName())) { //$NON-NLS-1$ + if (IHierNode.WAVEFORMS.equals(evt.getPropertyName()) || IHierNode.LOADING_FINISHED.equals(evt.getPropertyName())) { //$NON-NLS-1$ myParent.getDisplay().syncExec(() -> waveformPane.setMaxTime(database.getMaxTime())); } });