From bfbc40c282cd4ee33300bab915894cf244003aae Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Sat, 2 Jan 2021 17:02:05 +0100 Subject: [PATCH] fix serialization issue --- .../database/sqlite/SQLiteDbLoader.java | 7 ++----- .../minres/scviewer/database/sqlite/Tx.java | 2 +- .../scviewer/database/sqlite/TxStream.java | 10 +--------- .../database/sqlite/db/IDatabase.java | 4 ++++ .../database/sqlite/db/SQLiteDatabase.java | 12 +++++++++++- .../scviewer/database/text/TextDbLoader.java | 17 +++++------------ .../scviewer/database/text/TxStream.java | 11 +---------- .../scviewer/database/vcd/VCDDbLoader.java | 8 ++------ .../scviewer/database/vcd/VCDSignal.java | 19 +++++-------------- .../minres/scviewer/database/IWaveform.java | 2 -- .../database/internal/WaveformDb.java | 7 +------ 11 files changed, 33 insertions(+), 66 deletions(-) diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java index c2470ae..7a3579c 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java @@ -37,8 +37,6 @@ public class SQLiteDbLoader implements IWaveformDbLoader { protected IDatabase database; private List usedRelationsList = new ArrayList<>(); - - private IWaveformDb db; private ScvSimProps scvSimProps; @@ -63,7 +61,7 @@ public class SQLiteDbLoader implements IWaveformDbLoader { List streams=new ArrayList<>(); try { for(ScvStream scvStream:handler.selectObjects()){ - TxStream stream = new TxStream(database, db, scvStream); + TxStream stream = new TxStream(database, scvStream); stream.setRelationTypeList(usedRelationsList); streams.add(stream); } @@ -78,7 +76,6 @@ public class SQLiteDbLoader implements IWaveformDbLoader { @Override public boolean load(IWaveformDb db, File file) throws InputFormatException { if(file.isDirectory() || !file.exists()) return false; - this.db=db; try(FileInputStream fis = new FileInputStream(file)) { byte[] buffer = new byte[x.length]; int read = fis.read(buffer, 0, x.length); @@ -88,7 +85,7 @@ public class SQLiteDbLoader implements IWaveformDbLoader { } catch(IOException e) { return false; } - database=new SQLiteDatabase(file.getAbsolutePath()); + database=new SQLiteDatabase(file.getAbsolutePath(), db); database.setData("TIMERESOLUTION", 1L); SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>(ScvSimProps.class, database); try { diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java index f2ab703..62f35e1 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java @@ -164,7 +164,7 @@ public class Tx implements ITx { List streams = new SQLiteDatabaseSelectHandler(ScvStream.class, database, "id="+res.get(0).getStream()).selectObjects(); if(streams.size()!=1) return null; - TxStream tgtStream = (TxStream) trStream.getDb().getStreamByName(streams.get(0).getName()); + TxStream tgtStream = (TxStream) database.getWaveformDb().getStreamByName(streams.get(0).getName()); Tx that = (Tx) tgtStream.getTransactions().get(otherId); if(outgoing) return new TxRelation(trStream.getRelationType(rel.getName()), this, that); diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java index c6df2a1..529bade 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java @@ -41,8 +41,6 @@ public class TxStream extends HierNode implements IWaveform { private String fullName; - private IWaveformDb db; - private ScvStream scvStream; private TreeMap generators; @@ -55,17 +53,11 @@ public class TxStream extends HierNode implements IWaveform { private List usedRelationsList; - public TxStream(IDatabase database, IWaveformDb waveformDb, ScvStream scvStream) { + public TxStream(IDatabase database, ScvStream scvStream) { super(scvStream.getName()); this.database=database; fullName=scvStream.getName(); this.scvStream=scvStream; - db=waveformDb; - } - - @Override - public IWaveformDb getDb() { - return db; } @Override diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/IDatabase.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/IDatabase.java index ca8e70f..92d2405 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/IDatabase.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/IDatabase.java @@ -16,6 +16,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import com.minres.scviewer.database.IWaveformDb; + /** * * Creates a connection to a database. @@ -58,4 +60,6 @@ public interface IDatabase { public void setData(String name, Object value); public Object getData(String name); + + public IWaveformDb getWaveformDb(); } \ No newline at end of file diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabase.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabase.java index c14787f..4d89c33 100644 --- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabase.java +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabase.java @@ -20,10 +20,14 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; +import com.minres.scviewer.database.IWaveformDb; + public class SQLiteDatabase implements IDatabase { protected String dbFileName; + protected IWaveformDb waveformDb; + protected HashMap props; static { @@ -39,9 +43,10 @@ public class SQLiteDatabase implements IDatabase { } } - public SQLiteDatabase(String dbFileName) { + public SQLiteDatabase(String dbFileName, IWaveformDb waveformDb) { super(); this.dbFileName = dbFileName; + this.waveformDb = waveformDb; props = new HashMap(); } @@ -89,4 +94,9 @@ public class SQLiteDatabase implements IDatabase { return props.get(name); } + @Override + public IWaveformDb getWaveformDb() { + return waveformDb; + } + } diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java index 1eac0e0..077d33e 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java @@ -96,21 +96,14 @@ public class TextDbLoader implements IWaveformDbLoader{ parseInput(gzipped?new GZIPInputStream(new FileInputStream(file)):new FileInputStream(file)); for(IWaveform stream: streams){ stream.getWidth(); } return true; - } - } catch (IndexOutOfBoundsException e) { - return false; - } catch (IllegalArgumentException e) { - return false; - } catch(EOFException e) { - return true; - } catch(Exception e) { + } else + return false; + } catch(IllegalArgumentException|ArrayIndexOutOfBoundsException e) { + } catch(Throwable e) { System.out.println("---->>> Exception "+e.toString()+" caught while loading database"); e.printStackTrace(); - } catch(Error e) { - System.out.println("---->>> Exception "+e.toString()+" caught while loading database. StackTrace following... "); - e.printStackTrace(); } - return false; + return true; } private static boolean isTxfile(InputStream istream) { diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java index 1495681..77fbe19 100644 --- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java @@ -24,7 +24,6 @@ import com.minres.scviewer.database.EventKind; import com.minres.scviewer.database.HierNode; import com.minres.scviewer.database.IEvent; import com.minres.scviewer.database.IWaveform; -import com.minres.scviewer.database.IWaveformDb; import com.minres.scviewer.database.WaveformType; import com.minres.scviewer.database.tx.ITx; import com.minres.scviewer.database.tx.ITxEvent; @@ -38,9 +37,7 @@ class TxStream extends HierNode implements IWaveform, Serializable { private static final long serialVersionUID = 6721893017334753858L; private Long id; - - private IWaveformDb database; - + private ArrayList generators = new ArrayList(); private int maxConcurrency; @@ -51,7 +48,6 @@ class TxStream extends HierNode implements IWaveform, Serializable { TxStream(TextDbLoader loader, Long id, String name, String kind){ super(name); this.id=id; - this.database=loader.db; this.maxConcurrency=0; //events = new TreeMap>() events = (BTreeMap) loader.mapDb.treeMap(name).keySerializer(Serializer.LONG).createOrOpen(); @@ -61,11 +57,6 @@ class TxStream extends HierNode implements IWaveform, Serializable { return generators; } - @Override - public IWaveformDb getDb() { - return database; - } - @Override public int getWidth() { if(maxConcurrency==0){ diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java index dade0ff..101fedc 100644 --- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java +++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java @@ -41,9 +41,6 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder { /** The Constant TIME_RES. */ private static final Long TIME_RES = 1000L; // ps - /** The db. */ - private IWaveformDb db; - /** The module stack. */ private ArrayDeque moduleStack; @@ -72,7 +69,6 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder { @Override public boolean load(IWaveformDb db, File file) throws InputFormatException { if(file.isDirectory() || !file.exists()) return false; - this.db=db; this.maxTime=0; boolean res = false; try { @@ -159,10 +155,10 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder { String netName = moduleStack.isEmpty()? name: moduleStack.peek()+"."+name; int id = signals.size(); if(width==0) { - signals.add( i<0 ? new VCDSignal(db, id, netName, width) : + signals.add( i<0 ? new VCDSignal(id, netName, width) : new VCDSignal((VCDSignal)signals.get(i), id, netName)); } else if(width>0){ - signals.add( i<0 ? new VCDSignal(db, id, netName, width) : + signals.add( i<0 ? new VCDSignal(id, netName, width) : new VCDSignal((VCDSignal)signals.get(i), id, netName)); } return id; diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java index dc57d56..2060403 100644 --- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java +++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java @@ -28,21 +28,18 @@ public class VCDSignal extends HierNode implements IWaveform { private final int width; - private IWaveformDb db; - private NavigableMap values; - public VCDSignal(IWaveformDb db, String name) { - this(db, 0, name, 1); + public VCDSignal(String name) { + this(0, name, 1); } - public VCDSignal(IWaveformDb db, int id, String name) { - this(db, id,name,1); + public VCDSignal(int id, String name) { + this(id,name,1); } - public VCDSignal(IWaveformDb db, int id, String name, int width) { + public VCDSignal(int id, String name, int width) { super(name); - this.db=db; fullName=name; this.id=id; this.width=width; @@ -55,7 +52,6 @@ public class VCDSignal extends HierNode implements IWaveform { this.id=id; this.width=o.width; this.values=o.values; - this.db=o.getDb(); } @Override @@ -72,11 +68,6 @@ public class VCDSignal extends HierNode implements IWaveform { return id; } - @Override - public IWaveformDb getDb() { - return db; - } - public void addSignalChange(Long time, T value){ if(values.containsKey(time)) { IEvent[] oldV = values.get(time); diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java index 6441571..ee7298f 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java @@ -16,8 +16,6 @@ public interface IWaveform extends IHierNode { public Long getId(); - public IWaveformDb getDb(); - public boolean isSame(IWaveform other); public NavigableMap getEvents(); diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java index 99ef49c..3c509ab 100644 --- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java +++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java @@ -26,12 +26,7 @@ import com.minres.scviewer.database.IWaveformDb; import com.minres.scviewer.database.IWaveformDbLoader; import com.minres.scviewer.database.RelationType; -public class WaveformDb extends HierNode implements IWaveformDb, Serializable { - - /** - * - */ - private static final long serialVersionUID = 3274692080405194894L; +public class WaveformDb extends HierNode implements IWaveformDb { private static List loaders=new LinkedList<>();