From de28761ce039dd7473479a9c66abcc2e8164f2dc Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Tue, 6 Jan 2015 17:14:16 +0100 Subject: [PATCH] Added support for VCD Database --- .../META-INF/MANIFEST.MF | 2 + .../OSGI-INF/component.xml | 2 +- .../scviewer/database/sqlite/SQLiteDb.java | 52 +- .../database/sqlite/SQLiteDbFactory.java | 8 +- .../sqlite/{Transaction.java => Tx.java} | 50 +- .../{Attribute.java => TxAttribute.java} | 8 +- .../{Generator.java => TxGenerator.java} | 16 +- .../sqlite/{Relation.java => TxRelation.java} | 14 +- .../sqlite/{Stream.java => TxStream.java} | 38 +- .../sqlite/{ => db}/SQLiteDatabase.java | 4 +- com.minres.scviewer.database.test/.classpath | 7 + com.minres.scviewer.database.test/.gitignore | 1 + com.minres.scviewer.database.test/.project | 33 + .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 7 + .../.settings/org.eclipse.pde.core.prefs | 3 + .../META-INF/MANIFEST.MF | 11 + .../OSGI-INF/component.xml | 5 + .../build.properties | 5 + .../inputs/my_db.txdb | Bin 0 -> 13312 bytes .../inputs/my_db.txlog | 254 + .../inputs/my_db.vcd | 400319 +++++++++++++++ .../database/test/DatabaseServicesTest.java | 99 + .../META-INF/MANIFEST.MF | 2 + .../OSGI-INF/component.xml | 2 +- .../scviewer/database/text/HierNode.groovy | 54 - .../scviewer/database/text/TextDb.groovy | 69 +- .../database/text/TextDbFactory.groovy | 8 +- .../text/{Transaction.groovy => Tx.groovy} | 14 +- .../{Attribute.groovy => TxAttribute.groovy} | 16 +- ...AttrType.groovy => TxAttributeType.groovy} | 10 +- ...y.groovy => TxAttributeTypeFactory.groovy} | 18 +- .../{Generator.groovy => TxGenerator.groovy} | 26 +- .../{Relation.groovy => TxRelation.groovy} | 16 +- .../text/{Stream.groovy => TxStream.groovy} | 33 +- com.minres.scviewer.database/.project | 5 + .../META-INF/MANIFEST.MF | 5 +- .../OSGI-INF/component.xml | 7 + com.minres.scviewer.database/build.properties | 5 +- .../scviewer/database/AssociationType.java | 4 +- .../minres/scviewer/database/DataType.java | 32 +- .../minres/scviewer/database/EventTime.java | 3 + .../minres/scviewer/database}/HierNode.java | 16 +- .../{ITrHierNode.java => IHierNode.java} | 6 +- .../com/minres/scviewer/database/ISignal.java | 13 + .../scviewer/database/ISignalChange.java | 9 + .../scviewer/database/ISignalChangeMulti.java | 7 + .../database/ISignalChangeSingle.java | 7 + .../minres/scviewer/database/ITrRelation.java | 10 - .../database/ITransactionDbFactory.java | 9 - .../database/{ITransaction.java => ITx.java} | 13 +- .../{ITrAttribute.java => ITxAttribute.java} | 2 +- ...ITrAttrType.java => ITxAttributeType.java} | 2 +- .../{ITrGenerator.java => ITxGenerator.java} | 6 +- .../minres/scviewer/database/ITxRelation.java | 10 + .../{ITrStream.java => ITxStream.java} | 14 +- .../minres/scviewer/database/IWaveform.java | 12 + .../database/{ITrDb.java => IWaveformDb.java} | 9 +- .../scviewer/database/IWaveformDbFactory.java | 9 + .../scviewer/database/SignalChange.java | 36 + .../scviewer/database/vcd/BitVector.java | 39 + .../database/vcd/IVCDDatabaseBuilder.java | 48 + .../minres/scviewer/database/vcd/VCDDb.java | 211 + .../scviewer/database/vcd/VCDDbFactory.java | 37 + .../scviewer/database/vcd/VCDFileParser.java | 212 + .../scviewer/database/vcd/VCDSignal.java | 108 + .../database/vcd/VCDSignalChangeMulti.java | 28 + .../database/vcd/VCDSignalChangeSingle.java | 24 + com.minres.scviewer.ui/META-INF/MANIFEST.MF | 1 - com.minres.scviewer.ui/OSGI-INF/component.xml | 5 - com.minres.scviewer.ui/plugin.xml | 4 +- .../{icons => res/images}/scviewer.gif | Bin .../res/images/scviewer.png | Bin 0 -> 255 bytes com.minres.scviewer.ui/res/images/signal.png | Bin 0 -> 717 bytes .../com/minres/scviewer/ui/TxEditorPart.java | 52 +- .../minres/scviewer/ui/TxEditorPlugin.java | 19 +- .../scviewer/ui/adapter/AdapterFactory.java | 4 +- .../adapter/ITransactionPropertySource.java | 6 +- .../scviewer/ui/swt/IWaveformWidget.java | 7 + .../src/com/minres/scviewer/ui/swt/Ruler.java | 4 +- .../minres/scviewer/ui/swt/SignalWidget.java | 168 + .../src/com/minres/scviewer/ui/swt/Track.java | 39 +- .../com/minres/scviewer/ui/swt/TxDisplay.java | 128 +- .../scviewer/ui/views/TxOutlinePage.java | 41 +- .../provider/TxDbTreeContentProvider.java | 12 +- .../views/provider/TxDbTreeLabelProvider.java | 20 +- .../ui/views/sections/AttributeProperty.java | 36 +- .../ui/views/sections/RelatedProperty.java | 46 +- .../src/scv_tr_recording_example.cpp | 17 +- 89 files changed, 402236 insertions(+), 539 deletions(-) rename com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/{Transaction.java => Tx.java} (76%) rename com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/{Attribute.java => TxAttribute.java} (77%) rename com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/{Generator.java => TxGenerator.java} (54%) rename com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/{Relation.java => TxRelation.java} (52%) rename com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/{Stream.java => TxStream.java} (69%) rename com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/{ => db}/SQLiteDatabase.java (91%) create mode 100644 com.minres.scviewer.database.test/.classpath create mode 100644 com.minres.scviewer.database.test/.gitignore create mode 100644 com.minres.scviewer.database.test/.project create mode 100644 com.minres.scviewer.database.test/.settings/org.eclipse.core.resources.prefs create mode 100644 com.minres.scviewer.database.test/.settings/org.eclipse.jdt.core.prefs create mode 100644 com.minres.scviewer.database.test/.settings/org.eclipse.pde.core.prefs create mode 100644 com.minres.scviewer.database.test/META-INF/MANIFEST.MF create mode 100644 com.minres.scviewer.database.test/OSGI-INF/component.xml create mode 100644 com.minres.scviewer.database.test/build.properties create mode 100644 com.minres.scviewer.database.test/inputs/my_db.txdb create mode 100644 com.minres.scviewer.database.test/inputs/my_db.txlog create mode 100644 com.minres.scviewer.database.test/inputs/my_db.vcd create mode 100644 com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java delete mode 100644 com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/HierNode.groovy rename com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/{Transaction.groovy => Tx.groovy} (73%) rename com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/{Attribute.groovy => TxAttribute.groovy} (73%) rename com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/{AttrType.groovy => TxAttributeType.groovy} (70%) rename com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/{AttrTypeFactory.groovy => TxAttributeTypeFactory.groovy} (65%) rename com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/{Generator.groovy => TxGenerator.groovy} (62%) rename com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/{Relation.groovy => TxRelation.groovy} (52%) rename com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/{Stream.groovy => TxStream.groovy} (70%) create mode 100644 com.minres.scviewer.database/OSGI-INF/component.xml rename {com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite => com.minres.scviewer.database/src/com/minres/scviewer/database}/HierNode.java (62%) rename com.minres.scviewer.database/src/com/minres/scviewer/database/{ITrHierNode.java => IHierNode.java} (94%) create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/ISignal.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChange.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChangeMulti.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChangeSingle.java delete mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/ITrRelation.java delete mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/ITransactionDbFactory.java rename com.minres.scviewer.database/src/com/minres/scviewer/database/{ITransaction.java => ITx.java} (72%) rename com.minres.scviewer.database/src/com/minres/scviewer/database/{ITrAttribute.java => ITxAttribute.java} (91%) rename com.minres.scviewer.database/src/com/minres/scviewer/database/{ITrAttrType.java => ITxAttributeType.java} (94%) rename com.minres.scviewer.database/src/com/minres/scviewer/database/{ITrGenerator.java => ITxGenerator.java} (85%) create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/ITxRelation.java rename com.minres.scviewer.database/src/com/minres/scviewer/database/{ITrStream.java => ITxStream.java} (69%) create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java rename com.minres.scviewer.database/src/com/minres/scviewer/database/{ITrDb.java => IWaveformDb.java} (75%) create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDbFactory.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/SignalChange.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/BitVector.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/IVCDDatabaseBuilder.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDDb.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDDbFactory.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDFileParser.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignal.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignalChangeMulti.java create mode 100644 com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignalChangeSingle.java delete mode 100644 com.minres.scviewer.ui/OSGI-INF/component.xml rename com.minres.scviewer.ui/{icons => res/images}/scviewer.gif (100%) create mode 100644 com.minres.scviewer.ui/res/images/scviewer.png create mode 100644 com.minres.scviewer.ui/res/images/signal.png create mode 100644 com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/IWaveformWidget.java create mode 100644 com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/SignalWidget.java diff --git a/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF b/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF index 60eaf87..904a248 100644 --- a/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF +++ b/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF @@ -12,3 +12,5 @@ Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0", Bundle-ClassPath: ., sqlite-jdbc-3.8.7.jar Service-Component: OSGI-INF/component.xml +Export-Package: com.minres.scviewer.database.sqlite +Bundle-ActivationPolicy: lazy diff --git a/com.minres.scviewer.database.sqlite/OSGI-INF/component.xml b/com.minres.scviewer.database.sqlite/OSGI-INF/component.xml index 99589f1..e4c54e9 100644 --- a/com.minres.scviewer.database.sqlite/OSGI-INF/component.xml +++ b/com.minres.scviewer.database.sqlite/OSGI-INF/component.xml @@ -2,6 +2,6 @@ - + diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDb.java b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDb.java index ab4046f..857005c 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDb.java +++ b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDb.java @@ -9,23 +9,25 @@ import java.util.HashMap; import java.util.List; import com.minres.scviewer.database.EventTime; -import com.minres.scviewer.database.ITrAttribute; -import com.minres.scviewer.database.ITrDb; -import com.minres.scviewer.database.ITrHierNode; -import com.minres.scviewer.database.ITrStream; +import com.minres.scviewer.database.HierNode; +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.IHierNode; +import com.minres.scviewer.database.ITxStream; +import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.InputFormatException; import com.minres.scviewer.database.RelationType; import com.minres.scviewer.database.sqlite.db.IDatabase; +import com.minres.scviewer.database.sqlite.db.SQLiteDatabase; import com.minres.scviewer.database.sqlite.db.SQLiteDatabaseSelectHandler; import com.minres.scviewer.database.sqlite.tables.ScvSimProps; import com.minres.scviewer.database.sqlite.tables.ScvStream; import com.minres.scviewer.database.sqlite.tables.ScvTxEvent; -public class SQLiteDb extends HierNode implements ITrDb { +public class SQLiteDb extends HierNode implements IWaveformDb { protected IDatabase database; - protected List streams; + protected List streams; long timeResolution=1; @@ -55,13 +57,13 @@ public class SQLiteDb extends HierNode implements ITrDb { } @Override - public List getAllStreams() { + public List getAllWaves() { if(streams==null){ SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler(ScvStream.class, database); - streams=new ArrayList(); + streams=new ArrayList(); try { for(ScvStream scvStream:handler.selectObjects()){ - streams.add(new Stream(this, scvStream)); + streams.add(new TxStream(this, scvStream)); } } catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException | SQLException | IntrospectionException e) { @@ -83,7 +85,7 @@ public class SQLiteDb extends HierNode implements ITrDb { | InvocationTargetException | SQLException | IntrospectionException e) { e.printStackTrace(); } - addHierarchyNodes(); + buildHierarchyNodes(); } @Override @@ -92,31 +94,27 @@ public class SQLiteDb extends HierNode implements ITrDb { } @Override - public ITrStream getStreamByName(String name) { - for (ITrStream n : getAllStreams()) { - if (n.getName().equals(name)) { - return n; - } - } + public IWaveform getStreamByName(String name) { + for (IWaveform n : getAllWaves()) + if (n.getName().equals(name)) + return n; return null; } - public ITrStream getStreamById(long id) { - for (ITrStream n : getAllStreams()) { - if (n.getId().equals(id)) { - return n; - } - } + public ITxStream getStreamById(long id) { + for (IWaveform n : getAllWaves()) + if (n.getId().equals(id)) + return (ITxStream) n; return null; } - private void addHierarchyNodes() throws InputFormatException{ - for(ITrStream stream:getAllStreams()){ + private void buildHierarchyNodes() throws InputFormatException{ + for(IWaveform stream:getAllWaves()){ String[] hier = stream.getFullName().split("\\./"); - ITrHierNode node = this; + IHierNode node = this; for(String name:hier){ - ITrHierNode n1 = null; - for (ITrHierNode n : node.getChildNodes()) { + IHierNode n1 = null; + for (IHierNode n : node.getChildNodes()) { if (n.getName().equals(name)) { n1=n; break; diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbFactory.java b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbFactory.java index 87d4f2f..6ca6274 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbFactory.java +++ b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbFactory.java @@ -3,10 +3,10 @@ package com.minres.scviewer.database.sqlite; import java.io.File; import java.io.FileInputStream; -import com.minres.scviewer.database.ITrDb; -import com.minres.scviewer.database.ITransactionDbFactory; +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.IWaveformDbFactory; -public class SQLiteDbFactory implements ITransactionDbFactory { +public class SQLiteDbFactory implements IWaveformDbFactory { private byte[] x = "SQLite format 3".getBytes(); @@ -14,7 +14,7 @@ public class SQLiteDbFactory implements ITransactionDbFactory { } @Override - public ITrDb createDatabase(File file) { + public IWaveformDb createDatabase(File file) { try { FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[x.length]; diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Transaction.java b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java similarity index 76% rename from com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Transaction.java rename to com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java index 21051f6..4bf7c84 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Transaction.java +++ b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java @@ -9,27 +9,27 @@ import java.util.List; import com.minres.scviewer.database.AssociationType; import com.minres.scviewer.database.EventTime; -import com.minres.scviewer.database.ITrAttribute; -import com.minres.scviewer.database.ITrGenerator; -import com.minres.scviewer.database.ITrRelation; -import com.minres.scviewer.database.ITrStream; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITxAttribute; +import com.minres.scviewer.database.ITxGenerator; +import com.minres.scviewer.database.ITxRelation; +import com.minres.scviewer.database.ITxStream; +import com.minres.scviewer.database.ITx; import com.minres.scviewer.database.sqlite.db.SQLiteDatabaseSelectHandler; import com.minres.scviewer.database.sqlite.tables.ScvTx; import com.minres.scviewer.database.sqlite.tables.ScvTxAttribute; import com.minres.scviewer.database.sqlite.tables.ScvTxEvent; import com.minres.scviewer.database.sqlite.tables.ScvTxRelation; -public class Transaction implements ITransaction { +public class Tx implements ITx { - private Stream trStream; - private Generator trGenerator; + private TxStream trStream; + private TxGenerator trGenerator; private ScvTx scvTx; - private List attributes; + private List attributes; private EventTime begin, end; - private List incoming, outgoing; + private List incoming, outgoing; - public Transaction(Stream trStream, Generator trGenerator, ScvTx scvTx) { + public Tx(TxStream trStream, TxGenerator trGenerator, ScvTx scvTx) { this.trStream=trStream; this.trGenerator=trGenerator; this.scvTx=scvTx; @@ -41,12 +41,12 @@ public class Transaction implements ITransaction { } @Override - public ITrStream getStream() { + public ITxStream getStream() { return trStream; } @Override - public ITrGenerator getGenerator() { + public ITxGenerator getGenerator() { return trGenerator; } @@ -83,14 +83,14 @@ public class Transaction implements ITransaction { } @Override - public List getAttributes() { + public List getAttributes() { if(attributes==null){ SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler( ScvTxAttribute.class, trStream.getDb().getDb(), "tx="+scvTx.getId()); try { - attributes = new ArrayList(); + attributes = new ArrayList(); for(ScvTxAttribute scvAttribute:handler.selectObjects()){ - attributes.add(new Attribute(this, scvAttribute)); + attributes.add(new TxAttribute(this, scvAttribute)); } } catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException @@ -101,12 +101,12 @@ public class Transaction implements ITransaction { } @Override - public Collection getIncomingRelations() { + public Collection getIncomingRelations() { if(incoming==null){ SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler( ScvTxRelation.class, trStream.getDb().getDb(), "sink="+scvTx.getId()); try { - incoming = new ArrayList(); + incoming = new ArrayList(); for(ScvTxRelation scvRelation:handler.selectObjects()){ incoming.add(createRelation(scvRelation, false)); } @@ -118,12 +118,12 @@ public class Transaction implements ITransaction { } @Override - public Collection getOutgoingRelations() { + public Collection getOutgoingRelations() { if(outgoing==null){ SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler( ScvTxRelation.class, trStream.getDb().getDb(), "src="+scvTx.getId()); try { - outgoing = new ArrayList(); + outgoing = new ArrayList(); for(ScvTxRelation scvRelation:handler.selectObjects()){ outgoing.add(createRelation(scvRelation, true)); } @@ -134,17 +134,17 @@ public class Transaction implements ITransaction { return outgoing; } - private ITrRelation createRelation(ScvTxRelation rel, boolean outgoing) { + private ITxRelation createRelation(ScvTxRelation rel, boolean outgoing) { long otherId = outgoing?rel.getSink():rel.getSrc(); try { List scvTx=new SQLiteDatabaseSelectHandler(ScvTx.class, trStream.getDb().getDb(), "id="+otherId).selectObjects(); assert(scvTx.size()==1); - ITrStream stream = trStream.getDb().getStreamById(scvTx.get(0).getStream()); - Transaction that=(Transaction) stream.getTransactionById(otherId); + ITxStream stream = trStream.getDb().getStreamById(scvTx.get(0).getStream()); + Tx that=(Tx) stream.getTransactionById(otherId); if(outgoing) - return new Relation(trStream.getDb().getRelationType(rel.getName()), this, that); + return new TxRelation(trStream.getDb().getRelationType(rel.getName()), this, that); else - return new Relation(trStream.getDb().getRelationType(rel.getName()), that, this); + return new TxRelation(trStream.getDb().getRelationType(rel.getName()), that, this); } catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException | SQLException | IntrospectionException e) { } diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Attribute.java b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxAttribute.java similarity index 77% rename from com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Attribute.java rename to com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxAttribute.java index 81747cf..78311d2 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Attribute.java +++ b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxAttribute.java @@ -2,15 +2,15 @@ package com.minres.scviewer.database.sqlite; import com.minres.scviewer.database.AssociationType; import com.minres.scviewer.database.DataType; -import com.minres.scviewer.database.ITrAttribute; +import com.minres.scviewer.database.ITxAttribute; import com.minres.scviewer.database.sqlite.tables.ScvTxAttribute; -public class Attribute implements ITrAttribute{ +public class TxAttribute implements ITxAttribute{ - Transaction trTransaction; + Tx trTransaction; ScvTxAttribute scvAttribute; - public Attribute(Transaction trTransaction, ScvTxAttribute scvAttribute) { + public TxAttribute(Tx trTransaction, ScvTxAttribute scvAttribute) { this.trTransaction=trTransaction; this.scvAttribute=scvAttribute; } diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Generator.java b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java similarity index 54% rename from com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Generator.java rename to com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java index 6eabfb1..8a36c56 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Generator.java +++ b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java @@ -2,16 +2,16 @@ package com.minres.scviewer.database.sqlite; import java.util.List; -import com.minres.scviewer.database.ITrGenerator; -import com.minres.scviewer.database.ITrStream; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITxGenerator; +import com.minres.scviewer.database.ITxStream; +import com.minres.scviewer.database.ITx; import com.minres.scviewer.database.sqlite.tables.ScvGenerator; -public class Generator implements ITrGenerator { +public class TxGenerator implements ITxGenerator { - private ITrStream stream; + private ITxStream stream; private ScvGenerator scvGenerator; - public Generator(ITrStream stream, ScvGenerator scvGenerator) { + public TxGenerator(ITxStream stream, ScvGenerator scvGenerator) { this.stream=stream; this.scvGenerator=scvGenerator; } @@ -22,7 +22,7 @@ public class Generator implements ITrGenerator { } @Override - public ITrStream getStream() { + public ITxStream getStream() { return stream; } @@ -32,7 +32,7 @@ public class Generator implements ITrGenerator { } @Override - public List getTransactions() { + public List getTransactions() { return null; } diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Relation.java b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxRelation.java similarity index 52% rename from com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Relation.java rename to com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxRelation.java index 632f679..74412f5 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Relation.java +++ b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxRelation.java @@ -1,15 +1,15 @@ package com.minres.scviewer.database.sqlite; -import com.minres.scviewer.database.ITrRelation; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITxRelation; +import com.minres.scviewer.database.ITx; import com.minres.scviewer.database.RelationType; -public class Relation implements ITrRelation { +public class TxRelation implements ITxRelation { RelationType relationType; - Transaction source, target; + Tx source, target; - public Relation(RelationType relationType, Transaction source, Transaction target) { + public TxRelation(RelationType relationType, Tx source, Tx target) { this.source = source; this.target = target; this.relationType = relationType; @@ -21,12 +21,12 @@ public class Relation implements ITrRelation { } @Override - public ITransaction getSource() { + public ITx getSource() { return source; } @Override - public ITransaction getTarget() { + public ITx getTarget() { return target; } diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Stream.java b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java similarity index 69% rename from com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Stream.java rename to com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java index bc6245c..62da825 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Stream.java +++ b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java @@ -4,29 +4,31 @@ import java.beans.IntrospectionException; import java.lang.reflect.InvocationTargetException; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; -import com.minres.scviewer.database.ITrDb; -import com.minres.scviewer.database.ITrGenerator; -import com.minres.scviewer.database.ITrStream; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.HierNode; +import com.minres.scviewer.database.ITxGenerator; +import com.minres.scviewer.database.ITxStream; +import com.minres.scviewer.database.ITx; import com.minres.scviewer.database.sqlite.db.SQLiteDatabaseSelectHandler; import com.minres.scviewer.database.sqlite.tables.ScvGenerator; import com.minres.scviewer.database.sqlite.tables.ScvStream; import com.minres.scviewer.database.sqlite.tables.ScvTx; -public class Stream extends HierNode implements ITrStream { +public class TxStream extends HierNode implements ITxStream { private String fullName; + private SQLiteDb db; + private ScvStream scvStream; - private HashMap generators; - private List transactions; + private HashMap generators; - public Stream(SQLiteDb trSQLiteDb, ScvStream scvStream) { + private List transactions; + + public TxStream(SQLiteDb trSQLiteDb, ScvStream scvStream) { super(scvStream.getName()); fullName=scvStream.getName(); this.scvStream=scvStream; @@ -54,33 +56,33 @@ public class Stream extends HierNode implements ITrStream { } @Override - public List getGenerators() { + public List getGenerators() { if(generators==null){ SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler( ScvGenerator.class, db.getDb(), "stream="+scvStream.getId()); - generators=new HashMap(); + generators=new HashMap(); try { for(ScvGenerator scvGenerator:handler.selectObjects()){ - generators.put(scvGenerator.getId(), new Generator(this, scvGenerator)); + generators.put(scvGenerator.getId(), new TxGenerator(this, scvGenerator)); } } catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException | SQLException | IntrospectionException e) { e.printStackTrace(); } } - return new ArrayList(generators.values()); + return new ArrayList(generators.values()); } @Override - public List getTransactions() { + public List getTransactions() { checkTransactions(); return transactions; } @Override - public ITransaction getTransactionById(long id) { + public ITx getTransactionById(long id) { checkTransactions(); - for(ITransaction trans:transactions){ + for(ITx trans:transactions){ if(trans.getId()==id) return trans; } @@ -92,10 +94,10 @@ public class Stream extends HierNode implements ITrStream { if(generators==null) getGenerators(); SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler(ScvTx.class, db.getDb(), "stream="+scvStream.getId()); - transactions=new ArrayList(); + transactions=new ArrayList(); try { for(ScvTx scvTx:handler.selectObjects()){ - transactions.add(new Transaction(this, generators.get(scvTx.getGenerator()), scvTx)); + transactions.add(new Tx(this, generators.get(scvTx.getGenerator()), scvTx)); } } catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException | SQLException | IntrospectionException e) { diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDatabase.java b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabase.java similarity index 91% rename from com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDatabase.java rename to com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabase.java index 3b3642f..4ac8b2e 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDatabase.java +++ b/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/db/SQLiteDatabase.java @@ -1,4 +1,4 @@ -package com.minres.scviewer.database.sqlite; +package com.minres.scviewer.database.sqlite.db; import java.sql.Connection; import java.sql.DriverManager; @@ -7,8 +7,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import com.minres.scviewer.database.sqlite.db.IDatabase; - public class SQLiteDatabase implements IDatabase { protected String dbFileName; diff --git a/com.minres.scviewer.database.test/.classpath b/com.minres.scviewer.database.test/.classpath new file mode 100644 index 0000000..098194c --- /dev/null +++ b/com.minres.scviewer.database.test/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/com.minres.scviewer.database.test/.gitignore b/com.minres.scviewer.database.test/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/com.minres.scviewer.database.test/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/com.minres.scviewer.database.test/.project b/com.minres.scviewer.database.test/.project new file mode 100644 index 0000000..2347cce --- /dev/null +++ b/com.minres.scviewer.database.test/.project @@ -0,0 +1,33 @@ + + + com.minres.scviewer.database.test + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + org.eclipse.pde.ds.core.builder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/com.minres.scviewer.database.test/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.database.test/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29a3512 --- /dev/null +++ b/com.minres.scviewer.database.test/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding//src/com/minres/scviewer/database/test/DatabaseServicesTest.java=UTF-8 diff --git a/com.minres.scviewer.database.test/.settings/org.eclipse.jdt.core.prefs b/com.minres.scviewer.database.test/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..f42de36 --- /dev/null +++ b/com.minres.scviewer.database.test/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/com.minres.scviewer.database.test/.settings/org.eclipse.pde.core.prefs b/com.minres.scviewer.database.test/.settings/org.eclipse.pde.core.prefs new file mode 100644 index 0000000..f29e940 --- /dev/null +++ b/com.minres.scviewer.database.test/.settings/org.eclipse.pde.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +pluginProject.extensions=false +resolve.requirebundle=false diff --git a/com.minres.scviewer.database.test/META-INF/MANIFEST.MF b/com.minres.scviewer.database.test/META-INF/MANIFEST.MF new file mode 100644 index 0000000..1678032 --- /dev/null +++ b/com.minres.scviewer.database.test/META-INF/MANIFEST.MF @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SCViewer database tests +Bundle-SymbolicName: com.minres.scviewer.database.test +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: MINRES Technologies GnbH +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Require-Bundle: org.junit, + com.minres.scviewer.database +Service-Component: OSGI-INF/component.xml +Bundle-ActivationPolicy: lazy diff --git a/com.minres.scviewer.database.test/OSGI-INF/component.xml b/com.minres.scviewer.database.test/OSGI-INF/component.xml new file mode 100644 index 0000000..ce4c335 --- /dev/null +++ b/com.minres.scviewer.database.test/OSGI-INF/component.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/com.minres.scviewer.database.test/build.properties b/com.minres.scviewer.database.test/build.properties new file mode 100644 index 0000000..fc8c47c --- /dev/null +++ b/com.minres.scviewer.database.test/build.properties @@ -0,0 +1,5 @@ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + OSGI-INF/component.xml +source.. = src/ diff --git a/com.minres.scviewer.database.test/inputs/my_db.txdb b/com.minres.scviewer.database.test/inputs/my_db.txdb new file mode 100644 index 0000000000000000000000000000000000000000..7e80a97cd6b39d6af1f54ad926b037c94c17d381 GIT binary patch literal 13312 zcmeI2d2Ae49mnVWe!H_XUhmF$$Lsa&@$L1wyY|{~(j!jlTy-wTX_FReZ{lt0Cb7fX zIf&FYE(K9kAy5lc6-R^$RB0#(3I$YpaFkLi3To6sMJu<69#BAS1N1`T{pL68cp6%j zKaeQhk*)dse((Ff^Y+cYnK$!x+t!h(xvYKpOm2T>&hAxwiV(_5+g22jP!uI3|MOcw zf-fJ)y;#C;gVLkxSCFDDJvO{!tka&&?Y7r%8XI0aJZg^)uNfX4 z-n4pn8|&MqCgV~uHNE#8CGq(Ne;^i*i}`ELv}tH=E;qI7;2gJbF;dTN)nZxO+>v)Y zPNzNh;RD&cq|;vVDJErajC)I+)S=A2gZxS32YrE9eZ81ZpK0Upq3raW(=!hF&u*KO z|4-XBHzj-5?bG;tBL-rzn7Fq2%yFGV`p!O@?C*R%+upQ!%-*zpWW?Swx_;x(=uZ2> z;hmlKp6qlsmzkT%EegFSZEe2XJ$G}tY-a!4Xtz0qB#h55hd`{kSzJ4iZ{?zqZ0sWA zTid)?@-CV_`|jG}Ij_62d#0wxGxEEX{|udWc6!p2iSHMISY4f%kLTOYA51o!0p8l` z#Sfl0eY@UX@(tTNH9hGJnK%t_#1jfG;7{eQuoZfs&;$RIJy3x@rLo?*5%9%lE|-~} z&Fq$!&kCTT%;aQl{H;Z`!l!iAADB9j-8VIzojj|Y#=jr$QSdZAhfm@RQI_1ZnwCLi#y%0gTrj3t0t*LrcF0( za60UUAr6Zvl!pwu`y#hk=VHxG2i&yEX}=r#IF!=|$3)H*obHzs1Nq_U*<9co^nDEB z8~7BS!iVr)IrdNBar`Xafb)0=_hJSw#*MfN2e4C)_;L)(@%}3O8GaAHg-75g@O`)g zZiQRqIRB^|j|}0ByF^Vwl+l6K(vymUXp%33G0CHJi=AfVZ1i}cS`SeLQ8!V!B)yA-WkA?T7=h@C1-*kXMyR!u zG*+6M(Bed8L~TS-NqQ>@4IpeGEOoG%&;si*TWca|X=L*;t&zwgY9NY8((6eW0z#Xx z#KAg36O5;hX|*IR37@vL8X}XZn#ho(SCLQ$!b-wo2P+7}5ZZrCD<^3aH3=?V&h6n=?*rsU3 zB-PX_j%z`p08tTp*3#QXnN)>vYD5>Q~psAx-O!bA6EUI-yX2Nl? zD%d62H(>T~rfM-0?&dl*PMyI)tBZ}RJ;t3Zs&++22RAS3+9Zv3PLwYu;!X{#(y1Yj zY_+j(#Zq6Rl~omamD$4Wi?}|igxSoQ*kUH!#EmKAN=d7couf;g!woEox}tEsV`CU> zlM34$m%6c0$1Sl~pGsJ@>>63>YSgeQl2?VR*(Q{?t>U=EjYE}A1;cbIq^t@yHI|x& z%2{KuCLCi6oh_2#GLDPgI22`h*tINW%aF&?Vok`kjIf28w=Cf}n71@pUgXG=mcf>~ z$1=)N6b5_toA$V zgym;PpU2V18Xs#y$e}ao$3z5FoyN@48pT4@<+w63augP&Y5w0Njw<+9dGCK1e}K2i zyZ&{Ulk@ydc#a(X<#P0&hG*bcaz1}j-r+wEhhP#$VI_3S`+AXhRXi(Bi64n?%Dedu z(x|Y#%N{VBeDy*&XXd~anb~ZAui5C$q?2X?W$4t7JDR>;v)-FYB~9B~E74`vc{4p7 zX05kYcb8e?&2)B{)!tg|t!9-s6K^&vy|vm}%?fX(rP(a^)@o`nV_r>TgIVU))YqC( zZ^o`ROTD$~YE8?Vsi`(2-da@^W{Fo*Sz(%9O?lKbyqQ?U40~&pMa_^`Q)-ySUX2wo zgI-NZ$Sm?|OvBW@nQ+L|ytRsTGvLhxRa5oWD$-5ASEKn%pH~x5P4s5`J_BTiFKW*B z2Ms}qGhZm6@h|XoMgA4GLJt&r;C<5rJ^_Hw)A$c4aRomOrxw@d4R^!s^7;Q0^4(t+w!;O`2aOOG{}eBZ--(~e zU-f-ezRmxLv?^@x)C1-v&PyJv*L@R}7&LY|?`*7oy6t>Jj3RX4e zRmO7ej9Rxd(#9Ys>K7BsxJsi_MIPH4VB-dlaX+gX@+untqsmG7{Ex5T^M&=l!unrf z{qKFU{wI98rqTGXguf{GcYG0_#>eDuf9}V-@aynbaKYqC;dEA+s7st5FavX>#pNz=VI+FF*Vk7$ypSCYP)gk3 services=new LinkedList(); + + public void bind(IWaveformDbFactory factory){ + services.add(factory); + dependencyLatch.countDown(); + // System.out.println("service added"); + } + + public void unbind(IWaveformDbFactory factory){ + services.remove(factory); + } + + @Before + public void setUp() throws Exception { + // Wait for OSGi dependencies + try { + dependencyLatch.await(10, TimeUnit.SECONDS); + // Dependencies fulfilled + } catch (InterruptedException ex) { + fail("OSGi dependencies unfulfilled"); + } + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testVCD() throws URISyntaxException { + File f = new File("inputs/my_db.vcd").getAbsoluteFile(); + assertTrue(f.exists()); + IWaveformDb database=null; + for(IWaveformDbFactory factory:services){ + database = factory.createDatabase(f); + if(database!=null) break; + } + assertNotNull(database); + assertEquals(3, services.size()); + assertEquals(14, database.getAllWaves().size()); + assertEquals(2, database.getChildNodes().size()); + } + + @Test + public void testTxSQLite() throws URISyntaxException { + File f = new File("inputs/my_db.txdb").getAbsoluteFile(); + assertTrue(f.exists()); + IWaveformDb database=null; + for(IWaveformDbFactory factory:services){ + database = factory.createDatabase(f); + if(database!=null) break; + } + assertNotNull(database); + assertEquals(3, services.size()); + assertEquals(3, database.getAllWaves().size()); + assertEquals(3, database.getChildNodes().size()); + } + + @Test + public void testTxText() throws URISyntaxException { + File f = new File("inputs/my_db.txlog").getAbsoluteFile(); + assertTrue(f.exists()); + IWaveformDb database=null; + for(IWaveformDbFactory factory:services){ + database = factory.createDatabase(f); + if(database!=null) break; + } + assertNotNull(database); + assertEquals(3, services.size()); + assertEquals(3, database.getAllWaves().size()); + assertEquals(3, database.getChildNodes().size()); + } + + +} diff --git a/com.minres.scviewer.database.text/META-INF/MANIFEST.MF b/com.minres.scviewer.database.text/META-INF/MANIFEST.MF index 3020b29..05e3afa 100644 --- a/com.minres.scviewer.database.text/META-INF/MANIFEST.MF +++ b/com.minres.scviewer.database.text/META-INF/MANIFEST.MF @@ -13,3 +13,5 @@ Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0", org.eclipse.equinox.ds;bundle-version="1.4.200", org.eclipse.osgi.services;bundle-version="3.4.0" Service-Component: OSGI-INF/component.xml +Export-Package: com.minres.scviewer.database.text +Bundle-ActivationPolicy: lazy diff --git a/com.minres.scviewer.database.text/OSGI-INF/component.xml b/com.minres.scviewer.database.text/OSGI-INF/component.xml index a391fd1..0dc6bed 100644 --- a/com.minres.scviewer.database.text/OSGI-INF/component.xml +++ b/com.minres.scviewer.database.text/OSGI-INF/component.xml @@ -2,6 +2,6 @@ - + diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/HierNode.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/HierNode.groovy deleted file mode 100644 index 58a7f21..0000000 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/HierNode.groovy +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 IT Just working. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IT Just working - initial API and implementation - *******************************************************************************/ -package com.minres.scviewer.database.text; - -import java.beans.PropertyChangeListener; -import java.util.List; -import java.util.Map; - -import com.minres.scviewer.database.ITrHierNode; - -class HierNode implements ITrHierNode { - - String name - def childs = [] - - public HierNode(){ - } - - public HierNode(String name){ - this.name=name - } - - @Override - public List getChildNodes() { - return childs.sort{it.name} - } - - @Override - public String getFullName() { - // TODO Auto-generated method stub - return name; - } - - @Override - public void addPropertyChangeListener(PropertyChangeListener l) { - // TODO Auto-generated method stub - - } - - @Override - public void removePropertyChangeListener(PropertyChangeListener l) { - // TODO Auto-generated method stub - - } - -} diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDb.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDb.groovy index 192b832..8fa1ae8 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDb.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDb.groovy @@ -19,17 +19,18 @@ import java.util.TreeMap; import com.minres.scviewer.database.AssociationType; import com.minres.scviewer.database.DataType; -import com.minres.scviewer.database.ITrAttrType; -import com.minres.scviewer.database.ITrAttribute; -import com.minres.scviewer.database.ITrDb; -import com.minres.scviewer.database.ITrGenerator; -import com.minres.scviewer.database.ITrHierNode; -import com.minres.scviewer.database.ITrStream; +import com.minres.scviewer.database.HierNode; +import com.minres.scviewer.database.ITxAttributeType; +import com.minres.scviewer.database.ITxAttribute; +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.ITxGenerator; +import com.minres.scviewer.database.IHierNode; +import com.minres.scviewer.database.ITxStream; import com.minres.scviewer.database.InputFormatException; import com.minres.scviewer.database.EventTime import com.minres.scviewer.database.RelationType -public class TextDb extends HierNode implements ITrDb{ +public class TextDb extends HierNode implements IWaveformDb{ private EventTime maxTime; @@ -37,6 +38,10 @@ public class TextDb extends HierNode implements ITrDb{ def relationTypes=[:] + public TextDb() { + super("TextDb"); + } + public String getFullName() { return getName(); } @@ -46,21 +51,21 @@ public class TextDb extends HierNode implements ITrDb{ return maxTime; } - public ITrStream getStreamByName(String name){ - streams.find{ITrStream stream-> stream.fullName == name } + public ITxStream getStreamByName(String name){ + streams.find{ITxStream stream-> stream.fullName == name } } - public List getAllStreams() { - return new LinkedList(streams); + public List getAllWaves() { + return new LinkedList(streams); } - public List getChildNodes() { + public List getChildNodes() { return childs.sort{it.name}; } - public Map getGeneratorsById() { - TreeMap res = new TreeMap(); - streams.each{Stream stream -> stream.generators.each{res.put(it.id, id)} } + public Map getGeneratorsById() { + TreeMap res = new TreeMap(); + streams.each{TxStream stream -> stream.generators.each{res.put(it.id, id)} } return res; } @@ -78,8 +83,8 @@ public class TextDb extends HierNode implements ITrDb{ def streamsById = [:] def generatorsById = [:] def transactionsById = [:] - Generator generator - Transaction transaction + TxGenerator generator + Tx transaction boolean endTransaction=false def matcher input.eachLine { line -> @@ -91,19 +96,19 @@ public class TextDb extends HierNode implements ITrDb{ case "end_attribute": if ((matcher = line =~ /^scv_tr_stream\s+\(ID (\d+),\s+name\s+"([^"]+)",\s+kind\s+"([^"]+)"\)$/)) { def id = Integer.parseInt(matcher[0][1]) - def stream = new Stream(id, this, matcher[0][2], matcher[0][3]) + def stream = new TxStream(id, this, matcher[0][2], matcher[0][3]) streams< + streams.each{ TxStream stream-> def hier = stream.fullName.split(/\./) - ITrHierNode node = this + IHierNode node = this hier.each { name -> def n1 = node.childNodes.find{it.name == name} if(name == hier[-1]){ //leaf diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbFactory.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbFactory.groovy index 6ab8751..2ffa0ee 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbFactory.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbFactory.groovy @@ -2,15 +2,15 @@ package com.minres.scviewer.database.text import java.io.FileInputStream; -import com.minres.scviewer.database.ITrDb -import com.minres.scviewer.database.ITransactionDbFactory; +import com.minres.scviewer.database.IWaveformDb +import com.minres.scviewer.database.IWaveformDbFactory; -class TextDbFactory implements ITransactionDbFactory { +class TextDbFactory implements IWaveformDbFactory { byte[] x = "scv_tr_stream".bytes @Override - public ITrDb createDatabase(File file) { + public IWaveformDb createDatabase(File file) { try { FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[x.size()]; diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Transaction.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.groovy similarity index 73% rename from com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Transaction.groovy rename to com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.groovy index d46109e..8fd5b53 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Transaction.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.groovy @@ -15,37 +15,37 @@ import java.util.Set import com.minres.scviewer.database.* -class Transaction implements ITransaction { +class Tx implements ITx { Long id - Generator generator + TxGenerator generator - Stream stream + TxStream stream EventTime beginTime EventTime endTime - ArrayList attributes = new ArrayList() + ArrayList attributes = new ArrayList() def incomingRelations =[] def outgoingRelations =[] - Transaction(int id, Stream stream, Generator generator, EventTime begin){ + Tx(int id, TxStream stream, TxGenerator generator, EventTime begin){ this.id=id this.generator=generator this.beginTime=begin } @Override - public Collection getIncomingRelations() { + public Collection getIncomingRelations() { return incomingRelations; } @Override - public Collection getOutgoingRelations() { + public Collection getOutgoingRelations() { return outgoingRelations; } diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Attribute.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttribute.groovy similarity index 73% rename from com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Attribute.groovy rename to com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttribute.groovy index 4346638..0ec90b7 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Attribute.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttribute.groovy @@ -12,17 +12,17 @@ package com.minres.scviewer.database.text import com.minres.scviewer.database.AssociationType; import com.minres.scviewer.database.DataType; -import com.minres.scviewer.database.ITrAttrType; -import com.minres.scviewer.database.ITrAttribute +import com.minres.scviewer.database.ITxAttributeType; +import com.minres.scviewer.database.ITxAttribute -class Attribute implements ITrAttribute{ +class TxAttribute implements ITxAttribute{ - AttrType attributeType + TxAttributeType attributeType def value - Attribute(String name, DataType dataType, AssociationType type, value){ - attributeType = AttrTypeFactory.instance.getAttrType(name, dataType, type) + TxAttribute(String name, DataType dataType, AssociationType type, value){ + attributeType = TxAttributeTypeFactory.instance.getAttrType(name, dataType, type) switch(dataType){ case DataType.STRING: case DataType.ENUMERATION: @@ -33,11 +33,11 @@ class Attribute implements ITrAttribute{ } } - Attribute(AttrType other){ + TxAttribute(TxAttributeType other){ attributeType=other } - Attribute(AttrType other, value){ + TxAttribute(TxAttributeType other, value){ this(other.name, other.dataType, other.type, value) } diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AttrType.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttributeType.groovy similarity index 70% rename from com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AttrType.groovy rename to com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttributeType.groovy index 29209dd..7bc8388 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AttrType.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttributeType.groovy @@ -12,18 +12,18 @@ package com.minres.scviewer.database.text import com.minres.scviewer.database.AssociationType; import com.minres.scviewer.database.DataType; -import com.minres.scviewer.database.ITrAttrType; +import com.minres.scviewer.database.ITxAttributeType; -class AttrType implements ITrAttrType { +class TxAttributeType implements ITxAttributeType { String name DataType dataType AssociationType type - static AttrType getAttrType(String name, DataType dataType, AssociationType type){ - AttrTypeFactory.instance.getAttrType(name, dataType, type) + static TxAttributeType getAttrType(String name, DataType dataType, AssociationType type){ + TxAttributeTypeFactory.instance.getAttrType(name, dataType, type) } - AttrType(String name, DataType dataType, AssociationType type){ + TxAttributeType(String name, DataType dataType, AssociationType type){ this.name=name this.dataType=dataType this.type=type diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AttrTypeFactory.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttributeTypeFactory.groovy similarity index 65% rename from com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AttrTypeFactory.groovy rename to com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttributeTypeFactory.groovy index b86da38..60a84e7 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AttrTypeFactory.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxAttributeTypeFactory.groovy @@ -12,25 +12,25 @@ package com.minres.scviewer.database.text import com.minres.scviewer.database.AssociationType; import com.minres.scviewer.database.DataType -import com.minres.scviewer.database.ITrAttrType -import com.minres.scviewer.database.ITrAttribute +import com.minres.scviewer.database.ITxAttributeType +import com.minres.scviewer.database.ITxAttribute -class AttrTypeFactory { - private static final instance = new AttrTypeFactory() +class TxAttributeTypeFactory { + private static final instance = new TxAttributeTypeFactory() def attributes = [:] - private AttrTypeFactory() { - AttrTypeFactory.metaClass.constructor = {-> instance } + private TxAttributeTypeFactory() { + TxAttributeTypeFactory.metaClass.constructor = {-> instance } } - ITrAttrType getAttrType(String name, DataType dataType, AssociationType type){ + ITxAttributeType getAttrType(String name, DataType dataType, AssociationType type){ def key = name+":"+dataType.toString() - ITrAttrType res + ITxAttributeType res if(attributes.containsKey(key)){ res=attributes[key] } else { - res=new AttrType(name, dataType, type) + res=new TxAttributeType(name, dataType, type) attributes[key]=res } return res diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Generator.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.groovy similarity index 62% rename from com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Generator.groovy rename to com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.groovy index 420c26a..cfd7333 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Generator.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.groovy @@ -13,35 +13,35 @@ package com.minres.scviewer.database.text import java.util.ArrayList; import java.util.List; -import com.minres.scviewer.database.ITrAttrType -import com.minres.scviewer.database.ITrAttribute; -import com.minres.scviewer.database.ITrGenerator; -import com.minres.scviewer.database.ITrStream; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITxAttributeType +import com.minres.scviewer.database.ITxAttribute; +import com.minres.scviewer.database.ITxGenerator; +import com.minres.scviewer.database.ITxStream; +import com.minres.scviewer.database.ITx; -class Generator implements ITrGenerator{ +class TxGenerator implements ITxGenerator{ Long id - Stream stream + TxStream stream String name Boolean active = false - ArrayList transactions=[] + ArrayList transactions=[] - ArrayList begin_attrs = [] + ArrayList begin_attrs = [] int begin_attrs_idx = 0 - ArrayList end_attrs= [] + ArrayList end_attrs= [] int end_attrs_idx = 0 - Generator(int id, Stream stream, name){ + TxGenerator(int id, TxStream stream, name){ this.id=id this.stream=stream this.name=name } - ITrStream getStream(){ + ITxStream getStream(){ return stream; } - List getTransactions(){ + List getTransactions(){ return transactions } diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Relation.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxRelation.groovy similarity index 52% rename from com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Relation.groovy rename to com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxRelation.groovy index 6cb5afe..4bd9f98 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Relation.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxRelation.groovy @@ -1,18 +1,18 @@ package com.minres.scviewer.database.text -import com.minres.scviewer.database.ITrRelation -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITxRelation +import com.minres.scviewer.database.ITx; import com.minres.scviewer.database.RelationType; -class Relation implements ITrRelation { - Transaction source +class TxRelation implements ITxRelation { + Tx source - Transaction target + Tx target RelationType relationType - public Relation(RelationType relationType, Transaction source, Transaction target) { + public TxRelation(RelationType relationType, Tx source, Tx target) { this.source = source; this.target = target; this.relationType = relationType; @@ -24,12 +24,12 @@ class Relation implements ITrRelation { } @Override - public ITransaction getSource() { + public ITx getSource() { return source; } @Override - public ITransaction getTarget() { + public ITx getTarget() { return target; } diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Stream.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.groovy similarity index 70% rename from com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Stream.groovy rename to com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.groovy index b574787..b589d62 100644 --- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Stream.groovy +++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.groovy @@ -14,13 +14,14 @@ import java.beans.PropertyChangeListener; import java.util.List; import java.util.Map; -import com.minres.scviewer.database.ITrDb -import com.minres.scviewer.database.ITrGenerator -import com.minres.scviewer.database.ITrHierNode -import com.minres.scviewer.database.ITrStream -import com.minres.scviewer.database.ITransaction +import com.minres.scviewer.database.HierNode; +import com.minres.scviewer.database.IWaveformDb +import com.minres.scviewer.database.ITxGenerator +import com.minres.scviewer.database.IHierNode +import com.minres.scviewer.database.ITxStream +import com.minres.scviewer.database.ITx -class Stream extends HierNode implements ITrStream { +class TxStream extends HierNode implements ITxStream { Long id; @@ -34,31 +35,27 @@ class Stream extends HierNode implements ITrStream { private allTransactions; - public TrHierNode(String name){ - this.name=name - } - - Stream(int id, TextDb db, String name, String kind){ + TxStream(int id, TextDb db, String name, String kind){ + super(name) this.id=id this.database=db - this.name=name this.fullName=name this.kind=kind } - List getGenerators(){ - return generators as List + List getGenerators(){ + return generators as List } @Override - public ITrDb getDb() { + public IWaveformDb getDb() { return database; } // FIXME: maybe need to be somewhere else public int getMaxConcurrrentTx() { def rowendtime = [0] - getTransactions().each{Transaction tx -> + getTransactions().each{Tx tx -> def rowIdx = 0 for(rowIdx=0; rowendtime.size()tx.beginTime.value; rowIdx++); if(rowendtime.size<=rowIdx){ @@ -71,14 +68,14 @@ class Stream extends HierNode implements ITrStream { } @Override - public List getTransactions() { + public List getTransactions() { if(!allTransactions) allTransactions=generators.transactions.flatten().sort{it.beginTime.value} return allTransactions } @Override - public ITransaction getTransactionById(long id) { + public ITx getTransactionById(long id) { if(!allTransactions) allTransactions=generators.transactions.flatten().sort{it.beginTime.value} allTransactions.find{it.id==id} diff --git a/com.minres.scviewer.database/.project b/com.minres.scviewer.database/.project index 7d00519..01e6eeb 100644 --- a/com.minres.scviewer.database/.project +++ b/com.minres.scviewer.database/.project @@ -20,6 +20,11 @@ + + org.eclipse.pde.ds.core.builder + + + org.eclipse.pde.PluginNature diff --git a/com.minres.scviewer.database/META-INF/MANIFEST.MF b/com.minres.scviewer.database/META-INF/MANIFEST.MF index f0a8346..1956fc0 100644 --- a/com.minres.scviewer.database/META-INF/MANIFEST.MF +++ b/com.minres.scviewer.database/META-INF/MANIFEST.MF @@ -5,4 +5,7 @@ Bundle-SymbolicName: com.minres.scviewer.database Bundle-Version: 1.0.0.qualifier Bundle-Vendor: MINRES Technologies GmbH Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Export-Package: com.minres.scviewer.database +Export-Package: com.minres.scviewer.database, + com.minres.scviewer.database.vcd +Service-Component: OSGI-INF/component.xml +Bundle-ActivationPolicy: lazy diff --git a/com.minres.scviewer.database/OSGI-INF/component.xml b/com.minres.scviewer.database/OSGI-INF/component.xml new file mode 100644 index 0000000..99dd8e1 --- /dev/null +++ b/com.minres.scviewer.database/OSGI-INF/component.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/com.minres.scviewer.database/build.properties b/com.minres.scviewer.database/build.properties index 34d2e4d..fc8c47c 100644 --- a/com.minres.scviewer.database/build.properties +++ b/com.minres.scviewer.database/build.properties @@ -1,4 +1,5 @@ -source.. = src/ output.. = bin/ bin.includes = META-INF/,\ - . + .,\ + OSGI-INF/component.xml +source.. = src/ diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/AssociationType.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/AssociationType.java index c6606ec..ee38a70 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/AssociationType.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/AssociationType.java @@ -1,3 +1,5 @@ package com.minres.scviewer.database; -public enum AssociationType {BEGIN, RECORD, END} \ No newline at end of file +public enum AssociationType { + BEGIN, RECORD, END +} \ No newline at end of file diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/DataType.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/DataType.java index 9fbb6ef..69aed0d 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/DataType.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/DataType.java @@ -1,16 +1,18 @@ package com.minres.scviewer.database; - public enum DataType { - BOOLEAN, // bool - ENUMERATION, // enum - INTEGER, // char, short, int, long, long long, sc_int, sc_bigint - UNSIGNED, // unsigned { char, short, int, long, long long }, sc_uint, sc_biguint - FLOATING_POINT_NUMBER, // float, double - BIT_VECTOR, // sc_bit, sc_bv - LOGIC_VECTOR, // sc_logic, sc_lv - FIXED_POINT_INTEGER, // sc_fixed - UNSIGNED_FIXED_POINT_INTEGER, // sc_ufixed - RECORD, // struct/class - POINTER, // T* - ARRAY, // T[N] - STRING // string, std::string - }; + +public enum DataType { + BOOLEAN, // bool + ENUMERATION, // enum + INTEGER, // char, short, int, long, long long, sc_int, sc_bigint + UNSIGNED, // unsigned { char, short, int, long, long long }, sc_uint, + // sc_biguint + FLOATING_POINT_NUMBER, // float, double + BIT_VECTOR, // sc_bit, sc_bv + LOGIC_VECTOR, // sc_logic, sc_lv + FIXED_POINT_INTEGER, // sc_fixed + UNSIGNED_FIXED_POINT_INTEGER, // sc_ufixed + RECORD, // struct/class + POINTER, // T* + ARRAY, // T[N] + STRING // string, std::string +}; diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/EventTime.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/EventTime.java index 79c2354..dd0ae72 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/EventTime.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/EventTime.java @@ -16,8 +16,11 @@ public class EventTime implements Comparable{ public static final double MS = 1000000000.0; + public static final EventTime ZERO = new EventTime(0L, "fs"); + private long value; // unit is femto seconds + public EventTime(Long value, String unit){ setValue(value, unit); } diff --git a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/HierNode.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/HierNode.java similarity index 62% rename from com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/HierNode.java rename to com.minres.scviewer.database/src/com/minres/scviewer/database/HierNode.java index f43a557..8429c05 100644 --- a/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/HierNode.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/HierNode.java @@ -1,32 +1,26 @@ -package com.minres.scviewer.database.sqlite; +package com.minres.scviewer.database; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; -import com.minres.scviewer.database.ITrHierNode; - -public class HierNode implements ITrHierNode { +public class HierNode implements IHierNode { protected String name; - protected ArrayList childs; + protected ArrayList childs; public HierNode(String name) { this.name=name; - childs = new ArrayList(); + childs = new ArrayList(); } @Override public void addPropertyChangeListener(PropertyChangeListener l) { - // TODO Auto-generated method stub - } @Override public void removePropertyChangeListener(PropertyChangeListener l) { - // TODO Auto-generated method stub - } @Override @@ -45,7 +39,7 @@ public class HierNode implements ITrHierNode { } @Override - public List getChildNodes() { + public List getChildNodes() { return childs; } diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrHierNode.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/IHierNode.java similarity index 94% rename from com.minres.scviewer.database/src/com/minres/scviewer/database/ITrHierNode.java rename to com.minres.scviewer.database/src/com/minres/scviewer/database/IHierNode.java index a91702d..4204b37 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrHierNode.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/IHierNode.java @@ -13,7 +13,8 @@ package com.minres.scviewer.database; import java.beans.PropertyChangeListener; import java.util.List; -public interface ITrHierNode { +public interface IHierNode { + /** * Attach a non-null PropertyChangeListener to this object. * @@ -23,6 +24,7 @@ public interface ITrHierNode { * if the parameter is null */ public void addPropertyChangeListener(PropertyChangeListener l); + /** * Remove a PropertyChangeListener from this component. * @@ -37,6 +39,6 @@ public interface ITrHierNode { public void setName(String name); - public List getChildNodes(); + public List getChildNodes(); } diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignal.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignal.java new file mode 100644 index 0000000..3eb9e05 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignal.java @@ -0,0 +1,13 @@ +package com.minres.scviewer.database; + +import java.util.NavigableSet; + +public interface ISignal extends IWaveform{ + + public NavigableSet getSignalChanges(); + + public T getSignalChangeByTime(EventTime time); + + public NavigableSet getSignalChangesByTimes(EventTime start, EventTime end); + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChange.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChange.java new file mode 100644 index 0000000..ef65642 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChange.java @@ -0,0 +1,9 @@ +package com.minres.scviewer.database; + +public interface ISignalChange extends Comparable{ + + public EventTime getTime(); + + public ISignalChange duplicate() throws CloneNotSupportedException; + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChangeMulti.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChangeMulti.java new file mode 100644 index 0000000..31f1a63 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChangeMulti.java @@ -0,0 +1,7 @@ +package com.minres.scviewer.database; + +public interface ISignalChangeMulti extends ISignalChange { + + public String getValue(); + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChangeSingle.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChangeSingle.java new file mode 100644 index 0000000..df06908 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ISignalChangeSingle.java @@ -0,0 +1,7 @@ +package com.minres.scviewer.database; + +public interface ISignalChangeSingle extends ISignalChange{ + + public char getValue(); + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrRelation.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrRelation.java deleted file mode 100644 index fe44502..0000000 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrRelation.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.minres.scviewer.database; - -public interface ITrRelation { - - RelationType getRelationType(); - - ITransaction getSource(); - - ITransaction getTarget(); -} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITransactionDbFactory.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITransactionDbFactory.java deleted file mode 100644 index a96dd42..0000000 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITransactionDbFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.minres.scviewer.database; - -import java.io.File; - -public interface ITransactionDbFactory { - - ITrDb createDatabase(File file); - -} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITransaction.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITx.java similarity index 72% rename from com.minres.scviewer.database/src/com/minres/scviewer/database/ITransaction.java rename to com.minres.scviewer.database/src/com/minres/scviewer/database/ITx.java index 7c1a106..c4bf69b 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITransaction.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITx.java @@ -12,23 +12,22 @@ package com.minres.scviewer.database; import java.util.Collection; import java.util.List; -import java.util.Set; -public interface ITransaction { +public interface ITx { public Long getId(); - public ITrStream getStream(); + public ITxStream getStream(); - public ITrGenerator getGenerator(); + public ITxGenerator getGenerator(); public EventTime getBeginTime(); public EventTime getEndTime(); - public List getAttributes(); + public List getAttributes(); - public Collection getIncomingRelations(); + public Collection getIncomingRelations(); - public Collection getOutgoingRelations(); + public Collection getOutgoingRelations(); } diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrAttribute.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxAttribute.java similarity index 91% rename from com.minres.scviewer.database/src/com/minres/scviewer/database/ITrAttribute.java rename to com.minres.scviewer.database/src/com/minres/scviewer/database/ITxAttribute.java index 441f0af..e7913c5 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrAttribute.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxAttribute.java @@ -10,6 +10,6 @@ *******************************************************************************/ package com.minres.scviewer.database; -public interface ITrAttribute extends ITrAttrType { +public interface ITxAttribute extends ITxAttributeType { public Object getValue(); } diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrAttrType.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxAttributeType.java similarity index 94% rename from com.minres.scviewer.database/src/com/minres/scviewer/database/ITrAttrType.java rename to com.minres.scviewer.database/src/com/minres/scviewer/database/ITxAttributeType.java index 9a9c866..fd529ac 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrAttrType.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxAttributeType.java @@ -10,7 +10,7 @@ *******************************************************************************/ package com.minres.scviewer.database; -public interface ITrAttrType { +public interface ITxAttributeType { public String getName(); public DataType getDataType(); public AssociationType getType(); diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrGenerator.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxGenerator.java similarity index 85% rename from com.minres.scviewer.database/src/com/minres/scviewer/database/ITrGenerator.java rename to com.minres.scviewer.database/src/com/minres/scviewer/database/ITxGenerator.java index f9ffda9..293efc0 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrGenerator.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxGenerator.java @@ -12,9 +12,9 @@ package com.minres.scviewer.database; import java.util.List; -public interface ITrGenerator { +public interface ITxGenerator { public Long getId(); - public ITrStream getStream(); + public ITxStream getStream(); public String getName(); - public List getTransactions(); + public List getTransactions(); } diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxRelation.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxRelation.java new file mode 100644 index 0000000..bc6b0ef --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxRelation.java @@ -0,0 +1,10 @@ +package com.minres.scviewer.database; + +public interface ITxRelation { + + RelationType getRelationType(); + + ITx getSource(); + + ITx getTarget(); +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrStream.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxStream.java similarity index 69% rename from com.minres.scviewer.database/src/com/minres/scviewer/database/ITrStream.java rename to com.minres.scviewer.database/src/com/minres/scviewer/database/ITxStream.java index fcb0f1b..3581793 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrStream.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/ITxStream.java @@ -12,18 +12,12 @@ package com.minres.scviewer.database; import java.util.List; -public interface ITrStream extends ITrHierNode { +public interface ITxStream extends IWaveform { - public Long getId(); + public List getGenerators(); - public String getKind(); + public List getTransactions(); - public ITrDb getDb(); - - public List getGenerators(); - - public List getTransactions(); - - public ITransaction getTransactionById(long id); + public ITx getTransactionById(long id); } diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java new file mode 100644 index 0000000..9ab58cd --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java @@ -0,0 +1,12 @@ +package com.minres.scviewer.database; + +public interface IWaveform extends IHierNode { + + public Long getId(); + + public String getKind(); + + public IWaveformDb getDb(); + + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrDb.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDb.java similarity index 75% rename from com.minres.scviewer.database/src/com/minres/scviewer/database/ITrDb.java rename to com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDb.java index 39c9b23..fa456aa 100644 --- a/com.minres.scviewer.database/src/com/minres/scviewer/database/ITrDb.java +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDb.java @@ -11,19 +11,18 @@ package com.minres.scviewer.database; import java.io.File; -import java.io.InputStream; import java.util.List; -public interface ITrDb extends ITrHierNode { +public interface IWaveformDb extends IHierNode { public EventTime getMaxTime(); - public ITrStream getStreamByName(String name); + public IWaveform getStreamByName(String name); - public List getAllStreams(); + public List getAllWaves(); - public void load(File inp) throws InputFormatException; + public void load(File inp) throws Exception; public void clear(); diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDbFactory.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDbFactory.java new file mode 100644 index 0000000..370b971 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDbFactory.java @@ -0,0 +1,9 @@ +package com.minres.scviewer.database; + +import java.io.File; + +public interface IWaveformDbFactory { + + IWaveformDb createDatabase(File file); + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/SignalChange.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/SignalChange.java new file mode 100644 index 0000000..3747253 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/SignalChange.java @@ -0,0 +1,36 @@ +package com.minres.scviewer.database; + +public class SignalChange implements ISignalChange { + + EventTime time; + + + public SignalChange() { + time=EventTime.ZERO; + } + + public SignalChange(EventTime time) { + super(); + this.time = time; + } + + @Override + public int compareTo(ISignalChange o) { + return time.compareTo(o.getTime()); + } + + @Override + public EventTime getTime() { + return time; + } + + public void setTime(EventTime time) { + this.time = time; + } + + @Override + public ISignalChange duplicate() throws CloneNotSupportedException { + return (ISignalChange) this.clone(); + } + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/BitVector.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/BitVector.java new file mode 100644 index 0000000..292ba5d --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/BitVector.java @@ -0,0 +1,39 @@ +package com.minres.scviewer.database.vcd; + +public class BitVector { + + public static final char VALUE_X = 'X'; + public static final char VALUE_Z = 'Z'; + public static final char VALUE_1 = '1'; + public static final char VALUE_0 = '0'; + + private final int width; + + private char[] value; + + public BitVector(int netWidth) { + this.width=netWidth; + value = new char[netWidth]; + for(int i=0; i moduleStack; + + /** The signals. */ + private List signals; + + private HashMap waveformLookup; + + private long maxTime; + + /** + * Instantiates a new VCD db. + * + * @param netName the net name + */ + public VCDDb() { + super("VCDDb"); + signals = new Vector(); + waveformLookup = new HashMap(); + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.ITrDb#getStreamByName(java.lang.String) + */ + @Override + public ITxStream getStreamByName(String name) { + return null; + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.ITrDb#load(java.io.File) + */ + @SuppressWarnings("unchecked") + @Override + public void load(File inp) throws Exception { + moduleStack= new Stack(); + boolean res = new VCDFileParser(false).load(new FileInputStream(inp), this); + moduleStack=null; + if(!res) throw new InputFormatException(); + EventTime lastTime=new EventTime(maxTime, TIME_RES); + for(IWaveform signal:signals){ + ISignalChange change = ((ISignal)signal).getSignalChanges().last(); + if(lastTime.compareTo(change.getTime())>0){ + ISignalChange lastChange = change.duplicate(); + ((SignalChange)lastChange).setTime(lastTime); + ((ISignal)signal).getSignalChanges().add(lastChange); + } + } + buildHierarchyNodes(); + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.ITrDb#clear() + */ + @Override + public void clear() { + signals.clear(); + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.ITrDb#getMaxTime() + */ + @Override + public EventTime getMaxTime() { + return new EventTime(maxTime, TIME_RES); + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.ITrDb#getAllWaves() + */ + @Override + public List getAllWaves() { + return signals; + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.vcd.ITraceBuilder#enterModule(java.lang.String) + */ + @Override + public void enterModule(String tokenString) { + if(moduleStack.isEmpty()) + moduleStack.push(tokenString); + else + moduleStack.push(moduleStack.peek()+"."+tokenString); + + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.vcd.ITraceBuilder#exitModule() + */ + @Override + public void exitModule() { + if(!moduleStack.isEmpty()) moduleStack.pop(); + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.vcd.ITraceBuilder#newNet(java.lang.String, int, int) + */ + @Override + public Integer newNet(String netName, int i, int width) { + int id = signals.size(); + VCDSignal signal; + if(width==1){ + signal = i<0 ? new VCDSignal(id, netName) : + new VCDSignal(signals.get(i), id, netName); + } else { + signal = i<0 ? new VCDSignal(id, netName, width) : + new VCDSignal(signals.get(i), id, netName); + }; + signals.add(signal); + return id; + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.vcd.ITraceBuilder#getNetWidth(int) + */ + @Override + public int getNetWidth(int intValue) { + VCDSignal signal = (VCDSignal) signals.get(intValue); + return signal.getWidth(); + } + + /* (non-Javadoc) + * @see com.minres.scviewer.database.vcd.ITraceBuilder#appendTransition(int, long, com.minres.scviewer.database.vcd.BitVector) + */ + @SuppressWarnings("unchecked") + @Override + public void appendTransition(int intValue, long fCurrentTime, BitVector decodedValues) { + VCDSignal signal = (VCDSignal) signals.get(intValue); + EventTime time = new EventTime(fCurrentTime, TIME_RES); + if(signal.getWidth()==1){ + VCDSignalChangeSingle change = new VCDSignalChangeSingle(time, decodedValues.getValue()[0]); + ((VCDSignal)signal).addSignalChange(change); + } else { + VCDSignalChangeMulti change = new VCDSignalChangeMulti(time, new String(decodedValues.getValue())); + ((VCDSignal)signal).addSignalChange(change); + } + maxTime= Math.max(maxTime, fCurrentTime); + } + + private void buildHierarchyNodes() throws InputFormatException{ + for(IWaveform stream:getAllWaves()){ + waveformLookup.put(stream.getFullName(), stream); + String[] hier = stream.getFullName().split("\\."); + IHierNode node = this; + for(String name:hier){ + IHierNode n1 = null; + for (IHierNode n : node.getChildNodes()) { + if (n.getName().equals(name)) { + n1=n; + break; + } + } + if(name == hier[hier.length-1]){ //leaf + if(n1!=null) { + if(n1 instanceof HierNode){ + node.getChildNodes().remove(n1); + stream.getChildNodes().addAll(n1.getChildNodes()); + } else { + throw new InputFormatException(); + } + } + stream.setName(name); + node.getChildNodes().add(stream); + node=stream; + } else { // intermediate + if(n1 != null) { + node=n1; + } else { + HierNode newNode = new HierNode(name); + node.getChildNodes().add(newNode); + node=newNode; + } + } + } + } + } + + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDDbFactory.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDDbFactory.java new file mode 100644 index 0000000..c9aa307 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDDbFactory.java @@ -0,0 +1,37 @@ +package com.minres.scviewer.database.vcd; + +import java.io.File; +import java.io.FileInputStream; + +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.IWaveformDbFactory; + +public class VCDDbFactory implements IWaveformDbFactory { + + private byte[] x = "$date".getBytes(); + + public VCDDbFactory(){ + + } + + @Override + public IWaveformDb createDatabase(File file) { + try { + FileInputStream fis = new FileInputStream(file); + byte[] buffer = new byte[x.length]; + int read = fis.read(buffer, 0, x.length); + fis.close(); + if (read == x.length) + for (int i = 0; i < x.length; i++) + if (buffer[i] != x[i]) + return null; + VCDDb db = new VCDDb(); + db.load(file); + return db; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDFileParser.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDFileParser.java new file mode 100644 index 0000000..d7ecbe3 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDFileParser.java @@ -0,0 +1,212 @@ +package com.minres.scviewer.database.vcd; + +import java.io.*; +import java.util.*; + +class VCDFileParser { + private StreamTokenizer tokenizer; + private IVCDDatabaseBuilder traceBuilder; + private HashMap nameToNetMap = new HashMap(); + private long picoSecondsPerIncrement; + private boolean stripNetWidth; + long currentTime; + + public VCDFileParser(boolean stripNetWidth) { + this.stripNetWidth=stripNetWidth; + } + + public boolean load(InputStream is, IVCDDatabaseBuilder builder) { + tokenizer = new StreamTokenizer(new BufferedReader(new InputStreamReader(is))); + tokenizer.resetSyntax(); + tokenizer.wordChars(33, 126); + tokenizer.whitespaceChars('\r', '\r'); + tokenizer.whitespaceChars('\n', '\n'); + tokenizer.whitespaceChars(' ', ' '); + tokenizer.whitespaceChars('\t', '\t'); + try { + traceBuilder = builder; + currentTime=0; + while (parseDefinition()); + while (parseTransition()); + return true; + } catch (Exception exc) { + exc.printStackTrace(); + return false; + } + } + + private void parseScope() throws Exception { + nextToken(); // Scope type (ignore) + nextToken(); + traceBuilder.enterModule(tokenizer.sval); + match("$end"); + } + + private void parseUpscope() throws Exception { + match("$end"); + traceBuilder.exitModule(); + } + + private void parseVar() throws Exception { + nextToken(); // type + nextToken(); // size + int width = Integer.parseInt(tokenizer.sval); + + nextToken(); + String id = tokenizer.sval; + nextToken(); + String netName = tokenizer.sval; + while (nextToken() && !tokenizer.sval.equals("$end")) { + netName+=tokenizer.sval; + } + + Integer net = nameToNetMap.get(id); + if (net == null) { + // We've never seen this net before + if(stripNetWidth){ + int openBracket = netName.indexOf('['); + if (openBracket != -1) netName = netName.substring(0, openBracket); + } + nameToNetMap.put(id, traceBuilder.newNet(netName, -1, width)); + } else { + // Shares data with existing net. Add as clone. + traceBuilder.newNet(netName, net, width); + } + } + + private void parseTimescale() throws Exception { + nextToken(); + String s = tokenizer.sval; + nextToken(); + while(!tokenizer.sval.equals("$end")){ + s+=" "+tokenizer.sval; + nextToken(); + } + switch (s.charAt(s.length() - 2)){ + case 'p': // Nano-seconds + picoSecondsPerIncrement = 1; + s = s.substring(0, s.length() - 2).trim(); + break; + case 'n': // Nano-seconds + picoSecondsPerIncrement = 1000; + s = s.substring(0, s.length() - 2).trim(); + break; + case 'u': // Microseconds + picoSecondsPerIncrement = 1000000; + s = s.substring(0, s.length() - 2).trim(); + break; + case 'm': // Microseconds + picoSecondsPerIncrement = 1000000000; + s = s.substring(0, s.length() - 2).trim(); + break; + default: // Seconds + picoSecondsPerIncrement = 1000000000000L; + s = s.substring(0, s.length() - 1); + break; + } + picoSecondsPerIncrement *= Long.parseLong(s); + } + + private boolean parseDefinition() throws Exception { + nextToken(); + if (tokenizer.sval.equals("$scope")) + parseScope(); + else if (tokenizer.sval.equals("$var")) + parseVar(); + else if (tokenizer.sval.equals("$upscope")) + parseUpscope(); + else if (tokenizer.sval.equals("$timescale")) + parseTimescale(); + else if (tokenizer.sval.equals("$enddefinitions")) { + match("$end"); + return false; + } else { + // Ignore this defintion + do { + if (!nextToken()) return false; + } while (!tokenizer.sval.equals("$end")); + } + + return true; + } + + private boolean parseTransition() throws Exception { + if (!nextToken()) return false; + if (tokenizer.sval.charAt(0) == '#') { // If the line begins with a #, this is a timestamp. + currentTime = Long.parseLong(tokenizer.sval.substring(1)) * picoSecondsPerIncrement; + } else { + if(tokenizer.sval.equals("$comment")){ + do { + if (!nextToken()) return false; + } while (!tokenizer.sval.equals("$end")); + return true; + } + if (tokenizer.sval.equals("$dumpvars") || tokenizer.sval.equals("$end")) return true; + String value, id; + if (tokenizer.sval.charAt(0) == 'b') { + // Multiple value net. Value appears first, followed by space, + // then identifier + value = tokenizer.sval.substring(1); + nextToken(); + id = tokenizer.sval; + } else { + // Single value net. identifier first, then value, no space. + value = tokenizer.sval.substring(0, 1); + id = tokenizer.sval.substring(1); + } + + Integer net = nameToNetMap.get(id); + if (net == null) { + System.out.println("unknown net " + id + " value " + value); + return true; + } + + int netWidth = traceBuilder.getNetWidth(net); + BitVector decodedValues = new BitVector(netWidth); + if (value.equals("z") && netWidth > 1) { + for (int i = 0; i < netWidth; i++) + decodedValues.setValue(i, BitVector.VALUE_Z); + } else if (value.equals("x") && netWidth > 1) { + for (int i = 0; i < netWidth; i++) + decodedValues.setValue(i, BitVector.VALUE_X); + } else { + int stringIndex = 0; + for (int convertedIndex = netWidth - value.length(); convertedIndex < netWidth; convertedIndex++) { + switch (value.charAt(stringIndex++)) { + case 'z': + decodedValues.setValue(convertedIndex, BitVector.VALUE_Z); + break; + + case '1': + decodedValues.setValue(convertedIndex, BitVector.VALUE_1); + break; + + case '0': + decodedValues.setValue(convertedIndex, BitVector.VALUE_0); + break; + + case 'x': + decodedValues.setValue(convertedIndex, BitVector.VALUE_X); + break; + + default: + decodedValues.setValue(convertedIndex, BitVector.VALUE_X); + } + } + } + traceBuilder.appendTransition(net, currentTime, decodedValues); + } + return true; + } + + private void match(String value) throws Exception { + nextToken(); + if (!tokenizer.sval.equals(value)) + throw new Exception("Line "+tokenizer.lineno()+": parse error, expected "+value+" got "+tokenizer.sval); + } + + private boolean nextToken() throws IOException { + return tokenizer.nextToken() != StreamTokenizer.TT_EOF; + } + +}; diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignal.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignal.java new file mode 100644 index 0000000..ab78038 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignal.java @@ -0,0 +1,108 @@ +package com.minres.scviewer.database.vcd; + +import java.util.Collections; +import java.util.NavigableSet; +import java.util.TreeSet; + +import com.minres.scviewer.database.EventTime; +import com.minres.scviewer.database.HierNode; +import com.minres.scviewer.database.ISignal; +import com.minres.scviewer.database.ISignalChange; +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.IWaveform; +import com.minres.scviewer.database.SignalChange; + +public class VCDSignal extends HierNode implements ISignal { + + private long id; + + private String fullName; + + private final String kind = "signal"; + + private final int width; + + private VCDDb db; + + TreeSet values; + + public VCDSignal(String name) { + this(0, name, 1); + } + + public VCDSignal(int id, String name) { + this(id,name,1); + } + + public VCDSignal(int id, String name, int width) { + super(name); + fullName=name; + this.id=id; + this.width=width; + this.values=new TreeSet(); + } + + @SuppressWarnings("unchecked") + public VCDSignal(IWaveform other, int id, String name) { + super(name); + fullName=name; + this.id=id; + assert(other instanceof VCDSignal); + this.width=((VCDSignal)other).width; + this.values=((VCDSignal)other).values; + } + + @Override + public String getFullName() { + return fullName; + } + + public void setId(int id) { + this.id=id; + } + + @Override + public Long getId() { + return id; + } + + @Override + public String getKind() { + return kind; + } + + public int getWidth() { + return width; + } + + @Override + public IWaveformDb getDb() { + return db; + } + + public void addSignalChange(T change){ + values.add(change); + } + + @Override + public NavigableSet getSignalChanges() { + return values; + } + + @Override + public T getSignalChangeByTime(EventTime time) { + return (T) values.floor(new SignalChange(time)); + } + + @Override + public NavigableSet getSignalChangesByTimes(EventTime start, EventTime end) { + ISignalChange low = values.floor(new SignalChange(start)); + ISignalChange high = values.ceiling(new SignalChange(end)); + if(high!=null) + return values.subSet(low, true, high, true); + else + return values.subSet(low, true, values.last(), true); + } + + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignalChangeMulti.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignalChangeMulti.java new file mode 100644 index 0000000..cb80db7 --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignalChangeMulti.java @@ -0,0 +1,28 @@ +package com.minres.scviewer.database.vcd; + +import com.minres.scviewer.database.EventTime; +import com.minres.scviewer.database.ISignalChangeMulti; +import com.minres.scviewer.database.SignalChange; + +public class VCDSignalChangeMulti extends SignalChange implements ISignalChangeMulti, Cloneable { + + private String value; + + public VCDSignalChangeMulti(EventTime time) { + super(time); + } + + public VCDSignalChangeMulti(EventTime time, String value) { + super(time); + this.value=value; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignalChangeSingle.java b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignalChangeSingle.java new file mode 100644 index 0000000..568e79c --- /dev/null +++ b/com.minres.scviewer.database/src/com/minres/scviewer/database/vcd/VCDSignalChangeSingle.java @@ -0,0 +1,24 @@ +package com.minres.scviewer.database.vcd; + +import com.minres.scviewer.database.EventTime; +import com.minres.scviewer.database.ISignalChangeSingle; +import com.minres.scviewer.database.SignalChange; + +public class VCDSignalChangeSingle extends SignalChange implements ISignalChangeSingle, Cloneable { + + private char value; + + public VCDSignalChangeSingle(EventTime time, char value) { + super(time); + this.value=value; + } + + public char getValue() { + return value; + } + + public void setValue(char value) { + this.value = value; + } + +} diff --git a/com.minres.scviewer.ui/META-INF/MANIFEST.MF b/com.minres.scviewer.ui/META-INF/MANIFEST.MF index 39d3f04..3fa1844 100644 --- a/com.minres.scviewer.ui/META-INF/MANIFEST.MF +++ b/com.minres.scviewer.ui/META-INF/MANIFEST.MF @@ -20,4 +20,3 @@ Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.ui.views.contentoutline Bundle-ClassPath: ., swing2swt.jar -Service-Component: OSGI-INF/component.xml diff --git a/com.minres.scviewer.ui/OSGI-INF/component.xml b/com.minres.scviewer.ui/OSGI-INF/component.xml deleted file mode 100644 index 872d50a..0000000 --- a/com.minres.scviewer.ui/OSGI-INF/component.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/com.minres.scviewer.ui/plugin.xml b/com.minres.scviewer.ui/plugin.xml index 646f2dc..6ab8e4d 100644 --- a/com.minres.scviewer.ui/plugin.xml +++ b/com.minres.scviewer.ui/plugin.xml @@ -21,8 +21,8 @@ class="com.minres.scviewer.ui.TxEditorPart" contributorClass="com.minres.scviewer.ui.TxEditorActionBarContributor" extensions="txdb" - filenames="*.txdb,*.txlog" - icon="icons/scviewer.gif" + filenames="*.txdb,*.txlog,*.vcd" + icon="res/images/scviewer.png" id="com.minres.scviewer.ui.TxEditorPart" name="Wave Viewer"> diff --git a/com.minres.scviewer.ui/icons/scviewer.gif b/com.minres.scviewer.ui/res/images/scviewer.gif similarity index 100% rename from com.minres.scviewer.ui/icons/scviewer.gif rename to com.minres.scviewer.ui/res/images/scviewer.gif diff --git a/com.minres.scviewer.ui/res/images/scviewer.png b/com.minres.scviewer.ui/res/images/scviewer.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4a7b21ab181e5bebd9bab29a4595ce5f33c590 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|c6z!vhFAzD zCrD%**pYsI-v22UO{_~Iqobwsjzz1hTSy-hxVN4ESc=26dc#U1<{JzN|<`&wylVxt#8>Si4*TwDS`pD$L5bbbKL@C=XoSmO} zf>McRO7DrB9ac|D8qS)f_!^jP+9htF-|)w%gpr}1-TrWq_mftjCm1|k{an^LB{Ts5 Dv!GxA literal 0 HcmV?d00001 diff --git a/com.minres.scviewer.ui/res/images/signal.png b/com.minres.scviewer.ui/res/images/signal.png new file mode 100644 index 0000000000000000000000000000000000000000..9c96af95917ea9920a4fe3bca87aee23915c06be GIT binary patch literal 717 zcmV;;0y6!HP)`3o;bUGzb6y048Zv zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj27Z*CxAAWdOomE>Pr0006gNkl1gh6otR}v$Map*Bd#C;wTQ;nrBEGx>P&{Jw=4*Xi`DVEARkRd5=gGC=yDn z$l2Y|{tg9rNdz>x(i9`zbLZT1&WO{~Qyv~3u+~!7HC@-yG!0Tpgb*mDFvbvuAz>Jj zrYZaT`y3n`uv)FqMNyFFIaO8BGz|bv)8L##2!Yo6$$dN?ljk{QSz@h4TWe|Cmb$KK znuf0H==&b$9L5-`szND+Qi`G|@H`J|EltxZ9{M_-(y1BVQWLZX@=hSsg+qSfA zig5>iTuQVOm0@YELkxRg?iMk7X}5uWD( z5Cj3z_kD~pPk>6PAp=rMfB_su5!2}u0N?i!pW&~a-%O{%IX5u-@Z-lnb$M}hCB)g; z8FzPgY&ILpvK+$XoI`7kF$UlFnayVG?(TAQbVQbAtX3-y4-XL+7Z=aY0e}X?dc9`7 zUbES3u+|Pa*a|kE&q>pi<#Nelv0%Aek|YW9`5b+6a>DKHEwkB-q9}$yZTFAkn8{?q zVzD4i)8QmZ!p_bP`uO;mBuTixzo#gQC%@72Jc1x#GMNxX5lNB|$1!mn{{m}`xW2xo zEKAC=q^c^~wq@(U;~`-f;&~pv?=v2c2YY`4BiQuO6o?xi00000NkvXXu0mjfa>F-E literal 0 HcmV?d00001 diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPart.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPart.java index 5a35437..81a55dc 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPart.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPart.java @@ -13,7 +13,6 @@ package com.minres.scviewer.ui; import java.io.File; import java.util.List; -import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; @@ -25,7 +24,6 @@ import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.FileStoreEditorInput; -import org.eclipse.ui.internal.ide.dialogs.IFileStoreFilter; import org.eclipse.ui.part.EditorPart; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; import org.eclipse.ui.views.properties.IPropertySheetPage; @@ -33,12 +31,12 @@ import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributo import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; -import com.minres.scviewer.database.ITrDb; -import com.minres.scviewer.database.ITrStream; -import com.minres.scviewer.database.ITransactionDbFactory; +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.ITxStream; +import com.minres.scviewer.database.IWaveformDbFactory; +import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.ui.swt.TxDisplay; import com.minres.scviewer.ui.views.TxOutlinePage; @@ -51,7 +49,7 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage private TxDisplay txDisplay; /** This is the root of the editor's model. */ - private ITrDb database; + private IWaveformDb database; private Composite myParent; @@ -85,7 +83,7 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage if(getEditorInput()!=null && ((TxEditorInput) getEditorInput()).getStreamNames().size()>0 && database!=null){ if(MessageDialog.openConfirm(parent.getShell(), "Confirm", "Do you want the restore last state of the wave form?")) for(String streamName:((TxEditorInput) getEditorInput()).getStreamNames()){ - ITrStream stream = database.getStreamByName(streamName); + IWaveform stream = database.getStreamByName(streamName); if(stream!=null) txDisplay.addStream(stream); } @@ -126,10 +124,10 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage protected void getTrDatabase(File file) { try { BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); - ServiceReference[] serviceReferences = context.getServiceReferences(ITransactionDbFactory.class.getName(), null); + ServiceReference[] serviceReferences = context.getServiceReferences(IWaveformDbFactory.class.getName(), null); if(serviceReferences!=null){ for(ServiceReference serviceReference:serviceReferences){ - database = ((ITransactionDbFactory) context.getService(serviceReference)).createDatabase(file); + database = ((IWaveformDbFactory) context.getService(serviceReference)).createDatabase(file); if(database!=null){ if(txDisplay !=null) database.addPropertyChangeListener(txDisplay); return; @@ -180,7 +178,7 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage return super.getAdapter(type); } - public ITrDb getModel() { + public IWaveformDb getModel() { return database; } @@ -202,38 +200,38 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage return false; } - public ITrDb getDatabase() { + public IWaveformDb getDatabase() { return database; } - public void addStreamToList(ITrStream stream){ - if(getEditorInput() instanceof TxEditorInput && !((TxEditorInput) getEditorInput()).getStreamNames().contains(stream.getFullName())){ - ((TxEditorInput) getEditorInput()).getStreamNames().add(stream.getFullName()); - txDisplay.addStream(stream); + public void addStreamToList(IWaveform obj){ + if(getEditorInput() instanceof TxEditorInput && !((TxEditorInput) getEditorInput()).getStreamNames().contains(obj.getFullName())){ + ((TxEditorInput) getEditorInput()).getStreamNames().add(obj.getFullName()); + txDisplay.addStream(obj); } else - txDisplay.addStream(stream); + txDisplay.addStream(obj); } - public void addStreamsToList(ITrStream[] streams){ - for(ITrStream stream:streams) + public void addStreamsToList(IWaveform[] iWaveforms){ + for(IWaveform stream:iWaveforms) addStreamToList(stream); } - public void removeStreamFromList(ITrStream stream){ - if(getEditorInput() instanceof TxEditorInput && ((TxEditorInput) getEditorInput()).getStreamNames().contains(stream.getFullName())){ - ((TxEditorInput) getEditorInput()).getStreamNames().remove(stream.getFullName()); - txDisplay.removeStream(stream); + public void removeStreamFromList(IWaveform obj){ + if(getEditorInput() instanceof TxEditorInput && ((TxEditorInput) getEditorInput()).getStreamNames().contains(obj.getFullName())){ + ((TxEditorInput) getEditorInput()).getStreamNames().remove(obj.getFullName()); + txDisplay.removeStream(obj); } else - txDisplay.removeStream(stream); + txDisplay.removeStream(obj); } - public void removeStreamsFromList(ITrStream[] streams){ - for(ITrStream stream:streams) + public void removeStreamsFromList(IWaveform[] iWaveforms){ + for(IWaveform stream:iWaveforms) removeStreamFromList(stream); } - public List getStreamList(){ + public List getStreamList(){ return txDisplay.getStreamList(); } diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPlugin.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPlugin.java index 8ee1387..ee0a01c 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPlugin.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPlugin.java @@ -24,7 +24,7 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.wb.swt.SWTResourceManager; import org.osgi.framework.BundleContext; -import com.minres.scviewer.database.ITransactionDbFactory; +import com.minres.scviewer.database.IWaveformDbFactory; /** * The activator class controls the plug-in life cycle @@ -133,21 +133,4 @@ public class TxEditorPlugin extends AbstractUIPlugin { return resourceBundle; } - private ITransactionDbFactory transactionDbFactory; - private List factories= new ArrayList(); - public ITransactionDbFactory getTransactionDbFactory() { - return transactionDbFactory; - } - - public void setTransactionDbFactory(ITransactionDbFactory transactionDbFactory) { - factories.add( transactionDbFactory); - System.out.println("Service bound"); - } - - public void unsetTransactionDbFactory(ITransactionDbFactory transactionDbFactory) { - factories.remove(transactionDbFactory); - System.out.println("Service unbound"); - } - - } diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/adapter/AdapterFactory.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/adapter/AdapterFactory.java index b81fd64..2dfba1d 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/adapter/AdapterFactory.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/adapter/AdapterFactory.java @@ -3,7 +3,7 @@ package com.minres.scviewer.ui.adapter; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.ui.views.properties.IPropertySource; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITx; public class AdapterFactory implements IAdapterFactory { @@ -11,7 +11,7 @@ public class AdapterFactory implements IAdapterFactory { @Override public Object getAdapter(Object adaptableObject, Class adapterType) { if (adapterType == IPropertySource.class) - return new ITransactionPropertySource((ITransaction) adaptableObject); + return new ITransactionPropertySource((ITx) adaptableObject); return null; } diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/adapter/ITransactionPropertySource.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/adapter/ITransactionPropertySource.java index 8dac247..d0dba70 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/adapter/ITransactionPropertySource.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/adapter/ITransactionPropertySource.java @@ -16,11 +16,11 @@ import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertySource; import org.eclipse.ui.views.properties.PropertyDescriptor; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITx; public class ITransactionPropertySource implements IPropertySource { - private ITransaction iTransaction; + private ITx iTransaction; public final static String PROPERTY_ID = "ID"; public final static String PROPERTY_BEGINTIME = "BEGINTIME"; @@ -29,7 +29,7 @@ public class ITransactionPropertySource implements IPropertySource { protected IPropertyDescriptor[] propertyDescriptors; - public ITransactionPropertySource(ITransaction iTransaction) { + public ITransactionPropertySource(ITx iTransaction) { this.iTransaction=iTransaction; } diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/IWaveformWidget.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/IWaveformWidget.java new file mode 100644 index 0000000..3d9caf3 --- /dev/null +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/IWaveformWidget.java @@ -0,0 +1,7 @@ +package com.minres.scviewer.ui.swt; + +public interface IWaveformWidget { + + Transaction highlight(Object sel); + +} diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/Ruler.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/Ruler.java index 227f958..da81786 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/Ruler.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/Ruler.java @@ -70,9 +70,9 @@ public class Ruler extends Composite { int end=start+e.width; gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); - gc.fillRectangle(new Rectangle(0, 0, e.width, height)); + gc.fillRectangle(new Rectangle(e.x, e.y, e.width, height)); gc.setBackground(headerBgColor); - gc.fillRectangle(new Rectangle(0, 0, e.width, height - 1)); + gc.fillRectangle(new Rectangle(e.x, e.y, e.width, height - 1)); gc.setForeground(headerFgColor); gc.drawLine(0, bottom, e.width, bottom); diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/SignalWidget.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/SignalWidget.java new file mode 100644 index 0000000..4be9565 --- /dev/null +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/SignalWidget.java @@ -0,0 +1,168 @@ +package com.minres.scviewer.ui.swt; + +import java.util.NavigableSet; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.PaintEvent; +import org.eclipse.swt.events.PaintListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Canvas; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.wb.swt.SWTResourceManager; + +import com.minres.scviewer.database.EventTime; +import com.minres.scviewer.database.ISignal; +import com.minres.scviewer.database.ISignalChange; +import com.minres.scviewer.database.ISignalChangeMulti; +import com.minres.scviewer.database.ISignalChangeSingle; +import com.minres.scviewer.ui.TxEditorPlugin; + +public class SignalWidget extends Canvas implements IWaveformWidget{ + + static final int trackHeight = 50; + static final int trackInset = 2; + static final int txHeight = trackHeight - 2 * trackInset; + + static double zoomFactor = EventTime.NS; + private Color lineColor; + private Color trackBgColor; + private Color color0; + private Color color1; + private Color colorZ; + private Color colorZdark; + private Color colorX; + private Color colorXdark; + private Color colorC; + private long length; + ISignal signal; + + public SignalWidget(Composite parent, int style) { + super(parent, style); + addPaintListener(new PaintListener() { + public void paintControl(PaintEvent e) { + SignalWidget.this.paintControl(e); + } + }); + TxEditorPlugin plugin=TxEditorPlugin.getDefault(); + lineColor=plugin.getColor(TxEditorPlugin.lineColor); + trackBgColor=plugin.getColor(TxEditorPlugin.trackBgDarkColor); + color0=SWTResourceManager.getColor(SWT.COLOR_DARK_GREEN); + color1=SWTResourceManager.getColor(SWT.COLOR_GREEN); + colorZ=SWTResourceManager.getColor(SWT.COLOR_GRAY); + colorX=SWTResourceManager.getColor(SWT.COLOR_RED); + colorZdark=SWTResourceManager.getColor(SWT.COLOR_DARK_GRAY); + colorXdark=SWTResourceManager.getColor(SWT.COLOR_DARK_RED); + colorC=SWTResourceManager.getColor(SWT.COLOR_BLUE); + } + + public void setTransactions(ISignal signal) { + this.signal=signal; + ISignalChange change = signal.getSignalChanges().last(); + length=(long) (change.getTime().getValue()/zoomFactor); + layout(true,true); + } + + @Override + public Point computeSize (int wHint, int hHint, boolean changed) { + return new Point((int) length, trackHeight); + } + + void paintControl(PaintEvent e) { + GC gc = e.gc; + gc.setForeground(lineColor); + gc.setFillRule(SWT.FILL_EVEN_ODD); + gc.setBackground(trackBgColor); + gc.setLineWidth(1); + gc.setLineStyle(SWT.LINE_SOLID); + gc.fillRectangle(new Rectangle(e.x, e.y, e.width, e.height)); + ISignalChange lastChange = null; + NavigableSet visibleChanges = signal.getSignalChangesByTimes( + new EventTime((long) (e.x*zoomFactor), "fs"), + new EventTime((long) ((e.x+e.width)*zoomFactor), "fs")); + for(ISignalChange actChange:visibleChanges){ + if(lastChange!=null){ + drawValues(e, gc, lastChange, actChange); + } + lastChange=actChange; + } + } + + protected void drawValues(PaintEvent e, GC gc, ISignalChange lastChange, ISignalChange actChange) { + if(lastChange instanceof ISignalChangeSingle){ + int yOffset = trackHeight/2; + Color color = colorX; + switch(((ISignalChangeSingle) lastChange).getValue()){ + case '1': + color=color1; + yOffset = trackHeight/3; + break; + case '0': + color=color0; + yOffset = 2*trackHeight/3; + break; + case 'Z': + color=colorZ; + break; + default: + } + gc.setForeground(color); + int endTime= (int)(actChange.getTime().getValue()/zoomFactor); + gc.drawLine((int)(lastChange.getTime().getValue()/zoomFactor), yOffset, + endTime, yOffset); + int yNext = trackHeight/2; + switch(((ISignalChangeSingle) actChange).getValue()){ + case '1': + yNext = trackHeight/3; + break; + case '0': + yNext = 2*trackHeight/3; + break; + default: + } + gc.setForeground(colorC); + if(yOffset transactionMap = new HashMap(); + private HashMap transactionMap = new HashMap(); class TrackLayoutData { protected int x, y; @@ -121,11 +121,11 @@ public class Track extends Composite implements MouseListener { } - public void setTransactions(List transactions) { - Vector rowendtime = new Vector(); - for (ITransaction tx : transactions) { + public void setTransactions(List transactions) { + Vector rowendtime = new Vector(); + for (ITx tx : transactions) { int rowIdx = 0; - for (ITransaction lastTx : rowendtime) { + for (ITx lastTx : rowendtime) { if((lastTx.getEndTime().getValue()-lastTx.getBeginTime().getValue())>0){ if (lastTx.getEndTime().compareTo(tx.getBeginTime())<=0 ) break; @@ -187,16 +187,19 @@ public class Track extends Composite implements MouseListener { this.notifyListeners(SWT.MouseUp, event); } - public Transaction highlightTransaction(ITransaction tx){ - if(highlightedTx!=null){ - transactionMap.get(highlightedTx).highlight(false); - highlightedTx=null; - } - if(tx!=null && transactionMap.containsKey(tx)){ - Transaction trans = transactionMap.get(tx); - trans.highlight(true); - highlightedTx=tx; - return trans; + public Transaction highlight(Object obj){ + if(obj instanceof ITx){ + ITx tx = (ITx) obj; + if(highlightedTx!=null){ + transactionMap.get(highlightedTx).highlight(false); + highlightedTx=null; + } + if(tx!=null && transactionMap.containsKey(tx)){ + Transaction trans = transactionMap.get(tx); + trans.highlight(true); + highlightedTx=tx; + return trans; + } } return null; } diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/TxDisplay.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/TxDisplay.java index cbb49f1..f39b4d6 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/TxDisplay.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/swt/TxDisplay.java @@ -52,14 +52,17 @@ import org.eclipse.wb.swt.SWTResourceManager; import swing2swt.layout.BorderLayout; -import com.minres.scviewer.database.ITrStream; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ISignal; +import com.minres.scviewer.database.ISignalChange; +import com.minres.scviewer.database.ITxStream; +import com.minres.scviewer.database.ITx; +import com.minres.scviewer.database.IWaveform; public class TxDisplay implements PropertyChangeListener, ISelectionProvider, MouseListener{ private ListenerList listeners = new ListenerList(); - private ITrStream currentStreamSelection; - private ITransaction currentSelection; + private ITxStream currentStreamSelection; + private ITx currentSelection; private ScrolledComposite valueListScrolled; private ScrolledComposite nameListScrolled; private Composite nameList; @@ -67,10 +70,10 @@ public class TxDisplay implements PropertyChangeListener, ISelectionProvider, Mo private ScrolledComposite trackListScrolled; private Composite trackList; private Composite top; - private ArrayList streams=new ArrayList(); + private ArrayList streams=new ArrayList(); private Composite trackPane; private Ruler ruler; - private HashMap trackMap = new HashMap(); + private HashMap trackMap = new HashMap(); public TxDisplay(Composite parent) { top = new Composite(parent, SWT.NONE); @@ -207,40 +210,63 @@ public class TxDisplay implements PropertyChangeListener, ISelectionProvider, Mo } public void streamListChanged() { - LinkedListtoAdd = new LinkedList(); + LinkedListtoAdd = new LinkedList(); toAdd.addAll(streams); for(Control child:trackList.getChildren()){ - Track track = (Track) child; - Control c = (Control)track.getData("NAMEWIDGET"); - ITrStream stream=(ITrStream) track.getData("STREAM"); + IWaveform stream=(IWaveform) child.getData("WAVEFORM"); if(!streams.contains(stream)){ - track.setVisible(false); - c.setVisible(false); + child.setVisible(false); + ((Control)(child.getData("NAMEWIDGET"))).setVisible(false); + ((Control)(child.getData("VALUEWIDGET"))).setVisible(false); }else{ toAdd.remove(stream); - track.setVisible(true); - c.setVisible(true); + child.setVisible(true); + ((Control)(child.getData("NAMEWIDGET"))).setVisible(true); + ((Control)(child.getData("VALUEWIDGET"))).setVisible(true); } } - for(ITrStream stream: toAdd){ - Track track = new Track(trackList,SWT.NONE); - track.setTransactions(stream.getTransactions()); - track.setData("STREAM", stream); - track.addMouseListener(this); - Point trackSize = track.computeSize(SWT.DEFAULT,SWT.DEFAULT); - - Label trackName = new Label(nameList, SWT.NONE); - trackName.setText(stream.getFullName()); - RowData trackNamelayoutData = new RowData(SWT.DEFAULT, trackSize.y); - trackName.setLayoutData(trackNamelayoutData); - track.setData("NAMEWIDGET", trackName); - - Label trackValue = new Label(valueList, SWT.NONE); - trackValue.setText("-"); - RowData trackValuelayoutData = new RowData(SWT.DEFAULT, trackSize.y); - trackValue.setLayoutData(trackValuelayoutData); - track.setData("VALUEWIDGET", trackValue); - trackMap.put(stream, track); + for(IWaveform wave: toAdd){ + if(wave instanceof ITxStream){ + ITxStream stream = (ITxStream) wave; + Track track = new Track(trackList,SWT.NONE); + track.setTransactions(stream.getTransactions()); + track.setData("WAVEFORM", stream); + track.addMouseListener(this); + Point trackSize = track.computeSize(SWT.DEFAULT,SWT.DEFAULT); + + Label trackName = new Label(nameList, SWT.NONE); + trackName.setText(stream.getFullName()); + RowData trackNamelayoutData = new RowData(SWT.DEFAULT, trackSize.y); + trackName.setLayoutData(trackNamelayoutData); + track.setData("NAMEWIDGET", trackName); + + Label trackValue = new Label(valueList, SWT.NONE); + trackValue.setText("-"); + RowData trackValuelayoutData = new RowData(SWT.DEFAULT, trackSize.y); + trackValue.setLayoutData(trackValuelayoutData); + track.setData("VALUEWIDGET", trackValue); + trackMap.put(stream, track); + } else if(wave instanceof ISignal){ + ISignal isignal = (ISignal) wave; + SignalWidget signal = new SignalWidget(trackList, SWT.NONE); + signal.setTransactions(isignal); + signal.setData("WAVEFORM", isignal); + signal.addMouseListener(this); + Point trackSize = signal.computeSize(SWT.DEFAULT,SWT.DEFAULT); + + Label trackName = new Label(nameList, SWT.NONE); + trackName.setText(isignal.getFullName()); + RowData trackNamelayoutData = new RowData(SWT.DEFAULT, trackSize.y); + trackName.setLayoutData(trackNamelayoutData); + signal.setData("NAMEWIDGET", trackName); + + Label trackValue = new Label(valueList, SWT.NONE); + trackValue.setText("-"); + RowData trackValuelayoutData = new RowData(SWT.DEFAULT, trackSize.y); + trackValue.setLayoutData(trackValuelayoutData); + signal.setData("VALUEWIDGET", trackValue); + trackMap.put(isignal, signal); + } } recalculateNameBounds(); recalculateValueBounds(); @@ -276,9 +302,9 @@ public class TxDisplay implements PropertyChangeListener, ISelectionProvider, Mo @Override public void propertyChange(PropertyChangeEvent pce) { currentSelection=null; - ITrStream str = (ITrStream)pce.getNewValue(); - if(str instanceof ITrStream) - currentStreamSelection=(ITrStream)str; + ITxStream str = (ITxStream)pce.getNewValue(); + if(str instanceof ITxStream) + currentStreamSelection=(ITxStream)str; if(currentStreamSelection!=null) setSelection(getSelection()); else @@ -309,15 +335,15 @@ public class TxDisplay implements PropertyChangeListener, ISelectionProvider, Mo public void setSelection(ISelection selection) { if(selection instanceof IStructuredSelection){ Object sel =((IStructuredSelection)selection).getFirstElement(); - if(sel instanceof ITransaction && currentSelection!=sel){ + if(sel instanceof ITx && currentSelection!=sel){ if(currentSelection!=null){ - ITrStream stream = currentSelection.getGenerator().getStream(); - if(trackMap.containsKey(stream)) trackMap.get(stream).highlightTransaction(null); + ITxStream stream = currentSelection.getGenerator().getStream(); + if(trackMap.containsKey(stream)) trackMap.get(stream).highlight(null); } - currentSelection=(ITransaction) sel; - ITrStream stream = currentSelection.getGenerator().getStream(); + currentSelection=(ITx) sel; + ITxStream stream = currentSelection.getGenerator().getStream(); if(trackMap.containsKey(stream)){ - Transaction trans = trackMap.get(stream).highlightTransaction(currentSelection); + Transaction trans = trackMap.get(stream).highlight(sel); trackListScrolled.showControl(trans); } Object[] list = listeners.getListeners(); @@ -337,7 +363,7 @@ public class TxDisplay implements PropertyChangeListener, ISelectionProvider, Mo if(e.data!=null){ StructuredSelection sel = new StructuredSelection(((Transaction)e.data).getData()); setSelection(sel); - }else{ + }else if(e.widget instanceof Track){ StructuredSelection sel = new StructuredSelection(new Object[]{ ((Track)e.widget).getData()}); setSelection(sel); } @@ -347,26 +373,26 @@ public class TxDisplay implements PropertyChangeListener, ISelectionProvider, Mo public void mouseUp(MouseEvent e) { } - public boolean addStream(ITrStream paramE){ - boolean res = streams.add(paramE); + public boolean addStream(IWaveform stream){ + boolean res = streams.add(stream); streamListChanged(); return res; } - public boolean addAllStreams(ITrStream[] streams) { + public boolean addAllStreams(ITxStream[] streams) { boolean res = this.streams.addAll(Arrays.asList(streams)); streamListChanged(); return res; } - public boolean addAllStreams(Collection paramCollection){ + public boolean addAllStreams(Collection paramCollection){ boolean res = streams.addAll(paramCollection); streamListChanged(); return res; } - public boolean removeStream(ITrStream paramObject){ - boolean res = streams.remove(paramObject); + public boolean removeStream(IWaveform obj){ + boolean res = streams.remove(obj); streamListChanged(); return res; } @@ -377,11 +403,11 @@ public class TxDisplay implements PropertyChangeListener, ISelectionProvider, Mo return res; } - public List getStreamList(){ + public List getStreamList(){ return Collections.unmodifiableList(streams); } - public boolean removeAllStreams(ITrStream[] streams) { + public boolean removeAllStreams(ITxStream[] streams) { boolean res = this.streams.removeAll(Arrays.asList(streams)); streamListChanged(); return res; diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/TxOutlinePage.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/TxOutlinePage.java index ade4fb3..ffbaa0d 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/TxOutlinePage.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/TxOutlinePage.java @@ -35,9 +35,10 @@ import org.eclipse.ui.part.IPageSite; import org.eclipse.ui.views.contentoutline.ContentOutline; import org.eclipse.ui.views.contentoutline.ContentOutlinePage; -import com.minres.scviewer.database.ITrHierNode; -import com.minres.scviewer.database.ITrStream; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.IHierNode; +import com.minres.scviewer.database.ITxStream; +import com.minres.scviewer.database.ITx; +import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.ui.TxEditorPart; import com.minres.scviewer.ui.views.provider.TxDbTreeContentProvider; import com.minres.scviewer.ui.views.provider.TxDbTreeLabelProvider; @@ -124,10 +125,10 @@ public class TxOutlinePage extends ContentOutlinePage implements ISelectionList if(selection instanceof IStructuredSelection){ IStructuredSelection sel = (IStructuredSelection) selection; Object obj = sel.getFirstElement(); - menuMgr.add(makeStreamAction("Add to Wave", ISharedImages.IMG_OBJ_ADD, sel, obj instanceof ITrStream, false)); + menuMgr.add(makeStreamAction("Add to Wave", ISharedImages.IMG_OBJ_ADD, sel, obj instanceof IWaveform, false)); menuMgr.add(makeStreamAction("Add all to Wave", ISharedImages.IMG_OBJ_ADD, sel, true, false)); - menuMgr.add(makeStreamAction("Remove from Wave", ISharedImages.IMG_TOOL_DELETE, sel, obj instanceof ITrStream,true)); - menuMgr.add(makeStreamAction("Remove all from Wave", ISharedImages.IMG_TOOL_DELETE, sel, true, true)); +// menuMgr.add(makeStreamAction("Remove from Wave", ISharedImages.IMG_TOOL_DELETE, sel, obj instanceof IWaveform, true)); +// menuMgr.add(makeStreamAction("Remove all from Wave", ISharedImages.IMG_TOOL_DELETE, sel, true, true)); } } @@ -168,8 +169,8 @@ public class TxOutlinePage extends ContentOutlinePage implements ISelectionList ISelection selection = anEvent.getSelection(); if (!selection.isEmpty()) { Object tmp = ((IStructuredSelection) selection).getFirstElement(); - if (tmp instanceof ITrHierNode) { - fireSelectionChanged(new StructuredSelection((ITrHierNode) tmp)); + if (tmp instanceof IHierNode) { + fireSelectionChanged(new StructuredSelection((IHierNode) tmp)); } } } @@ -179,31 +180,31 @@ public class TxOutlinePage extends ContentOutlinePage implements ISelectionList public void run() { if(selection!=null) for(Object obj :selection.toArray()){ - if(obj instanceof ITrStream){ + if(obj instanceof IWaveform){ if(remove) - editor.removeStreamFromList((ITrStream) obj); + editor.removeStreamFromList((IWaveform) obj); else - editor.addStreamToList((ITrStream) obj); - } else if(obj instanceof ITrHierNode){ - LinkedList queue = new LinkedList(); - LinkedList streams = new LinkedList(); - queue.add((ITrHierNode)obj); + editor.addStreamToList((IWaveform) obj); + } else if(obj instanceof IHierNode){ + LinkedList queue = new LinkedList(); + LinkedList streams = new LinkedList(); + queue.add((IHierNode)obj); while(queue.size()>0){ - ITrHierNode n = queue.poll(); - if(n instanceof ITrStream) streams.add((ITrStream) n); + IHierNode n = queue.poll(); + if(n instanceof IWaveform) streams.add((IWaveform) n); queue.addAll(n.getChildNodes()); } if(remove) - editor.removeStreamsFromList(streams.toArray(new ITrStream[]{})); + editor.removeStreamsFromList(streams.toArray(new IWaveform[]{})); else - editor.addStreamsToList(streams.toArray(new ITrStream[]{})); + editor.addStreamsToList(streams.toArray(new IWaveform[]{})); } } } }; action.setText(text); action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(imgDescriptor)); - if(selection.getFirstElement() instanceof ITrStream && editor.getStreamList().contains(selection.getFirstElement())) + if(selection.getFirstElement() instanceof IWaveform && editor.getStreamList().contains(selection.getFirstElement())) action.setEnabled(false); else action.setEnabled(true); diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeContentProvider.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeContentProvider.java index 85704d0..fc56f10 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeContentProvider.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeContentProvider.java @@ -13,19 +13,19 @@ package com.minres.scviewer.ui.views.provider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; -import com.minres.scviewer.database.ITrDb; -import com.minres.scviewer.database.ITrHierNode; +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.IHierNode; public class TxDbTreeContentProvider implements ITreeContentProvider { - private ITrDb database; + private IWaveformDb database; @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - database=(ITrDb)newInput; + database=(IWaveformDb)newInput; } @Override @@ -35,8 +35,8 @@ public class TxDbTreeContentProvider implements ITreeContentProvider { @Override public Object[] getChildren(Object parentElement) { - if(parentElement instanceof ITrHierNode){ - return ((ITrHierNode)parentElement).getChildNodes().toArray(); + if(parentElement instanceof IHierNode){ + return ((IHierNode)parentElement).getChildNodes().toArray(); } return null; } diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeLabelProvider.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeLabelProvider.java index 91ce68c..83b315a 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeLabelProvider.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeLabelProvider.java @@ -17,9 +17,10 @@ import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.swt.graphics.Image; -import com.minres.scviewer.database.ITrDb; -import com.minres.scviewer.database.ITrHierNode; -import com.minres.scviewer.database.ITrStream; +import com.minres.scviewer.database.ISignal; +import com.minres.scviewer.database.IWaveformDb; +import com.minres.scviewer.database.IHierNode; +import com.minres.scviewer.database.ITxStream; import com.minres.scviewer.ui.TxEditorPlugin; public class TxDbTreeLabelProvider implements ILabelProvider { @@ -28,6 +29,7 @@ public class TxDbTreeLabelProvider implements ILabelProvider { private Image database; private Image stream; + private Image signal; private Image folder; @@ -36,6 +38,7 @@ public class TxDbTreeLabelProvider implements ILabelProvider { database=TxEditorPlugin.createImage("database"); stream=TxEditorPlugin.createImage("stream"); folder=TxEditorPlugin.createImage("folder"); + signal=TxEditorPlugin.createImage("signal"); } @Override @@ -48,6 +51,7 @@ public class TxDbTreeLabelProvider implements ILabelProvider { if(database!=null) database.dispose(); if(stream!=null) stream.dispose(); if(folder!=null) folder.dispose(); + if(signal!=null) signal.dispose(); } @Override @@ -62,11 +66,13 @@ public class TxDbTreeLabelProvider implements ILabelProvider { @Override public Image getImage(Object element) { - if(element instanceof ITrDb){ + if(element instanceof IWaveformDb){ return database; - }else if(element instanceof ITrStream){ + }else if(element instanceof ITxStream){ return stream; - }else if(element instanceof ITrHierNode){ + }else if(element instanceof ISignal){ + return signal; + }else if(element instanceof IHierNode){ return folder; } else return null; @@ -74,7 +80,7 @@ public class TxDbTreeLabelProvider implements ILabelProvider { @Override public String getText(Object element) { - return ((ITrHierNode)element).getName(); + return ((IHierNode)element).getName(); } } diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/AttributeProperty.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/AttributeProperty.java index 073823b..d584071 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/AttributeProperty.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/AttributeProperty.java @@ -44,8 +44,8 @@ import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import com.minres.scviewer.database.AssociationType; -import com.minres.scviewer.database.ITrAttribute; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITxAttribute; +import com.minres.scviewer.database.ITx; public class AttributeProperty extends AbstractPropertySection implements ISelectionProvider { @@ -53,7 +53,7 @@ public class AttributeProperty extends AbstractPropertySection implements ISelec private ListenerList listeners = new ListenerList(); - private ITransaction iTr; + private ITx iTr; private ISelection currentSelection; @@ -104,19 +104,19 @@ public class AttributeProperty extends AbstractPropertySection implements ISelec treeViewer.setAutoExpandLevel(2); treeViewer.setContentProvider(new ITreeContentProvider() { - TreeMap> hier = new TreeMap>(); - HashMap parents = new HashMap(); + TreeMap> hier = new TreeMap>(); + HashMap parents = new HashMap(); @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - if (newInput instanceof ITransaction) { - List attributes = ((ITransaction)newInput).getAttributes(); + if (newInput instanceof ITx) { + List attributes = ((ITx)newInput).getAttributes(); hier.clear(); parents.clear(); String location="Begin"; - List childs=new LinkedList(); - for (ITrAttribute attr : attributes) + List childs=new LinkedList(); + for (ITxAttribute attr : attributes) if (attr != null && attr.getType()==AssociationType.BEGIN){ childs.add(attr); parents.put(attr, location); @@ -124,8 +124,8 @@ public class AttributeProperty extends AbstractPropertySection implements ISelec if(childs.size()>0) hier.put(location, childs); location="Transaction"; - childs=new LinkedList(); - for (ITrAttribute attr : attributes) + childs=new LinkedList(); + for (ITxAttribute attr : attributes) if (attr != null && attr.getType()==AssociationType.RECORD){ childs.add(attr); parents.put(attr, location); @@ -133,8 +133,8 @@ public class AttributeProperty extends AbstractPropertySection implements ISelec if(childs.size()>0) hier.put(location, childs); location="End"; - childs=new LinkedList(); - for (ITrAttribute attr : attributes) + childs=new LinkedList(); + for (ITxAttribute attr : attributes) if (attr != null && attr.getType()==AssociationType.END){ childs.add(attr); parents.put(attr, location); @@ -154,7 +154,7 @@ public class AttributeProperty extends AbstractPropertySection implements ISelec @Override public Object getParent(Object element) { - if (element instanceof ITrAttribute) + if (element instanceof ITxAttribute) return parents.get(element); else return null; @@ -192,8 +192,8 @@ public class AttributeProperty extends AbstractPropertySection implements ISelec public String getColumnText(Object element, int columnIndex) { if (columnIndex == 0 && element instanceof String) return element.toString(); - else if(element instanceof ITrAttribute){ - ITrAttribute attr = (ITrAttribute)element; + else if(element instanceof ITxAttribute){ + ITxAttribute attr = (ITxAttribute)element; if (columnIndex == 1 ) return attr.getName(); else if (columnIndex == 2 ) @@ -235,8 +235,8 @@ public class AttributeProperty extends AbstractPropertySection implements ISelec currentSelection = null; Assert.isTrue(selection instanceof IStructuredSelection); Object input = ((IStructuredSelection) selection).getFirstElement(); - Assert.isTrue(input instanceof ITransaction); - iTr = (ITransaction) input; + Assert.isTrue(input instanceof ITx); + iTr = (ITx) input; } public void refresh() { diff --git a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/RelatedProperty.java b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/RelatedProperty.java index 44a75e9..d2364e3 100644 --- a/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/RelatedProperty.java +++ b/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/sections/RelatedProperty.java @@ -49,8 +49,8 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; -import com.minres.scviewer.database.ITrRelation; -import com.minres.scviewer.database.ITransaction; +import com.minres.scviewer.database.ITxRelation; +import com.minres.scviewer.database.ITx; import com.minres.scviewer.database.RelationType; public class RelatedProperty extends AbstractPropertySection implements ISelectionProvider, ISelectionChangedListener { @@ -59,7 +59,7 @@ public class RelatedProperty extends AbstractPropertySection implements ISelecti private ListenerList listeners = new ListenerList(); - private ITransaction iTr; + private ITx iTr; private ISelection currentSelection; @@ -105,26 +105,26 @@ public class RelatedProperty extends AbstractPropertySection implements ISelecti treeViewer.setAutoExpandLevel(2); treeViewer.setContentProvider(new ITreeContentProvider() { - TreeMap> hier = new TreeMap>(); - HashMap parents = new HashMap(); + TreeMap> hier = new TreeMap>(); + HashMap parents = new HashMap(); @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - if (newInput instanceof ITransaction) { + if (newInput instanceof ITx) { hier.clear(); parents.clear(); String relName = "incoming"; - Collection relSet = ((ITransaction)newInput).getIncomingRelations(); + Collection relSet = ((ITx)newInput).getIncomingRelations(); if (relSet != null && relSet.size() > 0) { hier.put(relName, relSet); - for (ITrRelation rel : relSet) + for (ITxRelation rel : relSet) parents.put(rel, relName); } relName = "outgoing"; - relSet = ((ITransaction)newInput).getOutgoingRelations(); + relSet = ((ITx)newInput).getOutgoingRelations(); if (relSet != null && relSet.size() > 0) { hier.put(relName, relSet); - for (ITrRelation rel : relSet) + for (ITxRelation rel : relSet) parents.put(rel, relName); } } @@ -141,7 +141,7 @@ public class RelatedProperty extends AbstractPropertySection implements ISelecti @Override public Object getParent(Object element) { - if (element instanceof ITransaction) + if (element instanceof ITx) return parents.get(element); else return null; @@ -179,14 +179,14 @@ public class RelatedProperty extends AbstractPropertySection implements ISelecti public String getColumnText(Object element, int columnIndex) { if (columnIndex == 0 && element instanceof String) return element.toString(); - else if (columnIndex == 1 && element instanceof ITrRelation) - return ((ITrRelation) element).getRelationType().getName(); - else if (columnIndex == 2 && element instanceof ITrRelation){ - ITrRelation rel = (ITrRelation) element; + else if (columnIndex == 1 && element instanceof ITxRelation) + return ((ITxRelation) element).getRelationType().getName(); + else if (columnIndex == 2 && element instanceof ITxRelation){ + ITxRelation rel = (ITxRelation) element; if(rel.getTarget()==iTr) - return ((ITrRelation) element).getSource().getId().toString(); + return ((ITxRelation) element).getSource().getId().toString(); else - return ((ITrRelation) element).getTarget().getId().toString(); + return ((ITxRelation) element).getTarget().getId().toString(); } else return null; @@ -217,13 +217,13 @@ public class RelatedProperty extends AbstractPropertySection implements ISelecti // } } - private Action makeTransactionAction(final Object obj, final ITransaction transaction) { + private Action makeTransactionAction(final Object obj, final ITx transaction) { Action action = new Action() { public void run() { - if(obj instanceof ITrRelation){ + if(obj instanceof ITxRelation){ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - ITransaction targetTransaction = ((ITrRelation)obj).getSource()==transaction? - ((ITrRelation)obj).getTarget():((ITrRelation)obj).getSource(); + ITx targetTransaction = ((ITxRelation)obj).getSource()==transaction? + ((ITxRelation)obj).getTarget():((ITxRelation)obj).getSource(); for(IEditorReference editorRef: page.getEditorReferences()){ IWorkbenchPart part =editorRef.getPart(false); if(editorRef.getPage().isPartVisible(part)){ @@ -245,8 +245,8 @@ public class RelatedProperty extends AbstractPropertySection implements ISelecti currentSelection = null; Assert.isTrue(selection instanceof IStructuredSelection); Object input = ((IStructuredSelection) selection).getFirstElement(); - Assert.isTrue(input instanceof ITransaction); - iTr = (ITransaction) input; + Assert.isTrue(input instanceof ITx); + iTr = (ITx) input; } public void refresh() { diff --git a/scv_tr_sqlite/src/scv_tr_recording_example.cpp b/scv_tr_sqlite/src/scv_tr_recording_example.cpp index 97799f5..1e26278 100644 --- a/scv_tr_sqlite/src/scv_tr_recording_example.cpp +++ b/scv_tr_sqlite/src/scv_tr_recording_example.cpp @@ -59,8 +59,19 @@ public: clk("clk"), rw("rw"), addr_req("addr_req"), addr_ack("addr_ack"), bus_addr("bus_addr"), data_rdy("data_rdy"), bus_data( "bus_data") { } + virtual void trace( sc_trace_file* tf ) const; }; +void pipelined_bus_ports::trace( sc_trace_file* tf ) const { + sc_trace(tf, clk, clk.name()); + sc_trace(tf, rw, rw.name()); + sc_trace(tf, addr_req, addr_req.name()); + sc_trace(tf, addr_ack, addr_ack.name()); + sc_trace(tf, bus_addr, bus_addr.name()); + sc_trace(tf, data_rdy, data_rdy.name()); + sc_trace(tf, bus_data, bus_data.name()); +} + class rw_pipelined_transactor: public rw_task_if, public pipelined_bus_ports { fifo_mutex addr_phase;fifo_mutex data_phase; @@ -325,7 +336,7 @@ int sc_main(int argc, char *argv[]) { #endif scv_tr_db db(fileName); scv_tr_db::set_default_db(&db); - + sc_trace_file* tf = sc_create_vcd_trace_file("my_db"); // create signals sc_clock clk("clk", 20.0, SC_NS, 0.5, 0.0, SC_NS, true); sc_signal rw; @@ -350,6 +361,7 @@ int sc_main(int argc, char *argv[]) { tr.bus_addr(bus_addr); tr.data_rdy(data_rdy); tr.bus_data(bus_data); + tr.trace(tf); duv.clk(clk); duv.rw(rw); @@ -358,13 +370,14 @@ int sc_main(int argc, char *argv[]) { duv.bus_addr(bus_addr); duv.data_rdy(data_rdy); duv.bus_data(bus_data); + duv.trace(tf); // Accellera SystemC >=2.2 got picky about multiple drivers. // Disable check for bus simulation. sc_report_handler::set_actions(SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER_, SC_DO_NOTHING); // run the simulation sc_start(1.0, SC_MS); - + sc_close_vcd_trace_file(tf); return 0; }