- added SQLite back end

- reworked graphical representation to use widgets
This commit is contained in:
Eyck Jentzsch 2015-01-03 16:34:32 +01:00
parent 2054426bcf
commit 37ee5bd5e6
128 changed files with 163669 additions and 435 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
/.metadata/
/.graph-browser/
/.recommenders/
/RemoteSystemsTempFiles/
/*.zip

View File

@ -1,8 +1,9 @@
txviewer
SCViewer
========
TxViewer is composed of a set of eclipse plugins to show transaction streams created by the SystemC
Verification Library (SCV). For further description of the SCV please refer to
SCViewer is composed of a set of eclipse plugins to show VCD and transaction streams
created by the SystemC VCD trace implementation and the SystemC Verification Library (SCV).
For further description of the SCV please refer to
http://www.accellera.org/activities/committees/systemc-verification.
The viewer is in early alpha stage and not yet ready for production use!

View File

@ -1,12 +0,0 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Textual transaction database
Bundle-SymbolicName: com.itjw.txviewer.database.text
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.itjw.txviewer.database.text.Activator
Bundle-Vendor: ITJW
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.itjw.txviewer.database,
org.osgi.framework;version="1.3.0"
Require-Bundle: com.itjw.txviewer.database;bundle-version="1.0.0",
org.codehaus.groovy;bundle-version="1.8.6"

View File

@ -1,50 +0,0 @@
/*******************************************************************************
* Copyright (c) 2012 IT Just working.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import java.util.Dictionary
import java.util.Hashtable
import com.itjw.txviewer.database.ITrDb;
import com.itjw.txviewer.database.ITransactionDbFactory;
public class Activator implements BundleActivator {
private static BundleContext context;
static BundleContext getContext() {
return context;
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
Dictionary<String, ?> dict = new Hashtable<String, ?>();
dict.putAt(Constants.SERVICE_RANKING, 1);
context.registerService(ITransactionDbFactory.class, new TrTextDbFactory(), dict);
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext bundleContext) throws Exception {
Activator.context = null;
}
}

View File

@ -1,13 +0,0 @@
package com.itjw.txviewer.database.text
import com.itjw.txviewer.database.ITrDb
import com.itjw.txviewer.database.ITransactionDbFactory;
class TrTextDbFactory implements ITransactionDbFactory {
@Override
public ITrDb createDatabase() {
return new TrTextDb();
}
}

View File

@ -1,4 +0,0 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.

View File

@ -1,7 +0,0 @@
package com.itjw.txviewer.database;
public interface ITransactionDbFactory {
ITrDb createDatabase();
}

View File

@ -1,55 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.itjw.txviewer.feature"
label="Transaction Viewer"
version="1.0.0.qualifier"
provider-name="ITJW">
<description url="http://www.itjw.com/txviewer">
A viewer for SystemC Verification Library transactions
</description>
<copyright url="http://wwwitjw.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<requires>
<import plugin="org.eclipse.ui.views"/>
<import plugin="com.itjw.txviewer.database" version="1.0.0" match="greaterOrEqual"/>
<import plugin="org.codehaus.groovy" version="1.8.6" match="greaterOrEqual"/>
<import plugin="org.eclipse.osgi"/>
<import plugin="org.eclipse.ui"/>
<import plugin="org.eclipse.core.runtime"/>
<import plugin="org.eclipse.jface.text"/>
<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.ui.editors"/>
<import plugin="org.eclipse.ui.ide"/>
<import plugin="org.eclipse.gef"/>
</requires>
<plugin
id="com.itjw.txviewer.database"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.itjw.txviewer.database.text"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.itjw.txviewer.ui"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<site>
<feature url="features/com.itjw.txviewer.feature_1.0.0.201206150709.jar" id="com.itjw.txviewer.feature" version="1.0.0.201206150709">
<category name="com.itjw.txviewer"/>
</feature>
<category-def name="com.itjw.txviewer" label="TxViewer"/>
</site>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="lib" path="sqlite-jdbc-3.8.7.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -0,0 +1 @@
/bin/

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.minres.scviewer.database.sqlite</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ds.core.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7

View File

@ -0,0 +1,3 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false

View File

@ -0,0 +1,14 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Sqlite transaction database
Bundle-SymbolicName: com.minres.scviewer.database.sqlite
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0",
org.eclipse.equinox.util;bundle-version="1.0.500",
org.eclipse.equinox.ds;bundle-version="1.4.200",
org.eclipse.osgi.services;bundle-version="3.4.0"
Bundle-ClassPath: .,
sqlite-jdbc-3.8.7.jar
Service-Component: OSGI-INF/component.xml

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="SQLiteDbFactory">
<implementation class="com.minres.scviewer.database.sqlite.SQLiteDbFactory"/>
<service>
<provide interface="com.minres.scviewer.database.ITransactionDbFactory"/>
</service>
</scr:component>

View File

@ -0,0 +1,6 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
sqlite-jdbc-3.8.7.jar,\
OSGI-INF/

View File

@ -0,0 +1,38 @@
package com.minres.scviewer.database.sqlite;
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType;
import com.minres.scviewer.database.ITrAttribute;
import com.minres.scviewer.database.sqlite.tables.ScvTxAttribute;
public class Attribute implements ITrAttribute{
Transaction trTransaction;
ScvTxAttribute scvAttribute;
public Attribute(Transaction trTransaction, ScvTxAttribute scvAttribute) {
this.trTransaction=trTransaction;
this.scvAttribute=scvAttribute;
}
@Override
public String getName() {
return scvAttribute.getName();
}
@Override
public DataType getDataType() {
return DataType.values()[scvAttribute.getData_type()];
}
@Override
public AssociationType getType() {
return AssociationType.values()[scvAttribute.getType()];
}
@Override
public Object getValue() {
return scvAttribute.getData_value();
}
}

View File

@ -0,0 +1,39 @@
package com.minres.scviewer.database.sqlite;
import java.util.List;
import com.minres.scviewer.database.ITrGenerator;
import com.minres.scviewer.database.ITrStream;
import com.minres.scviewer.database.ITransaction;
import com.minres.scviewer.database.sqlite.tables.ScvGenerator;
public class Generator implements ITrGenerator {
private ITrStream stream;
private ScvGenerator scvGenerator;
public Generator(ITrStream stream, ScvGenerator scvGenerator) {
this.stream=stream;
this.scvGenerator=scvGenerator;
}
@Override
public Long getId() {
return (long) scvGenerator.getId();
}
@Override
public ITrStream getStream() {
return stream;
}
@Override
public String getName() {
return scvGenerator.getName();
}
@Override
public List<ITransaction> getTransactions() {
return null;
}
}

View File

@ -0,0 +1,52 @@
package com.minres.scviewer.database.sqlite;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
import com.minres.scviewer.database.ITrHierNode;
public class HierNode implements ITrHierNode {
protected String name;
protected ArrayList<ITrHierNode> childs;
public HierNode(String name) {
this.name=name;
childs = new ArrayList<ITrHierNode>();
}
@Override
public void addPropertyChangeListener(PropertyChangeListener l) {
// TODO Auto-generated method stub
}
@Override
public void removePropertyChangeListener(PropertyChangeListener l) {
// TODO Auto-generated method stub
}
@Override
public String getFullName() {
return name;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name=name;
}
@Override
public List<ITrHierNode> getChildNodes() {
return childs;
}
}

View File

@ -0,0 +1,33 @@
package com.minres.scviewer.database.sqlite;
import com.minres.scviewer.database.ITrRelation;
import com.minres.scviewer.database.ITransaction;
import com.minres.scviewer.database.RelationType;
public class Relation implements ITrRelation {
RelationType relationType;
Transaction source, target;
public Relation(RelationType relationType, Transaction source, Transaction target) {
this.source = source;
this.target = target;
this.relationType = relationType;
}
@Override
public RelationType getRelationType() {
return relationType;
}
@Override
public ITransaction getSource() {
return source;
}
@Override
public ITransaction getTarget() {
return target;
}
}

View File

@ -0,0 +1,49 @@
package com.minres.scviewer.database.sqlite;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.minres.scviewer.database.sqlite.db.IDatabase;
public class SQLiteDatabase implements IDatabase {
protected String dbFileName;
public SQLiteDatabase(String dbFileName) {
super();
this.dbFileName = dbFileName;
}
@Override
public Connection createConnection() throws SQLException {
// create a database connection and return it
return DriverManager.getConnection(getConnectionUrl() );
}
@Override
public String getConnectionUrl() {
// now we set up a set of fairly basic string variables to use in the body of the code proper
String sJdbc = "jdbc:sqlite";
String sDbUrl = sJdbc + ":" + dbFileName;
// which will produce a legitimate Url for SqlLite JDBC :
// jdbc:sqlite:hello.db
return sDbUrl;
}
@Override
public void close(ResultSet resultSet, Statement statement, Connection connection) {
// TODO Auto-generated method stub
}
@Override
public void close(PreparedStatement preparedStatement, Connection connection) {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,157 @@
package com.minres.scviewer.database.sqlite;
import java.beans.IntrospectionException;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.minres.scviewer.database.EventTime;
import com.minres.scviewer.database.ITrAttribute;
import com.minres.scviewer.database.ITrDb;
import com.minres.scviewer.database.ITrHierNode;
import com.minres.scviewer.database.ITrStream;
import com.minres.scviewer.database.InputFormatException;
import com.minres.scviewer.database.RelationType;
import com.minres.scviewer.database.sqlite.db.IDatabase;
import com.minres.scviewer.database.sqlite.db.SQLiteDatabaseSelectHandler;
import com.minres.scviewer.database.sqlite.tables.ScvSimProps;
import com.minres.scviewer.database.sqlite.tables.ScvStream;
import com.minres.scviewer.database.sqlite.tables.ScvTxEvent;
public class SQLiteDb extends HierNode implements ITrDb {
protected IDatabase database;
protected List<ITrStream> streams;
long timeResolution=1;
private HashMap<String, RelationType> relationMap = new HashMap<String, RelationType>();
IDatabase getDb(){
return database;
}
public SQLiteDb() {
super("SQLiteDb");
}
@Override
public EventTime getMaxTime() {
SQLiteDatabaseSelectHandler<ScvTxEvent> handler = new SQLiteDatabaseSelectHandler<ScvTxEvent>(ScvTxEvent.class,
database, "time = SELECT MAX(time) FROM ScvTxEvent");
try {
List<ScvTxEvent> event = handler.selectObjects();
if(event.size()>0)
return new EventTime(event.get(0).getTime(), "fs");
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
e.printStackTrace();
}
return new EventTime(0L, "s");
}
@Override
public List<ITrStream> getAllStreams() {
if(streams==null){
SQLiteDatabaseSelectHandler<ScvStream> handler = new SQLiteDatabaseSelectHandler<ScvStream>(ScvStream.class, database);
streams=new ArrayList<ITrStream>();
try {
for(ScvStream scvStream:handler.selectObjects()){
streams.add(new Stream(this, scvStream));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
// e.printStackTrace();
}
}
return streams;
}
@Override
public void load(File file) throws InputFormatException {
database=new SQLiteDatabase(file.getAbsolutePath());
SQLiteDatabaseSelectHandler<ScvSimProps> handler = new SQLiteDatabaseSelectHandler<ScvSimProps>(ScvSimProps.class, database);
try {
for(ScvSimProps scvSimProps:handler.selectObjects()){
timeResolution=scvSimProps.getTime_resolution();
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
e.printStackTrace();
}
addHierarchyNodes();
}
@Override
public void clear() {
database=null;
}
@Override
public ITrStream getStreamByName(String name) {
for (ITrStream n : getAllStreams()) {
if (n.getName().equals(name)) {
return n;
}
}
return null;
}
public ITrStream getStreamById(long id) {
for (ITrStream n : getAllStreams()) {
if (n.getId().equals(id)) {
return n;
}
}
return null;
}
private void addHierarchyNodes() throws InputFormatException{
for(ITrStream stream:getAllStreams()){
String[] hier = stream.getFullName().split("\\./");
ITrHierNode node = this;
for(String name:hier){
ITrHierNode n1 = null;
for (ITrHierNode n : node.getChildNodes()) {
if (n.getName().equals(name)) {
n1=n;
break;
}
}
if(name == hier[hier.length-1]){ //leaf
if(n1!=null) {
if(n1 instanceof HierNode){
node.getChildNodes().remove(n1);
stream.getChildNodes().addAll(n1.getChildNodes());
} else {
throw new InputFormatException();
}
}
stream.setName(name);
node.getChildNodes().add(stream);
node=stream;
} else { // intermediate
if(n1 != null) {
node=n1;
} else {
HierNode newNode = new HierNode(name);
node.getChildNodes().add(newNode);
node=newNode;
}
}
}
}
}
public RelationType getRelationType(String relationName) {
if(relationMap.containsKey(relationName)) return relationMap.get(relationName);
RelationType type = new RelationType(relationName);
relationMap.put(relationName, type);
return type;
}
}

View File

@ -0,0 +1,36 @@
package com.minres.scviewer.database.sqlite;
import java.io.File;
import java.io.FileInputStream;
import com.minres.scviewer.database.ITrDb;
import com.minres.scviewer.database.ITransactionDbFactory;
public class SQLiteDbFactory implements ITransactionDbFactory {
private byte[] x = "SQLite format 3".getBytes();
public SQLiteDbFactory() {
}
@Override
public ITrDb createDatabase(File file) {
try {
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[x.length];
int read = fis.read(buffer, 0, x.length);
fis.close();
if (read == x.length)
for (int i = 0; i < x.length; i++)
if (buffer[i] != x[i])
return null;
SQLiteDb db = new SQLiteDb();
db.load(file);
return db;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

View File

@ -0,0 +1,107 @@
package com.minres.scviewer.database.sqlite;
import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import com.minres.scviewer.database.ITrDb;
import com.minres.scviewer.database.ITrGenerator;
import com.minres.scviewer.database.ITrStream;
import com.minres.scviewer.database.ITransaction;
import com.minres.scviewer.database.sqlite.db.SQLiteDatabaseSelectHandler;
import com.minres.scviewer.database.sqlite.tables.ScvGenerator;
import com.minres.scviewer.database.sqlite.tables.ScvStream;
import com.minres.scviewer.database.sqlite.tables.ScvTx;
public class Stream extends HierNode implements ITrStream {
private String fullName;
private SQLiteDb db;
private ScvStream scvStream;
private HashMap<Integer, Generator> generators;
private List<ITransaction> transactions;
public Stream(SQLiteDb trSQLiteDb, ScvStream scvStream) {
super(scvStream.getName());
fullName=scvStream.getName();
this.scvStream=scvStream;
db=trSQLiteDb;
}
@Override
public String getFullName() {
return fullName;
}
@Override
public Long getId() {
return (long) scvStream.getId();
}
@Override
public String getKind() {
return scvStream.getKind();
}
@Override
public SQLiteDb getDb() {
return db;
}
@Override
public List<ITrGenerator> getGenerators() {
if(generators==null){
SQLiteDatabaseSelectHandler<ScvGenerator> handler = new SQLiteDatabaseSelectHandler<ScvGenerator>(
ScvGenerator.class, db.getDb(), "stream="+scvStream.getId());
generators=new HashMap<Integer, Generator>();
try {
for(ScvGenerator scvGenerator:handler.selectObjects()){
generators.put(scvGenerator.getId(), new Generator(this, scvGenerator));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
e.printStackTrace();
}
}
return new ArrayList<ITrGenerator>(generators.values());
}
@Override
public List<ITransaction> getTransactions() {
checkTransactions();
return transactions;
}
@Override
public ITransaction getTransactionById(long id) {
checkTransactions();
for(ITransaction trans:transactions){
if(trans.getId()==id)
return trans;
}
return null;
}
protected void checkTransactions() {
if(transactions==null){
if(generators==null) getGenerators();
SQLiteDatabaseSelectHandler<ScvTx> handler = new SQLiteDatabaseSelectHandler<ScvTx>(ScvTx.class, db.getDb(),
"stream="+scvStream.getId());
transactions=new ArrayList<ITransaction>();
try {
for(ScvTx scvTx:handler.selectObjects()){
transactions.add(new Transaction(this, generators.get(scvTx.getGenerator()), scvTx));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
e.printStackTrace();
}
}
}
}

View File

@ -0,0 +1,154 @@
package com.minres.scviewer.database.sqlite;
import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.EventTime;
import com.minres.scviewer.database.ITrAttribute;
import com.minres.scviewer.database.ITrGenerator;
import com.minres.scviewer.database.ITrRelation;
import com.minres.scviewer.database.ITrStream;
import com.minres.scviewer.database.ITransaction;
import com.minres.scviewer.database.sqlite.db.SQLiteDatabaseSelectHandler;
import com.minres.scviewer.database.sqlite.tables.ScvTx;
import com.minres.scviewer.database.sqlite.tables.ScvTxAttribute;
import com.minres.scviewer.database.sqlite.tables.ScvTxEvent;
import com.minres.scviewer.database.sqlite.tables.ScvTxRelation;
public class Transaction implements ITransaction {
private Stream trStream;
private Generator trGenerator;
private ScvTx scvTx;
private List<ITrAttribute> attributes;
private EventTime begin, end;
private List<ITrRelation> incoming, outgoing;
public Transaction(Stream trStream, Generator trGenerator, ScvTx scvTx) {
this.trStream=trStream;
this.trGenerator=trGenerator;
this.scvTx=scvTx;
}
@Override
public Long getId() {
return (long) scvTx.getId();
}
@Override
public ITrStream getStream() {
return trStream;
}
@Override
public ITrGenerator getGenerator() {
return trGenerator;
}
@Override
public EventTime getBeginTime() {
if(begin==null){
SQLiteDatabaseSelectHandler<ScvTxEvent> handler = new SQLiteDatabaseSelectHandler<ScvTxEvent>(ScvTxEvent.class,
trStream.getDb().getDb(), "tx="+scvTx.getId()+" AND type="+ AssociationType.BEGIN.ordinal());
try {
for(ScvTxEvent scvEvent:handler.selectObjects()){
begin= new EventTime(scvEvent.getTime()*trStream.getDb().timeResolution, "fs");
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
}
}
return begin;
}
@Override
public EventTime getEndTime() {
if(end==null){
SQLiteDatabaseSelectHandler<ScvTxEvent> handler = new SQLiteDatabaseSelectHandler<ScvTxEvent>(ScvTxEvent.class,
trStream.getDb().getDb(), "tx="+scvTx.getId()+" AND type="+ AssociationType.END.ordinal());
try {
for(ScvTxEvent scvEvent:handler.selectObjects()){
end = new EventTime(scvEvent.getTime()*trStream.getDb().timeResolution, "fs");
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
}
}
return end;
}
@Override
public List<ITrAttribute> getAttributes() {
if(attributes==null){
SQLiteDatabaseSelectHandler<ScvTxAttribute> handler = new SQLiteDatabaseSelectHandler<ScvTxAttribute>(
ScvTxAttribute.class, trStream.getDb().getDb(), "tx="+scvTx.getId());
try {
attributes = new ArrayList<ITrAttribute>();
for(ScvTxAttribute scvAttribute:handler.selectObjects()){
attributes.add(new Attribute(this, scvAttribute));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
}
}
return attributes;
}
@Override
public Collection<ITrRelation> getIncomingRelations() {
if(incoming==null){
SQLiteDatabaseSelectHandler<ScvTxRelation> handler = new SQLiteDatabaseSelectHandler<ScvTxRelation>(
ScvTxRelation.class, trStream.getDb().getDb(), "sink="+scvTx.getId());
try {
incoming = new ArrayList<ITrRelation>();
for(ScvTxRelation scvRelation:handler.selectObjects()){
incoming.add(createRelation(scvRelation, false));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
}
}
return incoming;
}
@Override
public Collection<ITrRelation> getOutgoingRelations() {
if(outgoing==null){
SQLiteDatabaseSelectHandler<ScvTxRelation> handler = new SQLiteDatabaseSelectHandler<ScvTxRelation>(
ScvTxRelation.class, trStream.getDb().getDb(), "src="+scvTx.getId());
try {
outgoing = new ArrayList<ITrRelation>();
for(ScvTxRelation scvRelation:handler.selectObjects()){
outgoing.add(createRelation(scvRelation, true));
}
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
}
}
return outgoing;
}
private ITrRelation createRelation(ScvTxRelation rel, boolean outgoing) {
long otherId = outgoing?rel.getSink():rel.getSrc();
try {
List<ScvTx> scvTx=new SQLiteDatabaseSelectHandler<ScvTx>(ScvTx.class, trStream.getDb().getDb(), "id="+otherId).selectObjects();
assert(scvTx.size()==1);
ITrStream stream = trStream.getDb().getStreamById(scvTx.get(0).getStream());
Transaction that=(Transaction) stream.getTransactionById(otherId);
if(outgoing)
return new Relation(trStream.getDb().getRelationType(rel.getName()), this, that);
else
return new Relation(trStream.getDb().getRelationType(rel.getName()), that, this);
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
| InvocationTargetException | SQLException | IntrospectionException e) {
}
return null;
}
}

View File

@ -0,0 +1,84 @@
package com.minres.scviewer.database.sqlite.db;
import java.lang.reflect.Field;
/**
* An abstract class that handles insert/select-operations into/from a database
*
* @author Tino for http://www.java-blog.com
*
* @param <T>
*/
public abstract class AbstractDatabaseHandler<T> {
/**
* The type of the objects that should be created and filled with values
* from the database or inserted into the database
*/
protected Class<T> type;
/**
* Contains the settings to create a connection to the database like
* host/port/database/user/password
*/
protected IDatabase databaseConnectionFactory;
/** The SQL-select-query */
protected final String query;
/**
* Constructor
*
* @param type
* The type of the objects that should be created and filled with
* values from the database or inserted into the database
* @param databaseConnecter
* Contains the settings to create a connection to the database
* like host/port/database/user/password
*/
protected AbstractDatabaseHandler(Class<T> type,
IDatabase databaseConnectionFactory, String criterion) {
this.databaseConnectionFactory = databaseConnectionFactory;
this.type = type;
this.query = createQuery(criterion);
}
/**
* Create the SQL-String to insert into / select from the database
*
* @return the SQL-String
*/
protected abstract String createQuery(String criterion);
/**
*
* Creates a comma-separated-String with the names of the variables in this
* class
*
* @param usePlaceHolders
* true, if PreparedStatement-placeholders ('?') should be used
* instead of the names of the variables
* @return
*/
protected String getColumns(boolean usePlaceHolders) {
StringBuilder sb = new StringBuilder();
boolean first = true;
/* Iterate the column-names */
for (Field f : type.getDeclaredFields()) {
if (first)
first = false;
else
sb.append(", ");
if (usePlaceHolders)
sb.append("?");
else
sb.append(f.getName());
}
return sb.toString();
}
}

View File

@ -0,0 +1,48 @@
package com.minres.scviewer.database.sqlite.db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* Creates a connection to a database.
*
* @author Tino
* @created 03.12.2008
*
*/
public interface IDatabase {
/**
* Establishes a new connection to the database
*
* @return A new connection to the database
* @throws SQLException
*/
public Connection createConnection() throws SQLException;
/**
* Returns the connection url
*
* @return
*/
public String getConnectionUrl();
/**
* releases the result set
*
* @return
*/
public void close(ResultSet resultSet, Statement statement, Connection connection);
/**
* releases the preparedStatement
*
* @return
*/
public void close(PreparedStatement preparedStatement, Connection connection);
}

View File

@ -0,0 +1,94 @@
package com.minres.scviewer.database.sqlite.db;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
/**
*
* Class that inserts a list of <T>s into the corresponding database-table.
*
* @author Tino for http://www.java-blog.com
*
* @param <T>
*/
public class SQLiteDatabaseInsertHandler<T> extends AbstractDatabaseHandler<T> {
public SQLiteDatabaseInsertHandler(Class<T> type,
IDatabase databaseConnecter) {
super(type, databaseConnecter, null);
}
@Override
protected String createQuery(String criterion) {
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ");
sb.append(type.getSimpleName());
sb.append("(");
sb.append(super.getColumns(false));
sb.append(")");
sb.append(" VALUES (");
sb.append(super.getColumns(true));
sb.append(")");
return sb.toString();
}
/**
* Inserts a list of <T>s into the corresponding database-table
*
* @param list
* List of <T>s that should be inserted into the corresponding
* database-table
*
* @throws SQLException
* @throws SecurityException
* @throws IllegalArgumentException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IntrospectionException
* @throws InvocationTargetException
*/
public void insertObjects(List<T> list) throws SQLException,
SecurityException, IllegalArgumentException,
InstantiationException, IllegalAccessException,
IntrospectionException, InvocationTargetException {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = databaseConnectionFactory.createConnection();
preparedStatement = connection.prepareStatement(query);
for (T instance : list) {
int i = 0;
for (Field field : type.getDeclaredFields()) {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
field.getName(), type);
Method method = propertyDescriptor
.getReadMethod();
Object value = method.invoke(instance);
preparedStatement.setObject(++i, value);
}
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
} finally {
databaseConnectionFactory.close(preparedStatement, connection);
}
}
}

View File

@ -0,0 +1,135 @@
package com.minres.scviewer.database.sqlite.db;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
*
* Class that creates a list of <T>s filled with values from the corresponding
* database-table.
*
* @author Tino for http://www.java-blog.com
*
* @param <T>
*/
public class SQLiteDatabaseSelectHandler<T> extends AbstractDatabaseHandler<T> {
public SQLiteDatabaseSelectHandler(Class<T> type,
IDatabase databaseConnectionFactory) {
super(type, databaseConnectionFactory, null);
}
public SQLiteDatabaseSelectHandler(Class<T> type,
IDatabase databaseConnectionFactory, String criteria) {
super(type, databaseConnectionFactory, criteria);
}
@Override
protected String createQuery(String criterion) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT ");
sb.append(super.getColumns(false));
sb.append(" FROM ");
/* We assume the table-name exactly matches the simpleName of T */
sb.append(type.getSimpleName());
if(criterion!=null){
sb.append(" WHERE ( ");
sb.append(criterion);
sb.append(" )");
}
return sb.toString();
}
/**
* Creates a list of <T>s filled with values from the corresponding
* database-table
*
* @return List of <T>s filled with values from the corresponding
* database-table
*
* @throws SQLException
* @throws SecurityException
* @throws IllegalArgumentException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IntrospectionException
* @throws InvocationTargetException
*/
public List<T> selectObjects() throws SQLException,
SecurityException, IllegalArgumentException,
InstantiationException, IllegalAccessException,
IntrospectionException, InvocationTargetException {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = databaseConnectionFactory.createConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(query);
return createObjects(resultSet);
} finally {
databaseConnectionFactory.close(resultSet, statement, connection);
}
}
/**
*
* Creates a list of <T>s filled with values from the provided ResultSet
*
* @param resultSet
* ResultSet that contains the result of the
* database-select-query
*
* @return List of <T>s filled with values from the provided ResultSet
*
* @throws SecurityException
* @throws IllegalArgumentException
* @throws SQLException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws IntrospectionException
* @throws InvocationTargetException
*/
private List<T> createObjects(ResultSet resultSet)
throws SecurityException, IllegalArgumentException,
SQLException, InstantiationException,
IllegalAccessException, IntrospectionException,
InvocationTargetException {
List<T> list = new ArrayList<T>();
while (resultSet.next()) {
T instance = type.newInstance();
for (Field field : type.getDeclaredFields()) {
/* We assume the table-column-names exactly match the variable-names of T */
Object value = resultSet.getObject(field.getName());
if(value!=null){
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(field.getName(), type);
propertyDescriptor.getWriteMethod().invoke(instance, value);
}
}
list.add(instance);
}
return list;
}
}

View File

@ -0,0 +1,49 @@
package com.minres.scviewer.database.sqlite.tables;
public class ScvGenerator {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getStream() {
return stream;
}
public void setStream(int stream) {
this.stream = stream;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBegin_attr() {
return begin_attr;
}
public void setBegin_attr(int begin_attr) {
this.begin_attr = begin_attr;
}
public int getEnd_attr() {
return end_attr;
}
public void setEnd_attr(int end_attr) {
this.end_attr = end_attr;
}
private int id;
private int stream;
private String name;
private int begin_attr;
private int end_attr;
}

View File

@ -0,0 +1,19 @@
package com.minres.scviewer.database.sqlite.tables;
public class ScvSimProps {
private long time_resolution;
public ScvSimProps() {
super();
}
public long getTime_resolution() {
return time_resolution;
}
public void setTime_resolution(long time_resolution) {
this.time_resolution = time_resolution;
}
}

View File

@ -0,0 +1,31 @@
package com.minres.scviewer.database.sqlite.tables;
public class ScvStream {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
private int id;
private String name;
private String kind;
}

View File

@ -0,0 +1,31 @@
package com.minres.scviewer.database.sqlite.tables;
public class ScvTx {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getGenerator() {
return generator;
}
public void setGenerator(int generator) {
this.generator = generator;
}
public int getStream() {
return stream;
}
public void setStream(int stream) {
this.stream = stream;
}
private int id;
private int generator;
private int stream;
}

View File

@ -0,0 +1,50 @@
package com.minres.scviewer.database.sqlite.tables;
public class ScvTxAttribute {
public int getTx() {
return tx;
}
public void setTx(int tx) {
this.tx = tx;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getData_type() {
return data_type;
}
public void setData_type(int data_type) {
this.data_type = data_type;
}
public String getData_value() {
return data_value;
}
public void setData_value(String data_value) {
this.data_value = data_value;
}
private int tx;
private int type;
private String name;
private int data_type;
private String data_value;
}

View File

@ -0,0 +1,31 @@
package com.minres.scviewer.database.sqlite.tables;
public class ScvTxEvent {
public int getTx() {
return tx;
}
public void setTx(int tx) {
this.tx = tx;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
private int tx;
private int type;
private long time;
}

View File

@ -0,0 +1,32 @@
package com.minres.scviewer.database.sqlite.tables;
public class ScvTxRelation {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSrc() {
return src;
}
public void setSrc(int src) {
this.src = src;
}
public int getSink() {
return sink;
}
public void setSink(int sink) {
this.sink = sink;
}
private String name;
private int src;
private int sink;
}

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.itjw.txviewer.database.text</name>
<name>com.minres.scviewer.database.text</name>
<comment></comment>
<projects>
</projects>
@ -20,6 +20,11 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ds.core.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>

View File

@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7

View File

@ -0,0 +1,15 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Textual transaction database
Bundle-SymbolicName: com.minres.scviewer.database.text
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.minres.scviewer.database,
org.osgi.framework;version="1.3.0"
Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0",
org.codehaus.groovy;bundle-version="1.8.6",
org.eclipse.equinox.util;bundle-version="1.0.500",
org.eclipse.equinox.ds;bundle-version="1.4.200",
org.eclipse.osgi.services;bundle-version="3.4.0"
Service-Component: OSGI-INF/component.xml

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="TextDbFactory">
<implementation class="com.minres.scviewer.database.text.TextDbFactory"/>
<service>
<provide interface="com.minres.scviewer.database.ITransactionDbFactory"/>
</service>
</scr:component>

View File

@ -0,0 +1,6 @@
output.. = bin/
bin.includes = META-INF/,\
.,\
component.xml,\
OSGI-INF/
source.. = src/

View File

@ -8,20 +8,22 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text
package com.minres.scviewer.database.text
import com.itjw.txviewer.database.ITrAttrType;
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType;
import com.minres.scviewer.database.ITrAttrType;
class TrAttrType implements ITrAttrType {
class AttrType implements ITrAttrType {
String name
String dataType
ITrAttrType.AttributeType type
DataType dataType
AssociationType type
static TrAttrType getAttrType(String name, String dataType, ITrAttrType.AttributeType type){
TrAttrTypeFactory.instance.getAttrType(name, dataType, type)
static AttrType getAttrType(String name, DataType dataType, AssociationType type){
AttrTypeFactory.instance.getAttrType(name, dataType, type)
}
TrAttrType(String name, String dataType, ITrAttrType.AttributeType type){
AttrType(String name, DataType dataType, AssociationType type){
this.name=name
this.dataType=dataType
this.type=type

View File

@ -8,27 +8,29 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text
package com.minres.scviewer.database.text
import com.itjw.txviewer.database.ITrAttrType
import com.itjw.txviewer.database.ITrAttribute
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType
import com.minres.scviewer.database.ITrAttrType
import com.minres.scviewer.database.ITrAttribute
class TrAttrTypeFactory {
private static final instance = new TrAttrTypeFactory()
class AttrTypeFactory {
private static final instance = new AttrTypeFactory()
def attributes = [:]
private TrAttrTypeFactory() {
TrAttrTypeFactory.metaClass.constructor = {-> instance }
private AttrTypeFactory() {
AttrTypeFactory.metaClass.constructor = {-> instance }
}
ITrAttrType getAttrType(String name, String dataType, ITrAttrType.AttributeType type){
def key = name+":"+dataType
ITrAttrType getAttrType(String name, DataType dataType, AssociationType type){
def key = name+":"+dataType.toString()
ITrAttrType res
if(attributes.containsKey(key)){
res=attributes[key]
} else {
res=new TrAttrType(name, dataType, type)
res=new AttrType(name, dataType, type)
attributes[key]=res
}
return res

View File

@ -8,22 +8,24 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text
package com.minres.scviewer.database.text
import com.itjw.txviewer.database.ITrAttrType;
import com.itjw.txviewer.database.ITrAttribute
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType;
import com.minres.scviewer.database.ITrAttrType;
import com.minres.scviewer.database.ITrAttribute
class TrAttribute implements ITrAttribute{
class Attribute implements ITrAttribute{
TrAttrType attributeType
AttrType attributeType
def value
TrAttribute(String name, String dataType, ITrAttrType.AttributeType type, value){
attributeType = TrAttrTypeFactory.instance.getAttrType(name, dataType, type)
Attribute(String name, DataType dataType, AssociationType type, value){
attributeType = AttrTypeFactory.instance.getAttrType(name, dataType, type)
switch(dataType){
case "STRING":
case "ENUMERATION":
case DataType.STRING:
case DataType.ENUMERATION:
this.value=value[1..-2]
break;
default:
@ -31,11 +33,11 @@ class TrAttribute implements ITrAttribute{
}
}
TrAttribute(TrAttrType other){
Attribute(AttrType other){
attributeType=other
}
TrAttribute(TrAttrType other, value){
Attribute(AttrType other, value){
this(other.name, other.dataType, other.type, value)
}
@ -45,13 +47,13 @@ class TrAttribute implements ITrAttribute{
}
@Override
public ITrAttrType.AttributeType getType() {
return attributeType.getType();
public AssociationType getType() {
attributeType.type;
}
@Override
public String getDataType() {
return attributeType.getDataType();
@Override
public DataType getDataType() {
attributeType.dataType;
}
}

View File

@ -8,20 +8,20 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text
package com.minres.scviewer.database.text
import java.util.ArrayList;
import java.util.List;
import com.itjw.txviewer.database.ITrAttrType
import com.itjw.txviewer.database.ITrAttribute;
import com.itjw.txviewer.database.ITrGenerator;
import com.itjw.txviewer.database.ITrStream;
import com.itjw.txviewer.database.ITransaction;
import com.minres.scviewer.database.ITrAttrType
import com.minres.scviewer.database.ITrAttribute;
import com.minres.scviewer.database.ITrGenerator;
import com.minres.scviewer.database.ITrStream;
import com.minres.scviewer.database.ITransaction;
class TrGenerator implements ITrGenerator{
class Generator implements ITrGenerator{
Long id
TrStream stream
Stream stream
String name
Boolean active = false
ArrayList<ITransaction> transactions=[]
@ -31,7 +31,7 @@ class TrGenerator implements ITrGenerator{
ArrayList<ITrAttrType> end_attrs= []
int end_attrs_idx = 0
TrGenerator(int id, TrStream stream, name){
Generator(int id, Stream stream, name){
this.id=id
this.stream=stream
this.name=name

View File

@ -8,23 +8,23 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text;
package com.minres.scviewer.database.text;
import java.beans.PropertyChangeListener;
import java.util.List;
import java.util.Map;
import com.itjw.txviewer.database.ITrHierNode;
import com.minres.scviewer.database.ITrHierNode;
class TrHierNode implements ITrHierNode {
class HierNode implements ITrHierNode {
String name
def childs = []
public TrHierNode(){
public HierNode(){
}
public TrHierNode(String name){
public HierNode(String name){
this.name=name
}

View File

@ -1,10 +1,10 @@
package com.itjw.txviewer.database.text
package com.minres.scviewer.database.text
import com.itjw.txviewer.database.ITrRelation
import com.itjw.txviewer.database.ITransaction;
import com.itjw.txviewer.database.RelationType;
import com.minres.scviewer.database.ITrRelation
import com.minres.scviewer.database.ITransaction;
import com.minres.scviewer.database.RelationType;
class TrRelation implements ITrRelation {
class Relation implements ITrRelation {
Transaction source
Transaction target
@ -12,7 +12,7 @@ class TrRelation implements ITrRelation {
RelationType relationType
public TrRelation(RelationType relationType, Transaction source, Transaction target) {
public Relation(RelationType relationType, Transaction source, Transaction target) {
this.source = source;
this.target = target;
this.relationType = relationType;

View File

@ -8,25 +8,23 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text
package com.minres.scviewer.database.text
import java.beans.PropertyChangeListener;
import java.util.List;
import java.util.Map;
import com.itjw.txviewer.database.ITrDb
import com.itjw.txviewer.database.ITrGenerator
import com.itjw.txviewer.database.ITrHierNode
import com.itjw.txviewer.database.ITrStream
import com.itjw.txviewer.database.ITransaction
import com.minres.scviewer.database.ITrDb
import com.minres.scviewer.database.ITrGenerator
import com.minres.scviewer.database.ITrHierNode
import com.minres.scviewer.database.ITrStream
import com.minres.scviewer.database.ITransaction
class TrStream extends TrHierNode implements ITrStream {
class Stream extends HierNode implements ITrStream {
Long id;
TrTextDb database
String name;
TextDb database
String fullName;
@ -34,21 +32,13 @@ class TrStream extends TrHierNode implements ITrStream {
def generators = [];
def childs = []
private allTransactions;
public TrHierNode(String name){
this.name=name
}
@Override
public List<ITrHierNode> getChildNodes() {
return childs.sort{it.name};
}
TrStream(int id, TrTextDb db, String name, String kind){
Stream(int id, TextDb db, String name, String kind){
this.id=id
this.database=db
this.name=name
@ -65,7 +55,7 @@ class TrStream extends TrHierNode implements ITrStream {
return database;
}
@Override
// FIXME: maybe need to be somewhere else
public int getMaxConcurrrentTx() {
def rowendtime = [0]
getTransactions().each{Transaction tx ->
@ -86,4 +76,11 @@ class TrStream extends TrHierNode implements ITrStream {
allTransactions=generators.transactions.flatten().sort{it.beginTime.value}
return allTransactions
}
@Override
public ITransaction getTransactionById(long id) {
if(!allTransactions)
allTransactions=generators.transactions.flatten().sort{it.beginTime.value}
allTransactions.find{it.id==id}
}
}

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text;
package com.minres.scviewer.database.text;
import java.io.InputStream;
import java.util.Collection;
@ -17,17 +17,19 @@ import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import com.itjw.txviewer.database.ITrAttrType;
import com.itjw.txviewer.database.ITrAttribute;
import com.itjw.txviewer.database.ITrDb;
import com.itjw.txviewer.database.ITrGenerator;
import com.itjw.txviewer.database.ITrHierNode;
import com.itjw.txviewer.database.ITrStream;
import com.itjw.txviewer.database.InputFormatException;
import com.itjw.txviewer.database.EventTime
import com.itjw.txviewer.database.RelationType
import com.minres.scviewer.database.AssociationType;
import com.minres.scviewer.database.DataType;
import com.minres.scviewer.database.ITrAttrType;
import com.minres.scviewer.database.ITrAttribute;
import com.minres.scviewer.database.ITrDb;
import com.minres.scviewer.database.ITrGenerator;
import com.minres.scviewer.database.ITrHierNode;
import com.minres.scviewer.database.ITrStream;
import com.minres.scviewer.database.InputFormatException;
import com.minres.scviewer.database.EventTime
import com.minres.scviewer.database.RelationType
public class TrTextDb extends TrHierNode implements ITrDb{
public class TextDb extends HierNode implements ITrDb{
private EventTime maxTime;
@ -58,7 +60,7 @@ public class TrTextDb extends TrHierNode implements ITrDb{
public Map<Long, ITrGenerator> getGeneratorsById() {
TreeMap<Long, ITrGenerator> res = new TreeMap<Long, ITrGenerator>();
streams.each{TrStream stream -> stream.generators.each{res.put(it.id, id)} }
streams.each{Stream stream -> stream.generators.each{res.put(it.id, id)} }
return res;
}
@ -67,21 +69,16 @@ public class TrTextDb extends TrHierNode implements ITrDb{
maxTime=new EventTime(0, "ns")
}
void load(InputStream inp) throws InputFormatException {
parseInput(inp)
}
void parseFromTextFile(filename){
def file = new File(filename);
this.databaseName = filname;
void load(File file) throws InputFormatException {
this.name = file.name;
parseInput(file)
}
private def parseInput(input){
private def parseInput(File input){
def streamsById = [:]
def generatorsById = [:]
def transactionsById = [:]
TrGenerator generator
Generator generator
Transaction transaction
boolean endTransaction=false
def matcher
@ -94,19 +91,19 @@ public class TrTextDb extends TrHierNode implements ITrDb{
case "end_attribute":
if ((matcher = line =~ /^scv_tr_stream\s+\(ID (\d+),\s+name\s+"([^"]+)",\s+kind\s+"([^"]+)"\)$/)) {
def id = Integer.parseInt(matcher[0][1])
def stream = new TrStream(id, this, matcher[0][2], matcher[0][3])
def stream = new Stream(id, this, matcher[0][2], matcher[0][3])
streams<<stream
streamsById[id]=stream
} else if ((matcher = line =~ /^scv_tr_generator\s+\(ID\s+(\d+),\s+name\s+"([^"]+)",\s+scv_tr_stream\s+(\d+),$/)) {
def id = Integer.parseInt(matcher[0][1])
ITrStream stream=streamsById[Integer.parseInt(matcher[0][3])]
generator=new TrGenerator(id, stream, matcher[0][2])
generator=new Generator(id, stream, matcher[0][2])
stream.generators<<generator
generatorsById[id]=generator
} else if ((matcher = line =~ /^begin_attribute \(ID (\d+), name "([^"]+)", type "([^"]+)"\)$/)) {
generator.begin_attrs << TrAttrType.getAttrType(matcher[0][2], matcher[0][3], ITrAttrType.AttributeType.BEGIN)
generator.begin_attrs << AttrType.getAttrType(matcher[0][2], DataType.valueOf(matcher[0][3]), AssociationType.BEGIN)
} else if ((matcher = line =~ /^end_attribute \(ID (\d+), name "([^"]+)", type "([^"]+)"\)$/)) {
generator.end_attrs << TrAttrType.getAttrType(matcher[0][2], matcher[0][3], ITrAttrType.AttributeType.END)
generator.end_attrs << AttrType.getAttrType(matcher[0][2], DataType.valueOf(matcher[0][3]), AssociationType.END)
}
break;
case ")":
@ -114,7 +111,7 @@ public class TrTextDb extends TrHierNode implements ITrDb{
break
case "tx_begin"://matcher = line =~ /^tx_begin\s+(\d+)\s+(\d+)\s+(\d+)\s+([munpf]?s)/
def id = Integer.parseInt(tokens[1])
TrGenerator gen=generatorsById[Integer.parseInt(tokens[2])]
Generator gen=generatorsById[Integer.parseInt(tokens[2])]
transaction = new Transaction(id, gen.stream, gen, new EventTime(Integer.parseInt(tokens[3]), tokens[4]))
gen.transactions << transaction
transactionsById[id]= transaction
@ -133,13 +130,13 @@ public class TrTextDb extends TrHierNode implements ITrDb{
break
case "tx_record_attribute"://matcher = line =~ /^tx_record_attribute\s+(\d+)\s+"([^"]+)"\s+(\S+)\s*=\s*(.+)$/
def id = Integer.parseInt(tokens[1])
transactionsById[id].attributes<<new TrAttribute(tokens[2][1..-2], tokens[3], ITrAttrType.AttributeType.UNSPECIFIED, tokens[5..-1].join(' '))
transactionsById[id].attributes<<new Attribute(tokens[2][1..-2], DataType.valueOf(tokens[3]), AssociationType.RECORD, tokens[5..-1].join(' '))
break
case "a"://matcher = line =~ /^a\s+(.+)$/
if(endTransaction){
transaction.attributes << new TrAttribute(transaction.generator.end_attrs[0], tokens[1])
transaction.attributes << new Attribute(transaction.generator.end_attrs[0], tokens[1])
} else {
transaction.attributes << new TrAttribute(transaction.generator.begin_attrs[0], tokens[1])
transaction.attributes << new Attribute(transaction.generator.begin_attrs[0], tokens[1])
}
break
case "tx_relation"://matcher = line =~ /^tx_relation\s+\"(\S+)\"\s+(\d+)\s+(\d+)$/
@ -147,7 +144,7 @@ public class TrTextDb extends TrHierNode implements ITrDb{
Transaction tr2= transactionsById[Integer.parseInt(tokens[3])]
def relType=tokens[1][1..-2]
if(!relationTypes.containsKey(relType)) relationTypes[relType]=new RelationType(relType)
def rel = new TrRelation(relationTypes[relType], tr1, tr2)
def rel = new Relation(relationTypes[relType], tr1, tr2)
tr1.outgoingRelations<<rel
tr2.incomingRelations<<rel
break
@ -160,14 +157,14 @@ public class TrTextDb extends TrHierNode implements ITrDb{
}
def addHierarchyNodes(){
streams.each{ TrStream stream->
streams.each{ Stream stream->
def hier = stream.fullName.split(/\./)
ITrHierNode node = this
hier.each { name ->
def n1 = node.childNodes.find{it.name == name}
if(name == hier[-1]){ //leaf
if(n1!=null) {
if(n1 instanceof TrHierNode){
if(n1 instanceof HierNode){
node.childNodes.remove(n1)
stream.childNodes.addAll(n1.childNodes)
} else {
@ -181,7 +178,7 @@ public class TrTextDb extends TrHierNode implements ITrDb{
if(n1 != null) {
node=n1
} else {
TrHierNode newNode = new TrHierNode(name)
HierNode newNode = new HierNode(name)
node.childNodes<<newNode
node=newNode
}

View File

@ -0,0 +1,31 @@
package com.minres.scviewer.database.text
import java.io.FileInputStream;
import com.minres.scviewer.database.ITrDb
import com.minres.scviewer.database.ITransactionDbFactory;
class TextDbFactory implements ITransactionDbFactory {
byte[] x = "scv_tr_stream".bytes
@Override
public ITrDb createDatabase(File file) {
try {
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[x.size()];
def read = fis.read(buffer, 0, x.size());
fis.close();
if(read==x.size())
for(int i=0; i<x.size(); i++)
if(buffer[i]!=x[i]) return null;
def db = new TextDb();
db.load(file)
return db
} catch (Exception e) {
e.printStackTrace()
}
return null;
}
}

View File

@ -8,20 +8,20 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database.text
package com.minres.scviewer.database.text
import java.util.Collection;
import java.util.Set
import com.itjw.txviewer.database.*
import com.minres.scviewer.database.*
class Transaction implements ITransaction {
Long id
TrGenerator generator
Generator generator
TrStream stream
Stream stream
EventTime beginTime
@ -33,7 +33,7 @@ class Transaction implements ITransaction {
def outgoingRelations =[]
Transaction(int id, TrStream stream, TrGenerator generator, EventTime begin){
Transaction(int id, Stream stream, Generator generator, EventTime begin){
this.id=id
this.generator=generator
this.beginTime=begin

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.itjw.txviewer.database</name>
<name>com.minres.scviewer.database</name>
<comment></comment>
<projects>
</projects>

View File

@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7

View File

@ -1,9 +1,8 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Transaction Database
Bundle-SymbolicName: com.itjw.txviewer.database
Bundle-SymbolicName: com.minres.scviewer.database
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: ITJW
Bundle-Vendor: MINRES Technologies GmbH
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Export-Package: com.itjw.txviewer.database
Export-Package: com.minres.scviewer.database

View File

@ -0,0 +1,3 @@
package com.minres.scviewer.database;
public enum AssociationType {BEGIN, RECORD, END}

View File

@ -0,0 +1,16 @@
package com.minres.scviewer.database;
public enum DataType {
BOOLEAN, // bool
ENUMERATION, // enum
INTEGER, // char, short, int, long, long long, sc_int, sc_bigint
UNSIGNED, // unsigned { char, short, int, long, long long }, sc_uint, sc_biguint
FLOATING_POINT_NUMBER, // float, double
BIT_VECTOR, // sc_bit, sc_bv
LOGIC_VECTOR, // sc_logic, sc_lv
FIXED_POINT_INTEGER, // sc_fixed
UNSIGNED_FIXED_POINT_INTEGER, // sc_ufixed
RECORD, // struct/class
POINTER, // T*
ARRAY, // T[N]
STRING // string, std::string
};

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
public class EventTime implements Comparable<EventTime>{

View File

@ -8,11 +8,10 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
public interface ITrAttrType {
enum AttributeType {UNSPECIFIED, BEGIN, END};
public String getName();
public String getDataType();
public AttributeType getType();
public DataType getDataType();
public AssociationType getType();
}

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
public interface ITrAttribute extends ITrAttrType {
public Object getValue();

View File

@ -8,8 +8,9 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
import java.io.File;
import java.io.InputStream;
import java.util.List;
@ -22,7 +23,7 @@ public interface ITrDb extends ITrHierNode {
public List<ITrStream> getAllStreams();
public void load(InputStream inp) throws InputFormatException;
public void load(File inp) throws InputFormatException;
public void clear();

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
import java.util.List;

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
import java.beans.PropertyChangeListener;
import java.util.List;

View File

@ -1,4 +1,4 @@
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
public interface ITrRelation {

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
import java.util.List;
@ -24,6 +24,6 @@ public interface ITrStream extends ITrHierNode {
public List<ITransaction> getTransactions();
public int getMaxConcurrrentTx();
public ITransaction getTransactionById(long id);
}

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
import java.util.Collection;
import java.util.List;

View File

@ -0,0 +1,9 @@
package com.minres.scviewer.database;
import java.io.File;
public interface ITransactionDbFactory {
ITrDb createDatabase(File file);
}

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
public class InputFormatException extends Exception {

View File

@ -8,7 +8,7 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.database;
package com.minres.scviewer.database;
public class RelationType {

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.itjw.txviewer.feature</name>
<name>com.minres.scviewer.feature</name>
<comment></comment>
<projects>
</projects>

View File

@ -0,0 +1,102 @@
featureName=SystemC simulation results viewer
providerName=MINRES Technologies GmbH
updateSiteName=SC Viewer Updates
description=SystemC simulation results viewer dependencies
licenseURL=license.html
license=\
ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
March 17, 2005\n\
\n\
Usage Of Content\n\
\n\
THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
\n\
Applicable Licenses\n\
\n\
Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
is provided to you under the terms and conditions of the Eclipse Public\n\
License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
For purposes of the EPL, "Program" will mean the Content.\n\
\n\
Content includes, but is not limited to, source code, object code,\n\
documentation and other files maintained in the Eclipse.org CVS\n\
repository ("Repository") in CVS modules ("Modules") and made available\n\
as downloadable archives ("Downloads").\n\
\n\
- Content may be structured and packaged into modules to facilitate delivering,\n\
extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
plug-in fragments ("Fragments"), and features ("Features").\n\
- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
in a directory named "plugins".\n\
- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
Each Feature may be packaged as a sub-directory in a directory named "features".\n\
Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
- Features may also include other Features ("Included Features"). Within a Feature, files\n\
named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
\n\
Features may also include other Features ("Included Features"). Files named\n\
"feature.xml" may contain a list of the names and version numbers of\n\
Included Features.\n\
\n\
The terms and conditions governing Plug-ins and Fragments should be\n\
contained in files named "about.html" ("Abouts"). The terms and\n\
conditions governing Features and Included Features should be contained\n\
in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
Licenses may be located in any directory of a Download or Module\n\
including, but not limited to the following locations:\n\
\n\
- The top-level (root) directory\n\
- Plug-in and Fragment directories\n\
- Inside Plug-ins and Fragments packaged as JARs\n\
- Sub-directories of the directory named "src" of certain Plug-ins\n\
- Feature directories\n\
\n\
Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
Eclipse Update Manager, you must agree to a license ("Feature Update\n\
License") during the installation process. If the Feature contains\n\
Included Features, the Feature Update License should either provide you\n\
with the terms and conditions governing the Included Features or inform\n\
you where you can locate them. Feature Update Licenses may be found in\n\
the "license" property of files named "feature.properties". Such Abouts,\n\
Feature Licenses and Feature Update Licenses contain the terms and\n\
conditions (or references to such terms and conditions) that govern your\n\
use of the associated Content in that directory.\n\
\n\
THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
\n\
- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
- IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
- Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
\n\
IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
govern that particular Content.\n\
\n\
Cryptography\n\
\n\
Content may contain encryption software. The country in which you are\n\
currently may have restrictions on the import, possession, and use,\n\
and/or re-export to another country, of encryption software. BEFORE\n\
using any encryption software, please check the country's laws,\n\
regulations and policies concerning the import, possession, or use,\n\
and re-export of encryption software, to see if this is permitted.\n\
\n\
Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n

View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="com.minres.scviewer.feature"
label="%featureName"
version="1.0.0.qualifier"
provider-name="%providerName">
<description>
A viewer for SystemC Verification Library transactions. It supports
a SQLite based recording as well as the built-in text base recording.
</description>
<copyright>
Copyright (c) 2015 MINRES Technologies GmbH.
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
</copyright>
<license url="%licenseURL">
%license
</license>
<url>
<update label="%updateSiteName" url="http://www.minres.com/scviewer/update"/>
<discovery label="MINRES Website" url="http://www.minres.com"/>
</url>
<requires>
<import plugin="org.codehaus.groovy" version="1.8.6" match="greaterOrEqual"/>
<import plugin="org.eclipse.equinox.util" version="1.0.500" match="greaterOrEqual"/>
<import plugin="org.eclipse.equinox.ds" version="1.4.200" match="greaterOrEqual"/>
<import plugin="org.eclipse.osgi.services" version="3.4.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.osgi"/>
<import plugin="org.eclipse.core.runtime"/>
<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.jface.text"/>
<import plugin="org.eclipse.ui"/>
<import plugin="org.eclipse.ui.editors"/>
<import plugin="org.eclipse.ui.ide"/>
<import plugin="org.eclipse.ui.views.properties.tabbed"/>
<import plugin="org.eclipse.swt"/>
<import plugin="org.eclipse.ui.views"/>
<import plugin="com.minres.scviewer.database" version="1.0.0" match="greaterOrEqual"/>
</requires>
<plugin
id="com.minres.scviewer.database"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.database.text"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.ui"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.minres.scviewer.database.sqlite"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View File

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="swing2swt.jar"/>
<classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.itjw.txviewer.ui</name>
<name>com.minres.scviewer.ui</name>
<comment></comment>
<projects>
</projects>
@ -20,6 +20,11 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ds.core.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>

View File

@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7

View File

@ -1,23 +1,23 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Graph
Bundle-SymbolicName: com.itjw.txviewer.ui;singleton:=true
Bundle-SymbolicName: com.minres.scviewer.ui;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.itjw.txviewer.ui.TxEditorPlugin
Bundle-Activator: com.minres.scviewer.ui.TxEditorPlugin
Bundle-Vendor: ITJW
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.jface.text,
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.core.resources,
org.eclipse.jface.text,
org.eclipse.ui,
org.eclipse.ui.editors,
org.eclipse.ui.ide,
org.eclipse.gef,
org.eclipse.ui.views.properties.tabbed,
org.eclipse.swt,
org.eclipse.osgi
org.eclipse.osgi,
com.minres.scviewer.database;bundle-version="1.0.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Import-Package: com.itjw.txviewer.database,
org.eclipse.ui.views.contentoutline
Import-Package: org.eclipse.ui.views.contentoutline
Bundle-ClassPath: .,
swing2swt.jar
Service-Component: OSGI-INF/component.xml

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="com.minres.scviewer.ui">
<implementation class="com.minres.scviewer.ui.TxEditorPlugin"/>
<reference bind="setTransactionDbFactory" cardinality="0..n" interface="com.minres.scviewer.database.ITransactionDbFactory" name="ITransactionDbFactory" policy="dynamic" unbind="unsetTransactionDbFactory"/>
</scr:component>

View File

@ -1,4 +1,3 @@
source.. = src/
output.. = bin/
bin.includes = plugin.xml,\
META-INF/,\
@ -6,4 +5,6 @@ bin.includes = plugin.xml,\
icons/,\
contexts.xml,\
res/,\
swing2swt.jar
swing2swt.jar,\
OSGI-INF/
source.. = src/

View File

Before

Width:  |  Height:  |  Size: 983 B

After

Width:  |  Height:  |  Size: 983 B

View File

@ -6,7 +6,7 @@
point="org.eclipse.ui.views">
<category
name="TxViewer"
id="com.itjw.txviewer.ui">
id="com.minres.scviewer.ui">
</category>
</extension>
<extension
@ -18,18 +18,18 @@
<extension
point="org.eclipse.ui.editors">
<editor
class="com.itjw.txviewer.ui.TxEditorPart"
contributorClass="com.itjw.txviewer.ui.TxEditorActionBarContributor"
class="com.minres.scviewer.ui.TxEditorPart"
contributorClass="com.minres.scviewer.ui.TxEditorActionBarContributor"
extensions="txdb"
icon="icons/sample.gif"
id="com.itjw.txviewer.ui.TxEditorPart"
id="com.minres.scviewer.ui.TxEditorPart"
name="Wave Viewer">
</editor>
</extension>
<extension
point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
<propertyContributor
contributorId="com.itjw.txviewer.ui.TxEditorPart">
contributorId="com.minres.scviewer.ui.TxEditorPart">
<propertyCategory
category="Transaction"></propertyCategory>
</propertyContributor>
@ -37,22 +37,22 @@
<extension
point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
<propertyTabs
contributorId="com.itjw.txviewer.ui.TxEditorPart">
contributorId="com.minres.scviewer.ui.TxEditorPart">
<propertyTab
category="Transaction"
id="com.itjw.txviewer.ui.propertyTabTransaction"
id="com.minres.scviewer.ui.propertyTabTransaction"
label="Transaction">
</propertyTab>
<propertyTab
afterTab="com.itjw.txviewer.ui.propertyTabTransaction"
afterTab="com.minres.scviewer.ui.propertyTabTransaction"
category="Transaction"
id="com.itjw.txviewer.ui.propertyTabAttributes"
id="com.minres.scviewer.ui.propertyTabAttributes"
label="Attributes">
</propertyTab>
<propertyTab
afterTab="com.itjw.txviewer.ui.propertyTabAttributes"
afterTab="com.minres.scviewer.ui.propertyTabAttributes"
category="Transaction"
id="com.itjw.txviewer.ui.propertyTabRelated"
id="com.minres.scviewer.ui.propertyTabRelated"
label="Related Tx">
</propertyTab>
</propertyTabs>
@ -60,31 +60,31 @@
<extension
point="org.eclipse.ui.views.properties.tabbed.propertySections">
<propertySections
contributorId="com.itjw.txviewer.ui.TxEditorPart">
contributorId="com.minres.scviewer.ui.TxEditorPart">
<propertySection
class="org.eclipse.ui.views.properties.tabbed.AdvancedPropertySection"
id="com.itjw.txviewer.ui.propertySectionAll"
tab="com.itjw.txviewer.ui.propertyTabTransaction">
id="com.minres.scviewer.ui.propertySectionAll"
tab="com.minres.scviewer.ui.propertyTabTransaction">
<input
type="com.itjw.txviewer.database.ITransaction">
type="com.minres.scviewer.database.ITransaction">
</input>
</propertySection>
<propertySection
afterSection="com.itjw.txviewer.ui.propertySectionAll"
class="com.itjw.txviewer.ui.views.sections.AttributeProperty"
id="com.itjw.txviewer.ui.propertySectionAttributes"
tab="com.itjw.txviewer.ui.propertyTabAttributes">
afterSection="com.minres.scviewer.ui.propertySectionAll"
class="com.minres.scviewer.ui.views.sections.AttributeProperty"
id="com.minres.scviewer.ui.propertySectionAttributes"
tab="com.minres.scviewer.ui.propertyTabAttributes">
<input
type="com.itjw.txviewer.database.ITransaction">
type="com.minres.scviewer.database.ITransaction">
</input>
</propertySection>
<propertySection
afterSection="com.itjw.txviewer.ui.propertySectionAttributes"
class="com.itjw.txviewer.ui.views.sections.RelatedProperty"
id="com.itjw.txviewer.ui.propertySectionRelated"
tab="com.itjw.txviewer.ui.propertyTabRelated">
afterSection="com.minres.scviewer.ui.propertySectionAttributes"
class="com.minres.scviewer.ui.views.sections.RelatedProperty"
id="com.minres.scviewer.ui.propertySectionRelated"
tab="com.minres.scviewer.ui.propertyTabRelated">
<input
type="com.itjw.txviewer.database.ITransaction">
type="com.minres.scviewer.database.ITransaction">
</input>
</propertySection>
</propertySections>
@ -92,8 +92,8 @@
<extension
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="com.itjw.txviewer.database.ITransaction"
class="com.itjw.txviewer.ui.adapter.AdapterFactory">
adaptableType="com.minres.scviewer.database.ITransaction"
class="com.minres.scviewer.ui.adapter.AdapterFactory">
<adapter
type="org.eclipse.ui.views.properties.IPropertySource">
</adapter>
@ -102,8 +102,8 @@
<extension
point="org.eclipse.ui.elementFactories">
<factory
class="com.itjw.txviewer.ui.TxEditorInputFactory"
id="com.itjw.txviewer.ui.TxEditorInputFactory">
class="com.minres.scviewer.ui.TxEditorInputFactory"
id="com.minres.scviewer.ui.TxEditorInputFactory">
</factory>
</extension>

View File

Before

Width:  |  Height:  |  Size: 390 B

After

Width:  |  Height:  |  Size: 390 B

View File

Before

Width:  |  Height:  |  Size: 537 B

After

Width:  |  Height:  |  Size: 537 B

View File

Before

Width:  |  Height:  |  Size: 444 B

After

Width:  |  Height:  |  Size: 444 B

View File

@ -1,4 +1,4 @@
package com.itjw.txviewer.ui;
package com.minres.scviewer.ui;
import org.eclipse.ui.part.EditorActionBarContributor;

View File

@ -1,7 +1,6 @@
package com.itjw.txviewer.ui;
package com.minres.scviewer.ui;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import org.eclipse.core.resources.IFile;

View File

@ -1,13 +1,10 @@
package com.itjw.txviewer.ui;
package com.minres.scviewer.ui;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import org.eclipse.core.resources.IFile;
@ -23,7 +20,7 @@ public class TxEditorInputFactory implements IElementFactory {
* Factory id. The workbench plug-in registers a factory by this name
* with the "org.eclipse.ui.elementFactories" extension point.
*/
private static final String ID_FACTORY = "com.itjw.txviewer.ui.TxEditorInputFactory"; //$NON-NLS-1$
private static final String ID_FACTORY = "com.minres.scviewer.ui.TxEditorInputFactory"; //$NON-NLS-1$
/**
* Tag for the IFile.fullPath of the file resource.

View File

@ -8,23 +8,24 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.ui;
package com.minres.scviewer.ui;
import java.io.File;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.FileStoreEditorInput;
import org.eclipse.ui.internal.ide.dialogs.IFileStoreFilter;
import org.eclipse.ui.part.EditorPart;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import org.eclipse.ui.views.properties.IPropertySheetPage;
@ -32,19 +33,20 @@ import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributo
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import com.itjw.txviewer.database.ITrDb;
import com.itjw.txviewer.database.ITrStream;
import com.itjw.txviewer.database.ITransactionDbFactory;
import com.itjw.txviewer.ui.swt.TxDisplay;
import com.itjw.txviewer.ui.views.TxOutlinePage;
import com.minres.scviewer.database.ITrDb;
import com.minres.scviewer.database.ITrStream;
import com.minres.scviewer.database.ITransactionDbFactory;
import com.minres.scviewer.ui.swt.TxDisplay;
import com.minres.scviewer.ui.views.TxOutlinePage;
public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPageContributor {
public static final String ID = "com.itjw.txviewer.ui.TxEditorPart"; //$NON-NLS-1$
public static final String ID = "com.minres.scviewer.ui.TxEditorPart"; //$NON-NLS-1$
public static final String WAVE_ACTION_ID = "com.itjw.txviewer.ui.action.AddToWave";
public static final String WAVE_ACTION_ID = "com.minres.scviewer.ui.action.AddToWave";
private TxDisplay txDisplay;
@ -64,22 +66,23 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage
public void createPartControl(Composite parent) {
myParent=parent;
/** Add handlers for global actions (delete, etc) */
IActionBars actionBars = getEditorSite().getActionBars();
actionBars.setGlobalActionHandler(WAVE_ACTION_ID, new Action() {
@Override
public void runWithEvent(Event event) {
System.out.println("AddToWave with event");
}
@Override
public void run() {
System.out.println("AddToWave");
}
});
// IActionBars actionBars = getEditorSite().getActionBars();
// actionBars.setGlobalActionHandler(WAVE_ACTION_ID, new Action() {
// @Override
// public void runWithEvent(Event event) {
// System.out.println("AddToWave with event");
// }
//
// @Override
// public void run() {
// System.out.println("AddToWave");
// }
// });
txDisplay = new TxDisplay(parent);
if(database!=null) database.addPropertyChangeListener(txDisplay);
getSite().setSelectionProvider(txDisplay);
if(getEditorInput()!=null && ((TxEditorInput) getEditorInput()).getStreamNames().size()>0){
if(getEditorInput()!=null && ((TxEditorInput) getEditorInput()).getStreamNames().size()>0 && database!=null){
if(MessageDialog.openConfirm(parent.getShell(), "Confirm", "Do you want the restore last state of the wave form?"))
for(String streamName:((TxEditorInput) getEditorInput()).getStreamNames()){
ITrStream stream = database.getStreamByName(streamName);
@ -101,17 +104,18 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage
if(!(input instanceof TxEditorInput))
super.setInput(new TxEditorInput(((IFileEditorInput)input).getFile()));
try {
IFile file = ((IFileEditorInput) input).getFile();
getTrDatabase();
database.load(file.getContents());
IPath location = ((IFileEditorInput) input).getFile().getLocation();
if (location != null)
getTrDatabase(location.toFile());
setPartName(((IFileEditorInput) input).getFile().getName());
} catch (Exception e) {
handleLoadException(e);
}
} else if(input instanceof FileStoreEditorInput){
try {
getTrDatabase();
database.load(((FileStoreEditorInput) input).getURI().toURL().openStream());
//database.load(((FileStoreEditorInput) input).getURI().toURL().openStream());
File file=new File(((FileStoreEditorInput) input).getURI().getPath());
getTrDatabase(file);
setPartName(((FileStoreEditorInput) input).getName());
} catch (Exception e) {
handleLoadException(e);
@ -119,16 +123,37 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage
}
}
protected void getTrDatabase() {
BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
ServiceReference<?> serviceReference = context.getServiceReference(ITransactionDbFactory.class.getName());
database = ((ITransactionDbFactory) context.getService(serviceReference)).createDatabase();
if(txDisplay !=null) database.addPropertyChangeListener(txDisplay);
protected void getTrDatabase(File file) {
try {
BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
ServiceReference<?>[] serviceReferences = context.getServiceReferences(ITransactionDbFactory.class.getName(), null);
if(serviceReferences!=null){
for(ServiceReference<?> serviceReference:serviceReferences){
database = ((ITransactionDbFactory) context.getService(serviceReference)).createDatabase(file);
if(database!=null){
if(txDisplay !=null) database.addPropertyChangeListener(txDisplay);
return;
}
}
}
} catch (InvalidSyntaxException e) {
}
MessageDialog.openError(PlatformUI.getWorkbench().getDisplay().getActiveShell(),
"Error loading database", "Could not find database loader implementation");
database=null;
// if(TxEditorPlugin.getDefault().getTransactionDbFactory()!=null){
// database = TxEditorPlugin.getDefault().getTransactionDbFactory().createDatabase();
// if(txDisplay !=null) database.addPropertyChangeListener(txDisplay);
// } else {
// MessageDialog.openError(PlatformUI.getWorkbench().getDisplay().getActiveShell(),
// "Error loading database", "Could not find database loader implementation");
// database=null;
// }
}
private void handleLoadException(Exception e) {
System.err.println("** Load failed. Using default model. **");
e.printStackTrace();
MessageDialog.openError(PlatformUI.getWorkbench().getDisplay().getActiveShell(),
"Error loading database", e.getMessage());
database = null;
}

View File

@ -8,20 +8,24 @@
* Contributors:
* IT Just working - initial API and implementation
*******************************************************************************/
package com.itjw.txviewer.ui;
package com.minres.scviewer.ui;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.wb.swt.SWTResourceManager;
import org.osgi.framework.BundleContext;
import com.minres.scviewer.database.ITransactionDbFactory;
/**
* The activator class controls the plug-in life cycle
*/
@ -37,21 +41,19 @@ public class TxEditorPlugin extends AbstractUIPlugin {
public static final int headerFgColor=7;
// The plug-in ID
public static final String PLUGIN_ID = "com.itjw.txviewer.ui"; //$NON-NLS-1$
public static final String PLUGIN_ID = "com.minres.scviewer.ui"; //$NON-NLS-1$
// The shared instance
private static TxEditorPlugin plugin;
private ResourceBundle resourceBundle;
private TxEditorPart openedTxEditorPart;
/**
* The constructor
*/
public TxEditorPlugin() {
openedTxEditorPart=null;
}
// public TxEditorPlugin() {
// openedTxEditorPart=null;
// }
/*
* (non-Javadoc)
@ -106,13 +108,13 @@ public class TxEditorPlugin extends AbstractUIPlugin {
public Color getColor(int idx){
switch (idx) {
case lineColor:
return ColorConstants.red;
return SWTResourceManager.getColor(SWT.COLOR_RED);
case txBgColor:
return ColorConstants.green;
return SWTResourceManager.getColor(SWT.COLOR_GREEN);
case highliteLineColor:
return ColorConstants.cyan;
return SWTResourceManager.getColor(SWT.COLOR_CYAN);
case txHighliteBgColor:
return ColorConstants.darkGreen;
return SWTResourceManager.getColor(SWT.COLOR_DARK_GREEN);
case trackBgLightColor:
return SWTResourceManager.getColor(220, 220, 220);
case trackBgDarkColor:
@ -124,11 +126,28 @@ public class TxEditorPlugin extends AbstractUIPlugin {
default:
break;
}
return ColorConstants.black;
return SWTResourceManager.getColor(SWT.COLOR_BLACK);
}
public ResourceBundle getResourceBundle() {
return resourceBundle;
}
private ITransactionDbFactory transactionDbFactory;
private List<ITransactionDbFactory> factories= new ArrayList<ITransactionDbFactory>();
public ITransactionDbFactory getTransactionDbFactory() {
return transactionDbFactory;
}
public void setTransactionDbFactory(ITransactionDbFactory transactionDbFactory) {
factories.add( transactionDbFactory);
System.out.println("Service bound");
}
public void unsetTransactionDbFactory(ITransactionDbFactory transactionDbFactory) {
factories.remove(transactionDbFactory);
System.out.println("Service unbound");
}
}

Some files were not shown because too many files have changed in this diff Show More