diff --git a/features/com.minres.scviewer.database.feature/pom.xml b/features/com.minres.scviewer.database.feature/pom.xml
index 5b88e3b..0f58de8 100644
--- a/features/com.minres.scviewer.database.feature/pom.xml
+++ b/features/com.minres.scviewer.database.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
3.0.0-SNAPSHOT
diff --git a/features/com.minres.scviewer.e4.feature/pom.xml b/features/com.minres.scviewer.e4.feature/pom.xml
index c574dac..fc19d09 100644
--- a/features/com.minres.scviewer.e4.feature/pom.xml
+++ b/features/com.minres.scviewer.e4.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
1.1.0-SNAPSHOT
diff --git a/features/com.minres.scviewer.e4.platform.feature/pom.xml b/features/com.minres.scviewer.e4.platform.feature/pom.xml
index fd4d313..cb14643 100644
--- a/features/com.minres.scviewer.e4.platform.feature/pom.xml
+++ b/features/com.minres.scviewer.e4.platform.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
1.0.0-SNAPSHOT
diff --git a/features/com.minres.scviewer.feature/pom.xml b/features/com.minres.scviewer.feature/pom.xml
index 8a5f5f7..218d89b 100644
--- a/features/com.minres.scviewer.feature/pom.xml
+++ b/features/com.minres.scviewer.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
1.1.0-SNAPSHOT
diff --git a/features/com.minres.scviewer.ui.feature/pom.xml b/features/com.minres.scviewer.ui.feature/pom.xml
index a494169..3119e8b 100644
--- a/features/com.minres.scviewer.ui.feature/pom.xml
+++ b/features/com.minres.scviewer.ui.feature/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
1.1.0-SNAPSHOT
diff --git a/plugins/com.minres.scviewer.database.sqlite/pom.xml b/plugins/com.minres.scviewer.database.sqlite/pom.xml
index 051a506..8b9b387 100644
--- a/plugins/com.minres.scviewer.database.sqlite/pom.xml
+++ b/plugins/com.minres.scviewer.database.sqlite/pom.xml
@@ -4,7 +4,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java
index cf8ab93..86a2ff6 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java
@@ -39,14 +39,14 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
private List usedRelationsList;
- public AbstractTxStream(IDatabase database, String name, long streamId) {
+ protected AbstractTxStream(IDatabase database, String name, long streamId) {
super(name);
this.database=database;
this.streamId=streamId;
}
@Override
- public int getWidth() {
+ public int getRowCount() {
if(maxConcurrency==null){
StringBuilder sb = new StringBuilder();
sb.append("SELECT MAX(concurrencyLevel) as concurrencyLevel FROM ScvTx where stream=");
@@ -126,4 +126,11 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
return WaveformType.TRANSACTION;
}
+ /**
+ * Calculate concurrency.
+ */
+ public void calculateConcurrency() {
+ }
+
+
}
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java
index e9e9a21..b7bb167 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/SQLiteDbLoader.java
@@ -99,7 +99,6 @@ public class SQLiteDbLoader implements IWaveformDbLoader {
@Override
public void load(IWaveformDb db, File file) throws InputFormatException {
- dispose();
database=new SQLiteDatabase(file.getAbsolutePath(), db);
database.setData("TIMERESOLUTION", 1L);
SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>(ScvSimProps.class, database);
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java
index cd16751..8b4aae3 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/Tx.java
@@ -28,7 +28,6 @@ import com.minres.scviewer.database.sqlite.tables.ScvTxEvent;
import com.minres.scviewer.database.sqlite.tables.ScvTxRelation;
import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxAttribute;
-import com.minres.scviewer.database.tx.ITxGenerator;
import com.minres.scviewer.database.tx.ITxRelation;
public class Tx implements ITx {
@@ -61,12 +60,11 @@ public class Tx implements ITx {
}
@Override
- public ITxGenerator getGenerator() {
+ public IWaveform getGenerator() {
return trGenerator;
}
- @Override
- public int getConcurrencyIndex() {
+ int getConcurrencyIndex() {
return scvTx.getConcurrencyLevel();
}
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java
index c78d9b8..b52bc41 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxEvent.java
@@ -56,4 +56,10 @@ public class TxEvent implements ITxEvent {
public WaveformType getType() {
return WaveformType.TRANSACTION;
}
+
+ @Override
+ public int getRowIndex() {
+ return ((Tx)tx).getConcurrencyIndex();
+ }
+
}
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java
index bc9d707..1bcaca9 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxGenerator.java
@@ -22,9 +22,8 @@ import com.minres.scviewer.database.sqlite.db.SQLiteDatabaseSelectHandler;
import com.minres.scviewer.database.sqlite.tables.ScvGenerator;
import com.minres.scviewer.database.sqlite.tables.ScvTx;
import com.minres.scviewer.database.tx.ITx;
-import com.minres.scviewer.database.tx.ITxGenerator;
-public class TxGenerator extends AbstractTxStream implements ITxGenerator {
+public class TxGenerator extends AbstractTxStream {
private TxStream stream;
@@ -44,11 +43,6 @@ public class TxGenerator extends AbstractTxStream implements ITxGenerator {
return (long) scvGenerator.getId();
}
- @Override
- public IWaveform getStream() {
- return stream;
- }
-
@Override
public String getName() {
return scvGenerator.getName();
diff --git a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java
index db93cee..57f2ab4 100644
--- a/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java
+++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/TxStream.java
@@ -26,7 +26,6 @@ import com.minres.scviewer.database.sqlite.tables.ScvGenerator;
import com.minres.scviewer.database.sqlite.tables.ScvStream;
import com.minres.scviewer.database.sqlite.tables.ScvTx;
import com.minres.scviewer.database.tx.ITx;
-import com.minres.scviewer.database.tx.ITxGenerator;
public class TxStream extends AbstractTxStream {
@@ -54,7 +53,7 @@ public class TxStream extends AbstractTxStream {
return (long) scvStream.getId();
}
- public List getGenerators() {
+ public List getGenerators() {
if(generators==null){
SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>(
ScvGenerator.class, database, "stream="+scvStream.getId());
diff --git a/plugins/com.minres.scviewer.database.text/pom.xml b/plugins/com.minres.scviewer.database.text/pom.xml
index 51da48c..74d6a56 100644
--- a/plugins/com.minres.scviewer.database.text/pom.xml
+++ b/plugins/com.minres.scviewer.database.text/pom.xml
@@ -6,7 +6,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java
index 425e607..33a4a2a 100644
--- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java
+++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java
@@ -13,15 +13,16 @@ package com.minres.scviewer.database.text;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.TreeMap;
-import com.minres.scviewer.database.EventKind;
import com.minres.scviewer.database.HierNode;
import com.minres.scviewer.database.IEvent;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.WaveformType;
+import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxEvent;
/**
@@ -38,8 +39,8 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
/** The events. */
TreeMap events = new TreeMap<>();
- /** The concurrency calculated. */
- boolean concurrencyCalculated = false;
+ /** The max concurrency. */
+ private int rowCount = -1;
/**
* Instantiates a new abstract tx stream.
@@ -48,7 +49,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
* @param id the id
* @param name the name
*/
- public AbstractTxStream(TextDbLoader loader, Long id, String name) {
+ protected AbstractTxStream(TextDbLoader loader, Long id, String name) {
super(name);
this.loader = loader;
this.id = id;
@@ -77,8 +78,6 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
*/
@Override
public NavigableMap getEvents() {
- if (!concurrencyCalculated)
- calculateConcurrency();
return events;
}
@@ -90,8 +89,6 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
*/
@Override
public IEvent[] getEventsAtTime(Long time) {
- if (!concurrencyCalculated)
- calculateConcurrency();
return events.get(time);
}
@@ -103,8 +100,6 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
*/
@Override
public IEvent[] getEventsBeforeTime(Long time) {
- if (!concurrencyCalculated)
- calculateConcurrency();
Entry e = events.floorEntry(time);
if (e == null)
return new IEvent[] {};
@@ -132,28 +127,59 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
return id;
}
+ /**
+ * Gets the width.
+ *
+ * @return the width
+ */
+ @Override
+ public int getRowCount() {
+ if (rowCount<0)
+ calculateConcurrency();
+ return rowCount;
+ }
+
/**
* Calculate concurrency.
*/
- synchronized void calculateConcurrency() {
- if (concurrencyCalculated)
+ void calculateConcurrency() {
+ if (rowCount>=0)
return;
- ArrayList rowendtime = new ArrayList<>();
- events.entrySet().stream().forEach(entry -> {
- IEvent[] values = entry.getValue();
- Arrays.asList(values).stream().filter(e -> e.getKind() == EventKind.BEGIN).forEach(evt -> {
- Tx tx = (Tx) ((TxEvent) evt).getTransaction();
+ ArrayList rowEndTime = new ArrayList<>();
+ HashMap rowByTxId = new HashMap<>();
+ for(Entry entry: events.entrySet()) {
+ for(IEvent evt:entry.getValue()) {
+ TxEvent txEvt = (TxEvent) evt;
+ ITx tx = txEvt.getTransaction();
int rowIdx = 0;
- for (; rowIdx < rowendtime.size() && rowendtime.get(rowIdx) > tx.getBeginTime(); rowIdx++)
- ;
- if (rowendtime.size() <= rowIdx)
- rowendtime.add(tx.getEndTime());
- else
- rowendtime.set(rowIdx, tx.getEndTime());
- tx.setConcurrencyIndex(rowIdx);
- });
- });
- concurrencyCalculated = true;
+ switch(evt.getKind()) {
+ case END:
+ Long txId = txEvt.getTransaction().getId();
+ txEvt.setConcurrencyIndex(rowByTxId.get(txId));
+ rowByTxId.remove(txId);
+ break;
+ case SINGLE:
+ for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
+ if (rowEndTime.size() <= rowIdx)
+ rowEndTime.add(tx.getEndTime());
+ else
+ rowEndTime.set(rowIdx, tx.getEndTime());
+ ((TxEvent) evt).setConcurrencyIndex(rowIdx);
+ break;
+ case BEGIN:
+ for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
+ if (rowEndTime.size() <= rowIdx)
+ rowEndTime.add(tx.getEndTime());
+ else
+ rowEndTime.set(rowIdx, tx.getEndTime());
+ ((TxEvent) evt).setConcurrencyIndex(rowIdx);
+ rowByTxId.put(tx.getId(), rowIdx);
+ break;
+ }
+ }
+ }
+ rowCount=rowEndTime.size()>0?rowEndTime.size():1;
+ getChildNodes().parallelStream().forEach(c -> ((TxGenerator)c).calculateConcurrency());
}
}
diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java
index 63621df..0ec1809 100644
--- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java
+++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.java
@@ -28,14 +28,13 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;
import org.eclipse.collections.impl.map.mutable.UnifiedMap;
import org.mapdb.DB;
-import org.mapdb.DB.HashMapMaker;
-import org.mapdb.DB.TreeMapSink;
import org.mapdb.DBMaker;
import org.mapdb.HTreeMap;
import org.mapdb.Serializer;
@@ -106,6 +105,26 @@ public class TextDbLoader implements IWaveformDbLoader {
/** The Constant x. */
static final byte[] x = "scv_tr_stream".getBytes();
+ /**
+ * Adds the property change listener.
+ *
+ * @param l the l
+ */
+ @Override
+ public void addPropertyChangeListener(PropertyChangeListener l) {
+ pcs.addPropertyChangeListener(l);
+ }
+
+ /**
+ * Removes the property change listener.
+ *
+ * @param l the l
+ */
+ @Override
+ public void removePropertyChangeListener(PropertyChangeListener l) {
+ pcs.removePropertyChangeListener(l);
+ }
+
/**
* Gets the max time.
*
@@ -116,8 +135,29 @@ public class TextDbLoader implements IWaveformDbLoader {
return maxTime;
}
+ /**
+ * Gets the transaction.
+ *
+ * @param txId the tx id
+ * @return the transaction
+ */
+ public ITx getTransaction(long txId) {
+ if (txCache.containsKey(txId))
+ return txCache.get(txId);
+ if(transactions.containsKey(txId)) {
+ Tx tx = new Tx(this, transactions.get(txId));
+ txCache.put(txId, tx);
+ return tx;
+ } else {
+ throw new IllegalArgumentException();
+ }
+ }
+
public ScvTx getScvTx(long id) {
- return transactions.get(id);
+ if(transactions.containsKey(id))
+ return transactions.get(id);
+ else
+ throw new IllegalArgumentException();
}
/**
@@ -130,6 +170,15 @@ public class TextDbLoader implements IWaveformDbLoader {
return new ArrayList<>(txStreams.values());
}
+ /**
+ * Gets the all relation types.
+ *
+ * @return the all relation types
+ */
+ public Collection getAllRelationTypes() {
+ return relationTypes.values();
+ }
+
/**
* Can load.
*
@@ -156,6 +205,22 @@ public class TextDbLoader implements IWaveformDbLoader {
return false;
}
+ /**
+ * Checks if is gzipped.
+ *
+ * @param f the f
+ * @return true, if is gzipped
+ */
+ private static boolean isGzipped(File f) {
+ try (InputStream is = new FileInputStream(f)) {
+ byte[] signature = new byte[2];
+ int nread = is.read(signature); // read the gzip signature
+ return nread == 2 && signature[0] == (byte) 0x1f && signature[1] == (byte) 0x8b;
+ } catch (IOException e) {
+ return false;
+ }
+ }
+
/**
* Load.
*
@@ -188,28 +253,14 @@ public class TextDbLoader implements IWaveformDbLoader {
TextDbParser parser = new TextDbParser(this);
try {
-// parser.txSink = mapDb.treeMap("transactions", Serializer.LONG, Serializer.JAVA).createFromSink();
parser.txSink = mapDb.hashMap("transactions", Serializer.LONG, Serializer.JAVA).create();
parser.parseInput(gzipped ? new GZIPInputStream(new FileInputStream(file)) : new FileInputStream(file));
-// transactions = parser.txSink.create();
transactions = parser.txSink;
} catch (IllegalArgumentException | ArrayIndexOutOfBoundsException e) {
} catch (Exception e) {
throw new InputFormatException(e.toString());
}
- for (TxStream stream : txStreams.values()) {
- Thread t = new Thread() {
- @Override
- public void run() {
- try {
- stream.calculateConcurrency();
- } catch (Exception e) {
- /* don't let exceptions bubble up */ }
- }
- };
- threads.add(t);
- t.start();
- }
+ txStreams.values().parallelStream().forEach(TxStream::calculateConcurrency);
}
/**
@@ -231,31 +282,6 @@ public class TextDbLoader implements IWaveformDbLoader {
}
}
- /**
- * Checks if is gzipped.
- *
- * @param f the f
- * @return true, if is gzipped
- */
- private static boolean isGzipped(File f) {
- try (InputStream is = new FileInputStream(f)) {
- byte[] signature = new byte[2];
- int nread = is.read(signature); // read the gzip signature
- return nread == 2 && signature[0] == (byte) 0x1f && signature[1] == (byte) 0x8b;
- } catch (IOException e) {
- return false;
- }
- }
-
- /**
- * Gets the all relation types.
- *
- * @return the all relation types
- */
- public Collection getAllRelationTypes() {
- return relationTypes.values();
- }
-
/**
* The Class TextDbParser.
*/
@@ -321,6 +347,11 @@ public class TextDbLoader implements IWaveformDbLoader {
}
if (curLine != null)
parseLine(curLine, nextLine);
+ for(Entry e: transactionById.entrySet()) {
+ ScvTx scvTx = e.getValue();
+ scvTx.endTime=loader.maxTime;
+ txSink.put(e.getKey(), scvTx);
+ }
}
/**
@@ -368,8 +399,6 @@ public class TextDbLoader implements IWaveformDbLoader {
ScvTx scvTx = new ScvTx(id, gen.stream.getId(), genId,
Long.parseLong(tokens[3]) * stringToScale(tokens[4]));
loader.maxTime = loader.maxTime > scvTx.beginTime ? loader.maxTime : scvTx.beginTime;
- TxStream stream = loader.txStreams.get(gen.stream.getId());
- stream.setConcurrency(stream.getConcurrency() + 1);
if (nextLine != null && nextLine.charAt(0) == 'a') {
int idx = 0;
while (nextLine != null && nextLine.charAt(0) == 'a') {
@@ -391,18 +420,14 @@ public class TextDbLoader implements IWaveformDbLoader {
TxGenerator gen = loader.txGenerators.get(scvTx.generatorId);
TxStream stream = loader.txStreams.get(gen.stream.getId());
if (scvTx.beginTime == scvTx.endTime) {
- TxEvent evt = new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime);
- stream.addEvent(evt);
- gen.addEvent(evt);
+ stream.addEvent(new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime));
+ gen.addEvent(new TxEvent(loader, EventKind.SINGLE, id, scvTx.beginTime));
} else {
- TxEvent begEvt = new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime);
- stream.addEvent(begEvt);
- gen.addEvent(begEvt);
- TxEvent endEvt = new TxEvent(loader, EventKind.END, id, scvTx.endTime);
- stream.addEvent(endEvt);
- gen.addEvent(endEvt);
+ stream.addEvent(new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime));
+ gen.addEvent(new TxEvent(loader, EventKind.BEGIN, id, scvTx.beginTime));
+ stream.addEvent(new TxEvent(loader, EventKind.END, id, scvTx.endTime));
+ gen.addEvent(new TxEvent(loader, EventKind.END, id, scvTx.endTime));
}
- stream.setConcurrency(stream.getConcurrency() - 1);
if (nextLine != null && nextLine.charAt(0) == 'a') {
int idx = 0;
while (nextLine != null && nextLine.charAt(0) == 'a') {
@@ -521,38 +546,4 @@ public class TextDbLoader implements IWaveformDbLoader {
}
- /**
- * Gets the transaction.
- *
- * @param txId the tx id
- * @return the transaction
- */
- public ITx getTransaction(long txId) {
- if (txCache.containsKey(txId))
- return txCache.get(txId);
- Tx tx = new Tx(this, txId);
- txCache.put(txId, tx);
- return tx;
- }
-
- /**
- * Adds the property change listener.
- *
- * @param l the l
- */
- @Override
- public void addPropertyChangeListener(PropertyChangeListener l) {
- pcs.addPropertyChangeListener(l);
- }
-
- /**
- * Removes the property change listener.
- *
- * @param l the l
- */
- @Override
- public void removePropertyChangeListener(PropertyChangeListener l) {
- pcs.removePropertyChangeListener(l);
- }
-
}
diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java
index 10af42a..9b1b9d6 100644
--- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java
+++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/Tx.java
@@ -19,7 +19,6 @@ import java.util.stream.Collectors;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.tx.ITx;
import com.minres.scviewer.database.tx.ITxAttribute;
-import com.minres.scviewer.database.tx.ITxGenerator;
import com.minres.scviewer.database.tx.ITxRelation;
/**
@@ -29,9 +28,15 @@ class Tx implements ITx {
/** The loader. */
private final TextDbLoader loader;
+
+ private ScvTx scvTx =null;
/** The id. */
- private long id;
+ private final long id;
+
+ private final long generatorId;
+
+ private final long streamId;
/** The begin time. */
long beginTime = -1;
@@ -39,9 +44,6 @@ class Tx implements ITx {
/** The end time. */
long endTime = -1;
- /** The concurrency index. */
- private int concurrencyIndex;
-
/**
* Instantiates a new tx.
*
@@ -51,6 +53,10 @@ class Tx implements ITx {
public Tx(TextDbLoader loader, ScvTx scvTx) {
this.loader = loader;
id = scvTx.id;
+ generatorId=scvTx.generatorId;
+ streamId=scvTx.streamId;
+ beginTime=scvTx.beginTime;
+ endTime=scvTx.endTime;
}
/**
@@ -59,9 +65,11 @@ class Tx implements ITx {
* @param loader the loader
* @param txId the tx id
*/
- public Tx(TextDbLoader loader, long txId) {
+ public Tx(TextDbLoader loader, long id, long generatorId, long streamId) {
this.loader = loader;
- id = txId;
+ this.id = id;
+ this.generatorId=generatorId;
+ this.streamId = streamId;
}
/**
@@ -113,7 +121,7 @@ class Tx implements ITx {
return true;
if (obj == null || getClass() != obj.getClass())
return false;
- return this.loader.getScvTx(id).equals(((Tx) obj).loader.getScvTx(id));
+ return this.getScvTx().equals(((Tx) obj).getScvTx());
}
/**
@@ -123,7 +131,7 @@ class Tx implements ITx {
*/
@Override
public int hashCode() {
- return loader.getScvTx(id).hashCode();
+ return getScvTx().hashCode();
}
/**
@@ -143,7 +151,7 @@ class Tx implements ITx {
*/
@Override
public Long getId() {
- return loader.getScvTx(id).id;
+ return getScvTx().id;
}
/**
@@ -153,7 +161,7 @@ class Tx implements ITx {
*/
@Override
public IWaveform getStream() {
- return loader.txStreams.get(loader.getScvTx(id).streamId);
+ return loader.txStreams.get(streamId);
}
/**
@@ -162,8 +170,8 @@ class Tx implements ITx {
* @return the generator
*/
@Override
- public ITxGenerator getGenerator() {
- return loader.txGenerators.get(loader.getScvTx(id).generatorId);
+ public IWaveform getGenerator() {
+ return loader.txGenerators.get(generatorId);
}
/**
@@ -173,8 +181,11 @@ class Tx implements ITx {
*/
@Override
public Long getBeginTime() {
- if (beginTime < 0)
- beginTime = loader.getScvTx(id).beginTime;
+ if (beginTime < 0) {
+ ScvTx tx = scvTx==null?loader.getScvTx(id):getScvTx();
+ beginTime = tx.beginTime;
+ endTime = tx.endTime;
+ }
return beginTime;
}
@@ -185,8 +196,11 @@ class Tx implements ITx {
*/
@Override
public Long getEndTime() {
- if (endTime < 0)
- endTime = loader.getScvTx(id).endTime;
+ if (endTime < 0) {
+ ScvTx tx = scvTx==null?loader.getScvTx(id):getScvTx();
+ beginTime = tx.beginTime;
+ endTime = tx.endTime;
+ }
return endTime;
}
@@ -196,26 +210,7 @@ class Tx implements ITx {
* @param time the new end time
*/
void setEndTime(Long time) {
- loader.getScvTx(id).endTime = time;
- }
-
- /**
- * Gets the concurrency index.
- *
- * @return the concurrency index
- */
- @Override
- public int getConcurrencyIndex() {
- return concurrencyIndex;
- }
-
- /**
- * Sets the concurrency index.
- *
- * @param idx the new concurrency index
- */
- void setConcurrencyIndex(int idx) {
- concurrencyIndex = idx;
+ getScvTx().endTime = time;
}
/**
@@ -225,7 +220,12 @@ class Tx implements ITx {
*/
@Override
public List getAttributes() {
- return loader.getScvTx(id).attributes;
+ return getScvTx().attributes;
}
+ private ScvTx getScvTx() {
+ if(scvTx==null)
+ scvTx=loader.getScvTx(id);
+ return scvTx;
+ }
}
diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java
index df76234..5758e8e 100644
--- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java
+++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxEvent.java
@@ -32,6 +32,7 @@ class TxEvent implements ITxEvent {
/** The time. */
final long time;
+ private int concurrencyIdx=-1;
/**
* Instantiates a new tx event.
*
@@ -107,4 +108,13 @@ class TxEvent implements ITxEvent {
public ITx getTransaction() {
return loader.getTransaction(transaction);
}
+
+ @Override
+ public int getRowIndex() {
+ return concurrencyIdx;
+ }
+
+ public void setConcurrencyIndex(int idx) {
+ concurrencyIdx=idx;
+ }
}
diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java
index d62feb1..a6597d1 100644
--- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java
+++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxGenerator.java
@@ -15,12 +15,11 @@ import java.util.ArrayList;
import java.util.List;
import com.minres.scviewer.database.IWaveform;
-import com.minres.scviewer.database.tx.ITxGenerator;
/**
* The Class TxGenerator.
*/
-class TxGenerator extends AbstractTxStream implements ITxGenerator {
+class TxGenerator extends AbstractTxStream {
/** The stream. */
TxStream stream;
@@ -45,16 +44,6 @@ class TxGenerator extends AbstractTxStream implements ITxGenerator {
stream.addChild(this);
}
- /**
- * Gets the stream.
- *
- * @return the stream
- */
- @Override
- public IWaveform getStream() {
- return stream;
- }
-
/**
* Checks if is same.
*
@@ -94,13 +83,4 @@ class TxGenerator extends AbstractTxStream implements ITxGenerator {
return stream.getKind();
}
- /**
- * Gets the width.
- *
- * @return the width
- */
- @Override
- public int getWidth() {
- return stream.getWidth();
- }
}
diff --git a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java
index 4a346cd..47e8112 100644
--- a/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java
+++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TxStream.java
@@ -55,40 +55,4 @@ class TxStream extends AbstractTxStream {
return kind;
}
- /** The max concurrency. */
- private int maxConcurrency = 0;
-
- /** The concurrency. */
- private int concurrency = 0;
-
- /**
- * Sets the concurrency.
- *
- * @param concurrency the new concurrency
- */
- void setConcurrency(int concurrency) {
- this.concurrency = concurrency;
- if (concurrency > maxConcurrency)
- maxConcurrency = concurrency;
- }
-
- /**
- * Gets the concurrency.
- *
- * @return the concurrency
- */
- int getConcurrency() {
- return this.concurrency;
- }
-
- /**
- * Gets the width.
- *
- * @return the width
- */
- @Override
- public int getWidth() {
- return maxConcurrency;
- }
-
}
diff --git a/plugins/com.minres.scviewer.database.ui.swt/pom.xml b/plugins/com.minres.scviewer.database.ui.swt/pom.xml
index 33b5eed..e398c83 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/pom.xml
+++ b/plugins/com.minres.scviewer.database.ui.swt/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
3.0.0-SNAPSHOT
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java
index dfeeb16..e5b6cc7 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java
@@ -10,9 +10,11 @@
*******************************************************************************/
package com.minres.scviewer.database.ui.swt.internal;
+import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
+import java.util.Optional;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
@@ -21,8 +23,12 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
+import com.minres.scviewer.database.IEvent;
+import com.minres.scviewer.database.IHierNode;
+import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.RelationType;
import com.minres.scviewer.database.tx.ITx;
+import com.minres.scviewer.database.tx.ITxEvent;
import com.minres.scviewer.database.tx.ITxRelation;
import com.minres.scviewer.database.ui.WaveformColors;
@@ -78,6 +84,12 @@ public class ArrowPainter implements IPainter {
}
}
+ private int getConcurrencyIndex(ITx tx) {
+ IEvent[] eventList = tx.getStream().getEvents().floorEntry(tx.getBeginTime()).getValue();
+ Optional res = Arrays.stream(eventList).map(e -> ((ITxEvent)e).getRowIndex()).findFirst();
+ return res.isPresent()? res.get():0;
+ }
+
protected void calculateGeometries() {
deferUpdate = false;
iRect.clear();
@@ -88,9 +100,9 @@ public class ArrowPainter implements IPainter {
deferUpdate = true;
return;
}
- int laneHeight = painter.getHeight() / tx.getStream().getWidth();
+ int laneHeight = painter.getHeight() / tx.getStream().getRowCount();
txRectangle = new Rectangle((int) (tx.getBeginTime() / scaleFactor),
- waveCanvas.rulerHeight + painter.getVerticalOffset() + laneHeight * tx.getConcurrencyIndex(),
+ waveCanvas.rulerHeight + painter.getVerticalOffset() + laneHeight * getConcurrencyIndex(tx),
(int) ((tx.getEndTime() - tx.getBeginTime()) / scaleFactor), laneHeight);
deriveGeom(tx.getIncomingRelations(), iRect, false);
deriveGeom(tx.getOutgoingRelations(), oRect, true);
@@ -99,19 +111,48 @@ public class ArrowPainter implements IPainter {
protected void deriveGeom(Collection relations, List res, boolean useTarget) {
for (ITxRelation iTxRelation : relations) {
ITx otherTx = useTarget ? iTxRelation.getTarget() : iTxRelation.getSource();
- if (waveCanvas.wave2painterMap.containsKey(otherTx.getStream())) {
- IWaveformPainter painter = waveCanvas.wave2painterMap.get(otherTx.getStream());
- int height = waveCanvas.styleProvider.getTrackHeight();
- Rectangle bb = new Rectangle(
- (int) (otherTx.getBeginTime() / scaleFactor),
- waveCanvas.rulerHeight + painter.getVerticalOffset() + height * otherTx.getConcurrencyIndex(),
- (int) ((otherTx.getEndTime() - otherTx.getBeginTime()) / scaleFactor),
- height);
+ Rectangle bb = createLinkEntry(otherTx, otherTx.getStream());
+ if(bb!=null){
res.add(new LinkEntry(bb, iTxRelation.getRelationType()));
+ return;
+ } else {
+ for(IHierNode gen:otherTx.getStream().getChildNodes()) {
+ if(gen instanceof IWaveform) {
+ bb = createLinkEntry(otherTx, (IWaveform) gen);
+ if(bb!=null){
+ res.add(new LinkEntry(bb, iTxRelation.getRelationType()));
+ return;
+ }
+ }
+ }
}
}
}
+ private Rectangle createLinkEntry(ITx otherTx, IWaveform iWaveform) {
+ if (waveCanvas.wave2painterMap.containsKey(iWaveform)) {
+ IWaveformPainter painter = waveCanvas.wave2painterMap.get(otherTx.getStream());
+ if(painter==null) {
+ for(IHierNode gen:otherTx.getStream().getChildNodes()) {
+ if(gen instanceof IWaveform) {
+ painter = waveCanvas.wave2painterMap.get(gen);
+ if(painter!=null)
+ break;
+ }
+ }
+ }
+ if(painter!=null) {
+ int height = waveCanvas.styleProvider.getTrackHeight();
+ return new Rectangle(
+ (int) (otherTx.getBeginTime() / scaleFactor),
+ waveCanvas.rulerHeight + painter.getVerticalOffset() + height * getConcurrencyIndex(otherTx),
+ (int) ((otherTx.getEndTime() - otherTx.getBeginTime()) / scaleFactor),
+ height);
+ }
+ }
+ return null;
+ }
+
@Override
public void paintArea(Projection proj, Rectangle clientRect) {
yCtrlOffset = waveCanvas.styleProvider.getTrackHeight()/2;
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java
index 6592632..ab5274e 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java
@@ -10,10 +10,9 @@
*******************************************************************************/
package com.minres.scviewer.database.ui.swt.internal;
-import java.util.Collection;
import java.util.Map.Entry;
import java.util.NavigableMap;
-import java.util.TreeSet;
+import java.util.TreeMap;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
@@ -37,19 +36,18 @@ public class StreamPainter extends TrackPainter{
private IWaveform stream;
private int txBase;
private int txHeight;
- private TreeSet seenTx;
+ private TreeMap seenTx;
public StreamPainter(WaveformCanvas waveCanvas, boolean even, TrackEntry trackEntry) {
super(trackEntry, even);
this.waveCanvas = waveCanvas;
this.stream=trackEntry.waveform;
- this.seenTx=new TreeSet<>();
+ this.seenTx=new TreeMap<>();
}
- @SuppressWarnings("unchecked")
public void paintArea(Projection proj, Rectangle area) {
if(stream.getEvents().size()==0) return;
- int trackHeight=trackEntry.height/stream.getWidth();
+ int trackHeight=trackEntry.height/stream.getRowCount();
txBase=trackHeight/5;
txHeight=trackHeight*3/5;
if(trackEntry.selected) {
@@ -65,8 +63,8 @@ public class StreamPainter extends TrackPainter{
long beginTime = beginPos*scaleFactor;
long endTime = beginTime + area.width*scaleFactor;
- Entry firstTx=stream.getEvents().floorEntry(beginTime);
- Entry lastTx=stream.getEvents().ceilingEntry(endTime);
+ Entry firstTx=stream.getEvents().floorEntry(beginTime);
+ Entry lastTx=stream.getEvents().ceilingEntry(endTime);
if(firstTx==null) firstTx = stream.getEvents().firstEntry();
if(lastTx==null) lastTx=stream.getEvents().lastEntry();
proj.setFillRule(SWT.FILL_EVEN_ODD);
@@ -77,46 +75,51 @@ public class StreamPainter extends TrackPainter{
for( int y1=area.y+trackHeight/2; y1)firstTx.getValue())
- drawTx(proj, area, txEvent.getTransaction(), false);
+ for(IEvent txEvent: firstTx.getValue())
+ drawTx(proj, area, ((ITxEvent)txEvent).getTransaction(), ((ITxEvent)txEvent).getRowIndex(), false);
}else{
seenTx.clear();
NavigableMap entries = stream.getEvents().subMap(firstTx.getKey(), true, lastTx.getKey(), true);
- boolean highlighed=false;
+ ITxEvent highlighed=null;
proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE));
long selectedId=waveCanvas.currentSelection!=null? waveCanvas.currentSelection.getId():-1;
for(Entry entry: entries.entrySet())
- for(IEvent evt:entry.getValue()){
- ITx tx = ((ITxEvent) evt).getTransaction();
- highlighed|=selectedId==tx.getId();
+ for(IEvent e:entry.getValue()){
+ ITxEvent evt = (ITxEvent) e;
+ ITx tx = evt.getTransaction();
+ if(selectedId==tx.getId())
+ highlighed=evt;
switch(evt.getKind()) {
case BEGIN:
- seenTx.add(tx);
+ seenTx.put(tx, evt);
break;
case END:
+ drawTx(proj, area, tx, evt.getRowIndex(), false);
seenTx.remove(tx);
+ break;
case SINGLE:
- drawTx(proj, area, tx, false);
+ drawTx(proj, area, tx, evt.getRowIndex(), false);
break;
}
}
- for(ITx tx:seenTx){
- drawTx(proj, area, tx, false);
- }
- if(highlighed){
+ seenTx.entrySet().stream().forEach(e -> {
+ drawTx(proj, area, e.getKey(), e.getValue().getRowIndex(), false);
+ });
+
+ if(highlighed!=null){
proj.setForeground(this.waveCanvas.styleProvider.getColor(WaveformColors.LINE_HIGHLITE));
- drawTx(proj, area, waveCanvas.currentSelection, true);
+ drawTx(proj, area, highlighed.getTransaction(), highlighed.getRowIndex(), true);
}
}
}
- protected void drawTx(Projection proj, Rectangle area, ITx tx, boolean highlighted ) {
+ protected void drawTx(Projection proj, Rectangle area, ITx tx, int concurrencyIndex, boolean highlighted ) {
// compute colors
Color[] transColor = waveCanvas.styleProvider.computeColor( tx.getGenerator().getName());
proj.setBackground(transColor[highlighted?1:0]);
- int offset = tx.getConcurrencyIndex()*this.waveCanvas.styleProvider.getTrackHeight();
+ int offset = concurrencyIndex*this.waveCanvas.styleProvider.getTrackHeight();
Rectangle bb = new Rectangle(
(int)(tx.getBeginTime()/this.waveCanvas.getScaleFactor()), area.y+offset+txBase,
(int)((tx.getEndTime()-tx.getBeginTime())/this.waveCanvas.getScaleFactor()), txHeight);
@@ -164,25 +167,19 @@ public class StreamPainter extends TrackPainter{
protected ITx getTxFromEntry(int lane, int offset, Entry firstTx) {
long timePoint=offset*waveCanvas.getScaleFactor();
- for(IEvent evt:firstTx.getValue()){
- if(evt instanceof ITxEvent) {
- ITx tx=((ITxEvent)evt).getTransaction();
- if((evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE)&&
- tx.getConcurrencyIndex()==lane && tx.getBeginTime()<=timePoint && tx.getEndTime()>=timePoint){
- return ((ITxEvent)evt).getTransaction();
- }
- }
- }
- // now with some fuzziness
- timePoint=(offset-5)*waveCanvas.getScaleFactor();
+ long timePointLow=(offset-5)*waveCanvas.getScaleFactor();
long timePointHigh=(offset+5)*waveCanvas.getScaleFactor();
- for(IEvent evt:firstTx.getValue()){
- if(evt instanceof ITxEvent) {
- ITx tx=((ITxEvent)evt).getTransaction();
- if((evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE) &&
- tx.getConcurrencyIndex()==lane && tx.getBeginTime()<=timePointHigh && tx.getEndTime()>=timePoint){
- return ((ITxEvent)evt).getTransaction();
- }
+ for(IEvent e:firstTx.getValue()){
+ if(e instanceof ITxEvent) {
+ ITxEvent evt = (ITxEvent) e;
+ ITx tx=evt.getTransaction();
+ if(
+ (evt.getKind()==EventKind.SINGLE && evt.getTime()==timePoint) ||
+ (evt.getKind()==EventKind.SINGLE && evt.getTime()>timePointLow && evt.getTime()=timePoint)
+ ){
+ return tx;
+ }
}
}
return null;
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java
index eba6cb4..af89087 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformCanvas.java
@@ -11,10 +11,12 @@
package com.minres.scviewer.database.ui.swt.internal;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
+import java.util.Optional;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
@@ -32,9 +34,11 @@ import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.ScrollBar;
import com.google.common.collect.Lists;
+import com.minres.scviewer.database.IEvent;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.RelationType;
import com.minres.scviewer.database.tx.ITx;
+import com.minres.scviewer.database.tx.ITxEvent;
import com.minres.scviewer.database.ui.IWaveformStyleProvider;
import com.minres.scviewer.database.ui.IWaveformView;
import com.minres.scviewer.database.ui.TrackEntry;
@@ -424,13 +428,17 @@ public class WaveformCanvas extends Canvas {
}
for (IWaveformPainter painter : wave2painterMap.values()) {
if (painter instanceof StreamPainter && ((StreamPainter) painter).getStream() == tx.getStream()) {
- int top = painter.getVerticalOffset() + styleProvider.getTrackHeight() * tx.getConcurrencyIndex();
- int bottom = top + styleProvider.getTrackHeight();
- if (top < -origin.y) {
- setOrigin(origin.x, -(top-styleProvider.getTrackHeight()));
- } else if (bottom > (size.y - origin.y)) {
- setOrigin(origin.x, size.y - bottom);
- }
+ Entry entry = tx.getStream().getEvents().floorEntry(tx.getBeginTime());
+ Optional res = Arrays.stream(entry.getValue()).filter(e -> ((ITxEvent)e).getTransaction().equals(tx)).findFirst();
+ if(res.isPresent()) {
+ int top = painter.getVerticalOffset() + styleProvider.getTrackHeight() * ((ITxEvent)res.get()).getRowIndex();
+ int bottom = top + styleProvider.getTrackHeight();
+ if (top < -origin.y) {
+ setOrigin(origin.x, -(top-styleProvider.getTrackHeight()));
+ } else if (bottom > (size.y - origin.y)) {
+ setOrigin(origin.x, size.y - bottom);
+ }
+ }
}
}
}
diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java
index 6fb28d4..3ab9cca 100644
--- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java
+++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/WaveformView.java
@@ -514,7 +514,7 @@ public class WaveformView implements IWaveformView {
streamEntry.vOffset = tracksVerticalHeight;
if (streamEntry.waveform.getType() == WaveformType.TRANSACTION) {
streamEntry.currentValue = "";
- streamEntry.height *= streamEntry.waveform.getWidth();
+ streamEntry.height *= streamEntry.waveform.getRowCount();
painter = new StreamPainter(waveformCanvas, even, streamEntry);
} else if (streamEntry.waveform.getType() == WaveformType.SIGNAL) {
streamEntry.currentValue = "---";
@@ -579,17 +579,18 @@ public class WaveformView implements IWaveformView {
entry.currentValue = Double.toString(val);
}
} else if (entry.waveform.getType() == WaveformType.TRANSACTION) {
- ITx[] resultsList = new ITx[entry.waveform.getWidth()];
+ ITx[] resultsList = new ITx[entry.waveform.getRowCount()];
Entry firstTx = entry.waveform.getEvents().floorEntry(time);
if (firstTx != null) {
do {
- for (IEvent evt : firstTx.getValue()) {
- if (evt instanceof ITxEvent) {
- ITx tx = ((ITxEvent) evt).getTransaction();
+ for (IEvent e : firstTx.getValue()) {
+ if (e instanceof ITxEvent) {
+ ITxEvent evt = ((ITxEvent) e);
+ ITx tx = evt.getTransaction();
if ((evt.getKind() == EventKind.BEGIN || evt.getKind() == EventKind.SINGLE)
&& tx.getBeginTime() <= time && tx.getEndTime() >= time
- && resultsList[tx.getConcurrencyIndex()] == null)
- resultsList[tx.getConcurrencyIndex()] = ((ITxEvent) evt).getTransaction();
+ && resultsList[evt.getRowIndex()] == null)
+ resultsList[evt.getRowIndex()] = evt.getTransaction();
}
}
firstTx = entry.waveform.getEvents().lowerEntry(firstTx.getKey());
@@ -1036,7 +1037,7 @@ public class WaveformView implements IWaveformView {
TrackEntry trackEntry = trackVerticalOffset.get(firstKey);
IWaveform w = trackEntry.waveform;
if (w.getType() == WaveformType.TRANSACTION)
- subArea.height *= w.getWidth();
+ subArea.height *= w.getRowCount();
drawTextFormat(gc, subArea, firstKey, w.getFullName(), trackEntry.selected);
} else {
for (Entry entry : trackVerticalOffset.subMap(firstKey, true, lastKey, true)
@@ -1044,7 +1045,7 @@ public class WaveformView implements IWaveformView {
IWaveform w = entry.getValue().waveform;
subArea.height = styleProvider.getTrackHeight();
if (w.getType() == WaveformType.TRANSACTION)
- subArea.height *= w.getWidth();
+ subArea.height *= w.getRowCount();
drawTextFormat(gc, subArea, entry.getKey(), w.getFullName(), entry.getValue().selected);
}
}
@@ -1065,7 +1066,7 @@ public class WaveformView implements IWaveformView {
TrackEntry trackEntry = trackVerticalOffset.get(firstKey);
IWaveform w = trackEntry.waveform;
if (w.getType() == WaveformType.TRANSACTION)
- subArea.height *= w.getWidth();
+ subArea.height *= w.getRowCount();
drawValue(gc, subArea, firstKey, trackEntry.currentValue, trackEntry.selected);
} else {
for (Entry entry : trackVerticalOffset.subMap(firstKey, true, lastKey, true)
@@ -1073,7 +1074,7 @@ public class WaveformView implements IWaveformView {
IWaveform w = entry.getValue().waveform;
subArea.height = styleProvider.getTrackHeight();
if (w.getType() == WaveformType.TRANSACTION)
- subArea.height *= w.getWidth();
+ subArea.height *= w.getRowCount();
drawValue(gc, subArea, entry.getKey(), entry.getValue().currentValue,
entry.getValue().selected);
}
diff --git a/plugins/com.minres.scviewer.database.vcd/pom.xml b/plugins/com.minres.scviewer.database.vcd/pom.xml
index 1a27b50..bf73cf0 100644
--- a/plugins/com.minres.scviewer.database.vcd/pom.xml
+++ b/plugins/com.minres.scviewer.database.vcd/pom.xml
@@ -5,7 +5,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java
index c92e032..0481975 100644
--- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java
+++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDDbLoader.java
@@ -204,7 +204,7 @@ public class VCDDbLoader implements IWaveformDbLoader, IVCDDatabaseBuilder {
@Override
public int getNetWidth(int intValue) {
VCDSignal> signal = (VCDSignal>) signals.get(intValue);
- return signal.getWidth();
+ return signal.getRowCount();
}
/* (non-Javadoc)
diff --git a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java
index 05f27d4..4b2bb71 100644
--- a/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java
+++ b/plugins/com.minres.scviewer.database.vcd/src/com/minres/scviewer/database/vcd/VCDSignal.java
@@ -109,7 +109,7 @@ public class VCDSignal extends HierNode implements IWaveform {
}
@Override
- public int getWidth() {
+ public int getRowCount() {
return width;
}
diff --git a/plugins/com.minres.scviewer.database/pom.xml b/plugins/com.minres.scviewer.database/pom.xml
index 10bea0e..abaa87b 100644
--- a/plugins/com.minres.scviewer.database/pom.xml
+++ b/plugins/com.minres.scviewer.database/pom.xml
@@ -4,7 +4,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java
index 73d551e..c96b04a 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveform.java
@@ -12,6 +12,7 @@ package com.minres.scviewer.database;
import java.util.NavigableMap;
+// TODO: Auto-generated Javadoc
/**
* The Interface IWaveform.
*
@@ -76,6 +77,6 @@ public interface IWaveform extends IHierNode {
*
* @return the width
*/
- public int getWidth();
-
+ public int getRowCount();
+
}
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java
index 91f91e9..d74db46 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java
@@ -123,31 +123,31 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
*/
@Override
public boolean load(File inp) {
+ boolean retval = true;
for (IWaveformDbLoader loader : loaders) {
if (loader.canLoad(inp)) {
+ loader.addPropertyChangeListener(this);
try {
- loader.addPropertyChangeListener(this);
loader.load(this, inp);
- loader.removePropertyChangeListener(this);
- for (IWaveform w : loader.getAllWaves()) {
- waveforms.put(w.getFullName(), w);
- }
- if (loader.getMaxTime() > maxTime) {
- maxTime = loader.getMaxTime();
- }
- if (name == null)
- name = getFileBasename(inp.getName());
- buildHierarchyNodes();
- relationTypes.addAll(loader.getAllRelationTypes());
- pcs.firePropertyChange(IHierNode.LOADING_FINISHED, null, null);
- loaded = true;
- return true;
} catch (Exception e) {
- return false;
+ retval=false;
}
+ loader.removePropertyChangeListener(this);
+ for (IWaveform w : loader.getAllWaves()) {
+ waveforms.put(w.getFullName(), w);
+ }
+ if (loader.getMaxTime() > maxTime) {
+ maxTime = loader.getMaxTime();
+ }
+ if (name == null)
+ name = getFileBasename(inp.getName());
+ buildHierarchyNodes();
+ relationTypes.addAll(loader.getAllRelationTypes());
}
}
- return false;
+ pcs.firePropertyChange(IHierNode.LOADING_FINISHED, null, null);
+ loaded = true;
+ return retval;
}
/**
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java
index afed810..f539270 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITx.java
@@ -39,7 +39,7 @@ public interface ITx extends Comparable {
*
* @return the generator
*/
- public ITxGenerator getGenerator();
+ public IWaveform getGenerator();
/**
* Gets the begin time.
@@ -55,13 +55,6 @@ public interface ITx extends Comparable {
*/
public Long getEndTime();
- /**
- * Gets the concurrency index.
- *
- * @return the concurrency index
- */
- public int getConcurrencyIndex();
-
/**
* Gets the attributes.
*
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java
index e2de304..9f417a9 100644
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java
+++ b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxEvent.java
@@ -30,4 +30,12 @@ public interface ITxEvent extends IEvent {
* @return the transaction
*/
public ITx getTransaction();
+
+ /**
+ * Gets the concurrency index.
+ *
+ * @return the concurrency index
+ */
+ public int getRowIndex();
+
}
diff --git a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxGenerator.java b/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxGenerator.java
deleted file mode 100644
index 54398c1..0000000
--- a/plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/tx/ITxGenerator.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015-2021 MINRES Technologies GmbH and others.
- * 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:
- * MINRES Technologies GmbH - initial API and implementation
- *******************************************************************************/
-package com.minres.scviewer.database.tx;
-
-import com.minres.scviewer.database.IWaveform;
-
-/**
- * The Interface ITxGenerator.
- */
-public interface ITxGenerator extends IWaveform {
-
- /**
- * Gets the stream.
- *
- * @return the stream
- */
- public IWaveform getStream();
-
-}
diff --git a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF
index 0459005..9132c4a 100644
--- a/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF
+++ b/plugins/com.minres.scviewer.e4.application/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: com.minres.scviewer.e4.application;singleton:=true
-Bundle-Version: 2.11.2.qualifier
+Bundle-Version: 2.12.0.qualifier
Bundle-Vendor: %Bundle-Vendor
Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.core.runtime;bundle-version="3.11.1",
diff --git a/plugins/com.minres.scviewer.e4.application/icons/lightbulb_off.png b/plugins/com.minres.scviewer.e4.application/icons/lightbulb_off.png
new file mode 100644
index 0000000..e95b8c5
Binary files /dev/null and b/plugins/com.minres.scviewer.e4.application/icons/lightbulb_off.png differ
diff --git a/plugins/com.minres.scviewer.e4.application/icons/stream.png b/plugins/com.minres.scviewer.e4.application/icons/stream.png
old mode 100755
new mode 100644
index c32d25c..5d59c0e
Binary files a/plugins/com.minres.scviewer.e4.application/icons/stream.png and b/plugins/com.minres.scviewer.e4.application/icons/stream.png differ
diff --git a/plugins/com.minres.scviewer.e4.application/icons/stream_hier.png b/plugins/com.minres.scviewer.e4.application/icons/stream_hier.png
new file mode 100755
index 0000000..93bdec4
Binary files /dev/null and b/plugins/com.minres.scviewer.e4.application/icons/stream_hier.png differ
diff --git a/plugins/com.minres.scviewer.e4.application/pom.xml b/plugins/com.minres.scviewer.e4.application/pom.xml
index abc9a75..51621b7 100644
--- a/plugins/com.minres.scviewer.e4.application/pom.xml
+++ b/plugins/com.minres.scviewer.e4.application/pom.xml
@@ -3,11 +3,10 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.minres.scviewer.e4.application
- 2.11.2-SNAPSHOT
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/HeapStatus.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/HeapStatus.java
index 6bc4bf8..33b3357 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/HeapStatus.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/HeapStatus.java
@@ -482,6 +482,7 @@ public class HeapStatus extends Composite {
});
}
};
+ t.setDaemon(true);
t.start();
}
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
index be74068..4b47c91 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
@@ -206,7 +206,7 @@ public class DesignBrowser {
updateButtons();
}
});
- treeViewer.setLabelProvider(new TxDbLabelProvider());
+ treeViewer.setLabelProvider(new TxDbLabelProvider(true));
treeViewer.addFilter(treeAttributeFilter);
treeViewer.setUseHashlookup(true);
treeViewer.setAutoExpandLevel(2);
@@ -252,7 +252,7 @@ public class DesignBrowser {
updateButtons();
}
});
- txTableViewer.setLabelProvider(new TxDbLabelProvider());
+ txTableViewer.setLabelProvider(new TxDbLabelProvider(false));
txTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
txTableViewer.addFilter(tableAttributeFilter);
txTableViewer.addDoubleClickListener(event -> {
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java
index 5ee29a0..be0abe4 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionList.java
@@ -37,7 +37,6 @@ import com.minres.scviewer.database.IEvent;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.WaveformType;
import com.minres.scviewer.database.tx.ITx;
-import com.minres.scviewer.database.tx.ITxAttribute;
import com.minres.scviewer.database.tx.ITxEvent;
import com.minres.scviewer.database.ui.TrackEntry;
import com.minres.scviewer.e4.application.parts.txTableTree.AbstractTransactionTreeContentProvider;
@@ -78,6 +77,8 @@ public class TransactionList extends Composite {
private TableViewer tableViewer = null;
+ Thread updateThread = null;
+
private TableColumn valueColumn = null;
private AttributeLabelProvider valueLabelProvider = null;
@@ -86,8 +87,6 @@ public class TransactionList extends Composite {
private ObservableList attrNames = new WritableList<>();
- private List eventList = new ArrayList<>();
-
private List emptyList = new ArrayList<>();
TxFilter txFilter;
@@ -244,56 +243,48 @@ public class TransactionList extends Composite {
} else if(stream != trackEntry.waveform) {
stream=trackEntry.waveform;
tableViewer.setInput(emptyList);
- new Thread() {
- private ConcurrentHashMap propNames=new ConcurrentHashMap<>();
-
- private List getEntries() {
- return propNames.entrySet().stream()
- .sorted((e1,e2)->e1.getKey().compareTo(e2.getKey()))
- .map(e -> new AttributeNameBean(e.getKey(), e.getValue()))
- .collect(Collectors.toList());
- }
-
- @Override
- public void run() {
- Collection values = stream.getEvents().values();
- eventList = values.parallelStream().map(Arrays::asList)
- .flatMap(List::stream)
- .filter(evt -> evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE)
- .map(evt-> {
- ITx tx = ((ITxEvent)evt).getTransaction();
- for(ITxAttribute attr: tx.getAttributes()) {
- propNames.put(attr.getName(), attr.getDataType());
- }
- return tx;
- })
- .sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime()))
- .collect(Collectors.toList());
- getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- tableViewer.setInput(eventList);
- attrNames.clear();
- attrNames.addAll(getEntries());
- if(!attrNames.isEmpty())
- txFilter.setSearchProp(attrNames.get(0).getName(), attrNames.get(0).getType());
- if (searchPropComboViewer!=null) {
- searchPropComboViewer.setInput(attrNames);
- Object sel = searchPropComboViewer.getElementAt(0);
- if(sel!=null) searchPropComboViewer.setSelection(new StructuredSelection(sel));
- }
- tableViewer.refresh(true);
- }
- });
- }
- }.start();
+ try{
+ if(updateThread!=null)
+ updateThread.interrupt();
+ }catch(SecurityException e){}
+ updateThread = new Thread(()-> {
+ final ConcurrentHashMap propNames=new ConcurrentHashMap<>();
+ Collection values = stream.getEvents().values();
+ final List txList = values.parallelStream().map(Arrays::asList)
+ .flatMap(List::stream)
+ .filter(evt -> evt.getKind()==EventKind.BEGIN || evt.getKind()==EventKind.SINGLE)
+ .map(evt-> {
+ ITx tx = ((ITxEvent)evt).getTransaction();
+ tx.getAttributes().forEach(attr -> propNames.put(attr.getName(), attr.getDataType()));
+ return tx;
+ })
+ .sorted((t1, t2)-> t1.getBeginTime().compareTo(t2.getBeginTime()))
+ .collect(Collectors.toList());
+ final List newAttrNames=propNames.entrySet().stream()
+ .sorted((e1,e2)->e1.getKey().compareTo(e2.getKey()))
+ .map(e -> new AttributeNameBean(e.getKey(), e.getValue()))
+ .collect(Collectors.toList());
+ getDisplay().asyncExec(() -> {
+ tableViewer.setInput(txList);
+ attrNames.clear();
+ attrNames.addAll(newAttrNames);
+ if(!attrNames.isEmpty())
+ txFilter.setSearchProp(attrNames.get(0).getName(), attrNames.get(0).getType());
+ if (searchPropComboViewer!=null)
+ searchPropComboViewer.refresh();
+ if (viewPropComboViewer!=null)
+ viewPropComboViewer.refresh();
+ });
+ updateThread=null;
+ });
+ updateThread.start();
}
}
public void setSearchProps(String propName, DataType type, String propValue) {
- for(int i=0; i
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
eclipse-plugin
diff --git a/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeLabelProvider.java b/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeLabelProvider.java
index 53f3dbc..37d3784 100644
--- a/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeLabelProvider.java
+++ b/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/views/provider/TxDbTreeLabelProvider.java
@@ -77,7 +77,7 @@ public class TxDbTreeLabelProvider implements ILabelProvider {
case FILTER:
break;
case SIGNAL:
- if(((IWaveform) element).getWidth()==1)
+ if(((IWaveform) element).getRowCount()==1)
return signal;
else
return wave;
diff --git a/pom.xml b/pom.xml
index b1885bf..20d4ad9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
pom
releng/com.minres.scviewer.target
@@ -34,6 +34,19 @@
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 3.2.0
+
+
+ parse-version
+
+ parse-version
+
+
+
+
org.eclipse.tycho
tycho-maven-plugin
@@ -55,7 +68,7 @@
com.minres.scviewer
com.minres.scviewer.target
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
diff --git a/products/com.minres.scviewer.e4.product/pom.xml b/products/com.minres.scviewer.e4.product/pom.xml
index c7563cc..0e14bcb 100644
--- a/products/com.minres.scviewer.e4.product/pom.xml
+++ b/products/com.minres.scviewer.e4.product/pom.xml
@@ -6,11 +6,11 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
com.minres.scviewer.e4.product
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
eclipse-repository
com.minres.scviewer
@@ -46,7 +46,7 @@
product
- SCViewer-${project.version}
+ SCViewer-${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}
SCViewer.app
diff --git a/products/com.minres.scviewer.e4.product/scviewer.product b/products/com.minres.scviewer.e4.product/scviewer.product
index 5f00e43..5c1cc84 100644
--- a/products/com.minres.scviewer.e4.product/scviewer.product
+++ b/products/com.minres.scviewer.e4.product/scviewer.product
@@ -1,7 +1,7 @@
-
+
@@ -9,7 +9,7 @@
-clearPersistedState
- -Xmx1G -Dosgi.instance.area=@user.home/.scviewer -Dosgi.instance.area.default=@user.home/.scviewer
+ -Xmx2G -Dosgi.instance.area=@user.home/.scviewer -Dosgi.instance.area.default=@user.home/.scviewer
-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
diff --git a/releng/com.minres.scviewer.target/pom.xml b/releng/com.minres.scviewer.target/pom.xml
index 97968fd..f370caf 100644
--- a/releng/com.minres.scviewer.target/pom.xml
+++ b/releng/com.minres.scviewer.target/pom.xml
@@ -12,7 +12,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
diff --git a/releng/com.minres.scviewer.updateSite/pom.xml b/releng/com.minres.scviewer.updateSite/pom.xml
index dc470fa..afcadd7 100644
--- a/releng/com.minres.scviewer.updateSite/pom.xml
+++ b/releng/com.minres.scviewer.updateSite/pom.xml
@@ -3,12 +3,11 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.minres.scviewer.updateSite
- 2.11.2-SNAPSHOT
eclipse-repository
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
@@ -22,19 +21,6 @@
${project.artifactId}-${qualifiedVersion}
-
- org.codehaus.mojo
- build-helper-maven-plugin
- 3.2.0
-
-
- parse-version
-
- parse-version
-
-
-
-
@@ -59,7 +45,7 @@
SCViewer
- ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}
+ ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}
true
diff --git a/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch b/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch
index 4536e71..03a641c 100644
--- a/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch
+++ b/tests/com.minres.scviewer.database.test/DatabaseServicesTest.launch
@@ -19,18 +19,18 @@
-
+
-
+
-
+
-
+
diff --git a/tests/com.minres.scviewer.database.test/OSGI-INF/component.xml b/tests/com.minres.scviewer.database.test/OSGI-INF/component.xml
index 7ebc679..2254edc 100644
--- a/tests/com.minres.scviewer.database.test/OSGI-INF/component.xml
+++ b/tests/com.minres.scviewer.database.test/OSGI-INF/component.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/tests/com.minres.scviewer.database.test/pom.xml b/tests/com.minres.scviewer.database.test/pom.xml
index be980a5..9b902fe 100644
--- a/tests/com.minres.scviewer.database.test/pom.xml
+++ b/tests/com.minres.scviewer.database.test/pom.xml
@@ -6,7 +6,7 @@
com.minres.scviewer
com.minres.scviewer.parent
- 2.11.2-SNAPSHOT
+ 2.12.0-SNAPSHOT
../..
eclipse-test-plugin
diff --git a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java
index d76068a..35b9c93 100644
--- a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java
+++ b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/DatabaseServicesTest.java
@@ -25,28 +25,15 @@ import org.junit.Test;
import com.minres.scviewer.database.IEvent;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.IWaveformDb;
-import com.minres.scviewer.database.IWaveformDbFactory;
public class DatabaseServicesTest {
- private static IWaveformDbFactory waveformDbFactory;
-
private IWaveformDb waveformDb;
-
- public synchronized void setFactory(IWaveformDbFactory service) {
- waveformDbFactory = service;
- }
-
- public synchronized void unsetFactory(IWaveformDbFactory service) {
- if (waveformDbFactory == service) {
- waveformDbFactory = null;
- }
- }
-
+
@Before
public void setUp() throws Exception {
- waveformDb=waveformDbFactory.getDatabase();
+ waveformDb=TestWaveformDbFactory.getDatabase();
}
@After
@@ -91,11 +78,11 @@ public class DatabaseServicesTest {
assertEquals(1, waveformDb.getChildNodes().size());
for(IWaveform w:waveforms) {
if(w.getId().equals(1l)) {
- assertEquals(2, w.getWidth());
+ assertEquals(2, w.getRowCount());
} else if(w.getId().equals(2l)) {
- assertEquals(1, w.getWidth());
+ assertEquals(1, w.getRowCount());
} else if(w.getId().equals(3l)) {
- assertEquals(1, w.getWidth());
+ assertEquals(1, w.getRowCount());
}
}
}
diff --git a/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/TestWaveformDbFactory.java b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/TestWaveformDbFactory.java
new file mode 100644
index 0000000..29b0fe5
--- /dev/null
+++ b/tests/com.minres.scviewer.database.test/src/com/minres/scviewer/database/test/TestWaveformDbFactory.java
@@ -0,0 +1,25 @@
+package com.minres.scviewer.database.test;
+
+import com.minres.scviewer.database.IWaveformDb;
+import com.minres.scviewer.database.IWaveformDbFactory;
+
+public class TestWaveformDbFactory {
+ private static IWaveformDbFactory waveformDbFactory;
+
+
+ public synchronized void setFactory(IWaveformDbFactory service) {
+ waveformDbFactory = service;
+ }
+
+ public synchronized void unsetFactory(IWaveformDbFactory service) {
+ if (waveformDbFactory == service) {
+ waveformDbFactory = null;
+ }
+ }
+
+ public static IWaveformDb getDatabase() throws Exception {
+ return waveformDbFactory.getDatabase();
+ }
+
+
+}