From 360df27a53321fe630bffd4c4f7f55178ab5f343 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Fri, 10 Apr 2026 09:29:31 +0200 Subject: [PATCH] fixes handling of incomplete databases (missing tx on relation) --- .../scviewer/database/ftr/TxRelation.java | 4 ++-- .../minres/scviewer/database/ftr/TxStream.java | 1 + .../database/ui/swt/internal/WaveformView.java | 17 ++++++++++++----- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/TxRelation.java b/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/TxRelation.java index 6a4c158..679fa7a 100644 --- a/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/TxRelation.java +++ b/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/TxRelation.java @@ -105,7 +105,7 @@ class TxRelation implements ITxRelation { TxStream fiber = loader.txStreams.get(fiberId); fiber.loadStream(); tx = loader.getTransaction(txId); - return loader.txStreams.get(fiberId); + return fiber; } else return tx.getStream(); } @@ -116,7 +116,7 @@ class TxRelation implements ITxRelation { loader.txStreams.get(fiberId).loadStream(); tx = loader.getTransaction(txId); } - return tx.getGenerator(); + return tx!=null?tx.getGenerator():null; } @Override diff --git a/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/TxStream.java b/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/TxStream.java index c8ab22c..5243b40 100644 --- a/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/TxStream.java +++ b/plugins/com.minres.scviewer.database.ftr/src/com/minres/scviewer/database/ftr/TxStream.java @@ -73,6 +73,7 @@ class TxStream extends AbstractTxStream { } public void loadStream() { + if(chunks.size()>0) return; try { List chunks = getChunks(); int blockid = 0; diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java index 1be52b1..0637cd9 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java @@ -842,7 +842,7 @@ public class WaveformView implements IWaveformView { public void setSelection(ISelection selection, boolean add, boolean addIfNeeded) { boolean selectionChanged = false; - currentWaveformSelection.forEach(e -> e.selected = false); + currentWaveformSelection.forEach(e -> {if(e!=null) e.selected = false;}); if (selection instanceof IStructuredSelection) { IStructuredSelection sel = (IStructuredSelection) selection; if (sel.size() == 0) { @@ -862,8 +862,12 @@ public class WaveformView implements IWaveformView { if (trackEntry == null) { trackEntry = getEntryFor(txSel); if (trackEntry == null && addIfNeeded) { - trackEntry = new TrackEntry(txSel.getStream(), styleProvider); - streams.add(trackEntry); + IWaveform stream = txSel.getStream(); + Optional te = streams.stream().filter(e -> stream.equals(e.waveform)).findFirst(); + if (te.isEmpty()) { // add stream only if really needed + trackEntry = new TrackEntry(txSel.getStream(), styleProvider); + streams.add(trackEntry); + } } } currentTxSelection = txSel; @@ -885,7 +889,7 @@ public class WaveformView implements IWaveformView { currentTxSelection = null; currentWaveformSelection.clear(); } - currentWaveformSelection.forEach(e -> e.selected = true); + currentWaveformSelection.forEach(e -> {if(e!=null)e.selected = true;}); if (selectionChanged) { currentWaveformSelection.forEach(e -> waveformCanvas.reveal(e.waveform)); waveformCanvas.setSelected(currentTxSelection); @@ -1376,10 +1380,13 @@ public class WaveformView implements IWaveformView { } public TrackEntry getEntryFor(ITx source) { - Optional optGen = streams.stream().filter(e -> source.getGenerator().equals(e.waveform)) + if(source.getGenerator()==null) return null; + Optional optGen = streams.stream() + .filter(e -> source.getGenerator().equals(e.waveform)) .findFirst(); if (optGen.isPresent()) return optGen.get(); + if(source.getStream()==null) return null; Optional optStr = streams.stream().filter(e -> source.getStream().equals(e.waveform)).findFirst(); if (optStr.isPresent()) return optStr.get();