From d970d07048ad5d6315debecdbccbe1283ff0c513 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Sat, 9 Jan 2021 10:34:22 +0100 Subject: [PATCH] make ITxGenerator as stream --- .../database/sqlite/AbstractTxStream.java | 129 ++++++++++++++++++ .../scviewer/database/sqlite/TxGenerator.java | 47 ++++++- .../scviewer/database/sqlite/TxStream.java | 89 +----------- .../database/text/AbstractTxStream.java | 127 +++++++++++++++++ .../scviewer/database/text/TextDbLoader.java | 2 +- .../scviewer/database/text/TxEvent.java | 4 +- .../scviewer/database/text/TxGenerator.java | 31 ++--- .../scviewer/database/text/TxStream.java | 112 +-------------- .../scviewer/database/vcd/VCDSignal.java | 5 + .../minres/scviewer/database/IWaveform.java | 2 + .../scviewer/database/tx/ITxGenerator.java | 6 +- 11 files changed, 333 insertions(+), 221 deletions(-) create mode 100644 plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java create mode 100644 plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java 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 new file mode 100644 index 0000000..ec986a0 --- /dev/null +++ b/plugins/com.minres.scviewer.database.sqlite/src/com/minres/scviewer/database/sqlite/AbstractTxStream.java @@ -0,0 +1,129 @@ +/******************************************************************************* + * Copyright (c) 2015 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.sqlite; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; +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.RelationType; +import com.minres.scviewer.database.RelationTypeFactory; +import com.minres.scviewer.database.WaveformType; +import com.minres.scviewer.database.sqlite.db.IDatabase; +import com.minres.scviewer.database.tx.ITx; + +abstract class AbstractTxStream extends HierNode implements IWaveform { + + protected IDatabase database; + + private long streamId; + + private Integer maxConcurrency; + + private TreeMap events; + + private List usedRelationsList; + + public AbstractTxStream(IDatabase database, String name, long streamId) { + super(name); + this.database=database; + this.streamId=streamId; + } + + @Override + public int getWidth() { + if(maxConcurrency==null){ + StringBuilder sb = new StringBuilder(); + sb.append("SELECT MAX(concurrencyLevel) as concurrencyLevel FROM ScvTx where stream="); + sb.append(streamId); + try( + java.sql.Connection connection = database.createConnection(); + java.sql.Statement statement = connection.createStatement(); + java.sql.ResultSet resultSet = statement.executeQuery(sb.toString()); + ) { + while (resultSet.next()) { + if(maxConcurrency==null) maxConcurrency=0; + Object value = resultSet.getObject("concurrencyLevel"); + if(value!=null) + maxConcurrency=(Integer) value; + } + } catch (SQLException e) { + if(maxConcurrency==null) maxConcurrency=0; + } + maxConcurrency+=1; + } + return maxConcurrency; + } + + @Override + public NavigableMap getEvents(){ + if(events==null){ + events=new TreeMap<>(); + for(Entry entry:getTransactions().entrySet()){ + putEvent(new TxEvent(EventKind.BEGIN, entry.getValue())); + putEvent(new TxEvent(EventKind.END, entry.getValue())); + } + } + return events; + } + + private void putEvent(TxEvent ev){ + Long time = ev.getTime(); + if(events.containsKey(time)) { + IEvent[] oldV = events.get(time); + IEvent[] newV = new IEvent[oldV.length+1]; + System.arraycopy(oldV, 0, newV, 0, oldV.length); + newV[oldV.length]=ev; + events.put(time, newV); + } else { + events.put(time, new IEvent[] {ev}); + } + } + + protected abstract Map getTransactions(); + + @Override + public IEvent[] getEventsAtTime(Long time) { + return getEvents().get(time); + } + + public void setRelationTypeList(List usedRelationsList){ + this.usedRelationsList=usedRelationsList; + } + + public RelationType getRelationType(String name) { + RelationType relType=RelationTypeFactory.create(name); + if(!usedRelationsList.contains(relType)) usedRelationsList.add(relType); + return relType; + } + + @Override + public IEvent[] getEventsBeforeTime(Long time) { + Entry e = events.floorEntry(time); + if(e==null) + return new IEvent[]{}; + else + return events.floorEntry(time).getValue(); + } + + @Override + public WaveformType getType() { + return WaveformType.TRANSACTION; + } + +} 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 08cc6f3..1b5dd38 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 @@ -10,17 +10,30 @@ *******************************************************************************/ package com.minres.scviewer.database.sqlite; +import java.beans.IntrospectionException; +import java.lang.reflect.InvocationTargetException; +import java.sql.SQLException; +import java.util.Map; +import java.util.TreeMap; + import com.minres.scviewer.database.IWaveform; +import com.minres.scviewer.database.sqlite.db.IDatabase; +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 implements ITxGenerator { +public class TxGenerator extends AbstractTxStream implements ITxGenerator { - private IWaveform stream; + private TxStream stream; private ScvGenerator scvGenerator; - public TxGenerator(IWaveform stream, ScvGenerator scvGenerator) { + private TreeMap transactions; + + public TxGenerator(IDatabase database, TxStream stream, ScvGenerator scvGenerator) { + super(database, scvGenerator.getName(), stream.getId()); this.stream=stream; this.scvGenerator=scvGenerator; } @@ -40,4 +53,32 @@ public class TxGenerator implements ITxGenerator { return scvGenerator.getName(); } + @Override + public boolean isSame(IWaveform other) { + return(other instanceof TxGenerator && this.getId().equals(other.getId())); + } + + @Override + public String getKind() { + return stream.getKind(); + } + + @Override + protected Map getTransactions() { + if(transactions==null){ + transactions = new TreeMap<>(); + SQLiteDatabaseSelectHandler handler = new SQLiteDatabaseSelectHandler<>(ScvTx.class, database, + "stream="+stream.getId()+" and generator="+scvGenerator.getId()); + try { + for(ScvTx scvTx:handler.selectObjects()){ + transactions.put(scvTx.getId(), new Tx(database, (TxStream) stream, this, scvTx)); + } + } catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException + | InvocationTargetException | SQLException | IntrospectionException e) { + e.printStackTrace(); + } + } + return transactions; + } + } 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 324825b..dbbf6ab 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 @@ -35,9 +35,7 @@ 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 HierNode implements IWaveform { - - private IDatabase database; +public class TxStream extends AbstractTxStream { private String fullName; @@ -47,15 +45,8 @@ public class TxStream extends HierNode implements IWaveform { private TreeMap transactions; - private Integer maxConcurrency; - - private TreeMap events; - - private List usedRelationsList; - public TxStream(IDatabase database, ScvStream scvStream) { - super(scvStream.getName()); - this.database=database; + super(database, scvStream.getName(), scvStream.getId()); fullName=scvStream.getName(); this.scvStream=scvStream; } @@ -77,7 +68,7 @@ public class TxStream extends HierNode implements IWaveform { generators=new TreeMap<>(); try { for(ScvGenerator scvGenerator:handler.selectObjects()){ - generators.put(scvGenerator.getId(), new TxGenerator(this, scvGenerator)); + generators.put(scvGenerator.getId(), new TxGenerator(database, this, scvGenerator)); } } catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException | InvocationTargetException | SQLException | IntrospectionException e) { @@ -87,56 +78,6 @@ public class TxStream extends HierNode implements IWaveform { return new ArrayList<>(generators.values()); } - @Override - public int getWidth() { - if(maxConcurrency==null){ - StringBuilder sb = new StringBuilder(); - sb.append("SELECT MAX(concurrencyLevel) as concurrencyLevel FROM ScvTx where stream="); - sb.append(scvStream.getId()); - try( - java.sql.Connection connection = database.createConnection(); - java.sql.Statement statement = connection.createStatement(); - java.sql.ResultSet resultSet = statement.executeQuery(sb.toString()); - ) { - while (resultSet.next()) { - if(maxConcurrency==null) maxConcurrency=0; - Object value = resultSet.getObject("concurrencyLevel"); - if(value!=null) - maxConcurrency=(Integer) value; - } - } catch (SQLException e) { - if(maxConcurrency==null) maxConcurrency=0; - } - maxConcurrency+=1; - } - return maxConcurrency; - } - - @Override - public NavigableMap getEvents(){ - if(events==null){ - events=new TreeMap<>(); - for(Entry entry:getTransactions().entrySet()){ - putEvent(new TxEvent(EventKind.BEGIN, entry.getValue())); - putEvent(new TxEvent(EventKind.END, entry.getValue())); - } - } - return events; - } - - private void putEvent(TxEvent ev){ - Long time = ev.getTime(); - if(events.containsKey(time)) { - IEvent[] oldV = events.get(time); - IEvent[] newV = new IEvent[oldV.length+1]; - System.arraycopy(oldV, 0, newV, 0, oldV.length); - newV[oldV.length]=ev; - events.put(time, newV); - } else { - events.put(time, new IEvent[] {ev}); - } - } - protected Map getTransactions() { if(transactions==null){ if(generators==null) getGenerators(); @@ -160,33 +101,13 @@ public class TxStream extends HierNode implements IWaveform { return getEvents().get(time); } - public void setRelationTypeList(List usedRelationsList){ - this.usedRelationsList=usedRelationsList; - } - - public RelationType getRelationType(String name) { - RelationType relType=RelationTypeFactory.create(name); - if(!usedRelationsList.contains(relType)) usedRelationsList.add(relType); - return relType; - } - @Override public boolean isSame(IWaveform other) { return(other instanceof TxStream && this.getId().equals(other.getId())); } @Override - public IEvent[] getEventsBeforeTime(Long time) { - Entry e = events.floorEntry(time); - if(e==null) - return new IEvent[]{}; - else - return events.floorEntry(time).getValue(); + public String getKind() { + return scvStream.getKind(); } - - @Override - public WaveformType getType() { - return WaveformType.TRANSACTION; - } - } 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 new file mode 100644 index 0000000..9c9e9b5 --- /dev/null +++ b/plugins/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/AbstractTxStream.java @@ -0,0 +1,127 @@ +/******************************************************************************* + * 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.util.ArrayList; +import java.util.Arrays; +import java.util.List; +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.ITxEvent; +import com.minres.scviewer.database.tx.ITxGenerator; + +abstract class AbstractTxStream extends HierNode implements IWaveform { + + private Long id; + + protected TextDbLoader loader; + + TreeMap events = new TreeMap<>(); + + private int maxConcurrency = 0; + + private int concurrency = 0; + + boolean concurrencyCalculated = false; + + public AbstractTxStream(TextDbLoader loader, Long id, String name) { + super(name); + this.loader=loader; + this.id=id; + } + + void setConcurrency(int concurrency) { + this.concurrency = concurrency; + if(concurrency>maxConcurrency) + maxConcurrency = concurrency; + } + + int getConcurrency() { + return this.concurrency; + } + + + @Override + public int getWidth() { + return maxConcurrency; + } + + public void addEvent(ITxEvent evt) { + if(!events.containsKey(evt.getTime())) + events.put(evt.getTime(), new IEvent[] {evt}); + else { + IEvent[] evts = events.get(evt.getTime()); + IEvent[] newEvts = Arrays.copyOf(evts, evts.length+1); + newEvts[evts.length]=evt; + events.put(evt.getTime(), newEvts); + } + } + + @Override + public NavigableMap getEvents() { + if(!concurrencyCalculated) calculateConcurrency(); + return events; + } + + @Override + public IEvent[] getEventsAtTime(Long time) { + if(!concurrencyCalculated) calculateConcurrency(); + return events.get(time); + } + + @Override + public IEvent[] getEventsBeforeTime(Long time) { + if(!concurrencyCalculated) + calculateConcurrency(); + Entry e = events.floorEntry(time); + if(e==null) + return new IEvent[] {}; + else + return events.floorEntry(time).getValue(); + } + + @Override + public WaveformType getType() { + return WaveformType.TRANSACTION; + } + + @Override + public Long getId() { + return id; + } + + synchronized void calculateConcurrency() { + if(concurrencyCalculated) 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(); + int rowIdx = 0; + for(; rowIdxtx.getBeginTime(); rowIdx++); + if(rowendtime.size()<=rowIdx) + rowendtime.add(tx.getEndTime()); + else + rowendtime.set(rowIdx, tx.getEndTime()); + tx.setConcurrencyIndex(rowIdx); + }); + }); + concurrencyCalculated=true; + } + +} 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 e8cdd75..0b6d9c0 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 @@ -318,7 +318,7 @@ public class TextDbLoader implements IWaveformDbLoader{ if ((matcher.matches())) { Long id = Long.parseLong(matcher.group(1)); TxStream stream=loader.txStreams.get(Long.parseLong(matcher.group(3))); - generator=new TxGenerator(id, stream, matcher.group(2)); + generator=new TxGenerator(loader, id, matcher.group(2), stream); loader.txGenerators.put(id, generator); } } else if("begin_attribute".equals(tokens[0])){ 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 c4c977d..ad57e01 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 @@ -11,9 +11,9 @@ class TxEvent implements ITxEvent { final EventKind kind; - final Long transaction; + final long transaction; - final Long time; + final long time; TxEvent(TextDbLoader loader, EventKind kind, Long transaction, Long time) { this.loader=loader; 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 662fd80..dc55be7 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 @@ -13,43 +13,32 @@ package com.minres.scviewer.database.text; import java.util.ArrayList; import java.util.List; -import com.minres.scviewer.database.HierNode; import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.tx.ITxGenerator; -class TxGenerator extends HierNode implements ITxGenerator { +class TxGenerator extends AbstractTxStream implements ITxGenerator { - Long id; - - IWaveform stream; + TxStream stream; - Boolean active = false; - List beginAttrs = new ArrayList<>(); List endAttrs= new ArrayList<>(); - TxGenerator(Long id, TxStream stream, String name){ - super(name, stream); - this.id=id; + TxGenerator(TextDbLoader loader, Long id, String name, TxStream stream){ + super(loader, id, name); this.stream=stream; } - @Override - public Long getId() { - return id; - } - @Override public IWaveform getStream(){ return stream; } @Override - public String getName() { - return name; + public boolean isSame(IWaveform other) { + return(other instanceof TxGenerator && this.getId().equals(other.getId())); } - + public List getBeginAttrs() { return beginAttrs; } @@ -57,7 +46,9 @@ class TxGenerator extends HierNode implements ITxGenerator { public List getEndAttrs() { return endAttrs; } - - Boolean isActive() {return active;} + @Override + public String getKind() { + return stream.getKind(); + } } 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 344a545..c0ab7d0 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 @@ -10,85 +10,16 @@ *******************************************************************************/ package com.minres.scviewer.database.text; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -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.ITxEvent; -import com.minres.scviewer.database.tx.ITxGenerator; -class TxStream extends HierNode implements IWaveform { - - private Long id; - - private TextDbLoader loader; +class TxStream extends AbstractTxStream { final String kind; - private int maxConcurrency = 0; - - private int concurrency = 0; - - boolean concurrencyCalculated = false; - - void setConcurrency(int concurrency) { - this.concurrency = concurrency; - if(concurrency>maxConcurrency) - maxConcurrency = concurrency; - } - - int getConcurrency() { - return this.concurrency; - } - - TreeMap events = new TreeMap<>(); - TxStream(TextDbLoader loader, Long id, String name, String kind){ - super(name); - this.id=id; - this.loader=loader; + super(loader, id, name); this.kind=kind; } - - List getGenerators(){ - return new ArrayList<>(loader.txGenerators.values()); - } - - @Override - public int getWidth() { - return maxConcurrency; - } - - public void addEvent(ITxEvent evt) { - if(!events.containsKey(evt.getTime())) - events.put(evt.getTime(), new IEvent[] {evt}); - else { - IEvent[] evts = events.get(evt.getTime()); - IEvent[] newEvts = Arrays.copyOf(evts, evts.length+1); - newEvts[evts.length]=evt; - events.put(evt.getTime(), newEvts); - } - } - - @Override - public NavigableMap getEvents() { - if(!concurrencyCalculated) calculateConcurrency(); - return events; - } - - @Override - public IEvent[] getEventsAtTime(Long time) { - if(!concurrencyCalculated) calculateConcurrency(); - return events.get(time); - } @Override public boolean isSame(IWaveform other) { @@ -96,43 +27,8 @@ class TxStream extends HierNode implements IWaveform { } @Override - public IEvent[] getEventsBeforeTime(Long time) { - if(!concurrencyCalculated) - calculateConcurrency(); - Entry e = events.floorEntry(time); - if(e==null) - return new IEvent[] {}; - else - return events.floorEntry(time).getValue(); - } - - @Override - public WaveformType getType() { - return WaveformType.TRANSACTION; - } - - @Override - public Long getId() { - return id; - } - - synchronized void calculateConcurrency() { - if(concurrencyCalculated) 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(); - int rowIdx = 0; - for(; rowIdxtx.getBeginTime(); rowIdx++); - if(rowendtime.size()<=rowIdx) - rowendtime.add(tx.getEndTime()); - else - rowendtime.set(rowIdx, tx.getEndTime()); - tx.setConcurrencyIndex(rowIdx); - }); - }); - concurrencyCalculated=true; + public String getKind() { + return kind; } } 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 78c8863..378cccf 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 @@ -113,4 +113,9 @@ public class VCDSignal extends HierNode implements IWaveform { return width; } + @Override + public String getKind() { + return "signal"; + } + } 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 ee7298f..85856a3 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 @@ -26,6 +26,8 @@ public interface IWaveform extends IHierNode { public WaveformType getType(); + public String getKind(); + public int getWidth(); } 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 index 424051f..7226b0c 100644 --- 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 @@ -12,8 +12,8 @@ package com.minres.scviewer.database.tx; import com.minres.scviewer.database.IWaveform; -public interface ITxGenerator { - public Long getId(); +public interface ITxGenerator extends IWaveform { + public IWaveform getStream(); - public String getName(); + }