Compare commits
137
Commits
2.6
...
tx_end_time_fix
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
25170d0d83 | ||
|
|
ba6446378a | ||
|
|
ec9eb17ee3 | ||
|
|
7775f5978b | ||
|
|
8c031e7649 | ||
|
|
6b2eae7f26 | ||
|
|
69805a423f | ||
|
|
f1178157c8 | ||
|
|
1ebc6eb03a | ||
|
|
916215c0c2 | ||
|
|
6c8e149be2 | ||
|
|
bd08b69747 | ||
|
|
33e0061147 | ||
|
|
45e1031e5e | ||
|
|
73b21cb80b | ||
|
|
15fb825548 | ||
|
|
0d448368cc | ||
|
|
abacae42d7 | ||
|
|
9d2e2e7f64 | ||
|
|
eb64cc60c5 | ||
|
|
5ea0d6446a | ||
|
|
d970d07048 | ||
|
|
90f45c698f | ||
|
|
af388b2462 | ||
|
|
8700e2fdde | ||
|
|
23ad84ef30 | ||
|
|
0d074ea6ae | ||
|
|
351a246238 | ||
|
|
841b5fe2b2 | ||
|
|
85ce07f11f | ||
|
|
b44f3418f4 | ||
|
|
bfbc40c282 | ||
|
|
2c66bf3edd | ||
|
|
a51f922ea4 | ||
|
|
4d8e7a3cd1 | ||
|
|
70ccf35fe4 | ||
|
|
6c5032da10 | ||
|
|
b2e269b67c | ||
|
|
cd01c6a808 | ||
|
|
179d40ac8d | ||
|
|
754a61e989 | ||
|
|
bedf4c5c4d | ||
|
|
7c27bcec47 | ||
|
|
90f09cc222 | ||
|
|
21d83f93dc | ||
|
|
db838efc65 | ||
|
|
929af41dd3 | ||
|
|
979a7672e6 | ||
|
|
67818ff4dd | ||
|
|
0c7631e912 | ||
|
|
a06b888365 | ||
|
|
ded10e1c22 | ||
|
|
2f3bc0d892 | ||
|
|
184f1b2d2c | ||
|
|
90249dadb9 | ||
|
|
c88eb32db8 | ||
|
|
d47db29b93 | ||
|
|
e8148af10f | ||
|
|
b298a4ca6c | ||
|
|
f474e38687 | ||
|
|
2e806f7b86 | ||
|
|
b7a8d99e2d | ||
|
|
2a09fc7e6f | ||
|
|
e36abb8d55 | ||
|
|
5746b9f758 | ||
|
|
6be1f018b1 | ||
|
|
38a046aaef | ||
|
|
fdbd6f8402 | ||
|
|
1dad204494 | ||
|
|
54661c51ce | ||
|
|
b34fe0d0ba | ||
|
|
868eceddc5 | ||
|
|
b642c396c7 | ||
|
|
f3d8e34ed0 | ||
|
|
401c760e01 | ||
|
|
5add0e385d | ||
|
|
2ba6822f2b | ||
|
|
54124d13bf | ||
|
|
5b949a9d37 | ||
|
|
9a9b25622c | ||
|
|
dd6a8669b1 | ||
|
|
b483897769 | ||
|
|
bd24c4dd05 | ||
|
|
664e99d09e | ||
|
|
675b2ed972 | ||
|
|
e6f19311b1 | ||
|
|
4a8034191c | ||
|
|
9d4e5bf636 | ||
|
|
cc9be70708 | ||
|
|
2dcc72f679 | ||
|
|
563b6e2b01 | ||
|
|
6161c0e0ec | ||
|
|
61c2102ab7 | ||
|
|
796a04b981 | ||
|
|
2a71ab94f5 | ||
|
|
923b89c038 | ||
|
|
3de6c9900c | ||
|
|
ef1f2a758a | ||
|
|
3e6d5bd33e | ||
|
|
26968b8521 | ||
|
|
611cfc7b46 | ||
|
|
8cb77a555b | ||
|
|
b4a7f032f5 | ||
|
|
62e0ec2008 | ||
|
|
f6cc12e8c3 | ||
|
|
b38b268fcb | ||
|
|
55a14edc9d | ||
|
|
45c23564b5 | ||
|
|
b170fb3c2a | ||
|
|
ab975eadd1 | ||
|
|
7ad70411f3 | ||
|
|
24720340be | ||
|
|
ad51066f1c | ||
|
|
95e2db60b6 | ||
|
|
db1d377da6 | ||
|
|
230e8dcc7a | ||
|
|
ab2146102f | ||
|
|
b1148922d8 | ||
|
|
e4de765da9 | ||
|
|
47120c66b7 | ||
|
|
35ccc71f10 | ||
|
|
688a6abd99 | ||
|
|
97693cd0c4 | ||
|
|
3e5ab7b0ac | ||
|
|
ad80671dd2 | ||
|
|
4ab3000b69 | ||
|
|
572e999a5b | ||
|
|
e5bcb25d24 | ||
|
|
19ea1f0b6d | ||
|
|
e88014ebba | ||
|
|
10a0608fd3 | ||
|
|
60abfb7afd | ||
|
|
6b9e3c0e70 | ||
|
|
19065cdbb7 | ||
|
|
a7afeb1f7c | ||
|
|
47b58ed770 | ||
|
|
20cb208719 |
No files matched your search
+2
-1
@@ -6,5 +6,6 @@
|
|||||||
SCViewer initiator_target.launch
|
SCViewer initiator_target.launch
|
||||||
SCViewer.xcf
|
SCViewer.xcf
|
||||||
SCViewer_1.png
|
SCViewer_1.png
|
||||||
*.launch
|
|
||||||
copyrightLog.txt
|
copyrightLog.txt
|
||||||
|
/workspace
|
||||||
|
?*.launch
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
|
||||||
|
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
|
||||||
|
<stringAttribute key="M2_GOALS" value="package"/>
|
||||||
|
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
|
||||||
|
<booleanAttribute key="M2_OFFLINE" value="false"/>
|
||||||
|
<stringAttribute key="M2_PROFILES" value=""/>
|
||||||
|
<listAttribute key="M2_PROPERTIES"/>
|
||||||
|
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
|
||||||
|
<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
|
||||||
|
<intAttribute key="M2_THREADS" value="1"/>
|
||||||
|
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
|
||||||
|
<stringAttribute key="M2_USER_SETTINGS" value=""/>
|
||||||
|
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:com.minres.scviewer.parent}"/>
|
||||||
|
</launchConfiguration>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
|
||||||
|
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
|
||||||
|
<stringAttribute key="M2_GOALS" value="package"/>
|
||||||
|
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
|
||||||
|
<booleanAttribute key="M2_OFFLINE" value="false"/>
|
||||||
|
<stringAttribute key="M2_PROFILES" value="release-composite"/>
|
||||||
|
<listAttribute key="M2_PROPERTIES"/>
|
||||||
|
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
|
||||||
|
<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
|
||||||
|
<intAttribute key="M2_THREADS" value="1"/>
|
||||||
|
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
|
||||||
|
<stringAttribute key="M2_USER_SETTINGS" value=""/>
|
||||||
|
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="true"/>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/AdoptOpenJDK 8 [1.8.0_232]"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:com.minres.scviewer.parent}"/>
|
||||||
|
</launchConfiguration>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
|
||||||
|
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
|
||||||
|
<stringAttribute key="M2_GOALS" value="tycho-versions:set-version tycho-versions:update-pom"/>
|
||||||
|
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
|
||||||
|
<booleanAttribute key="M2_OFFLINE" value="false"/>
|
||||||
|
<stringAttribute key="M2_PROFILES" value=""/>
|
||||||
|
<listAttribute key="M2_PROPERTIES">
|
||||||
|
<listEntry value="newVersion=${string_prompt:new version number}"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
|
||||||
|
<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
|
||||||
|
<intAttribute key="M2_THREADS" value="1"/>
|
||||||
|
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
|
||||||
|
<stringAttribute key="M2_USER_SETTINGS" value=""/>
|
||||||
|
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
|
||||||
|
<stringAttribute key="bad_container_name" value="/com.minres.scviewer.parent/.launch"/>
|
||||||
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:com.minres.scviewer.parent}"/>
|
||||||
|
</launchConfiguration>
|
||||||
File renamed without changes.
File renamed without changes.
-52
@@ -1,52 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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.util.List;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.ITx;
|
|
||||||
import com.minres.scviewer.database.ITxEvent;
|
|
||||||
import com.minres.scviewer.database.ITxGenerator;
|
|
||||||
import com.minres.scviewer.database.ITxStream;
|
|
||||||
import com.minres.scviewer.database.sqlite.tables.ScvGenerator;
|
|
||||||
|
|
||||||
public class TxGenerator implements ITxGenerator {
|
|
||||||
|
|
||||||
private ITxStream<ITxEvent> stream;
|
|
||||||
|
|
||||||
private ScvGenerator scvGenerator;
|
|
||||||
|
|
||||||
public TxGenerator(ITxStream<ITxEvent> stream, ScvGenerator scvGenerator) {
|
|
||||||
this.stream=stream;
|
|
||||||
this.scvGenerator=scvGenerator;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long getId() {
|
|
||||||
return (long) scvGenerator.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ITxStream<ITxEvent> getStream() {
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return scvGenerator.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ITx> getTransactions() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-199
@@ -1,199 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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.beans.IntrospectionException;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.NavigableMap;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.HierNode;
|
|
||||||
import com.minres.scviewer.database.ITx;
|
|
||||||
import com.minres.scviewer.database.ITxEvent;
|
|
||||||
import com.minres.scviewer.database.ITxGenerator;
|
|
||||||
import com.minres.scviewer.database.ITxStream;
|
|
||||||
import com.minres.scviewer.database.IWaveform;
|
|
||||||
import com.minres.scviewer.database.IWaveformDb;
|
|
||||||
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.ScvGenerator;
|
|
||||||
import com.minres.scviewer.database.sqlite.tables.ScvStream;
|
|
||||||
import com.minres.scviewer.database.sqlite.tables.ScvTx;
|
|
||||||
|
|
||||||
public class TxStream extends HierNode implements ITxStream<ITxEvent> {
|
|
||||||
|
|
||||||
private IDatabase database;
|
|
||||||
|
|
||||||
private String fullName;
|
|
||||||
|
|
||||||
private IWaveformDb db;
|
|
||||||
|
|
||||||
private ScvStream scvStream;
|
|
||||||
|
|
||||||
private TreeMap<Integer, TxGenerator> generators;
|
|
||||||
|
|
||||||
private TreeMap<Integer, ITx> transactions;
|
|
||||||
|
|
||||||
private Integer maxConcurrency;
|
|
||||||
|
|
||||||
private TreeMap<Long, List<ITxEvent>> events;
|
|
||||||
|
|
||||||
private List<RelationType> usedRelationsList;
|
|
||||||
|
|
||||||
public TxStream(IDatabase database, IWaveformDb waveformDb, ScvStream scvStream) {
|
|
||||||
super(scvStream.getName());
|
|
||||||
this.database=database;
|
|
||||||
fullName=scvStream.getName();
|
|
||||||
this.scvStream=scvStream;
|
|
||||||
db=waveformDb;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IWaveformDb getDb() {
|
|
||||||
return db;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getFullName() {
|
|
||||||
return fullName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long getId() {
|
|
||||||
return (long) scvStream.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getKind() {
|
|
||||||
return scvStream.getKind();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ITxGenerator> getGenerators() {
|
|
||||||
if(generators==null){
|
|
||||||
SQLiteDatabaseSelectHandler<ScvGenerator> handler = new SQLiteDatabaseSelectHandler<ScvGenerator>(
|
|
||||||
ScvGenerator.class, database, "stream="+scvStream.getId());
|
|
||||||
generators=new TreeMap<Integer, TxGenerator>();
|
|
||||||
try {
|
|
||||||
for(ScvGenerator scvGenerator:handler.selectObjects()){
|
|
||||||
generators.put(scvGenerator.getId(), new TxGenerator(this, scvGenerator));
|
|
||||||
}
|
|
||||||
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
|
|
||||||
| InvocationTargetException | SQLException | IntrospectionException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new ArrayList<ITxGenerator>(generators.values());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxConcurrency() {
|
|
||||||
if(maxConcurrency==null){
|
|
||||||
java.sql.Connection connection=null;
|
|
||||||
java.sql.Statement statement=null;
|
|
||||||
java.sql.ResultSet resultSet=null;
|
|
||||||
try {
|
|
||||||
connection = database.createConnection();
|
|
||||||
statement = connection.createStatement();
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append("SELECT MAX(concurrencyLevel) as concurrencyLevel FROM ScvTx where stream=");
|
|
||||||
sb.append(scvStream.getId());
|
|
||||||
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;
|
|
||||||
} finally {
|
|
||||||
try{
|
|
||||||
if(resultSet!=null) resultSet.close();
|
|
||||||
if(statement!=null) statement.close();
|
|
||||||
if(connection!=null) connection.close();
|
|
||||||
} catch (SQLException e) { }
|
|
||||||
}
|
|
||||||
maxConcurrency+=1;
|
|
||||||
}
|
|
||||||
return maxConcurrency;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NavigableMap<Long, List<ITxEvent>> getEvents(){
|
|
||||||
if(events==null){
|
|
||||||
events=new TreeMap<Long, List<ITxEvent>>();
|
|
||||||
for(Entry<Integer, ITx> entry:getTransactions().entrySet()){
|
|
||||||
putEvent(new TxEvent(TxEvent.Type.BEGIN, entry.getValue()));
|
|
||||||
putEvent(new TxEvent(TxEvent.Type.END, entry.getValue()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return events;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void putEvent(TxEvent ev){
|
|
||||||
Long time = ev.getTime();
|
|
||||||
if(!events.containsKey(time)){
|
|
||||||
Vector<ITxEvent> vector=new Vector<ITxEvent>();
|
|
||||||
vector.add(ev);
|
|
||||||
events.put(time, vector);
|
|
||||||
} else {
|
|
||||||
events.get(time).add(ev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Map<Integer, ITx> getTransactions() {
|
|
||||||
if(transactions==null){
|
|
||||||
if(generators==null) getGenerators();
|
|
||||||
transactions = new TreeMap<Integer, ITx>();
|
|
||||||
SQLiteDatabaseSelectHandler<ScvTx> handler = new SQLiteDatabaseSelectHandler<ScvTx>(ScvTx.class, database,
|
|
||||||
"stream="+scvStream.getId());
|
|
||||||
try {
|
|
||||||
for(ScvTx scvTx:handler.selectObjects()){
|
|
||||||
transactions.put(scvTx.getId(), new Tx(database, this, generators.get(scvTx.getGenerator()), scvTx));
|
|
||||||
}
|
|
||||||
} catch (SecurityException | IllegalArgumentException | InstantiationException | IllegalAccessException
|
|
||||||
| InvocationTargetException | SQLException | IntrospectionException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return transactions;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<ITxEvent> getWaveformEventsAtTime(Long time) {
|
|
||||||
return getEvents().get(time);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRelationTypeList(List<RelationType> usedRelationsList){
|
|
||||||
this.usedRelationsList=usedRelationsList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RelationType getRelationType(String name) {
|
|
||||||
RelationType relType=RelationType.create(name);
|
|
||||||
if(!usedRelationsList.contains(relType)) usedRelationsList.add(relType);
|
|
||||||
return relType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Boolean equals(IWaveform other) {
|
|
||||||
return(other instanceof TxStream && this.getId().equals(other.getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
/.scviewer.*
|
|
||||||
/.my_db.txlog*
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
groovy.compiler.level=25
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
-242
@@ -1,242 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 IT Just working.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IT Just working - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package com.minres.scviewer.database.text;
|
|
||||||
|
|
||||||
import java.nio.charset.CharsetDecoder;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.zip.GZIPInputStream
|
|
||||||
|
|
||||||
import org.codehaus.groovy.ast.stmt.CatchStatement
|
|
||||||
import org.mapdb.DB
|
|
||||||
import org.mapdb.DBMaker
|
|
||||||
|
|
||||||
import groovy.io.FileType
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.AssociationType
|
|
||||||
import com.minres.scviewer.database.DataType
|
|
||||||
import com.minres.scviewer.database.ITxGenerator
|
|
||||||
import com.minres.scviewer.database.ITxStream
|
|
||||||
import com.minres.scviewer.database.IWaveform
|
|
||||||
import com.minres.scviewer.database.IWaveformDb
|
|
||||||
import com.minres.scviewer.database.IWaveformDbLoader
|
|
||||||
import com.minres.scviewer.database.RelationType
|
|
||||||
|
|
||||||
public class TextDbLoader implements IWaveformDbLoader{
|
|
||||||
|
|
||||||
private Long maxTime;
|
|
||||||
|
|
||||||
IWaveformDb db;
|
|
||||||
|
|
||||||
def streams = []
|
|
||||||
|
|
||||||
def relationTypes=[:]
|
|
||||||
|
|
||||||
DB mapDb
|
|
||||||
|
|
||||||
public TextDbLoader() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long getMaxTime() {
|
|
||||||
return maxTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<IWaveform> getAllWaves() {
|
|
||||||
return streams;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<Long, ITxGenerator> getGeneratorsById() {
|
|
||||||
TreeMap<Long, ITxGenerator> res = new TreeMap<Long, ITxGenerator>();
|
|
||||||
streams.each{TxStream stream -> stream.generators.each{res.put(it.id, id)} }
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static final byte[] x = "scv_tr_stream".bytes
|
|
||||||
|
|
||||||
@Override
|
|
||||||
boolean load(IWaveformDb db, File file) throws Exception {
|
|
||||||
if(file.isDirectory() || !file.exists()) return false;
|
|
||||||
this.db=db
|
|
||||||
this.streams=[]
|
|
||||||
try {
|
|
||||||
def gzipped = isGzipped(file)
|
|
||||||
if(isTxfile(gzipped?new GZIPInputStream(new FileInputStream(file)):new FileInputStream(file))){
|
|
||||||
def mapDbFile = File.createTempFile("."+file.name, "tmp", file.parentFile)
|
|
||||||
mapDbFile.delete()
|
|
||||||
mapDbFile.deleteOnExit()
|
|
||||||
this.mapDb = DBMaker
|
|
||||||
.fileDB(mapDbFile)
|
|
||||||
.fileMmapEnableIfSupported()
|
|
||||||
.fileMmapPreclearDisable()
|
|
||||||
.cleanerHackEnable()
|
|
||||||
.allocateStartSize(64*1024*1024)
|
|
||||||
.allocateIncrement(64*1024*1024)
|
|
||||||
.make()
|
|
||||||
// NPE here --->
|
|
||||||
parseInput(gzipped?new GZIPInputStream(new FileInputStream(file)):new FileInputStream(file))
|
|
||||||
streams.each{ TxStream stream -> stream.getMaxConcurrency() }
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
} catch (IndexOutOfBoundsException e) {
|
|
||||||
return false
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
return false
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
return false
|
|
||||||
} catch(EOFException e) {
|
|
||||||
return true;
|
|
||||||
} catch(Exception e) {
|
|
||||||
System.out.println("---->>> Exception "+e.toString()+" caught while loading database");
|
|
||||||
//System.out.println("---->>> Exception "+e.toString()+" caught while loading database. StackTrace following... ");
|
|
||||||
//e.printStackTrace()
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isTxfile(InputStream istream) {
|
|
||||||
byte[] buffer = new byte[x.size()]
|
|
||||||
def readCnt = istream.read(buffer, 0, x.size())
|
|
||||||
istream.close()
|
|
||||||
if(readCnt==x.size()){
|
|
||||||
for(int i=0; i<x.size(); i++)
|
|
||||||
if(buffer[i]!=x[i]) return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isGzipped(File f) {
|
|
||||||
InputStream is = null;
|
|
||||||
try {
|
|
||||||
is = new FileInputStream(f);
|
|
||||||
byte [] signature = new byte[2];
|
|
||||||
int nread = is.read( signature ); //read the gzip signature
|
|
||||||
return nread == 2 && signature[ 0 ] == (byte) 0x1f && signature[ 1 ] == (byte) 0x8b;
|
|
||||||
} catch (IOException e) {
|
|
||||||
return false;
|
|
||||||
} finally {
|
|
||||||
if(is!=null) is.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private stringToScale(String scale){
|
|
||||||
switch(scale.trim()){
|
|
||||||
case "fs":return 1L
|
|
||||||
case "ps":return 1000L
|
|
||||||
case "ns":return 1000000L
|
|
||||||
case "us":return 1000000000L
|
|
||||||
case "ms":return 1000000000000L
|
|
||||||
case "s": return 1000000000000000L
|
|
||||||
}
|
|
||||||
return 1L
|
|
||||||
}
|
|
||||||
|
|
||||||
private def parseInput(InputStream inputStream){
|
|
||||||
def streamsById = [:]
|
|
||||||
def generatorsById = [:]
|
|
||||||
def transactionsById = [:]
|
|
||||||
TxGenerator generator
|
|
||||||
Tx transaction
|
|
||||||
boolean endTransaction=false
|
|
||||||
def matcher
|
|
||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
|
|
||||||
long lineCnt=0;
|
|
||||||
reader.eachLine { line ->
|
|
||||||
def tokens = line.split(/\s+/) as ArrayList
|
|
||||||
switch(tokens[0]){
|
|
||||||
case "scv_tr_stream":
|
|
||||||
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 TxStream(this, id, matcher[0][2], matcher[0][3])
|
|
||||||
streams<<stream
|
|
||||||
streamsById[id]=stream
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "scv_tr_generator":
|
|
||||||
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])
|
|
||||||
ITxStream stream=streamsById[Integer.parseInt(matcher[0][3])]
|
|
||||||
generator=new TxGenerator(id, stream, matcher[0][2])
|
|
||||||
stream.generators<<generator
|
|
||||||
generatorsById[id]=generator
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "begin_attribute":
|
|
||||||
if ((matcher = line =~ /^begin_attribute \(ID (\d+), name "([^"]+)", type "([^"]+)"\)$/)) {
|
|
||||||
generator.begin_attrs << TxAttributeType.getAttrType(matcher[0][2], DataType.valueOf(matcher[0][3]), AssociationType.BEGIN)
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "end_attribute":
|
|
||||||
if ((matcher = line =~ /^end_attribute \(ID (\d+), name "([^"]+)", type "([^"]+)"\)$/)) {
|
|
||||||
generator.end_attrs << TxAttributeType.getAttrType(matcher[0][2], DataType.valueOf(matcher[0][3]), AssociationType.END)
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ")":
|
|
||||||
generator=null
|
|
||||||
break
|
|
||||||
case "tx_begin"://matcher = line =~ /^tx_begin\s+(\d+)\s+(\d+)\s+(\d+)\s+([munpf]?s)/
|
|
||||||
def id = Integer.parseInt(tokens[1])
|
|
||||||
TxGenerator gen=generatorsById[Integer.parseInt(tokens[2])]
|
|
||||||
transaction = new Tx(id, gen.stream, gen, Long.parseLong(tokens[3])*stringToScale(tokens[4]))
|
|
||||||
gen.transactions << transaction
|
|
||||||
transactionsById[id]= transaction
|
|
||||||
gen.begin_attrs_idx=0;
|
|
||||||
maxTime = maxTime>transaction.beginTime?maxTime:transaction.beginTime
|
|
||||||
endTransaction=false
|
|
||||||
break
|
|
||||||
case "tx_end"://matcher = line =~ /^tx_end\s+(\d+)\s+(\d+)\s+(\d+)\s+([munpf]?s)/
|
|
||||||
def id = Integer.parseInt(tokens[1])
|
|
||||||
transaction = transactionsById[id]
|
|
||||||
assert Integer.parseInt(tokens[2])==transaction.generator.id
|
|
||||||
transaction.endTime = Long.parseLong(tokens[3])*stringToScale(tokens[4])
|
|
||||||
transaction.generator.end_attrs_idx=0;
|
|
||||||
maxTime = maxTime>transaction.endTime?maxTime:transaction.endTime
|
|
||||||
endTransaction=true
|
|
||||||
break
|
|
||||||
case "tx_record_attribute"://matcher = line =~ /^tx_record_attribute\s+(\d+)\s+"([^"]+)"\s+(\S+)\s*=\s*(.+)$/
|
|
||||||
def id = Integer.parseInt(tokens[1])
|
|
||||||
def name = tokens[2][1..-2]
|
|
||||||
def type = tokens[3] as DataType
|
|
||||||
def remaining = tokens.size()>5?tokens[5..-1].join(' '):""
|
|
||||||
transactionsById[id].attributes<<new TxAttribute(name, type, AssociationType.RECORD, remaining)
|
|
||||||
break
|
|
||||||
case "a"://matcher = line =~ /^a\s+(.+)$/
|
|
||||||
if(endTransaction){
|
|
||||||
transaction.attributes << new TxAttribute(transaction.generator.end_attrs[transaction.generator.end_attrs_idx], tokens[1])
|
|
||||||
transaction.generator.end_attrs_idx++
|
|
||||||
} else {
|
|
||||||
transaction.attributes << new TxAttribute(transaction.generator.begin_attrs[transaction.generator.begin_attrs_idx], tokens[1])
|
|
||||||
transaction.generator.begin_attrs_idx++
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case "tx_relation"://matcher = line =~ /^tx_relation\s+\"(\S+)\"\s+(\d+)\s+(\d+)$/
|
|
||||||
Tx tr2= transactionsById[Integer.parseInt(tokens[2])]
|
|
||||||
Tx tr1= transactionsById[Integer.parseInt(tokens[3])]
|
|
||||||
def relType=tokens[1][1..-2]
|
|
||||||
if(!relationTypes.containsKey(relType)) relationTypes[relType]=RelationType.create(relType)
|
|
||||||
def rel = new TxRelation(relationTypes[relType], tr1, tr2)
|
|
||||||
tr1.outgoingRelations<<rel
|
|
||||||
tr2.incomingRelations<<rel
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
println "Don't know what to do with: '$line'"
|
|
||||||
|
|
||||||
}
|
|
||||||
lineCnt++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<RelationType> getAllRelationTypes(){
|
|
||||||
return relationTypes.values();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 IT Just working.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IT Just working - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package com.minres.scviewer.database.text
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.*
|
|
||||||
|
|
||||||
class Tx implements ITx {
|
|
||||||
|
|
||||||
Long id
|
|
||||||
|
|
||||||
TxGenerator generator
|
|
||||||
|
|
||||||
TxStream stream
|
|
||||||
|
|
||||||
int concurrencyIndex
|
|
||||||
|
|
||||||
Long beginTime
|
|
||||||
|
|
||||||
Long endTime
|
|
||||||
|
|
||||||
ArrayList<ITxAttribute> attributes = new ArrayList<ITxAttribute>()
|
|
||||||
|
|
||||||
def incomingRelations =[]
|
|
||||||
|
|
||||||
def outgoingRelations =[]
|
|
||||||
|
|
||||||
Tx(int id, TxStream stream, TxGenerator generator, Long begin){
|
|
||||||
this.id=id
|
|
||||||
this.stream=stream
|
|
||||||
this.generator=generator
|
|
||||||
this.beginTime=begin
|
|
||||||
this.endTime=begin
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<ITxRelation> getIncomingRelations() {
|
|
||||||
return incomingRelations;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<ITxRelation> getOutgoingRelations() {
|
|
||||||
return outgoingRelations;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo(ITx o) {
|
|
||||||
def res =beginTime.compareTo(o.beginTime)
|
|
||||||
if(res!=0)
|
|
||||||
return res
|
|
||||||
else
|
|
||||||
return id.compareTo(o.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "tx#"+getId()+"["+getBeginTime()/1000000+"ns - "+getEndTime()/1000000+"ns]";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-59
@@ -1,59 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 IT Just working.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IT Just working - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package com.minres.scviewer.database.text
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.AssociationType;
|
|
||||||
import com.minres.scviewer.database.DataType;
|
|
||||||
import com.minres.scviewer.database.ITxAttributeType;
|
|
||||||
import com.minres.scviewer.database.ITxAttribute
|
|
||||||
|
|
||||||
class TxAttribute implements ITxAttribute{
|
|
||||||
|
|
||||||
TxAttributeType attributeType
|
|
||||||
|
|
||||||
def value
|
|
||||||
|
|
||||||
TxAttribute(String name, DataType dataType, AssociationType type, value){
|
|
||||||
attributeType = TxAttributeTypeFactory.instance.getAttrType(name, dataType, type)
|
|
||||||
switch(dataType){
|
|
||||||
case DataType.STRING:
|
|
||||||
case DataType.ENUMERATION:
|
|
||||||
this.value=value[1..-2]
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
this.value=value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TxAttribute(TxAttributeType other){
|
|
||||||
attributeType=other
|
|
||||||
}
|
|
||||||
|
|
||||||
TxAttribute(TxAttributeType other, value){
|
|
||||||
this(other.name, other.dataType, other.type, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return attributeType.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AssociationType getType() {
|
|
||||||
attributeType.type;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataType getDataType() {
|
|
||||||
attributeType.dataType;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-31
@@ -1,31 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 IT Just working.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IT Just working - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package com.minres.scviewer.database.text
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.AssociationType;
|
|
||||||
import com.minres.scviewer.database.DataType;
|
|
||||||
import com.minres.scviewer.database.ITxAttributeType;
|
|
||||||
|
|
||||||
class TxAttributeType implements ITxAttributeType {
|
|
||||||
String name
|
|
||||||
DataType dataType
|
|
||||||
AssociationType type
|
|
||||||
|
|
||||||
static TxAttributeType getAttrType(String name, DataType dataType, AssociationType type){
|
|
||||||
TxAttributeTypeFactory.instance.getAttrType(name, dataType, type)
|
|
||||||
}
|
|
||||||
|
|
||||||
TxAttributeType(String name, DataType dataType, AssociationType type){
|
|
||||||
this.name=name
|
|
||||||
this.dataType=dataType
|
|
||||||
this.type=type
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-38
@@ -1,38 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 IT Just working.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IT Just working - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package com.minres.scviewer.database.text
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.AssociationType;
|
|
||||||
import com.minres.scviewer.database.DataType
|
|
||||||
import com.minres.scviewer.database.ITxAttributeType
|
|
||||||
import com.minres.scviewer.database.ITxAttribute
|
|
||||||
|
|
||||||
class TxAttributeTypeFactory {
|
|
||||||
private static final instance = new TxAttributeTypeFactory()
|
|
||||||
|
|
||||||
def attributes = [:]
|
|
||||||
|
|
||||||
private TxAttributeTypeFactory() {
|
|
||||||
TxAttributeTypeFactory.metaClass.constructor = {-> instance }
|
|
||||||
}
|
|
||||||
|
|
||||||
ITxAttributeType getAttrType(String name, DataType dataType, AssociationType type){
|
|
||||||
def key = name+":"+dataType.toString()
|
|
||||||
ITxAttributeType res
|
|
||||||
if(attributes.containsKey(key)){
|
|
||||||
res=attributes[key]
|
|
||||||
} else {
|
|
||||||
res=new TxAttributeType(name, dataType, type)
|
|
||||||
attributes[key]=res
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-36
@@ -1,36 +0,0 @@
|
|||||||
package com.minres.scviewer.database.text;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.ITx
|
|
||||||
import com.minres.scviewer.database.ITxEvent
|
|
||||||
import com.minres.scviewer.database.IWaveformEvent
|
|
||||||
|
|
||||||
class TxEvent implements ITxEvent {
|
|
||||||
|
|
||||||
final ITxEvent.Type type;
|
|
||||||
|
|
||||||
final Tx transaction;
|
|
||||||
|
|
||||||
final Long time
|
|
||||||
|
|
||||||
TxEvent(ITxEvent.Type type, ITx transaction) {
|
|
||||||
super();
|
|
||||||
this.type = type;
|
|
||||||
this.transaction = transaction;
|
|
||||||
this.time = type==ITxEvent.Type.BEGIN?transaction.beginTime:transaction.endTime
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
IWaveformEvent duplicate() throws CloneNotSupportedException {
|
|
||||||
new TxEvent(type, transaction, time)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
int compareTo(IWaveformEvent o) {
|
|
||||||
time.compareTo(o.time)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
String toString() {
|
|
||||||
type.toString()+"@"+time+" of tx #"+transaction.id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-52
@@ -1,52 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 IT Just working.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IT Just working - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package com.minres.scviewer.database.text
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.ITxAttributeType
|
|
||||||
import com.minres.scviewer.database.ITxAttribute;
|
|
||||||
import com.minres.scviewer.database.ITxEvent;
|
|
||||||
import com.minres.scviewer.database.ITxGenerator;
|
|
||||||
import com.minres.scviewer.database.ITxStream;
|
|
||||||
import com.minres.scviewer.database.ITx;
|
|
||||||
import com.minres.scviewer.database.IWaveformEvent;
|
|
||||||
|
|
||||||
class TxGenerator implements ITxGenerator{
|
|
||||||
Long id
|
|
||||||
TxStream stream
|
|
||||||
String name
|
|
||||||
Boolean active = false
|
|
||||||
ArrayList<ITx> transactions=[]
|
|
||||||
|
|
||||||
ArrayList<ITxAttributeType> begin_attrs = []
|
|
||||||
int begin_attrs_idx = 0
|
|
||||||
ArrayList<ITxAttributeType> end_attrs= []
|
|
||||||
int end_attrs_idx = 0
|
|
||||||
|
|
||||||
TxGenerator(int id, TxStream stream, name){
|
|
||||||
this.id=id
|
|
||||||
this.stream=stream
|
|
||||||
this.name=name
|
|
||||||
}
|
|
||||||
|
|
||||||
ITxStream<? extends ITxEvent> getStream(){
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<ITx> getTransactions(){
|
|
||||||
return transactions
|
|
||||||
}
|
|
||||||
|
|
||||||
Boolean isActive() {return active};
|
|
||||||
|
|
||||||
}
|
|
||||||
-36
@@ -1,36 +0,0 @@
|
|||||||
package com.minres.scviewer.database.text
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.ITxRelation
|
|
||||||
import com.minres.scviewer.database.ITx;
|
|
||||||
import com.minres.scviewer.database.RelationType;
|
|
||||||
|
|
||||||
class TxRelation implements ITxRelation {
|
|
||||||
Tx source
|
|
||||||
|
|
||||||
Tx target
|
|
||||||
|
|
||||||
RelationType relationType
|
|
||||||
|
|
||||||
|
|
||||||
public TxRelation(RelationType relationType, Tx source, Tx target) {
|
|
||||||
this.source = source;
|
|
||||||
this.target = target;
|
|
||||||
this.relationType = relationType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RelationType getRelationType() {
|
|
||||||
return relationType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ITx getSource() {
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ITx getTarget() {
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-119
@@ -1,119 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2012 IT Just working.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IT Just working - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package com.minres.scviewer.database.text
|
|
||||||
|
|
||||||
import java.beans.PropertyChangeListener;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.NavigableMap;
|
|
||||||
|
|
||||||
import org.mapdb.Serializer
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.ITxEvent;
|
|
||||||
import com.minres.scviewer.database.IWaveform;
|
|
||||||
import com.minres.scviewer.database.IWaveformDb
|
|
||||||
import com.minres.scviewer.database.IWaveformEvent
|
|
||||||
import com.minres.scviewer.database.ITxGenerator
|
|
||||||
import com.minres.scviewer.database.HierNode;
|
|
||||||
import com.minres.scviewer.database.IHierNode
|
|
||||||
import com.minres.scviewer.database.ITxStream
|
|
||||||
import com.minres.scviewer.database.ITx
|
|
||||||
|
|
||||||
class TxStream extends HierNode implements ITxStream {
|
|
||||||
|
|
||||||
Long id
|
|
||||||
|
|
||||||
IWaveformDb database
|
|
||||||
|
|
||||||
String fullName
|
|
||||||
|
|
||||||
String kind
|
|
||||||
|
|
||||||
def generators = []
|
|
||||||
|
|
||||||
int maxConcurrency
|
|
||||||
|
|
||||||
private TreeMap<Long, List<ITxEvent>> events
|
|
||||||
|
|
||||||
TxStream(TextDbLoader loader, int id, String name, String kind){
|
|
||||||
super(name)
|
|
||||||
this.id=id
|
|
||||||
this.database=loader.db
|
|
||||||
this.fullName=name
|
|
||||||
this.kind=kind
|
|
||||||
this.maxConcurrency=0
|
|
||||||
//events = new TreeMap<Long, List<ITxEvent>>()
|
|
||||||
events = loader.mapDb.treeMap(name).keySerializer(Serializer.LONG).createOrOpen();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<ITxGenerator> getGenerators(){
|
|
||||||
return generators as List<ITxGenerator>
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IWaveformDb getDb() {
|
|
||||||
return database
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxConcurrency() {
|
|
||||||
if(!maxConcurrency){
|
|
||||||
generators.each {TxGenerator generator ->
|
|
||||||
generator.transactions.each{ Tx tx ->
|
|
||||||
putEvent(new TxEvent(ITxEvent.Type.BEGIN, tx))
|
|
||||||
putEvent(new TxEvent(ITxEvent.Type.END, tx))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
def rowendtime = [0]
|
|
||||||
events.keySet().each{long time ->
|
|
||||||
def value=events.get(time)
|
|
||||||
def starts=value.findAll{ITxEvent event ->event.type==ITxEvent.Type.BEGIN}
|
|
||||||
starts.each {ITxEvent event ->
|
|
||||||
Tx tx = event.transaction
|
|
||||||
def rowIdx = 0
|
|
||||||
for(rowIdx=0; rowIdx<rowendtime.size() && rowendtime[rowIdx]>tx.beginTime; rowIdx++);
|
|
||||||
if(rowendtime.size<=rowIdx)
|
|
||||||
rowendtime<<tx.endTime
|
|
||||||
else
|
|
||||||
rowendtime[rowIdx]=tx.endTime
|
|
||||||
tx.concurrencyIndex=rowIdx
|
|
||||||
}
|
|
||||||
}
|
|
||||||
maxConcurrency=rowendtime.size()
|
|
||||||
}
|
|
||||||
return maxConcurrency
|
|
||||||
}
|
|
||||||
|
|
||||||
private putEvent(ITxEvent event){
|
|
||||||
if(!events.containsKey(event.time))
|
|
||||||
events.put(event.time, [event])
|
|
||||||
else
|
|
||||||
events[event.time]<<event
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NavigableMap getEvents() {
|
|
||||||
return events;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection getWaveformEventsAtTime(Long time) {
|
|
||||||
return events.get(time);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Boolean equals(IWaveform other) {
|
|
||||||
return(other instanceof TxStream && this.getId()==other.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-12
@@ -1,12 +0,0 @@
|
|||||||
package com.minres.scviewer.database.swt;
|
|
||||||
|
|
||||||
public class Constants {
|
|
||||||
|
|
||||||
public static final String[] unitString={"fs", "ps", "ns", "us", "ms"};//, "s"};
|
|
||||||
|
|
||||||
public static final int[] unitMultiplier={1, 3, 10, 30, 100, 300};
|
|
||||||
|
|
||||||
public static final String CONTENT_PROVIDER_TAG = "TOOLTIP_CONTENT_PROVIDER";
|
|
||||||
public static final String HELP_PROVIDER_TAG = "TOOLTIP_HELP_PROVIDER";
|
|
||||||
|
|
||||||
}
|
|
||||||
-198
@@ -1,198 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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.swt.internal;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.NavigableMap;
|
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.graphics.GC;
|
|
||||||
import org.eclipse.swt.graphics.Point;
|
|
||||||
import org.eclipse.swt.graphics.Rectangle;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.ITx;
|
|
||||||
import com.minres.scviewer.database.ITxEvent;
|
|
||||||
import com.minres.scviewer.database.ITxStream;
|
|
||||||
import com.minres.scviewer.database.ui.TrackEntry;
|
|
||||||
import com.minres.scviewer.database.ui.WaveformColors;
|
|
||||||
|
|
||||||
public class StreamPainter extends TrackPainter{
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private final WaveformCanvas waveCanvas;
|
|
||||||
private ITxStream<? extends ITxEvent> stream;
|
|
||||||
private int txBase, txHeight;
|
|
||||||
private boolean even;
|
|
||||||
private TreeSet<ITx> seenTx;
|
|
||||||
|
|
||||||
public StreamPainter(WaveformCanvas waveCanvas, boolean even, TrackEntry trackEntry) {
|
|
||||||
super(trackEntry, even);
|
|
||||||
this.waveCanvas = waveCanvas;
|
|
||||||
this.stream=trackEntry.getStream();
|
|
||||||
this.seenTx=new TreeSet<ITx>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* convert java.awt.Color to org.eclipse.swt.graphics.Color
|
|
||||||
*/
|
|
||||||
static org.eclipse.swt.graphics.Color toSwtColor( GC gc, java.awt.Color awtColor ){
|
|
||||||
return new org.eclipse.swt.graphics.Color( gc.getDevice(), awtColor.getRed(), awtColor.getGreen(), awtColor.getBlue() );
|
|
||||||
}
|
|
||||||
|
|
||||||
static org.eclipse.swt.graphics.Color[] toSwtColors( GC gc, java.awt.Color[] awtColors ){
|
|
||||||
org.eclipse.swt.graphics.Color[] swtColors = new org.eclipse.swt.graphics.Color[awtColors.length];
|
|
||||||
for( int i=0; i<awtColors.length; i++ )
|
|
||||||
swtColors[i] = toSwtColor( gc, awtColors[i] );
|
|
||||||
return swtColors;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void paintArea(GC gc, Rectangle area) {
|
|
||||||
if(stream.getEvents().size()==0) return;
|
|
||||||
int trackHeight=trackEntry.height/stream.getMaxConcurrency();
|
|
||||||
txBase=trackHeight/5;
|
|
||||||
txHeight=trackHeight*3/5;
|
|
||||||
if(trackEntry.selected) {
|
|
||||||
gc.setBackground(this.waveCanvas.colors[WaveformColors.TRACK_BG_HIGHLITE.ordinal()]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gc.setBackground(this.waveCanvas.colors[even?WaveformColors.TRACK_BG_EVEN.ordinal():WaveformColors.TRACK_BG_ODD.ordinal()]);
|
|
||||||
gc.setFillRule(SWT.FILL_EVEN_ODD);
|
|
||||||
gc.fillRectangle(area);
|
|
||||||
|
|
||||||
long scaleFactor = this.waveCanvas.getScaleFactor();
|
|
||||||
long beginPos = area.x;
|
|
||||||
long beginTime = (beginPos + waveCanvas.getXOffset())*scaleFactor;
|
|
||||||
//long endPos = beginPos + area.width;
|
|
||||||
long endTime = beginTime + area.width*scaleFactor;
|
|
||||||
|
|
||||||
Entry<Long, ?> firstTx=stream.getEvents().floorEntry(beginTime);
|
|
||||||
Entry<Long, ?> lastTx=stream.getEvents().ceilingEntry(endTime);
|
|
||||||
if(firstTx==null) firstTx = stream.getEvents().firstEntry();
|
|
||||||
if(lastTx==null) lastTx=stream.getEvents().lastEntry();
|
|
||||||
gc.setFillRule(SWT.FILL_EVEN_ODD);
|
|
||||||
gc.setLineStyle(SWT.LINE_SOLID);
|
|
||||||
gc.setLineWidth(1);
|
|
||||||
gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]);
|
|
||||||
|
|
||||||
for( int y1=area.y+trackHeight/2; y1<area.y+trackEntry.height; y1+=trackHeight)
|
|
||||||
gc.drawLine(area.x, y1, area.x+area.width, y1);
|
|
||||||
if(firstTx==lastTx) {
|
|
||||||
for(ITxEvent txEvent:(Collection<? extends ITxEvent>)firstTx.getValue())
|
|
||||||
drawTx(gc, area, txEvent.getTransaction(), false);
|
|
||||||
}else{
|
|
||||||
seenTx.clear();
|
|
||||||
NavigableMap<Long,?> entries = stream.getEvents().subMap(firstTx.getKey(), true, lastTx.getKey(), true);
|
|
||||||
boolean highlighed=false;
|
|
||||||
gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]);
|
|
||||||
|
|
||||||
for(Entry<Long, ?> entry: entries.entrySet())
|
|
||||||
for(ITxEvent txEvent:(Collection<? extends ITxEvent>)entry.getValue()){
|
|
||||||
if(txEvent.getType()==ITxEvent.Type.BEGIN)
|
|
||||||
seenTx.add(txEvent.getTransaction());
|
|
||||||
if(txEvent.getType()==ITxEvent.Type.END){
|
|
||||||
ITx tx = txEvent.getTransaction();
|
|
||||||
highlighed|=waveCanvas.currentSelection!=null && waveCanvas.currentSelection.equals(tx);
|
|
||||||
drawTx(gc, area, tx, false);
|
|
||||||
seenTx.remove(tx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(ITx tx:seenTx){
|
|
||||||
drawTx(gc, area, tx, false);
|
|
||||||
}
|
|
||||||
if(highlighed){
|
|
||||||
gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE_HIGHLITE.ordinal()]);
|
|
||||||
drawTx(gc, area, waveCanvas.currentSelection, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void drawTx(GC gc, Rectangle area, ITx tx, boolean highlighted ) {
|
|
||||||
// compute colors
|
|
||||||
java.awt.Color[] fallbackColors = trackEntry.getColors();
|
|
||||||
java.awt.Color[] transColor = TrackEntry.computeColor( tx.getGenerator().getName(), fallbackColors[0], fallbackColors[1] );
|
|
||||||
|
|
||||||
gc.setBackground( toSwtColor( gc, transColor[highlighted?1:0] ) );
|
|
||||||
|
|
||||||
int offset = tx.getConcurrencyIndex()*this.waveCanvas.getTrackHeight();
|
|
||||||
Rectangle bb = new Rectangle(
|
|
||||||
(int)(tx.getBeginTime()/this.waveCanvas.getScaleFactor()-waveCanvas.getXOffset()), area.y+offset+txBase,
|
|
||||||
(int)((tx.getEndTime()-tx.getBeginTime())/this.waveCanvas.getScaleFactor()), txHeight);
|
|
||||||
|
|
||||||
if(bb.x+bb.width<area.x || bb.x>area.x+area.width) return;
|
|
||||||
if(bb.width==0){
|
|
||||||
gc.drawLine(bb.x, bb.y, bb.x, bb.y+bb.height);
|
|
||||||
} else if(bb.width<10){
|
|
||||||
gc.fillRectangle(bb);
|
|
||||||
gc.drawRectangle(bb);
|
|
||||||
} else {
|
|
||||||
if(bb.x < area.x) {
|
|
||||||
bb.width = bb.width-(area.x-bb.x)+5;
|
|
||||||
bb.x=area.x-5;
|
|
||||||
}
|
|
||||||
int bb_x2 = bb.x+bb.width;
|
|
||||||
int area_x2 = area.x+area.width;
|
|
||||||
if(bb_x2>area_x2){
|
|
||||||
bb_x2=area_x2+5;
|
|
||||||
bb.width= bb_x2-bb.x;
|
|
||||||
}
|
|
||||||
gc.fillRoundRectangle(bb.x, bb.y, bb.width, bb.height, 5, 5);
|
|
||||||
gc.drawRoundRectangle(bb.x, bb.y, bb.width, bb.height, 5, 5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ITx getClicked(Point point) {
|
|
||||||
int lane=point.y/waveCanvas.getTrackHeight();
|
|
||||||
Entry<Long, List<ITxEvent>> firstTx=stream.getEvents().floorEntry(point.x*waveCanvas.getScaleFactor());
|
|
||||||
if(firstTx!=null){
|
|
||||||
do {
|
|
||||||
ITx tx = getTxFromEntry(lane, point.x, firstTx);
|
|
||||||
if(tx!=null) return tx;
|
|
||||||
firstTx=stream.getEvents().lowerEntry(firstTx.getKey());
|
|
||||||
}while(firstTx!=null);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ITxStream<? extends ITxEvent> getStream() {
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStream(ITxStream<? extends ITxEvent> stream) {
|
|
||||||
this.stream = stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ITx getTxFromEntry(int lane, int offset, Entry<Long, List<ITxEvent>> firstTx) {
|
|
||||||
long timePoint=offset*waveCanvas.getScaleFactor();
|
|
||||||
for(ITxEvent evt:firstTx.getValue()){
|
|
||||||
ITx tx=evt.getTransaction();
|
|
||||||
if(evt.getType()==ITxEvent.Type.BEGIN && tx.getConcurrencyIndex()==lane && tx.getBeginTime()<=timePoint && tx.getEndTime()>=timePoint){
|
|
||||||
return evt.getTransaction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// now with some fuzziness
|
|
||||||
timePoint=(offset-5)*waveCanvas.getScaleFactor();
|
|
||||||
long timePointHigh=(offset+5)*waveCanvas.getScaleFactor();
|
|
||||||
for(ITxEvent evt:firstTx.getValue()){
|
|
||||||
ITx tx=evt.getTransaction();
|
|
||||||
if(evt.getType()==ITxEvent.Type.BEGIN && tx.getConcurrencyIndex()==lane && tx.getBeginTime()<=timePointHigh && tx.getEndTime()>=timePoint){
|
|
||||||
return evt.getTransaction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-1354
File diff suppressed because it is too large.
Load diff
@@ -1,7 +0,0 @@
|
|||||||
<?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.8"/>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="output" path="bin"/>
|
|
||||||
</classpath>
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>com.minres.scviewer.database.ui</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>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.pde.PluginNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.8
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
Manifest-Version: 1.0
|
|
||||||
Bundle-ManifestVersion: 2
|
|
||||||
Bundle-Name: Database UI
|
|
||||||
Bundle-SymbolicName: com.minres.scviewer.database.ui
|
|
||||||
Bundle-Version: 2.0.0.qualifier
|
|
||||||
Bundle-Vendor: MINRES Technologies GmbH
|
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
|
|
||||||
Export-Package: com.minres.scviewer.database.ui
|
|
||||||
Require-Bundle: com.minres.scviewer.database,
|
|
||||||
org.eclipse.jface,
|
|
||||||
org.eclipse.swt
|
|
||||||
Automatic-Module-Name: com.minres.scviewer.database.ui
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
source.. = src/
|
|
||||||
output.. = bin/
|
|
||||||
bin.includes = META-INF/,\
|
|
||||||
.
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<artifactId>com.minres.scviewer.database.ui</artifactId>
|
|
||||||
<version>2.0.0-SNAPSHOT</version>
|
|
||||||
<packaging>eclipse-plugin</packaging>
|
|
||||||
<parent>
|
|
||||||
<groupId>com.minres.scviewer</groupId>
|
|
||||||
<artifactId>com.minres.scviewer.parent</artifactId>
|
|
||||||
<version>2.0.0-SNAPSHOT</version>
|
|
||||||
<relativePath>../com.minres.scviewer.parent</relativePath>
|
|
||||||
</parent>
|
|
||||||
</project>
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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.ui;
|
|
||||||
|
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.ISignal;
|
|
||||||
import com.minres.scviewer.database.ITxEvent;
|
|
||||||
import com.minres.scviewer.database.ITxStream;
|
|
||||||
import com.minres.scviewer.database.IWaveform;
|
|
||||||
|
|
||||||
public class TrackEntry {
|
|
||||||
|
|
||||||
// color info
|
|
||||||
public static Color fallbackColor = new Color(200,0,0);
|
|
||||||
public static Color highlightedFallbackColor = new Color(255,0,0);
|
|
||||||
private Color[]signalColors;
|
|
||||||
|
|
||||||
// list of random colors
|
|
||||||
private static Color[][] randomColors = {
|
|
||||||
{ new Color( 170, 66, 37 ), new Color ( 190, 66, 37 ) },
|
|
||||||
{ new Color( 96, 74, 110 ), new Color ( 96, 74, 130 ) },
|
|
||||||
{ new Color( 133, 105, 128 ), new Color ( 153, 105, 128 ) },
|
|
||||||
{ new Color( 0, 126, 135 ), new Color ( 0, 126, 155 ) },
|
|
||||||
{ new Color( 243, 146, 75 ), new Color ( 255, 146, 75 ) },
|
|
||||||
{ new Color( 206, 135, 163 ), new Color ( 226, 135, 163 ) },
|
|
||||||
{ new Color( 124, 103, 74 ), new Color ( 144, 103, 74 ) },
|
|
||||||
{ new Color( 194, 187, 169 ), new Color ( 214, 187, 169 ) },
|
|
||||||
{ new Color( 104, 73, 71 ), new Color ( 124, 73, 71 ) },
|
|
||||||
{ new Color( 75, 196, 213 ), new Color ( 75, 196, 233 ) },
|
|
||||||
{ new Color( 206, 232, 229 ), new Color ( 206, 252, 229 ) },
|
|
||||||
{ new Color( 169, 221, 199 ), new Color ( 169, 241, 199 ) },
|
|
||||||
{ new Color( 100, 165, 197 ), new Color ( 100, 165, 217 ) },
|
|
||||||
{ new Color( 150, 147, 178 ), new Color ( 150, 147, 198 ) },
|
|
||||||
{ new Color( 200, 222, 182 ), new Color ( 200, 242, 182 ) },
|
|
||||||
{ new Color( 147, 208, 197 ), new Color ( 147, 228, 197 ) }
|
|
||||||
};
|
|
||||||
|
|
||||||
public static Color[] computeColor (String streamValue, Color fallback, Color highlightedFallback) {
|
|
||||||
|
|
||||||
Color[]result = new Color[2];
|
|
||||||
|
|
||||||
result[0] = fallback;
|
|
||||||
result[1] = highlightedFallback;
|
|
||||||
|
|
||||||
// assign "random" color here, one name always results in the same color!
|
|
||||||
if( streamValue!=null && randomColors.length > 0 ) {
|
|
||||||
int index = Math.abs(streamValue.hashCode()) % randomColors.length;
|
|
||||||
result[0] = randomColors[index][0];
|
|
||||||
result[1] = randomColors[index][1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setColor(Color changedColor, Color highlightColor) {
|
|
||||||
signalColors[0] = changedColor;
|
|
||||||
signalColors[1] = highlightColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Color[] getColors() {
|
|
||||||
return signalColors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum ValueDisplay {
|
|
||||||
DEFAULT, SIGNED, UNSIGNED
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum WaveDisplay {
|
|
||||||
DEFAULT, STEP_WISE, CONTINOUS
|
|
||||||
}
|
|
||||||
|
|
||||||
final public IWaveform waveform;
|
|
||||||
|
|
||||||
public int vOffset;
|
|
||||||
|
|
||||||
public int height;
|
|
||||||
|
|
||||||
public boolean selected;
|
|
||||||
|
|
||||||
public String currentValue="";
|
|
||||||
|
|
||||||
public ValueDisplay valueDisplay = ValueDisplay.DEFAULT;
|
|
||||||
|
|
||||||
public WaveDisplay waveDisplay = WaveDisplay.DEFAULT;
|
|
||||||
|
|
||||||
public TrackEntry(IWaveform waveform) {
|
|
||||||
this.waveform = waveform;
|
|
||||||
vOffset=0;
|
|
||||||
height=0;
|
|
||||||
selected=false;
|
|
||||||
signalColors = new Color[2];
|
|
||||||
signalColors[0] = fallbackColor;
|
|
||||||
signalColors[1] = highlightedFallbackColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isStream(){
|
|
||||||
return waveform instanceof ITxStream<?>;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ITxStream<? extends ITxEvent> getStream(){
|
|
||||||
return (ITxStream<?>) waveform;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isSignal(){
|
|
||||||
return waveform instanceof ISignal<?>;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ISignal<?> getSignal(){
|
|
||||||
return (ISignal<?>) waveform;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object obj) {
|
|
||||||
if(obj instanceof TrackEntry){
|
|
||||||
TrackEntry o = (TrackEntry) obj;
|
|
||||||
return waveform==o.waveform && vOffset==o.vOffset;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
package com.minres.scviewer.database;
|
|
||||||
public enum BitValue {
|
|
||||||
ZERO,
|
|
||||||
ONE,
|
|
||||||
X,
|
|
||||||
Z;
|
|
||||||
|
|
||||||
private static final BitValue[] ORDINAL_TABLE = BitValue.values();
|
|
||||||
|
|
||||||
public static BitValue fromChar(char c) {
|
|
||||||
switch (c) {
|
|
||||||
case '0':
|
|
||||||
return ZERO;
|
|
||||||
case '1':
|
|
||||||
return ONE;
|
|
||||||
case 'x':
|
|
||||||
case 'X':
|
|
||||||
return X;
|
|
||||||
case 'z':
|
|
||||||
case 'Z':
|
|
||||||
return Z;
|
|
||||||
default:
|
|
||||||
throw new NumberFormatException("unknown digit " + c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public char toChar() {
|
|
||||||
switch (this) {
|
|
||||||
case ZERO:
|
|
||||||
return '0';
|
|
||||||
case ONE:
|
|
||||||
return '1';
|
|
||||||
case X:
|
|
||||||
return 'x';
|
|
||||||
case Z:
|
|
||||||
return 'z';
|
|
||||||
}
|
|
||||||
|
|
||||||
return ' '; // Unreachable?
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BitValue fromInt(int i) {
|
|
||||||
if (i == 0) {
|
|
||||||
return ZERO;
|
|
||||||
} else {
|
|
||||||
return ONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int toInt() {
|
|
||||||
return (this == ONE) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BitValue fromOrdinal(int ord) {
|
|
||||||
return ORDINAL_TABLE[ord];
|
|
||||||
}
|
|
||||||
|
|
||||||
public int compare(BitValue other) {
|
|
||||||
if (this == ONE && other == ZERO) {
|
|
||||||
return 1;
|
|
||||||
} else if (this == ZERO && other == ONE) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
// Either these are equal, or there is an X and Z, which match everything.
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
public class BitVector {
|
|
||||||
|
|
||||||
private final int width;
|
|
||||||
|
|
||||||
private int[] packedValues;
|
|
||||||
|
|
||||||
public BitVector(int netWidth) {
|
|
||||||
this.width=netWidth;
|
|
||||||
packedValues = new int[(netWidth+15)/16];
|
|
||||||
for(int i=0; i<packedValues.length; i++) packedValues[i]=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValue(int i, BitValue value) {
|
|
||||||
int bitIndex = i*2;
|
|
||||||
int wordOffset = bitIndex >> 5;
|
|
||||||
int bitOffset = bitIndex & 31;
|
|
||||||
packedValues[wordOffset] &= ~(3 << bitOffset);
|
|
||||||
packedValues[wordOffset] |= value.ordinal() << bitOffset;
|
|
||||||
}
|
|
||||||
|
|
||||||
public char[] getValue() {
|
|
||||||
int bitOffset = 0;
|
|
||||||
int wordOffset = 0;
|
|
||||||
char[] res = new char[width];
|
|
||||||
// Copy values out of packed array
|
|
||||||
for (int i = 0; i < width; i++) {
|
|
||||||
int currentWord = (packedValues[wordOffset] >> bitOffset)&3;
|
|
||||||
res[width-i-1]=BitValue.fromInt(currentWord).toChar();
|
|
||||||
bitOffset += 2;
|
|
||||||
if (bitOffset == 32) {
|
|
||||||
wordOffset++;
|
|
||||||
bitOffset = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValue(char[] value) {
|
|
||||||
int bitIndex = width;
|
|
||||||
int wordOffset = bitIndex >> 4;
|
|
||||||
int bitOffset = (bitIndex * 2) % 32;
|
|
||||||
for (int i = Math.min(value.length, width) - 1; i >= 0; i--) {
|
|
||||||
packedValues[wordOffset] |= BitValue.fromChar(value[i]).ordinal() << bitOffset;
|
|
||||||
bitOffset += 2;
|
|
||||||
if (bitOffset == 32) {
|
|
||||||
wordOffset++;
|
|
||||||
bitOffset = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getWidth() {
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString(){
|
|
||||||
return new String(getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toHexString(){
|
|
||||||
int resWidth=(width-1)/4+1;
|
|
||||||
char[] value=getValue();
|
|
||||||
char[] res = new char[resWidth];
|
|
||||||
for(int i=resWidth-1; i>=0; i--){
|
|
||||||
int digit=0;
|
|
||||||
for(int j=3; j>=0; j--){
|
|
||||||
if((4*i+j)>=value.length) continue;
|
|
||||||
BitValue val = BitValue.fromChar(value[4*i+j]);
|
|
||||||
switch(val) {
|
|
||||||
case X:
|
|
||||||
case Z:
|
|
||||||
res[i]=val.toChar();
|
|
||||||
continue;
|
|
||||||
case ONE:
|
|
||||||
digit+=1<<(3-j);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
res[i]=Character.forDigit(digit, 16); //((digit < 10) ? '0' + digit : 'a' + digit -10)
|
|
||||||
}
|
|
||||||
return new String(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
public long toUnsignedValue() {
|
|
||||||
long res = 0;
|
|
||||||
int bitOffset = 0;
|
|
||||||
int wordOffset = 0;
|
|
||||||
int currentWord = 0;
|
|
||||||
// Copy values out of packed array
|
|
||||||
for (int i = 0; i < width; i++) {
|
|
||||||
if(bitOffset==0) currentWord = packedValues[wordOffset];
|
|
||||||
switch (currentWord & 3) {
|
|
||||||
case 1:
|
|
||||||
res|=1<<i;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
bitOffset += 2;
|
|
||||||
if (bitOffset == 32) {
|
|
||||||
wordOffset++;
|
|
||||||
bitOffset = 0;
|
|
||||||
} else {
|
|
||||||
currentWord >>= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long toSignedValue() {
|
|
||||||
long res = 0;
|
|
||||||
int bitOffset = 0;
|
|
||||||
int wordOffset = 0;
|
|
||||||
int currentWord = 0;
|
|
||||||
int lastVal=0;
|
|
||||||
// Copy values out of packed array
|
|
||||||
for (int i = 0; i < width; i++) {
|
|
||||||
if(bitOffset==0) currentWord = packedValues[wordOffset];
|
|
||||||
lastVal=0;
|
|
||||||
switch (currentWord & 3) {
|
|
||||||
case 1:
|
|
||||||
res|=1<<i;
|
|
||||||
lastVal=1;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
bitOffset += 2;
|
|
||||||
if (bitOffset == 32) {
|
|
||||||
wordOffset++;
|
|
||||||
bitOffset = 0;
|
|
||||||
} else {
|
|
||||||
currentWord >>= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(int i=width; i<64; i++) {
|
|
||||||
if(bitOffset==0) currentWord = packedValues[wordOffset];
|
|
||||||
res|=lastVal<<i;
|
|
||||||
bitOffset += 2;
|
|
||||||
if (bitOffset == 32) {
|
|
||||||
wordOffset++;
|
|
||||||
bitOffset = 0;
|
|
||||||
} else {
|
|
||||||
currentWord >>= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
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
|
|
||||||
};
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
import java.beans.PropertyChangeListener;
|
|
||||||
import java.beans.PropertyChangeSupport;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class HierNode implements IHierNode {
|
|
||||||
|
|
||||||
protected String name;
|
|
||||||
|
|
||||||
protected String parentName;
|
|
||||||
|
|
||||||
protected ArrayList<IHierNode> childs;
|
|
||||||
|
|
||||||
protected PropertyChangeSupport pcs;
|
|
||||||
|
|
||||||
public HierNode() {
|
|
||||||
childs = new ArrayList<IHierNode>();
|
|
||||||
pcs=new PropertyChangeSupport(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HierNode(String name) {
|
|
||||||
this(name, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
public HierNode(String name, String parentName) {
|
|
||||||
this();
|
|
||||||
this.name=name;
|
|
||||||
this.parentName=parentName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addPropertyChangeListener(PropertyChangeListener l) {
|
|
||||||
pcs.addPropertyChangeListener(l);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removePropertyChangeListener(PropertyChangeListener l) {
|
|
||||||
pcs.removePropertyChangeListener(l);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getFullName() {
|
|
||||||
if(parentName!=null && parentName.length()>0)
|
|
||||||
return parentName+"."+name;
|
|
||||||
else
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name=name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setParentName(String name) {
|
|
||||||
this.parentName=name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<IHierNode> getChildNodes() {
|
|
||||||
return childs;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo(IHierNode o) {
|
|
||||||
return name.compareTo(o.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
import java.beans.PropertyChangeListener;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface IHierNode extends Comparable<IHierNode>{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attach a non-null PropertyChangeListener to this object.
|
|
||||||
*
|
|
||||||
* @param l
|
|
||||||
* a non-null PropertyChangeListener instance
|
|
||||||
* @throws IllegalArgumentException
|
|
||||||
* if the parameter is null
|
|
||||||
*/
|
|
||||||
public void addPropertyChangeListener(PropertyChangeListener l);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove a PropertyChangeListener from this component.
|
|
||||||
*
|
|
||||||
* @param l
|
|
||||||
* a PropertyChangeListener instance
|
|
||||||
*/
|
|
||||||
public void removePropertyChangeListener(PropertyChangeListener l) ;
|
|
||||||
|
|
||||||
public String getFullName();
|
|
||||||
|
|
||||||
public String getName();
|
|
||||||
|
|
||||||
public void setName(String name);
|
|
||||||
|
|
||||||
public void setParentName(String name);
|
|
||||||
|
|
||||||
public List<IHierNode> getChildNodes();
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface ITx extends Comparable<ITx>{
|
|
||||||
|
|
||||||
public Long getId();
|
|
||||||
|
|
||||||
public ITxStream<ITxEvent> getStream();
|
|
||||||
|
|
||||||
public ITxGenerator getGenerator();
|
|
||||||
|
|
||||||
public Long getBeginTime();
|
|
||||||
|
|
||||||
public Long getEndTime();
|
|
||||||
|
|
||||||
public int getConcurrencyIndex();
|
|
||||||
|
|
||||||
public List<ITxAttribute> getAttributes();
|
|
||||||
|
|
||||||
public Collection<ITxRelation> getIncomingRelations();
|
|
||||||
|
|
||||||
public Collection<ITxRelation> getOutgoingRelations();
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface ITxGenerator {
|
|
||||||
public Long getId();
|
|
||||||
public ITxStream<ITxEvent> getStream();
|
|
||||||
public String getName();
|
|
||||||
public List<ITx> getTransactions();
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.NavigableMap;
|
|
||||||
|
|
||||||
public interface ITxStream<T extends ITxEvent> extends IWaveform {
|
|
||||||
|
|
||||||
public List<ITxGenerator> getGenerators();
|
|
||||||
|
|
||||||
public int getMaxConcurrency();
|
|
||||||
|
|
||||||
public NavigableMap<Long, List<ITxEvent>> getEvents();
|
|
||||||
|
|
||||||
public Collection<T> getWaveformEventsAtTime(Long time);
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
public interface IWaveformDbLoader {
|
|
||||||
|
|
||||||
public boolean load(IWaveformDb db, File inp) throws Exception;
|
|
||||||
|
|
||||||
public Long getMaxTime();
|
|
||||||
|
|
||||||
public Collection<IWaveform> getAllWaves() ;
|
|
||||||
|
|
||||||
public Collection<RelationType> getAllRelationTypes() ;
|
|
||||||
|
|
||||||
}
|
|
||||||
-189
@@ -1,189 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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.internal;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.HierNode;
|
|
||||||
import com.minres.scviewer.database.IHierNode;
|
|
||||||
import com.minres.scviewer.database.IWaveform;
|
|
||||||
import com.minres.scviewer.database.IWaveformDb;
|
|
||||||
import com.minres.scviewer.database.IWaveformDbLoader;
|
|
||||||
import com.minres.scviewer.database.InputFormatException;
|
|
||||||
import com.minres.scviewer.database.RelationType;
|
|
||||||
|
|
||||||
public class WaveformDb extends HierNode implements IWaveformDb {
|
|
||||||
|
|
||||||
private static List<IWaveformDbLoader> loaders=new LinkedList<IWaveformDbLoader>();
|
|
||||||
|
|
||||||
private boolean loaded;
|
|
||||||
|
|
||||||
private List<IHierNode> childNodes;
|
|
||||||
|
|
||||||
private List<RelationType> relationTypes;
|
|
||||||
|
|
||||||
private Map<String, IWaveform> waveforms;
|
|
||||||
|
|
||||||
private Long maxTime;
|
|
||||||
|
|
||||||
|
|
||||||
public synchronized void bind(IWaveformDbLoader loader){
|
|
||||||
loaders.add(loader);
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized void unbind(IWaveformDbLoader loader){
|
|
||||||
loaders.remove(loader);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static List<IWaveformDbLoader> getLoaders() {
|
|
||||||
return Collections.unmodifiableList(loaders);
|
|
||||||
}
|
|
||||||
|
|
||||||
public WaveformDb() {
|
|
||||||
super();
|
|
||||||
waveforms = new HashMap<String, IWaveform>();
|
|
||||||
relationTypes=new ArrayList<>();
|
|
||||||
maxTime=0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long getMaxTime() {
|
|
||||||
return maxTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IWaveform getStreamByName(String name) {
|
|
||||||
return waveforms.get(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<IWaveform> getAllWaves() {
|
|
||||||
return new ArrayList<IWaveform>(waveforms.values());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean load(File inp){
|
|
||||||
for(IWaveformDbLoader loader:loaders){
|
|
||||||
try {
|
|
||||||
if(loader.load(this, inp)){
|
|
||||||
for(IWaveform w:loader.getAllWaves()){
|
|
||||||
waveforms.put(w.getFullName(),w);
|
|
||||||
}
|
|
||||||
if(loader.getMaxTime()>maxTime){
|
|
||||||
maxTime=loader.getMaxTime();
|
|
||||||
}
|
|
||||||
if(name==null) name=getFileBasename(inp.getName());
|
|
||||||
buildHierarchyNodes() ;
|
|
||||||
relationTypes.addAll(loader.getAllRelationTypes());
|
|
||||||
pcs.firePropertyChange("WAVEFORMS", null, waveforms);
|
|
||||||
pcs.firePropertyChange("CHILDS", null, childNodes);
|
|
||||||
loaded = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static String getFileBasename(String f) {
|
|
||||||
String ext = "";
|
|
||||||
int i = f.lastIndexOf('.');
|
|
||||||
if (i > 0 && i < f.length() - 1) {
|
|
||||||
ext = f.substring(0, i);
|
|
||||||
}
|
|
||||||
return ext;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clear() {
|
|
||||||
waveforms.clear();
|
|
||||||
childNodes.clear();
|
|
||||||
loaded=false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isLoaded() {
|
|
||||||
return loaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void buildHierarchyNodes() throws InputFormatException{
|
|
||||||
childNodes= new ArrayList<IHierNode>();
|
|
||||||
for(IWaveform stream:getAllWaves()){
|
|
||||||
//updateMaxTime(stream);
|
|
||||||
String[] hier = stream.getName().split("\\.");
|
|
||||||
IHierNode node = this;
|
|
||||||
List<String> path=new LinkedList<String>();
|
|
||||||
path.add(name);
|
|
||||||
for(String name:hier){
|
|
||||||
IHierNode n1 = null;
|
|
||||||
for (IHierNode n : node.getChildNodes()) {
|
|
||||||
if (n.getName().equals(name)) {
|
|
||||||
n1=n;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(name.equals(hier[hier.length-1])){ //leaf
|
|
||||||
if(n1!=null) {
|
|
||||||
if(n1 instanceof HierNode){
|
|
||||||
node.getChildNodes().remove(n1);
|
|
||||||
stream.getChildNodes().addAll(n1.getChildNodes());
|
|
||||||
Collections.sort(stream.getChildNodes());
|
|
||||||
} else {
|
|
||||||
throw new InputFormatException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stream.setName(name);
|
|
||||||
stream.setParentName(join(path, "."));
|
|
||||||
node.getChildNodes().add(stream);
|
|
||||||
Collections.sort(node.getChildNodes());
|
|
||||||
node=stream;
|
|
||||||
} else { // intermediate
|
|
||||||
if(n1 != null) {
|
|
||||||
node=n1;
|
|
||||||
} else {
|
|
||||||
HierNode newNode = new HierNode(name, join(path, "."));
|
|
||||||
node.getChildNodes().add(newNode);
|
|
||||||
Collections.sort(node.getChildNodes());
|
|
||||||
node=newNode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
path.add(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String join(Collection<?> col, String delim) {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
Iterator<?> iter = col.iterator();
|
|
||||||
if (iter.hasNext())
|
|
||||||
sb.append(iter.next().toString());
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
sb.append(delim);
|
|
||||||
sb.append(iter.next().toString());
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RelationType> getAllRelationTypes() {
|
|
||||||
return relationTypes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
pluginProject.extensions=false
|
|
||||||
resolve.requirebundle=false
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<artifactId>com.minres.scviewer.e4.application</artifactId>
|
|
||||||
<version>2.6.0-SNAPSHOT</version>
|
|
||||||
<parent>
|
|
||||||
<groupId>com.minres.scviewer</groupId>
|
|
||||||
<artifactId>com.minres.scviewer.parent</artifactId>
|
|
||||||
<version>2.0.0-SNAPSHOT</version>
|
|
||||||
<relativePath>../com.minres.scviewer.parent</relativePath>
|
|
||||||
</parent>
|
|
||||||
<packaging>eclipse-plugin</packaging>
|
|
||||||
</project>
|
|
||||||
-205
@@ -1,205 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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.e4.application;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.eclipse.core.runtime.Platform;
|
|
||||||
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
|
|
||||||
import org.eclipse.e4.core.contexts.IEclipseContext;
|
|
||||||
import org.eclipse.e4.core.services.events.IEventBroker;
|
|
||||||
import org.eclipse.e4.ui.model.application.MApplication;
|
|
||||||
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
|
|
||||||
import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
|
|
||||||
import org.eclipse.e4.ui.workbench.UIEvents;
|
|
||||||
import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
|
|
||||||
import org.eclipse.e4.ui.workbench.lifecycle.PreSave;
|
|
||||||
import org.eclipse.e4.ui.workbench.lifecycle.ProcessAdditions;
|
|
||||||
import org.eclipse.e4.ui.workbench.lifecycle.ProcessRemovals;
|
|
||||||
import org.eclipse.e4.ui.workbench.modeling.EModelService;
|
|
||||||
import org.eclipse.e4.ui.workbench.modeling.EPartService;
|
|
||||||
import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
|
|
||||||
import org.eclipse.equinox.app.IApplicationContext;
|
|
||||||
import org.eclipse.osgi.service.datalocation.Location;
|
|
||||||
import org.osgi.service.event.Event;
|
|
||||||
import org.osgi.service.event.EventHandler;
|
|
||||||
|
|
||||||
import com.minres.scviewer.e4.application.options.Options;
|
|
||||||
import com.minres.scviewer.e4.application.options.Options.Multiplicity;
|
|
||||||
import com.minres.scviewer.e4.application.options.Options.Separator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This implementation contains e4 LifeCycle annotated methods.<br />
|
|
||||||
* There is a corresponding entry in <em>plugin.xml</em> (under the
|
|
||||||
* <em>org.eclipse.core.runtime.products' extension point</em>) that references
|
|
||||||
* this class.
|
|
||||||
**/
|
|
||||||
@SuppressWarnings("restriction")
|
|
||||||
public class E4LifeCycle {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Post construct.
|
|
||||||
*
|
|
||||||
* @param eventBroker the event broker
|
|
||||||
*/
|
|
||||||
@PostConstruct
|
|
||||||
private static void postConstruct(final IEventBroker eventBroker) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Post context create. Open a database if given on command line using the OpenViewHandler
|
|
||||||
*
|
|
||||||
* @param appContext the app context
|
|
||||||
* @param eventBroker the event broker
|
|
||||||
*/
|
|
||||||
@PostContextCreate
|
|
||||||
void postContextCreate(IApplicationContext appContext, final IEventBroker eventBroker) {
|
|
||||||
final String[] args = (String[])appContext.getArguments().get(IApplicationContext.APPLICATION_ARGS);
|
|
||||||
Options opt = new Options(args, 0, 1);
|
|
||||||
opt.getSet()
|
|
||||||
.addOption("clearPersistedState", Multiplicity.ZERO_OR_ONE)
|
|
||||||
.addOption("c", Separator.BLANK, Multiplicity.ZERO_OR_ONE);
|
|
||||||
if (!opt.check(Options.DEFAULT_SET, true, false)) {
|
|
||||||
System.err.println(opt.getCheckErrors());
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
final String confFile =opt.getSet().isSet("c")?opt.getSet().getOption("c").getResultValue(0):"";
|
|
||||||
|
|
||||||
// react on the first view being created, at that time the UI is available
|
|
||||||
eventBroker.subscribe(UIEvents.UILifeCycle.ACTIVATE, new EventHandler() {
|
|
||||||
@Override
|
|
||||||
public void handleEvent(Event event) {
|
|
||||||
MPart part = (MPart) event.getProperty("ChangedElement"); //$NON-NLS-1$
|
|
||||||
if(part!=null){
|
|
||||||
IEclipseContext ctx = part.getContext();
|
|
||||||
OpenViewHandler openViewHandler= new OpenViewHandler();
|
|
||||||
if(confFile.length()>0) openViewHandler.setConfigFile(confFile);
|
|
||||||
ContextInjectionFactory.inject(openViewHandler, ctx);
|
|
||||||
eventBroker.unsubscribe(this);
|
|
||||||
for(String name:opt.getSet().getData()){
|
|
||||||
openViewHandler.openViewForFile(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new EventHandler() {
|
|
||||||
@Override
|
|
||||||
public void handleEvent(Event event) {
|
|
||||||
Location instanceLocation = Platform.getInstanceLocation();
|
|
||||||
try {
|
|
||||||
boolean isLocked = instanceLocation.isLocked();
|
|
||||||
if(isLocked)
|
|
||||||
instanceLocation.release();
|
|
||||||
} catch (IOException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pre save.
|
|
||||||
*
|
|
||||||
* @param workbenchContext the workbench context
|
|
||||||
*/
|
|
||||||
@PreSave
|
|
||||||
void preSave(IEclipseContext workbenchContext) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process additions.
|
|
||||||
*
|
|
||||||
* @param workbenchContext the workbench context
|
|
||||||
*/
|
|
||||||
@ProcessAdditions
|
|
||||||
void processAdditions(IEclipseContext workbenchContext) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Process removals.
|
|
||||||
*
|
|
||||||
* @param workbenchContext the workbench context
|
|
||||||
*/
|
|
||||||
@ProcessRemovals
|
|
||||||
void processRemovals(IEclipseContext workbenchContext) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Join.
|
|
||||||
*
|
|
||||||
* @param tokens the tokens
|
|
||||||
* @return the string
|
|
||||||
*/
|
|
||||||
String join(String[] tokens){
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
boolean first=true;
|
|
||||||
for(String token:tokens){
|
|
||||||
if(!first) sb.append(","); //$NON-NLS-1$
|
|
||||||
sb.append(token);
|
|
||||||
first=false;
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class OpenViewHandler.
|
|
||||||
*/
|
|
||||||
private class OpenViewHandler {
|
|
||||||
|
|
||||||
/** The app. */
|
|
||||||
@Inject MApplication app;
|
|
||||||
|
|
||||||
/** The model service. */
|
|
||||||
@Inject EModelService modelService;
|
|
||||||
|
|
||||||
/** The part service. */
|
|
||||||
@Inject EPartService partService;
|
|
||||||
|
|
||||||
String confFile="";
|
|
||||||
/**
|
|
||||||
* Open view for file.
|
|
||||||
*
|
|
||||||
* @param name the name
|
|
||||||
*/
|
|
||||||
public void openViewForFile(String name){
|
|
||||||
File file = new File(getFirstFileName(name));
|
|
||||||
if(!file.exists())
|
|
||||||
return;
|
|
||||||
MPart part = partService.createPart("com.minres.scviewer.e4.application.partdescriptor.waveformviewer"); //$NON-NLS-1$
|
|
||||||
part.setLabel(file.getName());
|
|
||||||
MPartStack partStack = (MPartStack)modelService.find("org.eclipse.editorss", app); //$NON-NLS-1$
|
|
||||||
partStack.getChildren().add(part);
|
|
||||||
partService.showPart(part, PartState.ACTIVATE);
|
|
||||||
IEclipseContext ctx=part.getContext();
|
|
||||||
ctx.modify("input", name); //$NON-NLS-1$
|
|
||||||
//ctx.declareModifiable("input"); //$NON-NLS-1$
|
|
||||||
ctx.modify("config", confFile); //$NON-NLS-1$
|
|
||||||
//ctx.declareModifiable("config"); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getFirstFileName(String name) {
|
|
||||||
if(name.contains(",")) {
|
|
||||||
String[] tokens = name.split(",");
|
|
||||||
return tokens[0];
|
|
||||||
} else
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConfigFile(String confFile) {
|
|
||||||
this.confFile=confFile;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-48
@@ -1,48 +0,0 @@
|
|||||||
|
|
||||||
package com.minres.scviewer.e4.application.handlers;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.eclipse.core.runtime.preferences.ConfigurationScope;
|
|
||||||
import org.eclipse.e4.core.contexts.Active;
|
|
||||||
import org.eclipse.e4.core.di.annotations.Execute;
|
|
||||||
import org.eclipse.e4.ui.model.application.MApplication;
|
|
||||||
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
|
|
||||||
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
|
|
||||||
import org.eclipse.e4.ui.model.application.ui.menu.MHandledItem;
|
|
||||||
import org.eclipse.e4.ui.workbench.modeling.EModelService;
|
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
|
||||||
|
|
||||||
import com.minres.scviewer.e4.application.preferences.PreferenceConstants;
|
|
||||||
import com.opcoach.e4.preferences.ScopedPreferenceStore;
|
|
||||||
|
|
||||||
public class EnableHover {
|
|
||||||
static final String TAG_NAME = "EnableHover"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
MApplication application;
|
|
||||||
|
|
||||||
@PostConstruct
|
|
||||||
public void initialize(EModelService modelService) {
|
|
||||||
List<String> tags = new LinkedList<>();
|
|
||||||
tags.add(TAG_NAME);
|
|
||||||
List<MHandledItem> elements = modelService.findElements(application, null, MHandledItem.class, tags );
|
|
||||||
// cover initialization stuff, sync it with code
|
|
||||||
IPreferenceStore store = new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE);
|
|
||||||
boolean state = store.getBoolean(PreferenceConstants.SHOW_HOVER);
|
|
||||||
for( MHandledItem hi : elements ){
|
|
||||||
hi.setSelected(state);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Execute
|
|
||||||
public void execute(@Active MPart part, @Active MWindow window, MHandledItem handledItem, EModelService modelService ) {
|
|
||||||
IPreferenceStore store = new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE);
|
|
||||||
store.setValue(PreferenceConstants.SHOW_HOVER, handledItem.isSelected());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-779
@@ -1,779 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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.e4.application.internal.status;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
|
||||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
|
|
||||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
|
|
||||||
import org.eclipse.jface.action.Action;
|
|
||||||
import org.eclipse.jface.action.IAction;
|
|
||||||
import org.eclipse.jface.action.IMenuListener;
|
|
||||||
import org.eclipse.jface.action.IMenuManager;
|
|
||||||
import org.eclipse.jface.action.MenuManager;
|
|
||||||
import org.eclipse.jface.resource.ImageDescriptor;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.graphics.Color;
|
|
||||||
import org.eclipse.swt.graphics.GC;
|
|
||||||
import org.eclipse.swt.graphics.Image;
|
|
||||||
import org.eclipse.swt.graphics.Point;
|
|
||||||
import org.eclipse.swt.graphics.Rectangle;
|
|
||||||
import org.eclipse.swt.widgets.Canvas;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Display;
|
|
||||||
import org.eclipse.swt.widgets.Event;
|
|
||||||
import org.eclipse.swt.widgets.Listener;
|
|
||||||
import org.eclipse.swt.widgets.Menu;
|
|
||||||
import org.eclipse.wb.swt.ResourceManager;
|
|
||||||
import org.eclipse.wb.swt.SWTResourceManager;
|
|
||||||
import org.osgi.service.prefs.Preferences;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Heap Status control, which shows the heap usage statistics in the window trim.
|
|
||||||
* Part of the code is taken from the eclipse internal implementation
|
|
||||||
*/
|
|
||||||
public class HeapStatus extends Composite {
|
|
||||||
|
|
||||||
/** The armed. */
|
|
||||||
private boolean armed;
|
|
||||||
|
|
||||||
/** The gc image. */
|
|
||||||
private Image gcImage;
|
|
||||||
|
|
||||||
/** The disabled gc image. */
|
|
||||||
private Image disabledGcImage;
|
|
||||||
|
|
||||||
/** The arm col. */
|
|
||||||
private Color bgCol, usedMemCol, lowMemCol, freeMemCol, topLeftCol, bottomRightCol, sepCol, textCol, markCol, armCol;
|
|
||||||
|
|
||||||
/** The button. */
|
|
||||||
private Canvas button;
|
|
||||||
|
|
||||||
/** The preferences. */
|
|
||||||
private Preferences preferences;
|
|
||||||
|
|
||||||
/** The update interval. */
|
|
||||||
private int updateInterval;
|
|
||||||
|
|
||||||
/** The show max. */
|
|
||||||
private boolean showMax;
|
|
||||||
|
|
||||||
/** The total mem. */
|
|
||||||
private long totalMem;
|
|
||||||
|
|
||||||
/** The prev total mem. */
|
|
||||||
private long prevTotalMem = -1L;
|
|
||||||
|
|
||||||
/** The prev used mem. */
|
|
||||||
private long prevUsedMem = -1L;
|
|
||||||
|
|
||||||
/** The has changed. */
|
|
||||||
private boolean hasChanged;
|
|
||||||
|
|
||||||
/** The used mem. */
|
|
||||||
private long usedMem;
|
|
||||||
|
|
||||||
/** The mark. */
|
|
||||||
private long mark = -1;
|
|
||||||
|
|
||||||
/** The img bounds. */
|
|
||||||
// start with 12x12
|
|
||||||
private Rectangle imgBounds = new Rectangle(0,0,12,12);
|
|
||||||
|
|
||||||
/** The max mem. */
|
|
||||||
private long maxMem = Long.MAX_VALUE;
|
|
||||||
|
|
||||||
/** The max mem known. */
|
|
||||||
private boolean maxMemKnown;
|
|
||||||
|
|
||||||
/** The low mem threshold. */
|
|
||||||
private float lowMemThreshold = 0.05f;
|
|
||||||
|
|
||||||
/** The show low mem threshold. */
|
|
||||||
private boolean showLowMemThreshold = true;
|
|
||||||
|
|
||||||
/** The update tooltip. */
|
|
||||||
private boolean updateTooltip = false;
|
|
||||||
|
|
||||||
/** The is in gc. */
|
|
||||||
protected volatile boolean isInGC = false;
|
|
||||||
|
|
||||||
/** The timer. */
|
|
||||||
private final Runnable timer = new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (!isDisposed()) {
|
|
||||||
updateStats();
|
|
||||||
if (hasChanged) {
|
|
||||||
if (updateTooltip) {
|
|
||||||
updateToolTip();
|
|
||||||
}
|
|
||||||
redraw();
|
|
||||||
hasChanged = false;
|
|
||||||
}
|
|
||||||
getDisplay().timerExec(updateInterval, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** The pref listener. */
|
|
||||||
private final IPreferenceChangeListener prefListener = new IPreferenceChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void preferenceChange(PreferenceChangeEvent event) {
|
|
||||||
if (IHeapStatusConstants.PREF_UPDATE_INTERVAL.equals(event.getKey())) {
|
|
||||||
setUpdateIntervalInMS(preferences.getInt(IHeapStatusConstants.PREF_UPDATE_INTERVAL, 100));
|
|
||||||
}
|
|
||||||
else if (IHeapStatusConstants.PREF_SHOW_MAX.equals(event.getKey())) {
|
|
||||||
showMax = preferences.getBoolean(IHeapStatusConstants.PREF_SHOW_MAX, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new heap status control with the given parent, and using
|
|
||||||
* the given preference store to obtain settings such as the refresh
|
|
||||||
* interval.
|
|
||||||
*
|
|
||||||
* @param parent the parent composite
|
|
||||||
* @param preferences the preference store
|
|
||||||
*/
|
|
||||||
public HeapStatus(Composite parent, Preferences preferences) {
|
|
||||||
super(parent, SWT.NONE);
|
|
||||||
|
|
||||||
maxMem = getMaxMem();
|
|
||||||
maxMemKnown = maxMem != Long.MAX_VALUE;
|
|
||||||
|
|
||||||
this.preferences = preferences;
|
|
||||||
if(this.preferences instanceof IEclipsePreferences)
|
|
||||||
((IEclipsePreferences)this.preferences).addPreferenceChangeListener(prefListener);
|
|
||||||
|
|
||||||
setUpdateIntervalInMS(preferences.getInt(IHeapStatusConstants.PREF_UPDATE_INTERVAL, 100));
|
|
||||||
showMax = preferences.getBoolean(IHeapStatusConstants.PREF_SHOW_MAX, true);
|
|
||||||
|
|
||||||
button = new Canvas(this, SWT.NONE);
|
|
||||||
button.setToolTipText("Run Garbage Collection");
|
|
||||||
|
|
||||||
ImageDescriptor imageDesc = ResourceManager.getPluginImageDescriptor("com.minres.scviewer.e4.application", "icons/trash.png"); //$NON-NLS-1$
|
|
||||||
Display display = getDisplay();
|
|
||||||
gcImage = imageDesc.createImage();
|
|
||||||
if (gcImage != null) {
|
|
||||||
imgBounds = gcImage.getBounds();
|
|
||||||
disabledGcImage = new Image(display, gcImage, SWT.IMAGE_DISABLE);
|
|
||||||
}
|
|
||||||
usedMemCol = display.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
|
|
||||||
lowMemCol = SWTResourceManager.getColor(255, 70, 70); // medium red
|
|
||||||
freeMemCol = SWTResourceManager.getColor(255, 190, 125); // light orange
|
|
||||||
bgCol = SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND);
|
|
||||||
sepCol = topLeftCol = armCol = SWTResourceManager.getColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
|
|
||||||
bottomRightCol = SWTResourceManager.getColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
|
|
||||||
markCol = textCol = SWTResourceManager.getColor(SWT.COLOR_INFO_FOREGROUND);
|
|
||||||
|
|
||||||
createContextMenu();
|
|
||||||
|
|
||||||
Listener listener = new Listener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handleEvent(Event event) {
|
|
||||||
switch (event.type) {
|
|
||||||
case SWT.Dispose:
|
|
||||||
doDispose();
|
|
||||||
break;
|
|
||||||
case SWT.Resize:
|
|
||||||
Rectangle rect = getClientArea();
|
|
||||||
button.setBounds(rect.width - imgBounds.width - 1, 1, imgBounds.width, rect.height - 2);
|
|
||||||
break;
|
|
||||||
case SWT.Paint:
|
|
||||||
if (event.widget == HeapStatus.this) {
|
|
||||||
paintComposite(event.gc);
|
|
||||||
}
|
|
||||||
else if (event.widget == button) {
|
|
||||||
paintButton(event.gc);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SWT.MouseUp:
|
|
||||||
if (event.button == 1) {
|
|
||||||
if (!isInGC) {
|
|
||||||
arm(false);
|
|
||||||
gc();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SWT.MouseDown:
|
|
||||||
if (event.button == 1) {
|
|
||||||
if (event.widget == HeapStatus.this) {
|
|
||||||
setMark();
|
|
||||||
} else if (event.widget == button) {
|
|
||||||
if (!isInGC)
|
|
||||||
arm(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SWT.MouseEnter:
|
|
||||||
HeapStatus.this.updateTooltip = true;
|
|
||||||
updateToolTip();
|
|
||||||
break;
|
|
||||||
case SWT.MouseExit:
|
|
||||||
if (event.widget == HeapStatus.this) {
|
|
||||||
HeapStatus.this.updateTooltip = false;
|
|
||||||
} else if (event.widget == button) {
|
|
||||||
arm(false);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
addListener(SWT.Dispose, listener);
|
|
||||||
addListener(SWT.MouseDown, listener);
|
|
||||||
addListener(SWT.Paint, listener);
|
|
||||||
addListener(SWT.Resize, listener);
|
|
||||||
addListener(SWT.MouseEnter, listener);
|
|
||||||
addListener(SWT.MouseExit, listener);
|
|
||||||
button.addListener(SWT.MouseDown, listener);
|
|
||||||
button.addListener(SWT.MouseExit, listener);
|
|
||||||
button.addListener(SWT.MouseUp, listener);
|
|
||||||
button.addListener(SWT.Paint, listener);
|
|
||||||
|
|
||||||
// make sure stats are updated before first paint
|
|
||||||
updateStats();
|
|
||||||
|
|
||||||
getDisplay().asyncExec(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (!isDisposed()) {
|
|
||||||
getDisplay().timerExec(updateInterval, timer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.swt.widgets.Control#setBackground(org.eclipse.swt.graphics.Color)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void setBackground(Color color) {
|
|
||||||
bgCol = color;
|
|
||||||
button.redraw();
|
|
||||||
button.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.swt.widgets.Control#setForeground(org.eclipse.swt.graphics.Color)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void setForeground(Color color) {
|
|
||||||
if (color == null) {
|
|
||||||
usedMemCol = getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND);
|
|
||||||
} else {
|
|
||||||
usedMemCol = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.redraw();
|
|
||||||
button.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.swt.widgets.Control#getForeground()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Color getForeground() {
|
|
||||||
if (usedMemCol != null) {
|
|
||||||
return usedMemCol;
|
|
||||||
}
|
|
||||||
return getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the maximum memory limit, or Long.MAX_VALUE if the max is not known.
|
|
||||||
*
|
|
||||||
* @return the max mem
|
|
||||||
*/
|
|
||||||
private long getMaxMem() {
|
|
||||||
long max = Long.MAX_VALUE;
|
|
||||||
try {
|
|
||||||
// Must use reflect to allow compilation against JCL/Foundation
|
|
||||||
Method maxMemMethod = Runtime.class.getMethod("maxMemory", new Class[0]); //$NON-NLS-1$
|
|
||||||
Object o = maxMemMethod.invoke(Runtime.getRuntime(), new Object[0]);
|
|
||||||
if (o instanceof Long) {
|
|
||||||
max = ((Long) o).longValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
// ignore if method missing or if there are other failures trying to determine the max
|
|
||||||
}
|
|
||||||
return max;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the update interval in ms.
|
|
||||||
*
|
|
||||||
* @param interval the new update interval in ms
|
|
||||||
*/
|
|
||||||
private void setUpdateIntervalInMS(int interval) {
|
|
||||||
updateInterval = Math.max(100, interval);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Do dispose.
|
|
||||||
*/
|
|
||||||
private void doDispose() {
|
|
||||||
if(preferences instanceof IEclipsePreferences)
|
|
||||||
((IEclipsePreferences)preferences).removePreferenceChangeListener(prefListener);
|
|
||||||
if (gcImage != null) {
|
|
||||||
gcImage.dispose();
|
|
||||||
}
|
|
||||||
if (disabledGcImage != null) {
|
|
||||||
disabledGcImage.dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.swt.widgets.Composite#computeSize(int, int, boolean)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Point computeSize(int wHint, int hHint, boolean changed) {
|
|
||||||
GC gc = new GC(this);
|
|
||||||
Point p = gc.textExtent("MMMMMMMMMMMM");
|
|
||||||
int height = imgBounds.height;
|
|
||||||
// choose the largest of
|
|
||||||
// - Text height + margins
|
|
||||||
// - Image height + margins
|
|
||||||
// - Default Trim heightin
|
|
||||||
height = Math.max(height, p.y) + 4;
|
|
||||||
height = Math.max(TrimUtil.TRIM_DEFAULT_HEIGHT, height);
|
|
||||||
gc.dispose();
|
|
||||||
return new Point(p.x + 15, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Arm.
|
|
||||||
*
|
|
||||||
* @param armed the armed
|
|
||||||
*/
|
|
||||||
private void arm(boolean armed) {
|
|
||||||
if (this.armed == armed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.armed = armed;
|
|
||||||
button.redraw();
|
|
||||||
button.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gc running.
|
|
||||||
*
|
|
||||||
* @param isInGC the is in gc
|
|
||||||
*/
|
|
||||||
private void gcRunning(boolean isInGC) {
|
|
||||||
if (this.isInGC == isInGC) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.isInGC = isInGC;
|
|
||||||
button.redraw();
|
|
||||||
button.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the context menu.
|
|
||||||
*/
|
|
||||||
private void createContextMenu() {
|
|
||||||
MenuManager menuMgr = new MenuManager();
|
|
||||||
menuMgr.setRemoveAllWhenShown(true);
|
|
||||||
menuMgr.addMenuListener(new IMenuListener() {
|
|
||||||
@Override
|
|
||||||
public void menuAboutToShow(IMenuManager menuMgr) {
|
|
||||||
fillMenu(menuMgr);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Menu menu = menuMgr.createContextMenu(this);
|
|
||||||
setMenu(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fill menu.
|
|
||||||
*
|
|
||||||
* @param menuMgr the menu mgr
|
|
||||||
*/
|
|
||||||
private void fillMenu(IMenuManager menuMgr) {
|
|
||||||
menuMgr.add(new SetMarkAction());
|
|
||||||
menuMgr.add(new ClearMarkAction());
|
|
||||||
menuMgr.add(new ShowMaxAction());
|
|
||||||
menuMgr.add(new CloseHeapStatusAction());
|
|
||||||
// if (isKyrsoftViewAvailable()) {
|
|
||||||
// menuMgr.add(new ShowKyrsoftViewAction());
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the mark to the current usedMem level.
|
|
||||||
*/
|
|
||||||
private void setMark() {
|
|
||||||
updateStats(); // get up-to-date stats before taking the mark
|
|
||||||
mark = usedMem;
|
|
||||||
hasChanged = true;
|
|
||||||
redraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the mark.
|
|
||||||
*/
|
|
||||||
private void clearMark() {
|
|
||||||
mark = -1;
|
|
||||||
hasChanged = true;
|
|
||||||
redraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gc.
|
|
||||||
*/
|
|
||||||
private void gc() {
|
|
||||||
gcRunning(true);
|
|
||||||
Thread t = new Thread() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
busyGC();
|
|
||||||
getDisplay().asyncExec(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (!isDisposed()) {
|
|
||||||
gcRunning(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
t.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Busy gc.
|
|
||||||
*/
|
|
||||||
private void busyGC() {
|
|
||||||
for (int i = 0; i < 2; ++i) {
|
|
||||||
System.gc();
|
|
||||||
System.runFinalization();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Paint button.
|
|
||||||
*
|
|
||||||
* @param gc the gc
|
|
||||||
*/
|
|
||||||
private void paintButton(GC gc) {
|
|
||||||
Rectangle rect = button.getClientArea();
|
|
||||||
if (isInGC) {
|
|
||||||
if (disabledGcImage != null) {
|
|
||||||
int buttonY = (rect.height - imgBounds.height) / 2 + rect.y;
|
|
||||||
gc.drawImage(disabledGcImage, rect.x, buttonY);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (armed) {
|
|
||||||
gc.setBackground(armCol);
|
|
||||||
gc.fillRectangle(rect.x, rect.y, rect.width, rect.height);
|
|
||||||
}
|
|
||||||
if (gcImage != null) {
|
|
||||||
int by = (rect.height - imgBounds.height) / 2 + rect.y; // button y
|
|
||||||
gc.drawImage(gcImage, rect.x, by);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Paint composite.
|
|
||||||
*
|
|
||||||
* @param gc the gc
|
|
||||||
*/
|
|
||||||
private void paintComposite(GC gc) {
|
|
||||||
if (showMax && maxMemKnown) {
|
|
||||||
paintCompositeMaxKnown(gc);
|
|
||||||
} else {
|
|
||||||
paintCompositeMaxUnknown(gc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Paint composite max unknown.
|
|
||||||
*
|
|
||||||
* @param gc the gc
|
|
||||||
*/
|
|
||||||
private void paintCompositeMaxUnknown(GC gc) {
|
|
||||||
Rectangle rect = getClientArea();
|
|
||||||
int x = rect.x;
|
|
||||||
int y = rect.y;
|
|
||||||
int w = rect.width;
|
|
||||||
int h = rect.height;
|
|
||||||
int bw = imgBounds.width; // button width
|
|
||||||
int dx = x + w - bw - 2; // divider x
|
|
||||||
int sw = w - bw - 3; // status width
|
|
||||||
int uw = (int) (sw * usedMem / totalMem); // used mem width
|
|
||||||
int ux = x + 1 + uw; // used mem right edge
|
|
||||||
if (bgCol != null) {
|
|
||||||
gc.setBackground(bgCol);
|
|
||||||
}
|
|
||||||
gc.fillRectangle(rect);
|
|
||||||
gc.setForeground(sepCol);
|
|
||||||
gc.drawLine(dx, y, dx, y + h);
|
|
||||||
gc.drawLine(ux, y, ux, y + h);
|
|
||||||
gc.setForeground(topLeftCol);
|
|
||||||
gc.drawLine(x, y, x+w, y);
|
|
||||||
gc.drawLine(x, y, x, y+h);
|
|
||||||
gc.setForeground(bottomRightCol);
|
|
||||||
gc.drawLine(x+w-1, y, x+w-1, y+h);
|
|
||||||
gc.drawLine(x, y+h-1, x+w, y+h-1);
|
|
||||||
|
|
||||||
gc.setBackground(usedMemCol);
|
|
||||||
gc.fillRectangle(x + 1, y + 1, uw, h - 2);
|
|
||||||
|
|
||||||
String s = convertToMegString(usedMem)+" of "+ convertToMegString(totalMem);
|
|
||||||
Point p = gc.textExtent(s);
|
|
||||||
int sx = (rect.width - 15 - p.x) / 2 + rect.x + 1;
|
|
||||||
int sy = (rect.height - 2 - p.y) / 2 + rect.y + 1;
|
|
||||||
gc.setForeground(textCol);
|
|
||||||
gc.drawString(s, sx, sy, true);
|
|
||||||
|
|
||||||
// draw an I-shaped bar in the foreground colour for the mark (if present)
|
|
||||||
if (mark != -1) {
|
|
||||||
int ssx = (int) (sw * mark / totalMem) + x + 1;
|
|
||||||
paintMark(gc, ssx, y, h);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Paint composite max known.
|
|
||||||
*
|
|
||||||
* @param gc the gc
|
|
||||||
*/
|
|
||||||
private void paintCompositeMaxKnown(GC gc) {
|
|
||||||
Rectangle rect = getClientArea();
|
|
||||||
int x = rect.x;
|
|
||||||
int y = rect.y;
|
|
||||||
int w = rect.width;
|
|
||||||
int h = rect.height;
|
|
||||||
int bw = imgBounds.width; // button width
|
|
||||||
int dx = x + w - bw - 2; // divider x
|
|
||||||
int sw = w - bw - 3; // status width
|
|
||||||
int uw = (int) (sw * usedMem / maxMem); // used mem width
|
|
||||||
int ux = x + 1 + uw; // used mem right edge
|
|
||||||
int tw = (int) (sw * totalMem / maxMem); // current total mem width
|
|
||||||
int tx = x + 1 + tw; // current total mem right edge
|
|
||||||
|
|
||||||
if (bgCol != null) {
|
|
||||||
gc.setBackground(bgCol);
|
|
||||||
}
|
|
||||||
gc.fillRectangle(rect);
|
|
||||||
gc.setForeground(sepCol);
|
|
||||||
gc.drawLine(dx, y, dx, y + h);
|
|
||||||
gc.drawLine(ux, y, ux, y + h);
|
|
||||||
gc.drawLine(tx, y, tx, y + h);
|
|
||||||
gc.setForeground(topLeftCol);
|
|
||||||
gc.drawLine(x, y, x+w, y);
|
|
||||||
gc.drawLine(x, y, x, y+h);
|
|
||||||
gc.setForeground(bottomRightCol);
|
|
||||||
gc.drawLine(x+w-1, y, x+w-1, y+h);
|
|
||||||
gc.drawLine(x, y+h-1, x+w, y+h-1);
|
|
||||||
|
|
||||||
if (lowMemThreshold != 0 && ((double)(maxMem - usedMem) / (double)maxMem < lowMemThreshold)) {
|
|
||||||
gc.setBackground(lowMemCol);
|
|
||||||
} else {
|
|
||||||
gc.setBackground(usedMemCol);
|
|
||||||
}
|
|
||||||
gc.fillRectangle(x + 1, y + 1, uw, h - 2);
|
|
||||||
|
|
||||||
gc.setBackground(freeMemCol);
|
|
||||||
gc.fillRectangle(ux + 1, y + 1, tx - (ux + 1), h - 2);
|
|
||||||
|
|
||||||
// paint line for low memory threshold
|
|
||||||
if (showLowMemThreshold && lowMemThreshold != 0) {
|
|
||||||
gc.setForeground(lowMemCol);
|
|
||||||
int thresholdX = x + 1 + (int) (sw * (1.0 - lowMemThreshold));
|
|
||||||
gc.drawLine(thresholdX, y + 1, thresholdX, y + h - 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
String s = convertToMegString(usedMem)+" of "+convertToMegString(totalMem);
|
|
||||||
Point p = gc.textExtent(s);
|
|
||||||
int sx = (rect.width - 15 - p.x) / 2 + rect.x + 1;
|
|
||||||
int sy = (rect.height - 2 - p.y) / 2 + rect.y + 1;
|
|
||||||
gc.setForeground(textCol);
|
|
||||||
gc.drawString(s, sx, sy, true);
|
|
||||||
|
|
||||||
// draw an I-shaped bar in the foreground colour for the mark (if present)
|
|
||||||
if (mark != -1) {
|
|
||||||
int ssx = (int) (sw * mark / maxMem) + x + 1;
|
|
||||||
paintMark(gc, ssx, y, h);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Paint mark.
|
|
||||||
*
|
|
||||||
* @param gc the gc
|
|
||||||
* @param x the x
|
|
||||||
* @param y the y
|
|
||||||
* @param h the h
|
|
||||||
*/
|
|
||||||
private void paintMark(GC gc, int x, int y, int h) {
|
|
||||||
gc.setForeground(markCol);
|
|
||||||
gc.drawLine(x, y+1, x, y+h-2);
|
|
||||||
gc.drawLine(x-1, y+1, x+1, y+1);
|
|
||||||
gc.drawLine(x-1, y+h-2, x+1, y+h-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update stats.
|
|
||||||
*/
|
|
||||||
private void updateStats() {
|
|
||||||
Runtime runtime = Runtime.getRuntime();
|
|
||||||
totalMem = runtime.totalMemory();
|
|
||||||
long freeMem = runtime.freeMemory();
|
|
||||||
usedMem = totalMem - freeMem;
|
|
||||||
|
|
||||||
if (convertToMeg(prevUsedMem) != convertToMeg(usedMem)) {
|
|
||||||
prevUsedMem = usedMem;
|
|
||||||
this.hasChanged = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prevTotalMem != totalMem) {
|
|
||||||
prevTotalMem = totalMem;
|
|
||||||
this.hasChanged = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update tool tip.
|
|
||||||
*/
|
|
||||||
private void updateToolTip() {
|
|
||||||
String usedStr = convertToMegString(usedMem);
|
|
||||||
String totalStr = convertToMegString(totalMem);
|
|
||||||
String maxStr = maxMemKnown ? convertToMegString(maxMem) : "<unknown>";
|
|
||||||
String markStr = mark == -1 ? "<none>" : convertToMegString(mark);
|
|
||||||
String toolTip = "Heap size: "+usedStr+" of total: "+totalStr+" max: "+maxStr+" mark: "+markStr;
|
|
||||||
if (!toolTip.equals(getToolTipText())) {
|
|
||||||
setToolTipText(toolTip);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the given number of bytes to a printable number of megabytes (rounded up).
|
|
||||||
*
|
|
||||||
* @param numBytes the num bytes
|
|
||||||
* @return the string
|
|
||||||
*/
|
|
||||||
private String convertToMegString(long numBytes) {
|
|
||||||
return new Long(convertToMeg(numBytes)).toString()+"M";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the given number of bytes to the corresponding number of megabytes (rounded up).
|
|
||||||
*
|
|
||||||
* @param numBytes the num bytes
|
|
||||||
* @return the long
|
|
||||||
*/
|
|
||||||
private long convertToMeg(long numBytes) {
|
|
||||||
return (numBytes + (512 * 1024)) / (1024 * 1024);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class SetMarkAction.
|
|
||||||
*/
|
|
||||||
class SetMarkAction extends Action {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a new sets the mark action.
|
|
||||||
*/
|
|
||||||
SetMarkAction() {
|
|
||||||
super("&Set Mark");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.action.Action#run()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
setMark();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class ClearMarkAction.
|
|
||||||
*/
|
|
||||||
class ClearMarkAction extends Action {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a new clear mark action.
|
|
||||||
*/
|
|
||||||
ClearMarkAction() {
|
|
||||||
super("&Clear Mark");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.action.Action#run()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
clearMark();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class ShowMaxAction.
|
|
||||||
*/
|
|
||||||
class ShowMaxAction extends Action {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a new show max action.
|
|
||||||
*/
|
|
||||||
ShowMaxAction() {
|
|
||||||
super("Show &Max Heap", IAction.AS_CHECK_BOX);
|
|
||||||
setEnabled(maxMemKnown);
|
|
||||||
setChecked(showMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.action.Action#run()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
preferences.putBoolean(IHeapStatusConstants.PREF_SHOW_MAX, isChecked());
|
|
||||||
redraw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class CloseHeapStatusAction.
|
|
||||||
*/
|
|
||||||
class CloseHeapStatusAction extends Action{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a new close heap status action.
|
|
||||||
*/
|
|
||||||
CloseHeapStatusAction(){
|
|
||||||
super("&Close");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.action.Action#run()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void run(){
|
|
||||||
// WorkbenchWindow wbw = (WorkbenchWindow) PlatformUI.getWorkbench()
|
|
||||||
// .getActiveWorkbenchWindow();
|
|
||||||
// if (wbw != null) {
|
|
||||||
// wbw.showHeapStatus(false);
|
|
||||||
// }
|
|
||||||
System.out.println("NYI");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
-88
@@ -1,88 +0,0 @@
|
|||||||
package com.minres.scviewer.e4.application.parts;
|
|
||||||
|
|
||||||
import java.beans.PropertyChangeListener;
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.IHierNode;
|
|
||||||
import com.minres.scviewer.database.IWaveform;
|
|
||||||
import com.minres.scviewer.database.IWaveformDb;
|
|
||||||
import com.minres.scviewer.database.RelationType;
|
|
||||||
import com.minres.scviewer.e4.application.Messages;
|
|
||||||
|
|
||||||
public class LoadingWaveformDb implements IWaveformDb {
|
|
||||||
|
|
||||||
private final String label = Messages.LoadingWaveformDb_0;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addPropertyChangeListener(PropertyChangeListener l) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removePropertyChangeListener(PropertyChangeListener l) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getFullName() {
|
|
||||||
return label;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return label;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setName(String name) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setParentName(String name) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<IHierNode> getChildNodes() {
|
|
||||||
return new ArrayList<IHierNode>();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo(IHierNode o) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long getMaxTime() {
|
|
||||||
return new Long(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IWaveform getStreamByName(String name) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<IWaveform> getAllWaves() {
|
|
||||||
return new ArrayList<IWaveform>();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<RelationType> getAllRelationTypes() {
|
|
||||||
return new ArrayList<RelationType>();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean load(File inp) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isLoaded() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clear() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
-749
@@ -1,749 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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.e4.application.parts;
|
|
||||||
|
|
||||||
import java.util.AbstractMap;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
import java.util.Vector;
|
|
||||||
import java.util.regex.PatternSyntaxException;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.inject.Named;
|
|
||||||
|
|
||||||
import org.eclipse.e4.core.di.annotations.Optional;
|
|
||||||
import org.eclipse.e4.core.services.events.IEventBroker;
|
|
||||||
import org.eclipse.e4.ui.di.Focus;
|
|
||||||
import org.eclipse.e4.ui.di.UIEventTopic;
|
|
||||||
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
|
|
||||||
import org.eclipse.e4.ui.services.IServiceConstants;
|
|
||||||
import org.eclipse.e4.ui.workbench.modeling.EPartService;
|
|
||||||
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
|
|
||||||
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
|
|
||||||
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
|
|
||||||
import org.eclipse.jface.viewers.DoubleClickEvent;
|
|
||||||
import org.eclipse.jface.viewers.IDoubleClickListener;
|
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
|
||||||
import org.eclipse.jface.viewers.ITreeContentProvider;
|
|
||||||
import org.eclipse.jface.viewers.ITreeViewerListener;
|
|
||||||
import org.eclipse.jface.viewers.LabelProvider;
|
|
||||||
import org.eclipse.jface.viewers.StructuredSelection;
|
|
||||||
import org.eclipse.jface.viewers.StyledString;
|
|
||||||
import org.eclipse.jface.viewers.TreeExpansionEvent;
|
|
||||||
import org.eclipse.jface.viewers.TreeViewer;
|
|
||||||
import org.eclipse.jface.viewers.TreeViewerColumn;
|
|
||||||
import org.eclipse.jface.viewers.Viewer;
|
|
||||||
import org.eclipse.jface.viewers.ViewerComparator;
|
|
||||||
import org.eclipse.jface.viewers.ViewerFilter;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.events.ControlAdapter;
|
|
||||||
import org.eclipse.swt.events.ControlEvent;
|
|
||||||
import org.eclipse.swt.events.ModifyEvent;
|
|
||||||
import org.eclipse.swt.events.ModifyListener;
|
|
||||||
import org.eclipse.swt.events.SelectionAdapter;
|
|
||||||
import org.eclipse.swt.events.SelectionEvent;
|
|
||||||
import org.eclipse.swt.graphics.Point;
|
|
||||||
import org.eclipse.swt.graphics.Rectangle;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Text;
|
|
||||||
import org.eclipse.swt.widgets.Tree;
|
|
||||||
import org.eclipse.swt.widgets.TreeItem;
|
|
||||||
|
|
||||||
import com.minres.scviewer.database.DataType;
|
|
||||||
import com.minres.scviewer.database.ITx;
|
|
||||||
import com.minres.scviewer.database.ITxAttribute;
|
|
||||||
import com.minres.scviewer.database.ITxRelation;
|
|
||||||
import com.minres.scviewer.e4.application.Messages;
|
|
||||||
import com.minres.scviewer.e4.application.provider.TxPropertiesLabelProvider;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class TransactionDetails shows the details of a selected transaction.
|
|
||||||
*/
|
|
||||||
public class TransactionDetails {
|
|
||||||
|
|
||||||
/** The Constant COLUMN_FIRST. */
|
|
||||||
// Column constants
|
|
||||||
public static final int COLUMN_FIRST = 0;
|
|
||||||
|
|
||||||
/** The Constant COLUMN_SECOND. */
|
|
||||||
public static final int COLUMN_SECOND = 1;
|
|
||||||
|
|
||||||
/** The Constant COLUMN_THIRD. */
|
|
||||||
public static final int COLUMN_THIRD = 2;
|
|
||||||
|
|
||||||
/** The event broker. */
|
|
||||||
@Inject IEventBroker eventBroker;
|
|
||||||
|
|
||||||
/** The selection service. */
|
|
||||||
@Inject ESelectionService selectionService;
|
|
||||||
|
|
||||||
/** The name filter. */
|
|
||||||
private Text nameFilter;
|
|
||||||
|
|
||||||
/** The tree viewer. */
|
|
||||||
private TreeViewer treeViewer;
|
|
||||||
|
|
||||||
/** The col3. */
|
|
||||||
private TreeViewerColumn col1, col2, col3;
|
|
||||||
|
|
||||||
/** The attribute filter. */
|
|
||||||
TxAttributeFilter attributeFilter;
|
|
||||||
|
|
||||||
/** The view sorter. */
|
|
||||||
TxAttributeViewerSorter viewSorter;
|
|
||||||
|
|
||||||
/** The waveform viewer part. */
|
|
||||||
private WaveformViewer waveformViewerPart;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the composite.
|
|
||||||
*
|
|
||||||
* @param parent the parent
|
|
||||||
*/
|
|
||||||
@PostConstruct
|
|
||||||
public void createComposite(final Composite parent) {
|
|
||||||
parent.setLayout(new GridLayout(1, false));
|
|
||||||
|
|
||||||
nameFilter = new Text(parent, SWT.BORDER);
|
|
||||||
nameFilter.setMessage(Messages.TransactionDetails_0);
|
|
||||||
nameFilter.addModifyListener(new ModifyListener() {
|
|
||||||
@Override
|
|
||||||
public void modifyText(ModifyEvent e) {
|
|
||||||
attributeFilter.setSearchText(((Text) e.widget).getText());
|
|
||||||
treeViewer.refresh();
|
|
||||||
treeViewer.expandAll(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
nameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
|
|
||||||
attributeFilter = new TxAttributeFilter();
|
|
||||||
viewSorter = new TxAttributeViewerSorter();
|
|
||||||
|
|
||||||
treeViewer = new TreeViewer(parent);
|
|
||||||
treeViewer.setContentProvider(new TransactionTreeContentProvider());
|
|
||||||
treeViewer.setLabelProvider(new TxPropertiesLabelProvider());
|
|
||||||
treeViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
||||||
treeViewer.addFilter(attributeFilter);
|
|
||||||
treeViewer.setComparator(viewSorter);
|
|
||||||
treeViewer.setAutoExpandLevel(2);
|
|
||||||
treeViewer.addTreeListener(new ITreeViewerListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void treeCollapsed(TreeExpansionEvent event) {
|
|
||||||
treeViewer.getSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void treeExpanded(TreeExpansionEvent event) {
|
|
||||||
treeViewer.getSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Set up the table
|
|
||||||
Tree tree = treeViewer.getTree();
|
|
||||||
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
||||||
// Add the name column
|
|
||||||
col1 = new TreeViewerColumn(treeViewer, SWT.NONE);
|
|
||||||
col1.getColumn().setText(Messages.TransactionDetails_1);
|
|
||||||
col1.getColumn().setResizable(true);
|
|
||||||
col1.setLabelProvider(new DelegatingStyledCellLabelProvider(new AttributeLabelProvider(AttributeLabelProvider.NAME)));
|
|
||||||
col1.getColumn().addSelectionListener(new SelectionAdapter() {
|
|
||||||
public void widgetSelected(SelectionEvent event) {
|
|
||||||
((TxAttributeViewerSorter) treeViewer.getComparator()).doSort(COLUMN_FIRST);
|
|
||||||
treeViewer.refresh();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// Add the type column
|
|
||||||
col2 = new TreeViewerColumn(treeViewer, SWT.NONE);
|
|
||||||
col2.getColumn().setText(Messages.TransactionDetails_2);
|
|
||||||
col2.getColumn().setResizable(true);
|
|
||||||
col2.setLabelProvider(new DelegatingStyledCellLabelProvider(new AttributeLabelProvider(AttributeLabelProvider.TYPE)));
|
|
||||||
col2.getColumn().addSelectionListener(new SelectionAdapter() {
|
|
||||||
public void widgetSelected(SelectionEvent event) {
|
|
||||||
((TxAttributeViewerSorter) treeViewer.getComparator()).doSort(COLUMN_SECOND);
|
|
||||||
treeViewer.refresh();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// Add the value column
|
|
||||||
col3 = new TreeViewerColumn(treeViewer, SWT.NONE);
|
|
||||||
col3.getColumn().setText(Messages.TransactionDetails_3);
|
|
||||||
col3.getColumn().setResizable(true);
|
|
||||||
col3.setLabelProvider(new DelegatingStyledCellLabelProvider(new AttributeLabelProvider(AttributeLabelProvider.VALUE)));
|
|
||||||
col3.getColumn().addSelectionListener(new SelectionAdapter() {
|
|
||||||
public void widgetSelected(SelectionEvent event) {
|
|
||||||
((TxAttributeViewerSorter) treeViewer.getComparator()).doSort(COLUMN_SECOND);
|
|
||||||
treeViewer.refresh();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// Pack the columns
|
|
||||||
// for (int i = 0, n = table.getColumnCount(); i < n; i++) {
|
|
||||||
// table.getColumn(i).pack();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Turn on the header and the lines
|
|
||||||
tree.setHeaderVisible(true);
|
|
||||||
tree.setLinesVisible(true);
|
|
||||||
|
|
||||||
treeViewer.addDoubleClickListener(new IDoubleClickListener(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void doubleClick(DoubleClickEvent event) {
|
|
||||||
ISelection selection = treeViewer.getSelection();
|
|
||||||
if(selection instanceof IStructuredSelection){
|
|
||||||
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
|
|
||||||
Object selected = structuredSelection.getFirstElement();
|
|
||||||
if(selected instanceof Object[]){
|
|
||||||
Object[] selectedArray = (Object[]) selected;
|
|
||||||
if(selectedArray.length==3 && selectedArray[2] instanceof ITx){
|
|
||||||
waveformViewerPart.setSelection(new StructuredSelection(selectedArray[2]));
|
|
||||||
setInput(selectedArray[2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
parent.addControlListener(new ControlAdapter() {
|
|
||||||
public void controlResized(ControlEvent e) {
|
|
||||||
Tree table = treeViewer.getTree();
|
|
||||||
Rectangle area = parent.getClientArea();
|
|
||||||
Point preferredSize = table.computeSize(SWT.DEFAULT, SWT.DEFAULT);
|
|
||||||
int width = area.width - 2*table.getBorderWidth();
|
|
||||||
if (preferredSize.y > area.height + table.getHeaderHeight()) {
|
|
||||||
// Subtract the scrollbar width from the total column width
|
|
||||||
// if a vertical scrollbar will be required
|
|
||||||
Point vBarSize = table.getVerticalBar().getSize();
|
|
||||||
width -= vBarSize.x;
|
|
||||||
}
|
|
||||||
Point oldSize = table.getSize();
|
|
||||||
if (oldSize.x > area.width) {
|
|
||||||
// table is getting smaller so make the columns
|
|
||||||
// smaller first and then resize the table to
|
|
||||||
// match the client area width
|
|
||||||
col1.getColumn().setWidth(width/3);
|
|
||||||
col2.getColumn().setWidth(width/4);
|
|
||||||
col3.getColumn().setWidth(width - col1.getColumn().getWidth());
|
|
||||||
table.setSize(area.width, area.height);
|
|
||||||
} else {
|
|
||||||
// table is getting bigger so make the table
|
|
||||||
// bigger first and then make the columns wider
|
|
||||||
// to match the client area width
|
|
||||||
table.setSize(area.width, area.height);
|
|
||||||
col1.getColumn().setWidth(width/3);
|
|
||||||
col2.getColumn().setWidth(width/4);
|
|
||||||
col3.getColumn().setWidth(width - col1.getColumn().getWidth()- col2.getColumn().getWidth());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the focus.
|
|
||||||
*/
|
|
||||||
@Focus
|
|
||||||
public void setFocus() {
|
|
||||||
treeViewer.getTree().setFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the status event.
|
|
||||||
*
|
|
||||||
* @param part the part
|
|
||||||
* @return the status event
|
|
||||||
*/
|
|
||||||
@Inject @Optional
|
|
||||||
public void getStatusEvent(@UIEventTopic(WaveformViewer.ACTIVE_WAVEFORMVIEW) WaveformViewer part) {
|
|
||||||
this.waveformViewerPart=part;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInput(Object object) {
|
|
||||||
if(object instanceof ITx){
|
|
||||||
ArrayList<String> names = new ArrayList<>();
|
|
||||||
int indexInParent=getTopItemHier(names);
|
|
||||||
ArrayList<Boolean> states = getExpandedState(treeViewer.getTree().getItems());
|
|
||||||
treeViewer.setInput(object);
|
|
||||||
setExpandedState(treeViewer.getTree().getItems(), states);
|
|
||||||
setTopItemFromHier(names, indexInParent);
|
|
||||||
} else {
|
|
||||||
treeViewer.setInput(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setExpandedState(TreeItem[] treeItems, ArrayList<Boolean> states) {
|
|
||||||
for (int i = 0; i < treeItems.length; i++) {
|
|
||||||
treeItems[i].setExpanded(states.size()>i?states.get(i):true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArrayList<Boolean> getExpandedState(TreeItem[] items){
|
|
||||||
ArrayList<Boolean> ret = new ArrayList<>();
|
|
||||||
for (TreeItem treeItem : items)
|
|
||||||
ret.add(treeItem.getItemCount()>0?treeItem.getExpanded():true);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getTopItemHier(ArrayList<String> names){
|
|
||||||
int indexInParent=-1;
|
|
||||||
TreeItem obj = treeViewer.getTree().getTopItem();
|
|
||||||
if(obj!=null) {
|
|
||||||
names.add(0, obj.getText(0));
|
|
||||||
if(obj.getParentItem()!=null) {
|
|
||||||
TreeItem pobj=obj.getParentItem();
|
|
||||||
names.add(0, pobj.getText(0));
|
|
||||||
TreeItem[] items = pobj.getItems();
|
|
||||||
for (int i = 0; i < items.length; i++) {
|
|
||||||
if(items[i]==obj) {
|
|
||||||
indexInParent=i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return indexInParent;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setTopItemFromHier(ArrayList<String> names, int indexInParent) {
|
|
||||||
if(indexInParent<0 || names.size()==0 ) return;
|
|
||||||
TreeItem selItem=null;
|
|
||||||
for (TreeItem item : treeViewer.getTree().getItems()) { // find item from category
|
|
||||||
if(item.getText(0).equals(names.get(0))) {
|
|
||||||
if(names.size()>1) { // if we had an attribute as top item
|
|
||||||
TreeItem[] subItems=item.getItems();
|
|
||||||
for(TreeItem it : subItems) { // try to align by name
|
|
||||||
if(it.getText(0).equals(names.get(1))) {
|
|
||||||
selItem=it;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(selItem==null && indexInParent>=0 && subItems.length>0) // name based match failed so try to use position
|
|
||||||
selItem=subItems[subItems.length>indexInParent?indexInParent:subItems.length-1];
|
|
||||||
}
|
|
||||||
if(selItem==null) // no match in attributes so set the category as top item
|
|
||||||
selItem=item;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(selItem!=null)
|
|
||||||
treeViewer.getTree().setTopItem(selItem);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Sets the selection.
|
|
||||||
*
|
|
||||||
* @param selection the new selection
|
|
||||||
*/
|
|
||||||
@Inject
|
|
||||||
public void setSelection(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional IStructuredSelection selection, EPartService partService){
|
|
||||||
// only react if selection is actually from the WaveformViewer and nothing else
|
|
||||||
MPart part = partService.getActivePart();
|
|
||||||
if( part == null || ! (part.getObject() instanceof WaveformViewer ) )
|
|
||||||
return;
|
|
||||||
if(treeViewer!=null && selection!=null && !treeViewer.getTree().isDisposed()){
|
|
||||||
if( selection instanceof IStructuredSelection) {
|
|
||||||
setInput(((IStructuredSelection)selection).getFirstElement());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Time to string.
|
|
||||||
*
|
|
||||||
* @param time the time
|
|
||||||
* @return the string
|
|
||||||
*/
|
|
||||||
String timeToString(Long time){
|
|
||||||
return waveformViewerPart.getScaledTime(time);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tx to string.
|
|
||||||
*
|
|
||||||
* @param tx the tx
|
|
||||||
* @return the string
|
|
||||||
*/
|
|
||||||
String txToString(ITx tx){
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append("tx#").append(tx.getId()).append("[").append(timeToString(tx.getBeginTime())); //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
sb.append(" - ").append(timeToString(tx.getEndTime())).append("]"); //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class TxAttributeViewerSorter.
|
|
||||||
*/
|
|
||||||
class TxAttributeViewerSorter extends ViewerComparator {
|
|
||||||
|
|
||||||
/** The Constant ASCENDING. */
|
|
||||||
private static final int ASCENDING = 0;
|
|
||||||
|
|
||||||
/** The Constant DESCENDING. */
|
|
||||||
private static final int DESCENDING = 1;
|
|
||||||
|
|
||||||
/** The column. */
|
|
||||||
private int column;
|
|
||||||
|
|
||||||
/** The direction. */
|
|
||||||
private int direction;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Does the sort. If it's a different column from the previous sort, do an
|
|
||||||
* ascending sort. If it's the same column as the last sort, toggle the sort
|
|
||||||
* direction.
|
|
||||||
*
|
|
||||||
* @param column the column
|
|
||||||
*/
|
|
||||||
public void doSort(int column) {
|
|
||||||
if (column == this.column) {
|
|
||||||
// Same column as last sort; toggle the direction
|
|
||||||
direction = 1 - direction;
|
|
||||||
} else {
|
|
||||||
// New column; do an ascending sort
|
|
||||||
this.column = column;
|
|
||||||
direction = ASCENDING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compares the object for sorting.
|
|
||||||
*
|
|
||||||
* @param viewer the viewer
|
|
||||||
* @param e1 the e1
|
|
||||||
* @param e2 the e2
|
|
||||||
* @return the int
|
|
||||||
*/
|
|
||||||
public int compare(Viewer viewer, Object e1, Object e2) {
|
|
||||||
int rc = 0;
|
|
||||||
if(e1 instanceof ITxAttribute && e2 instanceof ITxAttribute){
|
|
||||||
ITxAttribute p1 = (ITxAttribute) e1;
|
|
||||||
ITxAttribute p2 = (ITxAttribute) e2;
|
|
||||||
// Determine which column and do the appropriate sort
|
|
||||||
switch (column) {
|
|
||||||
case COLUMN_FIRST:
|
|
||||||
rc = getComparator().compare(p1.getName(), p2.getName());
|
|
||||||
break;
|
|
||||||
case COLUMN_SECOND:
|
|
||||||
rc = getComparator().compare(p1.getDataType().name(), p2.getDataType().name());
|
|
||||||
break;
|
|
||||||
case COLUMN_THIRD:
|
|
||||||
rc = getComparator().compare(p1.getValue().toString(), p2.getValue().toString());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// If descending order, flip the direction
|
|
||||||
if (direction == DESCENDING) rc = -rc;
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class TxAttributeFilter.
|
|
||||||
*/
|
|
||||||
class TxAttributeFilter extends ViewerFilter {
|
|
||||||
|
|
||||||
/** The search string. */
|
|
||||||
private String searchString;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the search text.
|
|
||||||
*
|
|
||||||
* @param s the new search text
|
|
||||||
*/
|
|
||||||
public void setSearchText(String s) {
|
|
||||||
this.searchString = ".*" + s + ".*"; //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean select(Viewer viewer, Object parentElement, Object element) {
|
|
||||||
|
|
||||||
if (searchString == null || searchString.length() == 0) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(element instanceof TreeNode) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(element instanceof ITxAttribute){
|
|
||||||
try {
|
|
||||||
return (((ITxAttribute) element).getName().toLowerCase().matches(searchString.toLowerCase()));
|
|
||||||
} catch (PatternSyntaxException e) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(element instanceof Object[]) {
|
|
||||||
try {
|
|
||||||
return (((Object[])element)[0]).toString().toLowerCase().matches(searchString.toLowerCase());
|
|
||||||
} catch (PatternSyntaxException e) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Enum Type.
|
|
||||||
*/
|
|
||||||
enum Type {
|
|
||||||
PROPS, /** The props. */
|
|
||||||
ATTRS, /** The attrs. */
|
|
||||||
IN_REL, /** The in rel. */
|
|
||||||
OUT_REL,/** The out rel. */
|
|
||||||
HIER
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class TreeNode.
|
|
||||||
*/
|
|
||||||
class TreeNode{
|
|
||||||
|
|
||||||
/** The type. */
|
|
||||||
public Type type;
|
|
||||||
|
|
||||||
/** The element. */
|
|
||||||
public ITx element;
|
|
||||||
|
|
||||||
private String hier_path;
|
|
||||||
/**
|
|
||||||
* Instantiates a new tree node.
|
|
||||||
*
|
|
||||||
* @param element the element
|
|
||||||
* @param type the type
|
|
||||||
*/
|
|
||||||
public TreeNode(ITx element, Type type){
|
|
||||||
this.element=element;
|
|
||||||
this.type=type;
|
|
||||||
this.hier_path="";
|
|
||||||
}
|
|
||||||
|
|
||||||
public TreeNode(ITx element, String path){
|
|
||||||
this.element=element;
|
|
||||||
this.type=Type.HIER;
|
|
||||||
this.hier_path=path;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#toString()
|
|
||||||
*/
|
|
||||||
public String toString(){
|
|
||||||
switch(type){
|
|
||||||
case PROPS: return Messages.TransactionDetails_10;
|
|
||||||
case ATTRS: return Messages.TransactionDetails_11;
|
|
||||||
case IN_REL: return Messages.TransactionDetails_12;
|
|
||||||
case OUT_REL: return Messages.TransactionDetails_13;
|
|
||||||
case HIER:{
|
|
||||||
String[] tokens = hier_path.split("\\.");
|
|
||||||
return tokens[tokens.length-1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""; //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object[] getAttributeListForHier() {
|
|
||||||
if(childs==null) {
|
|
||||||
Map<String, Object> res = element.getAttributes().stream()
|
|
||||||
.filter(txAttr -> txAttr.getName().startsWith(hier_path))
|
|
||||||
.map(txAttr -> {
|
|
||||||
String target = hier_path.length()==0?txAttr.getName():txAttr.getName().replace(hier_path+'.', "");
|
|
||||||
String[] tokens = target.split("\\.");
|
|
||||||
if(tokens.length==1)
|
|
||||||
return new AbstractMap.SimpleEntry<>(tokens[0], txAttr);
|
|
||||||
else
|
|
||||||
return new AbstractMap.SimpleEntry<>(tokens[0], new TreeNode(element, hier_path.length()>0?hier_path+"."+tokens[0]:tokens[0]));
|
|
||||||
})
|
|
||||||
.collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue(), (first, second) -> first));
|
|
||||||
childs = new TreeMap<String, Object>(res).values().toArray();
|
|
||||||
}
|
|
||||||
return childs;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Object[] childs=null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class TransactionTreeContentProvider.
|
|
||||||
*/
|
|
||||||
class TransactionTreeContentProvider implements ITreeContentProvider {
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void dispose() { }
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Object[] getElements(Object element) {
|
|
||||||
return new Object[]{
|
|
||||||
new TreeNode((ITx)element, Type.PROPS),
|
|
||||||
new TreeNode((ITx)element, Type.ATTRS),
|
|
||||||
new TreeNode((ITx)element, Type.IN_REL),
|
|
||||||
new TreeNode((ITx)element, Type.OUT_REL)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Object[] getChildren(Object element) {
|
|
||||||
if(element instanceof TreeNode){
|
|
||||||
TreeNode propertyHolder=(TreeNode) element;
|
|
||||||
if(propertyHolder.type == Type.PROPS){
|
|
||||||
return new Object[][]{
|
|
||||||
{Messages.TransactionDetails_1, Messages.TransactionDetails_16, propertyHolder.element.getStream().getFullName()},
|
|
||||||
{Messages.TransactionDetails_2, Messages.TransactionDetails_16, propertyHolder.element.getGenerator().getName()},
|
|
||||||
{Messages.TransactionDetails_19, Messages.TransactionDetails_20, timeToString(propertyHolder.element.getBeginTime())},
|
|
||||||
{Messages.TransactionDetails_21, Messages.TransactionDetails_20, timeToString(propertyHolder.element.getEndTime())}
|
|
||||||
};
|
|
||||||
}else if(propertyHolder.type == Type.ATTRS || propertyHolder.type == Type.HIER)
|
|
||||||
return propertyHolder.getAttributeListForHier();
|
|
||||||
else if(propertyHolder.type == Type.IN_REL){
|
|
||||||
Vector<Object[] > res = new Vector<>();
|
|
||||||
for(ITxRelation rel:propertyHolder.element.getIncomingRelations()){
|
|
||||||
res.add(new Object[]{
|
|
||||||
rel.getRelationType(),
|
|
||||||
rel.getSource().getGenerator().getName(),
|
|
||||||
rel.getSource()});
|
|
||||||
}
|
|
||||||
return res.toArray();
|
|
||||||
} else if(propertyHolder.type == Type.OUT_REL){
|
|
||||||
Vector<Object[] > res = new Vector<>();
|
|
||||||
for(ITxRelation rel:propertyHolder.element.getOutgoingRelations()){
|
|
||||||
res.add(new Object[]{
|
|
||||||
rel.getRelationType(),
|
|
||||||
rel.getTarget().getGenerator().getName(),
|
|
||||||
rel.getTarget()});
|
|
||||||
}
|
|
||||||
return res.toArray();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Object getParent(Object element) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean hasChildren(Object element) {
|
|
||||||
return getChildren(element)!=null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Class AttributeLabelProvider.
|
|
||||||
*/
|
|
||||||
class AttributeLabelProvider extends LabelProvider implements IStyledLabelProvider {
|
|
||||||
|
|
||||||
/** The field. */
|
|
||||||
final int field;
|
|
||||||
|
|
||||||
/** The Constant NAME. */
|
|
||||||
public static final int NAME=0;
|
|
||||||
|
|
||||||
/** The Constant TYPE. */
|
|
||||||
public static final int TYPE=1;
|
|
||||||
|
|
||||||
/** The Constant VALUE. */
|
|
||||||
public static final int VALUE=2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a new attribute label provider.
|
|
||||||
*
|
|
||||||
* @param field the field
|
|
||||||
*/
|
|
||||||
public AttributeLabelProvider(int field) {
|
|
||||||
this.field=field;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public StyledString getStyledText(Object element) {
|
|
||||||
switch(field){
|
|
||||||
case NAME:
|
|
||||||
if (element instanceof ITxAttribute) {
|
|
||||||
ITxAttribute attribute = (ITxAttribute) element;
|
|
||||||
String[] tokens = attribute.getName().split("\\.");
|
|
||||||
return new StyledString(tokens[tokens.length-1]);
|
|
||||||
}else if (element instanceof ITxRelation) {
|
|
||||||
return new StyledString(Messages.TransactionDetails_4);
|
|
||||||
}else if(element instanceof Object[]){
|
|
||||||
Object[] elements = (Object[]) element;
|
|
||||||
return new StyledString(elements[field].toString());
|
|
||||||
} else
|
|
||||||
return new StyledString(element.toString());
|
|
||||||
case TYPE:
|
|
||||||
if (element instanceof ITxAttribute) {
|
|
||||||
ITxAttribute attribute = (ITxAttribute) element;
|
|
||||||
return new StyledString(attribute.getDataType().toString());
|
|
||||||
}else if(element instanceof Object[]){
|
|
||||||
Object[] elements = (Object[]) element;
|
|
||||||
return new StyledString(elements[field].toString());
|
|
||||||
}else
|
|
||||||
return new StyledString(""); //$NON-NLS-1$
|
|
||||||
default:
|
|
||||||
if (element instanceof ITxAttribute) {
|
|
||||||
ITxAttribute attribute = (ITxAttribute) element;
|
|
||||||
String value = attribute.getValue().toString();
|
|
||||||
if((DataType.UNSIGNED == attribute.getDataType() || DataType.INTEGER==attribute.getDataType()) && !"0".equals(value)) {
|
|
||||||
try {
|
|
||||||
value += " [0x"+Long.toHexString(Long.parseLong(attribute.getValue().toString()))+"]";
|
|
||||||
} catch(NumberFormatException e) { }
|
|
||||||
}
|
|
||||||
return new StyledString(value);
|
|
||||||
}else if(element instanceof Object[]){
|
|
||||||
Object[] elements = (Object[]) element;
|
|
||||||
Object o = elements[field];
|
|
||||||
if(o instanceof ITx) {
|
|
||||||
ITx tx = (ITx)o;
|
|
||||||
return new StyledString(txToString(tx)+" ("+tx.getStream().getFullName()+")");
|
|
||||||
} else
|
|
||||||
return new StyledString(o.toString());
|
|
||||||
} else if(element instanceof ITx){
|
|
||||||
return new StyledString(txToString((ITx) element));
|
|
||||||
}else
|
|
||||||
return new StyledString(""); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
package com.minres.scviewer.e4.application.preferences;
|
|
||||||
import org.eclipse.core.runtime.preferences.ConfigurationScope;
|
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
|
||||||
|
|
||||||
import com.opcoach.e4.preferences.IPreferenceStoreProvider;
|
|
||||||
import com.opcoach.e4.preferences.ScopedPreferenceStore;
|
|
||||||
|
|
||||||
public class PreferencesStoreProvider implements IPreferenceStoreProvider{
|
|
||||||
|
|
||||||
public PreferencesStoreProvider(){
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IPreferenceStore getPreferenceStore() {
|
|
||||||
return new ScopedPreferenceStore(ConfigurationScope.INSTANCE, PreferenceConstants.PREFERENCES_SCOPE);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,417 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* 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 org.eclipse.wb.swt;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.eclipse.core.runtime.Platform;
|
|
||||||
import org.eclipse.jface.resource.CompositeImageDescriptor;
|
|
||||||
import org.eclipse.jface.resource.ImageDescriptor;
|
|
||||||
import org.eclipse.swt.graphics.Image;
|
|
||||||
import org.eclipse.swt.graphics.Point;
|
|
||||||
import org.eclipse.swt.graphics.Rectangle;
|
|
||||||
import org.osgi.framework.Bundle;
|
|
||||||
|
|
||||||
import com.minres.scviewer.e4.application.Messages;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class for managing OS resources associated with SWT/JFace controls such as colors, fonts, images,
|
|
||||||
* etc.
|
|
||||||
*
|
|
||||||
* !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code> method to release the
|
|
||||||
* operating system resources managed by cached objects when those objects and OS resources are no longer
|
|
||||||
* needed (e.g. on application shutdown)
|
|
||||||
*
|
|
||||||
* This class may be freely distributed as part of any application or plugin.
|
|
||||||
* <p>
|
|
||||||
*
|
|
||||||
* @author scheglov_ke
|
|
||||||
* @author Dan Rubel
|
|
||||||
*/
|
|
||||||
public class ResourceManager extends SWTResourceManager {
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Image
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
private static Map<ImageDescriptor, Image> m_descriptorImageMap = new HashMap<ImageDescriptor, Image>();
|
|
||||||
/**
|
|
||||||
* Returns an {@link ImageDescriptor} stored in the file at the specified path relative to the specified
|
|
||||||
* class.
|
|
||||||
*
|
|
||||||
* @param clazz
|
|
||||||
* the {@link Class} relative to which to find the image descriptor.
|
|
||||||
* @param path
|
|
||||||
* the path to the image file.
|
|
||||||
* @return the {@link ImageDescriptor} stored in the file at the specified path.
|
|
||||||
*/
|
|
||||||
public static ImageDescriptor getImageDescriptor(Class<?> clazz, String path) {
|
|
||||||
return ImageDescriptor.createFromFile(clazz, path);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link ImageDescriptor} stored in the file at the specified path.
|
|
||||||
*
|
|
||||||
* @param path
|
|
||||||
* the path to the image file.
|
|
||||||
* @return the {@link ImageDescriptor} stored in the file at the specified path.
|
|
||||||
*/
|
|
||||||
public static ImageDescriptor getImageDescriptor(String path) {
|
|
||||||
try {
|
|
||||||
return ImageDescriptor.createFromURL(new File(path).toURI().toURL());
|
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link Image} based on the specified {@link ImageDescriptor}.
|
|
||||||
*
|
|
||||||
* @param descriptor
|
|
||||||
* the {@link ImageDescriptor} for the {@link Image}.
|
|
||||||
* @return the {@link Image} based on the specified {@link ImageDescriptor}.
|
|
||||||
*/
|
|
||||||
public static Image getImage(ImageDescriptor descriptor) {
|
|
||||||
if (descriptor == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Image image = m_descriptorImageMap.get(descriptor);
|
|
||||||
if (image == null) {
|
|
||||||
image = descriptor.createImage();
|
|
||||||
m_descriptorImageMap.put(descriptor, image);
|
|
||||||
}
|
|
||||||
return image;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Maps images to decorated images.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY];
|
|
||||||
/**
|
|
||||||
* Returns an {@link Image} composed of a base image decorated by another image.
|
|
||||||
*
|
|
||||||
* @param baseImage
|
|
||||||
* the base {@link Image} that should be decorated.
|
|
||||||
* @param decorator
|
|
||||||
* the {@link Image} to decorate the base image.
|
|
||||||
* @return {@link Image} The resulting decorated image.
|
|
||||||
*/
|
|
||||||
public static Image decorateImage(Image baseImage, Image decorator) {
|
|
||||||
return decorateImage(baseImage, decorator, BOTTOM_RIGHT);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link Image} composed of a base image decorated by another image.
|
|
||||||
*
|
|
||||||
* @param baseImage
|
|
||||||
* the base {@link Image} that should be decorated.
|
|
||||||
* @param decorator
|
|
||||||
* the {@link Image} to decorate the base image.
|
|
||||||
* @param corner
|
|
||||||
* the corner to place decorator image.
|
|
||||||
* @return the resulting decorated {@link Image}.
|
|
||||||
*/
|
|
||||||
public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
|
|
||||||
if (corner <= 0 || corner >= LAST_CORNER_KEY) {
|
|
||||||
throw new IllegalArgumentException(Messages.ResourceManager_0);
|
|
||||||
}
|
|
||||||
Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner];
|
|
||||||
if (cornerDecoratedImageMap == null) {
|
|
||||||
cornerDecoratedImageMap = new HashMap<Image, Map<Image, Image>>();
|
|
||||||
m_decoratedImageMap[corner] = cornerDecoratedImageMap;
|
|
||||||
}
|
|
||||||
Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage);
|
|
||||||
if (decoratedMap == null) {
|
|
||||||
decoratedMap = new HashMap<Image, Image>();
|
|
||||||
cornerDecoratedImageMap.put(baseImage, decoratedMap);
|
|
||||||
}
|
|
||||||
//
|
|
||||||
Image result = decoratedMap.get(decorator);
|
|
||||||
if (result == null) {
|
|
||||||
final Rectangle bib = baseImage.getBounds();
|
|
||||||
final Rectangle dib = decorator.getBounds();
|
|
||||||
final Point baseImageSize = new Point(bib.width, bib.height);
|
|
||||||
CompositeImageDescriptor compositImageDesc = new CompositeImageDescriptor() {
|
|
||||||
@Override
|
|
||||||
protected void drawCompositeImage(int width, int height) {
|
|
||||||
drawImage(createCachedImageDataProvider(baseImage), 0, 0);
|
|
||||||
if (corner == TOP_LEFT) {
|
|
||||||
drawImage(createCachedImageDataProvider(decorator), 0, 0);
|
|
||||||
} else if (corner == TOP_RIGHT) {
|
|
||||||
drawImage(createCachedImageDataProvider(decorator), bib.width - dib.width, 0);
|
|
||||||
} else if (corner == BOTTOM_LEFT) {
|
|
||||||
drawImage(createCachedImageDataProvider(decorator), 0, bib.height - dib.height);
|
|
||||||
} else if (corner == BOTTOM_RIGHT) {
|
|
||||||
drawImage(createCachedImageDataProvider(decorator), bib.width - dib.width, bib.height - dib.height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
protected Point getSize() {
|
|
||||||
return baseImageSize;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
//
|
|
||||||
result = compositImageDesc.createImage();
|
|
||||||
decoratedMap.put(decorator, result);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Dispose all of the cached images.
|
|
||||||
*/
|
|
||||||
public static void disposeImages() {
|
|
||||||
SWTResourceManager.disposeImages();
|
|
||||||
// dispose ImageDescriptor images
|
|
||||||
{
|
|
||||||
for (Iterator<Image> I = m_descriptorImageMap.values().iterator(); I.hasNext();) {
|
|
||||||
I.next().dispose();
|
|
||||||
}
|
|
||||||
m_descriptorImageMap.clear();
|
|
||||||
}
|
|
||||||
// dispose decorated images
|
|
||||||
for (int i = 0; i < m_decoratedImageMap.length; i++) {
|
|
||||||
Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i];
|
|
||||||
if (cornerDecoratedImageMap != null) {
|
|
||||||
for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) {
|
|
||||||
for (Image image : decoratedMap.values()) {
|
|
||||||
image.dispose();
|
|
||||||
}
|
|
||||||
decoratedMap.clear();
|
|
||||||
}
|
|
||||||
cornerDecoratedImageMap.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// dispose plugin images
|
|
||||||
{
|
|
||||||
for (Iterator<Image> I = m_URLImageMap.values().iterator(); I.hasNext();) {
|
|
||||||
I.next().dispose();
|
|
||||||
}
|
|
||||||
m_URLImageMap.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Plugin images support
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
/**
|
|
||||||
* Maps URL to images.
|
|
||||||
*/
|
|
||||||
private static Map<String, Image> m_URLImageMap = new HashMap<String, Image>();
|
|
||||||
/**
|
|
||||||
* Provider for plugin resources, used by WindowBuilder at design time.
|
|
||||||
*/
|
|
||||||
public interface PluginResourceProvider {
|
|
||||||
URL getEntry(String symbolicName, String path);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Instance of {@link PluginResourceProvider}, used by WindowBuilder at design time.
|
|
||||||
*/
|
|
||||||
private static PluginResourceProvider m_designTimePluginResourceProvider = null;
|
|
||||||
/**
|
|
||||||
* Returns an {@link Image} based on a plugin and file path.
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
* the plugin {@link Object} containing the image
|
|
||||||
* @param name
|
|
||||||
* the path to the image within the plugin
|
|
||||||
* @return the {@link Image} stored in the file at the specified path
|
|
||||||
*
|
|
||||||
* @deprecated Use {@link #getPluginImage(String, String)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static Image getPluginImage(Object plugin, String name) {
|
|
||||||
try {
|
|
||||||
URL url = getPluginImageURL(plugin, name);
|
|
||||||
if (url != null) {
|
|
||||||
return getPluginImageFromUrl(url);
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// Ignore any exceptions
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link Image} based on a {@link Bundle} and resource entry path.
|
|
||||||
*
|
|
||||||
* @param symbolicName
|
|
||||||
* the symbolic name of the {@link Bundle}.
|
|
||||||
* @param path
|
|
||||||
* the path of the resource entry.
|
|
||||||
* @return the {@link Image} stored in the file at the specified path.
|
|
||||||
*/
|
|
||||||
public static Image getPluginImage(String symbolicName, String path) {
|
|
||||||
try {
|
|
||||||
URL url = getPluginImageURL(symbolicName, path);
|
|
||||||
if (url != null) {
|
|
||||||
return getPluginImageFromUrl(url);
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// Ignore any exceptions
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link Image} based on given {@link URL}.
|
|
||||||
*/
|
|
||||||
private static Image getPluginImageFromUrl(URL url) {
|
|
||||||
try {
|
|
||||||
try {
|
|
||||||
String key = url.toExternalForm();
|
|
||||||
Image image = m_URLImageMap.get(key);
|
|
||||||
if (image == null) {
|
|
||||||
InputStream stream = url.openStream();
|
|
||||||
try {
|
|
||||||
image = getImage(stream);
|
|
||||||
m_URLImageMap.put(key, image);
|
|
||||||
} finally {
|
|
||||||
stream.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return image;
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// Ignore any exceptions
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// Ignore any exceptions
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link ImageDescriptor} based on a plugin and file path.
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
* the plugin {@link Object} containing the image.
|
|
||||||
* @param name
|
|
||||||
* the path to th eimage within the plugin.
|
|
||||||
* @return the {@link ImageDescriptor} stored in the file at the specified path.
|
|
||||||
*
|
|
||||||
* @deprecated Use {@link #getPluginImageDescriptor(String, String)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static ImageDescriptor getPluginImageDescriptor(Object plugin, String name) {
|
|
||||||
try {
|
|
||||||
try {
|
|
||||||
URL url = getPluginImageURL(plugin, name);
|
|
||||||
return ImageDescriptor.createFromURL(url);
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// Ignore any exceptions
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// Ignore any exceptions
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link ImageDescriptor} based on a {@link Bundle} and resource entry path.
|
|
||||||
*
|
|
||||||
* @param symbolicName
|
|
||||||
* the symbolic name of the {@link Bundle}.
|
|
||||||
* @param path
|
|
||||||
* the path of the resource entry.
|
|
||||||
* @return the {@link ImageDescriptor} based on a {@link Bundle} and resource entry path.
|
|
||||||
*/
|
|
||||||
public static ImageDescriptor getPluginImageDescriptor(String symbolicName, String path) {
|
|
||||||
try {
|
|
||||||
URL url = getPluginImageURL(symbolicName, path);
|
|
||||||
if (url != null) {
|
|
||||||
return ImageDescriptor.createFromURL(url);
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// Ignore any exceptions
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link URL} based on a {@link Bundle} and resource entry path.
|
|
||||||
*/
|
|
||||||
private static URL getPluginImageURL(String symbolicName, String path) {
|
|
||||||
// try runtime plugins
|
|
||||||
{
|
|
||||||
Bundle bundle = Platform.getBundle(symbolicName);
|
|
||||||
if (bundle != null) {
|
|
||||||
return bundle.getEntry(path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// try design time provider
|
|
||||||
if (m_designTimePluginResourceProvider != null) {
|
|
||||||
return m_designTimePluginResourceProvider.getEntry(symbolicName, path);
|
|
||||||
}
|
|
||||||
// no such resource
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Returns an {@link URL} based on a plugin and file path.
|
|
||||||
*
|
|
||||||
* @param plugin
|
|
||||||
* the plugin {@link Object} containing the file path.
|
|
||||||
* @param name
|
|
||||||
* the file path.
|
|
||||||
* @return the {@link URL} representing the file at the specified path.
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
private static URL getPluginImageURL(Object plugin, String name) throws Exception {
|
|
||||||
// try to work with 'plugin' as with OSGI BundleContext
|
|
||||||
try {
|
|
||||||
Class<?> BundleClass = Class.forName("org.osgi.framework.Bundle"); //$NON-NLS-1$
|
|
||||||
Class<?> BundleContextClass = Class.forName("org.osgi.framework.BundleContext"); //$NON-NLS-1$
|
|
||||||
if (BundleContextClass.isAssignableFrom(plugin.getClass())) {
|
|
||||||
Method getBundleMethod = BundleContextClass.getMethod("getBundle", new Class[0]); //$NON-NLS-1$
|
|
||||||
Object bundle = getBundleMethod.invoke(plugin, new Object[0]);
|
|
||||||
//
|
|
||||||
Class<?> PathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
|
|
||||||
Constructor<?> pathConstructor = PathClass.getConstructor(new Class[]{String.class});
|
|
||||||
Object path = pathConstructor.newInstance(new Object[]{name});
|
|
||||||
//
|
|
||||||
Class<?> IPathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
|
|
||||||
Class<?> PlatformClass = Class.forName("org.eclipse.core.runtime.Platform"); //$NON-NLS-1$
|
|
||||||
Method findMethod = PlatformClass.getMethod("find", new Class[]{BundleClass, IPathClass}); //$NON-NLS-1$
|
|
||||||
return (URL) findMethod.invoke(null, new Object[]{bundle, path});
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
// Ignore any exceptions
|
|
||||||
}
|
|
||||||
// else work with 'plugin' as with usual Eclipse plugin
|
|
||||||
{
|
|
||||||
Class<?> PluginClass = Class.forName("org.eclipse.core.runtime.Plugin"); //$NON-NLS-1$
|
|
||||||
if (PluginClass.isAssignableFrom(plugin.getClass())) {
|
|
||||||
//
|
|
||||||
Class<?> PathClass = Class.forName("org.eclipse.core.runtime.Path"); //$NON-NLS-1$
|
|
||||||
Constructor<?> pathConstructor = PathClass.getConstructor(new Class[]{String.class});
|
|
||||||
Object path = pathConstructor.newInstance(new Object[]{name});
|
|
||||||
//
|
|
||||||
Class<?> IPathClass = Class.forName("org.eclipse.core.runtime.IPath"); //$NON-NLS-1$
|
|
||||||
Method findMethod = PluginClass.getMethod("find", new Class[]{IPathClass}); //$NON-NLS-1$
|
|
||||||
return (URL) findMethod.invoke(plugin, new Object[]{path});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// General
|
|
||||||
//
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
/**
|
|
||||||
* Dispose of cached objects and their underlying OS resources. This should only be called when the cached
|
|
||||||
* objects are no longer needed (e.g. on application shutdown).
|
|
||||||
*/
|
|
||||||
public static void dispose() {
|
|
||||||
disposeColors();
|
|
||||||
disposeFonts();
|
|
||||||
disposeImages();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
<?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 and VCD
|
|
||||||
signals. 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.eclipse.equinox.ds" version="1.4.200" match="greaterOrEqual"/>
|
|
||||||
<import plugin="org.eclipse.osgi.services" version="3.4.0" match="greaterOrEqual"/>
|
|
||||||
<import plugin="com.google.guava" version="15.0.0" match="greaterOrEqual"/>
|
|
||||||
<import plugin="org.eclipse.osgi"/>
|
|
||||||
<import plugin="com.minres.scviewer.database" version="1.0.0" match="greaterOrEqual"/>
|
|
||||||
<import plugin="com.minres.scviewer.database.ui" version="1.0.0" match="greaterOrEqual"/>
|
|
||||||
<import plugin="com.minres.scviewer.database.ui.swt" version="1.0.0" match="greaterOrEqual"/>
|
|
||||||
<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.core.expressions" version="3.4.600" match="greaterOrEqual"/>
|
|
||||||
<import plugin="org.eclipse.jface"/>
|
|
||||||
<import plugin="org.eclipse.swt" version="3.103.1" match="greaterOrEqual"/>
|
|
||||||
<import plugin="org.eclipse.equinox.registry"/>
|
|
||||||
<import plugin="org.codehaus.groovy" version="2.5.8" match="greaterOrEqual"/>
|
|
||||||
<import plugin="org.hamcrest.core" version="1.3.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"/>
|
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="org.codehaus.groovy"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"/>
|
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="com.minres.scviewer.database.ui"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"
|
|
||||||
unpack="false"/>
|
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="com.minres.scviewer.database.ui.swt"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"
|
|
||||||
unpack="false"/>
|
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="com.minres.scviewer.database.vcd"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"
|
|
||||||
unpack="false"/>
|
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="org.junit"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"/>
|
|
||||||
|
|
||||||
<plugin
|
|
||||||
id="org.hamcrest.core"
|
|
||||||
download-size="0"
|
|
||||||
install-size="0"
|
|
||||||
version="0.0.0"
|
|
||||||
unpack="false"/>
|
|
||||||
|
|
||||||
</feature>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
/workspace/
|
|
||||||
@@ -3,31 +3,42 @@
|
|||||||
<target name="com.minres.scviewer.target" sequenceNumber="138">
|
<target name="com.minres.scviewer.target" sequenceNumber="138">
|
||||||
<locations>
|
<locations>
|
||||||
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
||||||
|
<repository location="http://download.eclipse.org/releases/2020-03/"/>
|
||||||
<unit id="org.eclipse.equinox.executable.feature.group" version="0.0.0"/>
|
<unit id="org.eclipse.equinox.executable.feature.group" version="0.0.0"/>
|
||||||
|
<unit id="org.eclipse.equinox.p2.sdk.feature.jar" version="0.0.0"/> <!-- needed by Linux exectable-->
|
||||||
|
<unit id="org.eclipse.equinox.sdk.feature.group" version="0.0.0"/>
|
||||||
<unit id="org.eclipse.platform.sdk" version="0.0.0"/>
|
<unit id="org.eclipse.platform.sdk" version="0.0.0"/>
|
||||||
<unit id="org.eclipse.sdk.feature.group" version="0.0.0"/>
|
<unit id="org.eclipse.sdk.feature.group" version="0.0.0"/> <!-- org.eclipse.equinox.p2.iu -->
|
||||||
<unit id="org.eclipse.rcp.sdk.id" version="0.0.0"/>
|
<unit id="org.eclipse.rcptt.core.feature.group" version="0.0.0"/><!-- com.google.guave-->
|
||||||
<unit id="org.eclipse.rcptt.core.feature.group" version="0.0.0"/>
|
<unit id="org.eclipse.pde.feature.group" version="0.0.0"/> <!-- org.junit for testing -->
|
||||||
<unit id="org.eclipse.e4.rcp.feature.group" version="0.0.0"/>
|
|
||||||
<unit id="org.eclipse.platform.feature.group" version="0.0.0"/>
|
|
||||||
<repository location="http://download.eclipse.org/releases/photon"/>
|
|
||||||
</location>
|
</location>
|
||||||
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
||||||
<unit id="org.codehaus.groovy24.feature.feature.group" version="3.5.1.v201909291550-e48"/>
|
<repository location="https://www.opcoach.com/repository/2020-03/"/>
|
||||||
<repository location="http://dist.springsource.org/snapshot/GRECLIPSE/e4.8/"/>
|
<unit id="com.opcoach.e4.preferences.feature.feature.group" version="0.0.0"/>
|
||||||
<unit id="org.codehaus.groovy25.feature.feature.group" version="3.5.1.v201909291550-e48"/>
|
|
||||||
</location>
|
</location>
|
||||||
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
||||||
<repository location="https://www.opcoach.com/repository/2018-12"/>
|
<repository location="http://dist.springsource.org/snapshot/GRECLIPSE/e4.15/"/>
|
||||||
<unit id="com.opcoach.e4.preferences.feature.feature.group" version="1.3.0.201903181741"/>
|
<unit id="org.codehaus.groovy25.feature.feature.group" version="0.0.0"/>
|
||||||
|
</location>
|
||||||
|
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
||||||
|
<repository location="http://download.eclipse.org/nattable/releases/1.6.0/repository/"/>
|
||||||
|
<unit id="org.eclipse.nebula.widgets.nattable.core.feature.feature.group" version="1.6.0.201909181823"/>
|
||||||
|
<unit id="org.eclipse.nebula.widgets.nattable.extension.e4.feature.feature.group" version="1.2.0.201909181823"/>
|
||||||
|
<unit id="org.eclipse.nebula.widgets.nattable.extension.glazedlists.feature.feature.group" version="1.6.0.201909181823"/>
|
||||||
|
<unit id="org.eclipse.nebula.widgets.nattable.extension.poi.feature.feature.group" version="1.5.1.201909181823"/>
|
||||||
|
</location>
|
||||||
|
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
||||||
|
<repository location="http://download.eclipse.org/nebula/releases/latest"/>
|
||||||
|
<unit id="org.eclipse.nebula.widgets.xviewer.feature.feature.group" version="1.1.0.202011020719"/>
|
||||||
|
</location>
|
||||||
|
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
|
||||||
|
<repository location="http://download.eclipse.org/collections/10.4.0/repository"/>
|
||||||
|
<unit id="org.eclipse.collections.feature.feature.group" version="0.0.0"/>
|
||||||
|
<unit id="org.eclipse.collections.feature.source.feature.group" version="0.0.0"/>
|
||||||
</location>
|
</location>
|
||||||
</locations>
|
</locations>
|
||||||
<environment>
|
<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||||
<arch>x86_64</arch>
|
|
||||||
<nl>de_DE</nl>
|
|
||||||
</environment>
|
|
||||||
<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7 [1.7.0_45]"/>
|
|
||||||
<launcherArgs>
|
<launcherArgs>
|
||||||
<vmArgs>-Dosgi.requiredJavaVersion=1.6 -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -Xdock:icon=../Resources/Eclipse.icns -Xms40m -Xmx2G</vmArgs>
|
<vmArgs>-Xms40m -Xmx2G</vmArgs>
|
||||||
</launcherArgs>
|
</launcherArgs>
|
||||||
</target>
|
</target>
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.minres.scviewer</groupId>
|
<groupId>com.minres.scviewer</groupId>
|
||||||
<artifactId>com.minres.scviewer.parent</artifactId>
|
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||||
<version>2.0.0-SNAPSHOT</version>
|
<version>2.11.0</version>
|
||||||
<relativePath>../com.minres.scviewer.parent</relativePath>
|
<relativePath>..</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<site>
|
|
||||||
<feature url="features/com.minres.scviewer.feature_1.0.0.qualifier.jar" id="com.minres.scviewer.feature" version="1.0.0.qualifier">
|
|
||||||
<category name="com.minres.scviewer"/>
|
|
||||||
</feature>
|
|
||||||
<category-def name="com.minres.scviewer" label="SCViewer">
|
|
||||||
<description>
|
|
||||||
Viewer for SystemC Verification (SCV) library's transaction recording
|
|
||||||
</description>
|
|
||||||
</category-def>
|
|
||||||
</site>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<artifactId>com.minres.scviewer.updateSite</artifactId>
|
|
||||||
<packaging>eclipse-repository</packaging>
|
|
||||||
<parent>
|
|
||||||
<groupId>com.minres.scviewer</groupId>
|
|
||||||
<artifactId>com.minres.scviewer.parent</artifactId>
|
|
||||||
<version>2.0.0-SNAPSHOT</version>
|
|
||||||
<relativePath>../com.minres.scviewer.parent</relativePath>
|
|
||||||
</parent>
|
|
||||||
<!-- <build>
|
|
||||||
<finalName>resources</finalName>
|
|
||||||
<resources>
|
|
||||||
<resource>
|
|
||||||
<directory>resources</directory>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
</build> -->
|
|
||||||
</project>
|
|
||||||
-325
@@ -1,325 +0,0 @@
|
|||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2014 OPCoach.
|
|
||||||
* 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:
|
|
||||||
* OPCoach - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package com.opcoach.e4.preferences.internal;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
import org.eclipse.core.runtime.IConfigurationElement;
|
|
||||||
import org.eclipse.core.runtime.IExtensionRegistry;
|
|
||||||
import org.eclipse.core.runtime.preferences.InstanceScope;
|
|
||||||
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
|
|
||||||
import org.eclipse.e4.core.contexts.IEclipseContext;
|
|
||||||
import org.eclipse.e4.core.di.annotations.Creatable;
|
|
||||||
import org.eclipse.e4.core.services.contributions.IContributionFactory;
|
|
||||||
import org.eclipse.e4.core.services.log.Logger;
|
|
||||||
import org.eclipse.jface.preference.IPreferenceNode;
|
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
|
||||||
import org.eclipse.jface.preference.PreferenceManager;
|
|
||||||
import org.eclipse.jface.preference.PreferenceNode;
|
|
||||||
import org.eclipse.jface.preference.PreferencePage;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Control;
|
|
||||||
import org.eclipse.swt.widgets.Label;
|
|
||||||
|
|
||||||
import com.opcoach.e4.preferences.IPreferenceStoreProvider;
|
|
||||||
import com.opcoach.e4.preferences.ScopedPreferenceStore;
|
|
||||||
|
|
||||||
@SuppressWarnings("restriction")
|
|
||||||
@Creatable
|
|
||||||
public class E4PreferenceRegistry
|
|
||||||
{
|
|
||||||
|
|
||||||
public static final String PREFS_PAGE_XP = "com.opcoach.e4.preferences.e4PreferencePages"; // $NON-NLS-1$
|
|
||||||
public static final String PREF_STORE_PROVIDER = "com.opcoach.e4.preferences.e4PreferenceStoreProvider"; // $NON-NLS-1$
|
|
||||||
public static final String KEY_PREF_STORE_PROVIDERS = "com.opcoach.e4.preferences.e4PreferenceStoreProviders"; // $NON-NLS-1$
|
|
||||||
protected static final String ELMT_PAGE = "page"; // $NON-NLS-1$
|
|
||||||
protected static final String ATTR_ID = "id"; // $NON-NLS-1$
|
|
||||||
protected static final String ATTR_CATEGORY = "category"; // $NON-NLS-1$
|
|
||||||
protected static final String ATTR_CLASS = "class"; // $NON-NLS-1$
|
|
||||||
protected static final String ATTR_NAME = "name"; // $NON-NLS-1$
|
|
||||||
|
|
||||||
protected static final String ATTR_PLUGIN_ID = "pluginId"; // $NON-NLS-1$
|
|
||||||
protected static final String ATTR_ID_IN_WBCONTEXT = "idInWorkbenchContext"; // $NON-NLS-1$
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
protected Logger logger;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
protected IEclipseContext context;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
protected IExtensionRegistry registry;
|
|
||||||
|
|
||||||
private PreferenceManager pm = null;
|
|
||||||
|
|
||||||
// A map of (pluginId, { IPreferenceStoreProvider, or key in wbcontext }
|
|
||||||
private Map<String, Object> psProviders;
|
|
||||||
|
|
||||||
public PreferenceManager getPreferenceManager()
|
|
||||||
{
|
|
||||||
|
|
||||||
// Remember of the unbounded nodes to order parent pages.
|
|
||||||
// Map<category, list of children> (all nodes except root nodes)
|
|
||||||
Map<String, Collection<IPreferenceNode>> childrenNodes = new HashMap<String, Collection<IPreferenceNode>>();
|
|
||||||
|
|
||||||
if (pm != null)
|
|
||||||
return pm;
|
|
||||||
|
|
||||||
pm = new PreferenceManager();
|
|
||||||
IContributionFactory factory = context.get(IContributionFactory.class);
|
|
||||||
|
|
||||||
for (IConfigurationElement elmt : registry.getConfigurationElementsFor(PREFS_PAGE_XP))
|
|
||||||
{
|
|
||||||
String bundleId = elmt.getNamespaceIdentifier();
|
|
||||||
if (!elmt.getName().equals(ELMT_PAGE))
|
|
||||||
{
|
|
||||||
logger.warn("unexpected element: {0}", elmt.getName());
|
|
||||||
continue;
|
|
||||||
} else if (isEmpty(elmt.getAttribute(ATTR_ID)) || isEmpty(elmt.getAttribute(ATTR_NAME)))
|
|
||||||
{
|
|
||||||
logger.warn("missing id and/or name: {}", bundleId);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
PreferenceNode pn = null;
|
|
||||||
if (elmt.getAttribute(ATTR_CLASS) != null)
|
|
||||||
{
|
|
||||||
PreferencePage page = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
String prefPageURI = getClassURI(bundleId, elmt.getAttribute(ATTR_CLASS));
|
|
||||||
Object object = factory.create(prefPageURI, context);
|
|
||||||
if (!(object instanceof PreferencePage))
|
|
||||||
{
|
|
||||||
logger.error("Expected instance of PreferencePage: {0}", elmt.getAttribute(ATTR_CLASS));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
page = (PreferencePage) object;
|
|
||||||
setPreferenceStore(bundleId, page);
|
|
||||||
|
|
||||||
} catch (ClassNotFoundException e)
|
|
||||||
{
|
|
||||||
logger.error(e);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ContextInjectionFactory.inject(page, context);
|
|
||||||
if ((page.getTitle() == null || page.getTitle().isEmpty()) && elmt.getAttribute(ATTR_NAME) != null)
|
|
||||||
{
|
|
||||||
page.setTitle(elmt.getAttribute(ATTR_NAME));
|
|
||||||
}
|
|
||||||
|
|
||||||
pn = new PreferenceNode(elmt.getAttribute(ATTR_ID), page);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
pn = new PreferenceNode(elmt.getAttribute(ATTR_ID), new EmptyPreferencePage(elmt.getAttribute(ATTR_NAME)));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Issue 2 : Fix bug on order (see :
|
|
||||||
// https://github.com/opcoach/e4Preferences/issues/2)
|
|
||||||
// Add only pages at root level and remember of child pages for
|
|
||||||
// categories
|
|
||||||
String category = elmt.getAttribute(ATTR_CATEGORY);
|
|
||||||
if (isEmpty(category))
|
|
||||||
{
|
|
||||||
pm.addToRoot(pn);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* IPreferenceNode parent = findNode(pm, category); if (parent
|
|
||||||
* == null) { // No parent found, but may be the extension has
|
|
||||||
* not been read yet. So remember of it unboundedNodes.put(pn,
|
|
||||||
* category); } else { parent.add(pn); }
|
|
||||||
*/
|
|
||||||
// Check if this category is already registered.
|
|
||||||
Collection<IPreferenceNode> children = childrenNodes.get(category);
|
|
||||||
if (children == null)
|
|
||||||
{
|
|
||||||
children = new ArrayList<IPreferenceNode>();
|
|
||||||
childrenNodes.put(category, children);
|
|
||||||
}
|
|
||||||
children.add(pn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Must now bind pages that has not been added in nodes (depends on the
|
|
||||||
// preference page read order)
|
|
||||||
// Iterate on all possible categories
|
|
||||||
Collection<String> categoriesDone = new ArrayList<String>();
|
|
||||||
|
|
||||||
while (!childrenNodes.isEmpty())
|
|
||||||
{
|
|
||||||
for (String cat : Collections.unmodifiableSet(childrenNodes.keySet()))
|
|
||||||
{
|
|
||||||
// Is this category already in preference manager ? If not add
|
|
||||||
// it later...
|
|
||||||
IPreferenceNode parent = findNode(pm, cat);
|
|
||||||
if (parent != null)
|
|
||||||
{
|
|
||||||
// Can add the list of children to this parent page...
|
|
||||||
for (IPreferenceNode pn : childrenNodes.get(cat))
|
|
||||||
{
|
|
||||||
parent.add(pn);
|
|
||||||
}
|
|
||||||
// Ok This parent page is done. Can remove it from map
|
|
||||||
// outside of this loop
|
|
||||||
categoriesDone.add(cat);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String keyToRemove : categoriesDone)
|
|
||||||
childrenNodes.remove(keyToRemove);
|
|
||||||
categoriesDone.clear();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return pm;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setPreferenceStore(String bundleId, PreferencePage page)
|
|
||||||
{
|
|
||||||
// Affect preference store to this page if this is a
|
|
||||||
// PreferencePage, else, must manage it internally
|
|
||||||
// Set the issue#1 on github :
|
|
||||||
// https://github.com/opcoach/e4Preferences/issues/1
|
|
||||||
// And manage the extensions of IP
|
|
||||||
initialisePreferenceStoreProviders();
|
|
||||||
|
|
||||||
IPreferenceStore store = null;
|
|
||||||
|
|
||||||
// Get the preference store according to policy.
|
|
||||||
Object data = psProviders.get(bundleId);
|
|
||||||
if (data != null)
|
|
||||||
{
|
|
||||||
if (data instanceof IPreferenceStore)
|
|
||||||
store = (IPreferenceStore) data;
|
|
||||||
else if (data instanceof IPreferenceStoreProvider)
|
|
||||||
store = ((IPreferenceStoreProvider) data).getPreferenceStore();
|
|
||||||
else if (data instanceof String)
|
|
||||||
store = (IPreferenceStore) context.get((String) data);
|
|
||||||
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
// Default behavior : create a preference store for this bundle and remember of it
|
|
||||||
store = new ScopedPreferenceStore(InstanceScope.INSTANCE, bundleId);
|
|
||||||
psProviders.put(bundleId, store);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (store != null)
|
|
||||||
page.setPreferenceStore(store);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
logger.warn("Unable to set the preferenceStore for page " + page.getTitle() + " defined in bundle " + bundleId);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Read the e4PreferenceStoreProvider extension point */
|
|
||||||
private void initialisePreferenceStoreProviders()
|
|
||||||
{
|
|
||||||
if (psProviders == null)
|
|
||||||
{
|
|
||||||
IContributionFactory factory = context.get(IContributionFactory.class);
|
|
||||||
|
|
||||||
psProviders = new HashMap<String, Object>();
|
|
||||||
IExtensionRegistry registry = context.get(IExtensionRegistry.class);
|
|
||||||
|
|
||||||
// Read extensions and fill the map...
|
|
||||||
for (IConfigurationElement elmt : registry.getConfigurationElementsFor(PREF_STORE_PROVIDER))
|
|
||||||
{
|
|
||||||
String declaringBundle = elmt.getNamespaceIdentifier();
|
|
||||||
String pluginId = elmt.getAttribute(ATTR_PLUGIN_ID);
|
|
||||||
if (isEmpty(pluginId))
|
|
||||||
{
|
|
||||||
logger.warn("missing plugin Id in extension " + PREF_STORE_PROVIDER + " check the plugin " + declaringBundle);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
String classname = elmt.getAttribute(ATTR_CLASS);
|
|
||||||
String objectId = elmt.getAttribute(ATTR_ID_IN_WBCONTEXT);
|
|
||||||
|
|
||||||
if ((isEmpty(classname) && isEmpty(objectId)) || (((classname != null) && classname.length() > 0) && ((objectId != null) && objectId.length() > 0)))
|
|
||||||
{
|
|
||||||
logger.warn("In extension " + PREF_STORE_PROVIDER + " only one of the two attributes (pluginId or idInWorkbenchContext) must be set. Check the plugin "
|
|
||||||
+ declaringBundle);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ok can now work with data...
|
|
||||||
Object data = objectId;
|
|
||||||
if (classname != null)
|
|
||||||
{
|
|
||||||
data = factory.create("bundleclass://"+declaringBundle+"/"+classname, context);
|
|
||||||
if (!(data instanceof IPreferenceStoreProvider))
|
|
||||||
{
|
|
||||||
logger.warn("In extension " + PREF_STORE_PROVIDER + " the class must implements IPreferenceStoreProvider. Check the plugin " + declaringBundle);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
psProviders.put(pluginId, data);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
context.set(KEY_PREF_STORE_PROVIDERS, psProviders);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private IPreferenceNode findNode(PreferenceManager pm, String categoryId)
|
|
||||||
{
|
|
||||||
for (Object o : pm.getElements(PreferenceManager.POST_ORDER))
|
|
||||||
{
|
|
||||||
if (o instanceof IPreferenceNode && ((IPreferenceNode) o).getId().equals(categoryId))
|
|
||||||
{
|
|
||||||
return (IPreferenceNode) o;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getClassURI(String definingBundleId, String spec) throws ClassNotFoundException
|
|
||||||
{
|
|
||||||
if (spec.startsWith("platform:"))
|
|
||||||
{
|
|
||||||
return spec;
|
|
||||||
} // $NON-NLS-1$
|
|
||||||
return "bundleclass://" + definingBundleId + '/' + spec;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isEmpty(String value)
|
|
||||||
{
|
|
||||||
return value == null || value.trim().isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
static class EmptyPreferencePage extends PreferencePage
|
|
||||||
{
|
|
||||||
|
|
||||||
public EmptyPreferencePage(String title)
|
|
||||||
{
|
|
||||||
setTitle(title);
|
|
||||||
noDefaultAndApplyButton();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Control createContents(Composite parent)
|
|
||||||
{
|
|
||||||
return new Label(parent, SWT.NONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
File renamed without changes.
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>com.minres.scviewer.database.feature</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.FeatureBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||||
|
<nature>org.eclipse.pde.FeatureNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
File renamed without changes.
+2
@@ -1,2 +1,4 @@
|
|||||||
bin.includes = feature.xml,\
|
bin.includes = feature.xml,\
|
||||||
feature.properties
|
feature.properties
|
||||||
|
src.includes = feature.properties,\
|
||||||
|
feature.xml
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
featureName=SystemC simulation results viewer database loaders
|
||||||
|
providerName=MINRES Technologies GmbH
|
||||||
|
updateSiteName=SC Viewer Database Loader Updates
|
||||||
|
description=A viewer for SystemC Verification Library transactions and VCD signals.
|
||||||
|
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
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<feature
|
||||||
|
id="com.minres.scviewer.database.feature"
|
||||||
|
label="%featureName"
|
||||||
|
version="3.0.0.qualifier"
|
||||||
|
provider-name="%providerName">
|
||||||
|
|
||||||
|
<description>
|
||||||
|
The database loaders for SystemC Verification Library transactions and VCD signals. They support SQLite based recording as well as the built-in text base recording.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
Copyright (c) 2015-2021 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="2.5.8" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.osgi.services" version="3.4.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="com.google.guava" version="15.0.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.osgi"/>
|
||||||
|
<import plugin="com.minres.scviewer.database" version="1.0.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.core.runtime"/>
|
||||||
|
</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.database.sqlite"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="com.minres.scviewer.database.vcd"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="com.google.guava"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
</feature>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>com.minres.scviewer.database.feature</artifactId>
|
||||||
|
<packaging>eclipse-feature</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.minres.scviewer</groupId>
|
||||||
|
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||||
|
<version>2.11.0</version>
|
||||||
|
<relativePath>../..</relativePath>
|
||||||
|
</parent>
|
||||||
|
<version>3.0.0-SNAPSHOT</version>
|
||||||
|
</project>
|
||||||
File renamed without changes.
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>com.minres.scviewer.e4.feature</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.FeatureBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.pde.FeatureNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
bin.includes = feature.xml
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<feature
|
||||||
|
id="com.minres.scviewer.e4.feature"
|
||||||
|
label="SCViewer Feature"
|
||||||
|
version="1.1.0.qualifier"
|
||||||
|
provider-name="MINRES Technologies GmbH">
|
||||||
|
|
||||||
|
<description url="http://www.example.com/description">
|
||||||
|
[Enter Feature Description here.]
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<copyright url="http://www.example.com/copyright">
|
||||||
|
[Enter Copyright Description here.]
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<license url="http://www.example.com/license">
|
||||||
|
[Enter License Description here.]
|
||||||
|
</license>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<update label="SC Viewer Updates" url="http://www.minres.com/scviewer/update"/>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<requires>
|
||||||
|
<import plugin="javax.inject" version="1.0.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.core.runtime" version="3.11.1" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.swt" version="3.104.1" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.e4.ui.model.workbench" version="1.1.100" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.jface" version="3.11.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.e4.ui.services" version="1.2.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.e4.ui.workbench" version="1.3.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.e4.core.di" version="1.5.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.e4.ui.di" version="1.1.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.e4.core.contexts" version="1.4.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.osgi.services" version="3.5.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.e4.core.services" version="2.0.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.core.jobs"/>
|
||||||
|
<import plugin="org.eclipse.osgi"/>
|
||||||
|
<import plugin="org.eclipse.equinox.preferences"/>
|
||||||
|
<import plugin="org.eclipse.core.expressions"/>
|
||||||
|
<import plugin="org.eclipse.e4.core.commands" version="0.11.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.e4.core.di.extensions"/>
|
||||||
|
<import plugin="org.eclipse.e4.ui.css.swt.theme" version="0.10.0" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.core.resources" version="3.13.0" match="greaterOrEqual"/>
|
||||||
|
<import feature="com.opcoach.e4.preferences.feature" version="1.3.0.202004072127"/>
|
||||||
|
<import feature="org.eclipse.equinox.executable" version="3.8.700.v20200207-2156"/>
|
||||||
|
<import feature="org.eclipse.rcptt.core" version="2.5.1.M3"/>
|
||||||
|
<import plugin="org.eclipse.core.commands"/>
|
||||||
|
<import feature="com.minres.scviewer.database.feature" version="3.0.0.qualifier"/>
|
||||||
|
<import feature="com.minres.scviewer.ui.feature" version="1.1.0.qualifier"/>
|
||||||
|
</requires>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="com.minres.scviewer.e4.application"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="com.opcoach.e4.preferences"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
</feature>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>com.minres.scviewer.e4.feature</artifactId>
|
||||||
|
<packaging>eclipse-feature</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.minres.scviewer</groupId>
|
||||||
|
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||||
|
<version>2.11.0</version>
|
||||||
|
<relativePath>../..</relativePath>
|
||||||
|
</parent>
|
||||||
|
<version>1.1.0-SNAPSHOT</version>
|
||||||
|
</project>
|
||||||
-1
@@ -1,2 +1 @@
|
|||||||
/bin/
|
|
||||||
/target/
|
/target/
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>com.minres.scviewer.e4.platform.feature</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.FeatureBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.pde.FeatureNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
bin.includes = feature.xml
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<feature
|
||||||
|
id="com.minres.scviewer.e4.platform.feature"
|
||||||
|
label="SCViewer Platform Feature"
|
||||||
|
version="1.0.0.qualifier"
|
||||||
|
provider-name="MINRES Technologies GmbH">
|
||||||
|
|
||||||
|
<description url="http://www.example.com/description">
|
||||||
|
[Enter Feature Description here.]
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<copyright url="http://www.example.com/copyright">
|
||||||
|
[Enter Copyright Description here.]
|
||||||
|
</copyright>
|
||||||
|
|
||||||
|
<license url="http://www.example.com/license">
|
||||||
|
[Enter License Description here.]
|
||||||
|
</license>
|
||||||
|
|
||||||
|
<includes
|
||||||
|
id="org.eclipse.e4.rcp"
|
||||||
|
version="0.0.0"/>
|
||||||
|
|
||||||
|
<includes
|
||||||
|
id="org.eclipse.emf.ecore"
|
||||||
|
version="0.0.0"/>
|
||||||
|
|
||||||
|
<includes
|
||||||
|
id="org.eclipse.emf.common"
|
||||||
|
version="0.0.0"/>
|
||||||
|
|
||||||
|
<requires>
|
||||||
|
<import plugin="org.eclipse.core.expressions" version="3.2.0" match="compatible"/>
|
||||||
|
<import plugin="org.eclipse.core.filesystem" version="1.3.0" match="compatible"/>
|
||||||
|
<import plugin="org.eclipse.core.runtime" version="3.12.0" match="compatible"/>
|
||||||
|
<import plugin="org.eclipse.equinox.common" version="3.2.0" match="compatible"/>
|
||||||
|
<import plugin="org.eclipse.equinox.registry" version="3.2.0" match="compatible"/>
|
||||||
|
<import plugin="org.eclipse.osgi" version="3.2.0" match="compatible"/>
|
||||||
|
</requires>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="org.eclipse.core.resources"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="org.eclipse.core.filesystem"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="org.eclipse.core.filesystem.linux.x86_64"
|
||||||
|
os="linux"
|
||||||
|
arch="x86_64"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
fragment="true"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="org.eclipse.core.filesystem.win32.x86_64"
|
||||||
|
os="win32"
|
||||||
|
arch="x86_64"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
fragment="true"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
</feature>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>com.minres.scviewer.e4.platform.feature</artifactId>
|
||||||
|
<packaging>eclipse-feature</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.minres.scviewer</groupId>
|
||||||
|
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||||
|
<version>2.11.0</version>
|
||||||
|
<relativePath>../..</relativePath>
|
||||||
|
</parent>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,4 @@
|
|||||||
|
bin.includes = feature.xml,\
|
||||||
|
feature.properties
|
||||||
|
src.includes = feature.properties,\
|
||||||
|
feature.xml
|
||||||
File renamed without changes.
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<feature
|
||||||
|
id="com.minres.scviewer.feature"
|
||||||
|
label="%featureName"
|
||||||
|
version="1.1.0.qualifier"
|
||||||
|
provider-name="%providerName">
|
||||||
|
|
||||||
|
<description>
|
||||||
|
A viewer for SystemC Verification Library transactions and VCD
|
||||||
|
signals. It supports a SQLite based recording as well as the
|
||||||
|
built-in text base recording.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
Copyright (c) 2015-2021 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>
|
||||||
|
<discovery label="MINRES Website" url="http://www.minres.com"/>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<requires>
|
||||||
|
<import plugin="org.hamcrest.core" version="1.3.0" match="greaterOrEqual"/>
|
||||||
|
<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.osgi"/>
|
||||||
|
<import plugin="org.eclipse.core.expressions" version="3.4.600" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.jface"/>
|
||||||
|
<import feature="com.minres.scviewer.database.feature" version="3.0.0.qualifier"/>
|
||||||
|
<import feature="com.minres.scviewer.ui.feature" version="1.1.0.qualifier"/>
|
||||||
|
</requires>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="org.junit"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"/>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="org.hamcrest.core"
|
||||||
|
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"/>
|
||||||
|
|
||||||
|
</feature>
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.minres.scviewer</groupId>
|
<groupId>com.minres.scviewer</groupId>
|
||||||
<artifactId>com.minres.scviewer.parent</artifactId>
|
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||||
<version>2.0.0-SNAPSHOT</version>
|
<version>2.11.0</version>
|
||||||
<relativePath>../com.minres.scviewer.parent</relativePath>
|
<relativePath>../..</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<version>1.0.0-SNAPSHOT</version>
|
<version>1.1.0-SNAPSHOT</version>
|
||||||
</project>
|
</project>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>com.minres.scviewer.ui.feature</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.FeatureBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.pde.FeatureNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
bin.includes = feature.xml,\
|
||||||
|
feature.properties
|
||||||
|
src.includes = feature.properties,\
|
||||||
|
feature.xml
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
featureName=SCViewer UI elements
|
||||||
|
providerName=MINRES Technologies GmbH
|
||||||
|
updateSiteName=SC Viewer UI Updates
|
||||||
|
description=A viewer for SystemC Verification Library transactions and VCD signals.
|
||||||
|
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
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<feature
|
||||||
|
id="com.minres.scviewer.ui.feature"
|
||||||
|
label="%featureName"
|
||||||
|
version="1.1.0.qualifier"
|
||||||
|
provider-name="%providerName">
|
||||||
|
|
||||||
|
<description>
|
||||||
|
The UI for the SCViewer databases
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<copyright>
|
||||||
|
Copyright (c) 2015-2021 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>
|
||||||
|
<discovery label="MINRES Website" url="http://www.minres.com"/>
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<requires>
|
||||||
|
<import plugin="org.eclipse.swt" version="3.103.1" match="greaterOrEqual"/>
|
||||||
|
<import plugin="org.eclipse.jface"/>
|
||||||
|
<import plugin="org.eclipse.equinox.registry"/>
|
||||||
|
<import plugin="org.eclipse.core.runtime"/>
|
||||||
|
<import plugin="org.eclipse.osgi"/>
|
||||||
|
<import feature="com.minres.scviewer.database.feature" version="3.0.0.qualifier"/>
|
||||||
|
</requires>
|
||||||
|
|
||||||
|
<plugin
|
||||||
|
id="com.minres.scviewer.database.ui.swt"
|
||||||
|
download-size="0"
|
||||||
|
install-size="0"
|
||||||
|
version="0.0.0"
|
||||||
|
unpack="false"/>
|
||||||
|
|
||||||
|
</feature>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>com.minres.scviewer.ui.feature</artifactId>
|
||||||
|
<packaging>eclipse-feature</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.minres.scviewer</groupId>
|
||||||
|
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||||
|
<version>2.11.0</version>
|
||||||
|
<relativePath>../..</relativePath>
|
||||||
|
</parent>
|
||||||
|
<version>1.1.0-SNAPSHOT</version>
|
||||||
|
</project>
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<site>
|
||||||
|
<feature id="com.minres.scviewer.feature" version="0.0.0">
|
||||||
|
<category name="ide_components"/>
|
||||||
|
</feature>
|
||||||
|
<feature id="com.minres.scviewer.feature.source" version="0.0.0">
|
||||||
|
<category name="ide_components"/>
|
||||||
|
</feature>
|
||||||
|
<feature id="com.minres.scviewer.ui.feature" version="0.0.0">
|
||||||
|
<category name="devel_components"/>
|
||||||
|
</feature>
|
||||||
|
<feature id="com.minres.scviewer.ui.feature.source" version="0.0.0">
|
||||||
|
<category name="devel_components.source"/>
|
||||||
|
</feature>
|
||||||
|
<feature id="com.minres.scviewer.database.feature" version="0.0.0">
|
||||||
|
<category name="devel_components"/>
|
||||||
|
</feature>
|
||||||
|
<feature id="com.minres.scviewer.database.feature.source" version="0.0.0">
|
||||||
|
<category name="devel_components.source"/>
|
||||||
|
</feature>
|
||||||
|
<category-def name="ide_components" label="SCViewer">
|
||||||
|
<description>
|
||||||
|
Viewer for transaction recording outputs of the SystemC Verification (SCV) library
|
||||||
|
</description>
|
||||||
|
</category-def>
|
||||||
|
<category-def name="devel_components" label="Developer Resources">
|
||||||
|
<description>
|
||||||
|
Components to deal with the transaction recording outputs of the SystemC Verification (SCV) library
|
||||||
|
</description>
|
||||||
|
</category-def>
|
||||||
|
<category-def name="devel_components.source" label="Developer Resources (Source)"/>
|
||||||
|
</site>
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>com.minres.scviewer.updateSite</artifactId>
|
||||||
|
<version>2.11.0-SNAPSHOT</version>
|
||||||
|
<packaging>eclipse-repository</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.minres.scviewer</groupId>
|
||||||
|
<artifactId>com.minres.scviewer.parent</artifactId>
|
||||||
|
<version>2.11.0</version>
|
||||||
|
<relativePath>../..</relativePath>
|
||||||
|
</parent>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<!-- make sure that zipped p2 repositories have the fully qualified version -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.eclipse.tycho</groupId>
|
||||||
|
<artifactId>tycho-p2-repository-plugin</artifactId>
|
||||||
|
<version>${tycho-version}</version>
|
||||||
|
<configuration>
|
||||||
|
<finalName>${project.artifactId}-${qualifiedVersion}</finalName>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>build-helper-maven-plugin</artifactId>
|
||||||
|
<version>3.2.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>parse-version</id>
|
||||||
|
<goals>
|
||||||
|
<goal>parse-version</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<!-- Activate this profile to perform the release to Bintray -->
|
||||||
|
<id>release-composite</id>
|
||||||
|
<activation>
|
||||||
|
<activeByDefault>false</activeByDefault>
|
||||||
|
</activation>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>com.carrotgarden.maven</groupId>
|
||||||
|
<artifactId>bintray-maven-plugin</artifactId>
|
||||||
|
<version>1.5.20191113165555</version>
|
||||||
|
<configuration>
|
||||||
|
<skip>false</skip>
|
||||||
|
<!-- Bintray organization name. -->
|
||||||
|
<subject>minres</subject>
|
||||||
|
<!-- Bintray target repository. -->
|
||||||
|
<repository>eclipse</repository>
|
||||||
|
<!-- Bintray package name. -->
|
||||||
|
<bintrayPackage>SCViewer</bintrayPackage>
|
||||||
|
<bintrayVersion>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</bintrayVersion>
|
||||||
|
<packageVcsUrl>https://git.minres.com/VP-Tools/SCViewer.git</packageVcsUrl>
|
||||||
|
<!-- Local folder content to sync to the remote repo. -->
|
||||||
|
<sourceFolder>${project.build.directory}/repository</sourceFolder>
|
||||||
|
<!-- Remote folder for local content upload, relative path. -->
|
||||||
|
<targetFolder>scviewer-${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</targetFolder>
|
||||||
|
|
||||||
|
<!-- Bintray credentials in settings.xml. -->
|
||||||
|
<serverId>bintray-minres-deploy</serverId>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<!-- Activate "bintray:upload" during "package" -->
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>upload</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
|
||||||
|
</project>
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>com.itjw.txviewer.updateSite</title>
|
<title>SCViewer Update site</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<style>@import url("web/site.css");</style>
|
<style>@import url("web/site.css");</style>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 495 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user