Compare commits
	
		
			143 Commits
		
	
	
		
			2.5
			...
			tx_end_tim
		
	
	| 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 | |||
| 150c404cdb | |||
| 5fe8b261ec | |||
| f8a177c9e0 | |||
| 077a6f8011 | |||
| 8b84f1341b | |||
| 20824e75c1 | |||
| fb283ab668 | |||
| dc3df60716 | 
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -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
 | 
				
			||||||
							
								
								
									
										17
									
								
								.launch/Build SCViewer.launch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.launch/Build SCViewer.launch
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										18
									
								
								.launch/Build and deploy SCViewer.launch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.launch/Build and deploy SCViewer.launch
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										20
									
								
								.launch/Set SCViewer version.launch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.launch/Set SCViewer version.launch
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
@@ -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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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,46 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					 | 
				
			||||||
<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
 | 
					 | 
				
			||||||
<booleanAttribute key="append.args" value="true"/>
 | 
					 | 
				
			||||||
<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="askclear" value="false"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="automaticAdd" value="true"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="automaticValidate" value="false"/>
 | 
					 | 
				
			||||||
<stringAttribute key="bootstrap" value=""/>
 | 
					 | 
				
			||||||
<stringAttribute key="checked" value="[NONE]"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="clearConfig" value="true"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="clearws" value="true"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="clearwslog" value="false"/>
 | 
					 | 
				
			||||||
<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="default" value="true"/>
 | 
					 | 
				
			||||||
<stringAttribute key="deselected_workspace_plugins" value="com.minres.scviewer.e4.application,com.minres.scviewer.ui"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="includeOptional" value="true"/>
 | 
					 | 
				
			||||||
<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
 | 
					 | 
				
			||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
 | 
					 | 
				
			||||||
<listEntry value="/com.minres.scviewer.database.test"/>
 | 
					 | 
				
			||||||
</listAttribute>
 | 
					 | 
				
			||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 | 
					 | 
				
			||||||
<listEntry value="4"/>
 | 
					 | 
				
			||||||
</listAttribute>
 | 
					 | 
				
			||||||
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=com.minres.scviewer.database.test"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
 | 
					 | 
				
			||||||
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
 | 
					 | 
				
			||||||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
 | 
					 | 
				
			||||||
<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.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 | 
					 | 
				
			||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
 | 
					 | 
				
			||||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
 | 
					 | 
				
			||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.minres.scviewer.database.test"/>
 | 
					 | 
				
			||||||
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
 | 
					 | 
				
			||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m"/>
 | 
					 | 
				
			||||||
<stringAttribute key="pde.version" value="3.3"/>
 | 
					 | 
				
			||||||
<stringAttribute key="product" value="com.minres.scviewer.e4.product"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="run_in_ui_thread" value="true"/>
 | 
					 | 
				
			||||||
<stringAttribute key="selected_target_plugins" value="com.google.guava@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,org.apache.ant@default:default,org.apache.commons.jxpath@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.codehaus.groovy@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem.macosx@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jface@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt.cocoa.macosx.x86_64@default:false,org.eclipse.swt@default:default,org.hamcrest.core@default:default,org.junit@default:default"/>
 | 
					 | 
				
			||||||
<stringAttribute key="selected_workspace_plugins" value="com.minres.scviewer.database.sqlite@default:true,com.minres.scviewer.database.test@default:default,com.minres.scviewer.database.text@default:true,com.minres.scviewer.database.ui.swt@default:default,com.minres.scviewer.database.ui@default:default,com.minres.scviewer.database.vcd@default:default,com.minres.scviewer.database@default:true,com.opcoach.e4.preferences@default:default"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="show_selected_only" value="false"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="tracing" value="false"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="useCustomFeatures" value="false"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="useDefaultConfig" value="true"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="useDefaultConfigArea" value="false"/>
 | 
					 | 
				
			||||||
<booleanAttribute key="useProduct" value="false"/>
 | 
					 | 
				
			||||||
</launchConfiguration>
 | 
					 | 
				
			||||||
@@ -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.
										
									
								
							@@ -1,261 +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 List<IWaveform> getAllWaves() {
 | 
					 | 
				
			||||||
		return new LinkedList<IWaveform>(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))
 | 
					 | 
				
			||||||
				calculateConcurrencyIndicees()
 | 
					 | 
				
			||||||
				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 "fs"
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	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":
 | 
					 | 
				
			||||||
				case "scv_tr_generator":
 | 
					 | 
				
			||||||
				case "begin_attribute":
 | 
					 | 
				
			||||||
				case "end_attribute":
 | 
					 | 
				
			||||||
					if ((matcher = line =~ /^scv_tr_stream\s+\(ID (\d+),\s+name\s+"([^"]+)",\s+kind\s+"([^"]+)"\)$/)) {
 | 
					 | 
				
			||||||
						def id = Integer.parseInt(matcher[0][1])
 | 
					 | 
				
			||||||
						def stream = new TxStream(this, id, matcher[0][2], matcher[0][3])
 | 
					 | 
				
			||||||
						streams<<stream
 | 
					 | 
				
			||||||
						streamsById[id]=stream
 | 
					 | 
				
			||||||
					} else if ((matcher = line =~ /^scv_tr_generator\s+\(ID\s+(\d+),\s+name\s+"([^"]+)",\s+scv_tr_stream\s+(\d+),$/)) {
 | 
					 | 
				
			||||||
						def id = Integer.parseInt(matcher[0][1])
 | 
					 | 
				
			||||||
						ITxStream stream=streamsById[Integer.parseInt(matcher[0][3])]
 | 
					 | 
				
			||||||
						generator=new TxGenerator(id, stream, matcher[0][2])
 | 
					 | 
				
			||||||
						stream.generators<<generator
 | 
					 | 
				
			||||||
						generatorsById[id]=generator
 | 
					 | 
				
			||||||
					} else if ((matcher = line =~ /^begin_attribute \(ID (\d+), name "([^"]+)", type "([^"]+)"\)$/)) {
 | 
					 | 
				
			||||||
						generator.begin_attrs << TxAttributeType.getAttrType(matcher[0][2], DataType.valueOf(matcher[0][3]), AssociationType.BEGIN)
 | 
					 | 
				
			||||||
					} else 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++
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	private def toDataType(String str){
 | 
					 | 
				
			||||||
		switch (str)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			case "BOOLEAN": return DataType.                       BOOLEAN                      
 | 
					 | 
				
			||||||
			case "ENUMERATION": return DataType.                   ENUMERATION                  
 | 
					 | 
				
			||||||
			case "INTEGER": return DataType.                       INTEGER                      
 | 
					 | 
				
			||||||
			case "UNSIGNED": return DataType.                      UNSIGNED                     
 | 
					 | 
				
			||||||
			case "FLOATING_POINT_NUMBER": return DataType.         FLOATING_POINT_NUMBER        
 | 
					 | 
				
			||||||
			case "BIT_VECTOR": return DataType.                    BIT_VECTOR                   
 | 
					 | 
				
			||||||
			case "LOGIC_VECTOR": return DataType.                  LOGIC_VECTOR                 
 | 
					 | 
				
			||||||
			case "FIXED_POINT_INTEGER": return DataType.           FIXED_POINT_INTEGER          
 | 
					 | 
				
			||||||
			case "UNSIGNED_FIXED_POINT_INTEGER": return DataType.  UNSIGNED_FIXED_POINT_INTEGER 
 | 
					 | 
				
			||||||
			case "RECORD": return DataType.                        RECORD                       
 | 
					 | 
				
			||||||
			case "POINTER": return DataType.                       POINTER                      
 | 
					 | 
				
			||||||
			case "ARRAY": return DataType.                         ARRAY                        
 | 
					 | 
				
			||||||
			case "STRING": return DataType.                        STRING
 | 
					 | 
				
			||||||
			default: return DataType.INTEGER
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	private def calculateConcurrencyIndicees(){
 | 
					 | 
				
			||||||
		streams.each{ TxStream  stream -> stream.getMaxConcurrency() }
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	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]";
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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};
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
										
											
												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,11 +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
 | 
					 | 
				
			||||||
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,151 +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 colors to standard values
 | 
					 | 
				
			||||||
		if (streamValue.contains("read")){
 | 
					 | 
				
			||||||
			result[0] = new Color(86,174,53);
 | 
					 | 
				
			||||||
			result[1] = new Color (86,194,53);
 | 
					 | 
				
			||||||
		}else if (streamValue.contains("rdata")){
 | 
					 | 
				
			||||||
			result[0] = new Color(138,151,71);
 | 
					 | 
				
			||||||
			result[1] = new Color (138,171,71);
 | 
					 | 
				
			||||||
		}else if (streamValue.contains("addr")){
 | 
					 | 
				
			||||||
			result[0] = new Color(233,187,68);
 | 
					 | 
				
			||||||
			result[1] = new Color (233,207,68);
 | 
					 | 
				
			||||||
		}else if (streamValue.contains("write")){
 | 
					 | 
				
			||||||
			result[0] = new Color(1,128,191);
 | 
					 | 
				
			||||||
			result[1] = new Color (1,128,211);
 | 
					 | 
				
			||||||
		}else if (streamValue.contains("wdata")){
 | 
					 | 
				
			||||||
			result[0] = new Color(2,181,160);
 | 
					 | 
				
			||||||
			result[1] = new Color (2,201,160);
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
		}else {
 | 
					 | 
				
			||||||
			// assign "random" color here, one name always results in the same color!
 | 
					 | 
				
			||||||
			if( 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,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.io.File;
 | 
					 | 
				
			||||||
import java.util.Collection;
 | 
					 | 
				
			||||||
import java.util.List;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public interface IWaveformDbLoader {
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public boolean load(IWaveformDb db, File inp) throws Exception;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public Long getMaxTime();
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public List<IWaveform> getAllWaves() ;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	public Collection<RelationType> getAllRelationTypes() ;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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.5.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>
 | 
					 | 
				
			||||||
@@ -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;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -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");
 | 
					 | 
				
			||||||
    	}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -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() {
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,701 +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.ArrayList;
 | 
					 | 
				
			||||||
import java.util.Vector;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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){
 | 
					 | 
				
			||||||
				return (((ITxAttribute) element).getName().toLowerCase().matches(searchString.toLowerCase())); 
 | 
					 | 
				
			||||||
			} 
 | 
					 | 
				
			||||||
			if(element instanceof Object[]) {
 | 
					 | 
				
			||||||
				return (((Object[])element)[0]).toString().toLowerCase().matches(searchString.toLowerCase());	
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			return false;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * The Enum Type.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	enum Type {/** The props. */
 | 
					 | 
				
			||||||
		PROPS, /** The attrs. */
 | 
					 | 
				
			||||||
		ATTRS, /** The in rel. */
 | 
					 | 
				
			||||||
		IN_REL, /** The out rel. */
 | 
					 | 
				
			||||||
		OUT_REL}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * The Class TreeNode.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	class TreeNode{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/** The type. */
 | 
					 | 
				
			||||||
		public Type type;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/** The element. */
 | 
					 | 
				
			||||||
		public ITx element;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/**
 | 
					 | 
				
			||||||
		 * 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;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		/* (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;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			return ""; //$NON-NLS-1$
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * 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)
 | 
					 | 
				
			||||||
					return propertyHolder.element.getAttributes().toArray();
 | 
					 | 
				
			||||||
				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;
 | 
					 | 
				
			||||||
					return new StyledString(attribute.getName());
 | 
					 | 
				
			||||||
				}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$
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -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,125 +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.equinox.util" version="1.0.500" match="greaterOrEqual"/>
 | 
					 | 
				
			||||||
      <import plugin="org.eclipse.osgi.services" version="3.4.0" match="greaterOrEqual"/>
 | 
					 | 
				
			||||||
      <import plugin="com.minres.scviewer.database" version="1.0.0" match="greaterOrEqual"/>
 | 
					 | 
				
			||||||
      <import plugin="org.codehaus.groovy" version="1.8.6" match="greaterOrEqual"/>
 | 
					 | 
				
			||||||
      <import plugin="org.eclipse.osgi"/>
 | 
					 | 
				
			||||||
      <import plugin="org.eclipse.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.apache.ant"/>
 | 
					 | 
				
			||||||
      <import plugin="com.google.guava" version="15.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.expressions" version="3.4.600" match="greaterOrEqual"/>
 | 
					 | 
				
			||||||
      <import plugin="org.eclipse.jface"/>
 | 
					 | 
				
			||||||
      <import plugin="org.junit"/>
 | 
					 | 
				
			||||||
      <import plugin="org.eclipse.swt" version="3.103.1" match="greaterOrEqual"/>
 | 
					 | 
				
			||||||
      <import plugin="org.eclipse.equinox.registry"/>
 | 
					 | 
				
			||||||
   </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
									
								
								com.minres.scviewer.parent/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								com.minres.scviewer.parent/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
				
			|||||||
/workspace/
 | 
					 | 
				
			||||||
@@ -2,32 +2,43 @@
 | 
				
			|||||||
<?pde version="3.8"?>
 | 
					<?pde version="3.8"?>
 | 
				
			||||||
<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">
 | 
					 | 
				
			||||||
<unit id="org.eclipse.equinox.executable.feature.group" 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.rcp.sdk.id" version="0.0.0"/>
 | 
					 | 
				
			||||||
<unit id="org.eclipse.rcptt.core.feature.group" version="0.0.0"/>
 | 
					 | 
				
			||||||
<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 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="http://dist.springsource.org/snapshot/GRECLIPSE/e4.8/"/>
 | 
					 | 
				
			||||||
	<unit id="org.codehaus.groovy25.feature.feature.group" version="3.5.1.v201909291550-e48"/>
 | 
					 | 
				
			||||||
</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://download.eclipse.org/releases/2020-03/"/>
 | 
				
			||||||
		<unit id="com.opcoach.e4.preferences.feature.feature.group" version="1.3.0.201903181741"/>
 | 
							<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.sdk.feature.group" version="0.0.0"/> <!-- org.eclipse.equinox.p2.iu -->
 | 
				
			||||||
 | 
							<unit id="org.eclipse.rcptt.core.feature.group" version="0.0.0"/><!-- com.google.guave-->
 | 
				
			||||||
 | 
							<unit id="org.eclipse.pde.feature.group" version="0.0.0"/>	<!-- org.junit for testing -->
 | 
				
			||||||
 | 
						</location>
 | 
				
			||||||
 | 
						<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
 | 
				
			||||||
 | 
							<repository location="https://www.opcoach.com/repository/2020-03/"/>
 | 
				
			||||||
 | 
							<unit id="com.opcoach.e4.preferences.feature.feature.group" version="0.0.0"/>
 | 
				
			||||||
 | 
						</location>
 | 
				
			||||||
 | 
						<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
 | 
				
			||||||
 | 
							<repository location="http://dist.springsource.org/snapshot/GRECLIPSE/e4.15/"/>
 | 
				
			||||||
 | 
							<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>
 | 
					 | 
				
			||||||
@@ -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);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										23
									
								
								features/com.minres.scviewer.database.feature/.project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								features/com.minres.scviewer.database.feature/.project
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
@@ -1,2 +1,4 @@
 | 
				
			|||||||
bin.includes = feature.xml,\
 | 
					bin.includes = feature.xml,\
 | 
				
			||||||
               feature.properties
 | 
					               feature.properties
 | 
				
			||||||
 | 
					src.includes = feature.properties,\
 | 
				
			||||||
 | 
					               feature.xml
 | 
				
			||||||
							
								
								
									
										102
									
								
								features/com.minres.scviewer.database.feature/feature.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								features/com.minres.scviewer.database.feature/feature.properties
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
							
								
								
									
										73
									
								
								features/com.minres.scviewer.database.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								features/com.minres.scviewer.database.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										12
									
								
								features/com.minres.scviewer.database.feature/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								features/com.minres.scviewer.database.feature/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										17
									
								
								features/com.minres.scviewer.e4.feature/.project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								features/com.minres.scviewer.e4.feature/.project
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										1
									
								
								features/com.minres.scviewer.e4.feature/build.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								features/com.minres.scviewer.e4.feature/build.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					bin.includes = feature.xml
 | 
				
			||||||
							
								
								
									
										67
									
								
								features/com.minres.scviewer.e4.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								features/com.minres.scviewer.e4.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										12
									
								
								features/com.minres.scviewer.e4.feature/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								features/com.minres.scviewer.e4.feature/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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,2 +1 @@
 | 
				
			|||||||
/bin/
 | 
					 | 
				
			||||||
/target/
 | 
					/target/
 | 
				
			||||||
							
								
								
									
										17
									
								
								features/com.minres.scviewer.e4.platform.feature/.project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								features/com.minres.scviewer.e4.platform.feature/.project
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
							
								
								
									
										75
									
								
								features/com.minres.scviewer.e4.platform.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								features/com.minres.scviewer.e4.platform.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										12
									
								
								features/com.minres.scviewer.e4.platform.feature/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								features/com.minres.scviewer.e4.platform.feature/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										1
									
								
								features/com.minres.scviewer.feature/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								features/com.minres.scviewer.feature/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/target/
 | 
				
			||||||
							
								
								
									
										4
									
								
								features/com.minres.scviewer.feature/build.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								features/com.minres.scviewer.feature/build.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					bin.includes = feature.xml,\
 | 
				
			||||||
 | 
					               feature.properties
 | 
				
			||||||
 | 
					src.includes = feature.properties,\
 | 
				
			||||||
 | 
					               feature.xml
 | 
				
			||||||
							
								
								
									
										67
									
								
								features/com.minres.scviewer.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								features/com.minres.scviewer.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										1
									
								
								features/com.minres.scviewer.ui.feature/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								features/com.minres.scviewer.ui.feature/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/target/
 | 
				
			||||||
							
								
								
									
										17
									
								
								features/com.minres.scviewer.ui.feature/.project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								features/com.minres.scviewer.ui.feature/.project
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										4
									
								
								features/com.minres.scviewer.ui.feature/build.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								features/com.minres.scviewer.ui.feature/build.properties
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					bin.includes = feature.xml,\
 | 
				
			||||||
 | 
					               feature.properties
 | 
				
			||||||
 | 
					src.includes = feature.properties,\
 | 
				
			||||||
 | 
					               feature.xml
 | 
				
			||||||
							
								
								
									
										102
									
								
								features/com.minres.scviewer.ui.feature/feature.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								features/com.minres.scviewer.ui.feature/feature.properties
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
				
			||||||
							
								
								
									
										44
									
								
								features/com.minres.scviewer.ui.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								features/com.minres.scviewer.ui.feature/feature.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										12
									
								
								features/com.minres.scviewer.ui.feature/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								features/com.minres.scviewer.ui.feature/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										32
									
								
								p2repositories/com.minres.scviewer.updateSite/category.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								p2repositories/com.minres.scviewer.updateSite/category.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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>
 | 
				
			||||||
							
								
								
									
										86
									
								
								p2repositories/com.minres.scviewer.updateSite/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								p2repositories/com.minres.scviewer.updateSite/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -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,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">
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user