diff --git a/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF b/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF
index 7a73230..b801309 100644
--- a/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF
+++ b/com.minres.scviewer.database.sqlite/META-INF/MANIFEST.MF
@@ -5,10 +5,7 @@ Bundle-SymbolicName: com.minres.scviewer.database.sqlite
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: MINRES Technologies GmbH
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0",
- org.eclipse.equinox.util;bundle-version="1.0.500",
- org.eclipse.equinox.ds;bundle-version="1.4.200",
- org.eclipse.osgi.services;bundle-version="3.4.0"
+Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0"
Bundle-ClassPath: .,sqlite-jdbc-3.8.7.jar
Service-Component: OSGI-INF/component.xml
Bundle-ActivationPolicy: lazy
diff --git a/com.minres.scviewer.database.test/pom.xml b/com.minres.scviewer.database.test/pom.xml
index 789f91b..68f458a 100644
--- a/com.minres.scviewer.database.test/pom.xml
+++ b/com.minres.scviewer.database.test/pom.xml
@@ -14,7 +14,7 @@
org.eclipse.tycho
tycho-surefire-plugin
- 0.23.1
+ ${tycho-version}
diff --git a/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.groovy.core.prefs b/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.groovy.core.prefs
index 021403d..74af1ba 100644
--- a/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.groovy.core.prefs
+++ b/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.groovy.core.prefs
@@ -1,2 +1,2 @@
eclipse.preferences.version=1
-groovy.compiler.level=26
+groovy.compiler.level=25
diff --git a/com.minres.scviewer.database.text/META-INF/MANIFEST.MF b/com.minres.scviewer.database.text/META-INF/MANIFEST.MF
index 61b0865..b98eea8 100644
--- a/com.minres.scviewer.database.text/META-INF/MANIFEST.MF
+++ b/com.minres.scviewer.database.text/META-INF/MANIFEST.MF
@@ -2,12 +2,12 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Textual transaction database
Bundle-SymbolicName: com.minres.scviewer.database.text
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.1.qualifier
Bundle-Vendor: MINRES Technologies GmbH
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: org.osgi.framework;version="1.3.0"
-Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0",
- org.codehaus.groovy;bundle-version="1.8.6",
+Require-Bundle: com.minres.scviewer.database,
+ org.codehaus.groovy;bundle-version="2.5.8",
org.eclipse.equinox.util;bundle-version="1.0.500",
org.eclipse.equinox.ds;bundle-version="1.4.200",
org.eclipse.osgi.services;bundle-version="3.4.0",
diff --git a/com.minres.scviewer.database.text/pom.xml b/com.minres.scviewer.database.text/pom.xml
index aa0c0d0..759ac27 100644
--- a/com.minres.scviewer.database.text/pom.xml
+++ b/com.minres.scviewer.database.text/pom.xml
@@ -2,7 +2,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.minres.scviewer.database.text
- 2.0.0-SNAPSHOT
+ 2.0.1-SNAPSHOT
com.minres.scviewer
com.minres.scviewer.parent
@@ -15,10 +15,13 @@
org.eclipse.tycho
- tycho-compiler-plugin
- 0.23.1
+ maven-compiler-plugin
+ 3.8.0
groovy-eclipse-compiler
+
+
+
@@ -34,8 +37,6 @@
org.codehaus.groovy
groovy-eclipse-batch
${groovy-eclipse-batch-version}
-
-
diff --git a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy
index c915e0e..8fa5b9b 100644
--- a/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy
+++ b/com.minres.scviewer.database.text/src/com/minres/scviewer/database/text/TextDbLoader.groovy
@@ -28,6 +28,7 @@ import com.minres.scviewer.database.IWaveform
import com.minres.scviewer.database.IWaveformDb
import com.minres.scviewer.database.IWaveformDbLoader
import com.minres.scviewer.database.RelationType
+import com.minres.scviewer.database.DataType
public class TextDbLoader implements IWaveformDbLoader{
@@ -80,6 +81,7 @@ public class TextDbLoader implements IWaveformDbLoader{
.allocateStartSize(64*1024*1024)
.allocateIncrement(64*1024*1024)
.make()
+ // NPE here --->
parseInput(gzipped?new GZIPInputStream(new FileInputStream(file)):new FileInputStream(file))
calculateConcurrencyIndicees()
return true
@@ -87,6 +89,7 @@ public class TextDbLoader implements IWaveformDbLoader{
} catch(EOFException e) {
return true;
} catch(Exception e) {
+ System.out.println("---->>> Exception caught while loading database. StackTrace following... ");
e.printStackTrace()
}
return false;
@@ -113,7 +116,7 @@ public class TextDbLoader implements IWaveformDbLoader{
} catch (IOException e) {
return false;
} finally {
- is.close()
+ if(is!=null) is.close()
}
}
@@ -138,7 +141,7 @@ public class TextDbLoader implements IWaveformDbLoader{
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
long lineCnt=0;
reader.eachLine { line ->
- def tokens = line.split(/\s+/)
+ def tokens = line.split(/\s+/) as ArrayList
switch(tokens[0]){
case "scv_tr_stream":
case "scv_tr_generator":
@@ -185,7 +188,10 @@ public class TextDbLoader implements IWaveformDbLoader{
break
case "tx_record_attribute"://matcher = line =~ /^tx_record_attribute\s+(\d+)\s+"([^"]+)"\s+(\S+)\s*=\s*(.+)$/
def id = Integer.parseInt(tokens[1])
- transactionsById[id].attributes<5?tokens[5..-1].join(' '):""
+ transactionsById[id].attributes< stream.getMaxConcurrency() }
}
diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java
index 04d9232..ca5a566 100644
--- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java
+++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java
@@ -46,6 +46,7 @@ import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
@@ -157,6 +158,7 @@ public class WaveformViewer implements IWaveformViewer {
@Override
public void mouseUp(MouseEvent e) {
+ if(start==null) return;
if((e.stateMask&SWT.MODIFIER_MASK&~SWT.SHIFT)!=0) return; //don't react on modifier
if (e.button == 1 && ((e.stateMask&SWT.SHIFT)==0)) {
if(Math.abs(e.x-start.x)<3 && Math.abs(e.y-start.y)<3){
@@ -1249,4 +1251,9 @@ public class WaveformViewer implements IWaveformViewer {
}
});
}
+
+ /// probably not the way it should be done
+ public void addDisposeListener( DisposeListener listener ) {
+ waveformCanvas.addDisposeListener(listener);
+ }
}
diff --git a/com.minres.scviewer.database.ui/src/com/minres/scviewer/database/ui/IWaveformViewer.java b/com.minres.scviewer.database.ui/src/com/minres/scviewer/database/ui/IWaveformViewer.java
index 4ca4877..6575cfc 100644
--- a/com.minres.scviewer.database.ui/src/com/minres/scviewer/database/ui/IWaveformViewer.java
+++ b/com.minres.scviewer.database.ui/src/com/minres/scviewer/database/ui/IWaveformViewer.java
@@ -17,6 +17,7 @@ import java.util.List;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Control;
@@ -104,4 +105,6 @@ public interface IWaveformViewer extends PropertyChangeListener, ISelectionProvi
public void setBaselineTime(Long scale);
public void scrollHorizontal(int percent);
+
+ public void addDisposeListener( DisposeListener listener );
}
\ No newline at end of file
diff --git a/com.minres.scviewer.database/META-INF/MANIFEST.MF b/com.minres.scviewer.database/META-INF/MANIFEST.MF
index c1ec1ec..9550f8c 100644
--- a/com.minres.scviewer.database/META-INF/MANIFEST.MF
+++ b/com.minres.scviewer.database/META-INF/MANIFEST.MF
@@ -8,7 +8,4 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: com.minres.scviewer.database
Bundle-ActivationPolicy: lazy
Service-Component: OSGI-INF/component.xml,OSGI-INF/component2.xml
-Require-Bundle: org.eclipse.equinox.ds;bundle-version="1.4.200",
- org.eclipse.equinox.util;bundle-version="1.0.500",
- org.eclipse.osgi.services;bundle-version="3.4.0"
Automatic-Module-Name: com.minres.scviewer.database
diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
index 7f14b8c..f2444fa 100644
--- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
+++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/DesignBrowser.java
@@ -49,6 +49,8 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.PaintEvent;
@@ -58,6 +60,7 @@ import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
@@ -344,6 +347,16 @@ public class DesignBrowser {
thisSelectionCount=selection.toList().size();
updateButtons();
}
+
+ /**
+ * reset tree viewer and tableviewer after every closed tab
+ */
+ protected void resetTreeViewer() {
+ //reset tree- and tableviewer
+ treeViewer.setInput(null);
+ txTableViewer.setInput(null);
+ txTableViewer.setSelection(null);
+ }
/**
* Gets the status event.
@@ -354,21 +367,35 @@ public class DesignBrowser {
@SuppressWarnings("unchecked")
@Inject @Optional
public void getActiveWaveformViewerEvent(@UIEventTopic(WaveformViewer.ACTIVE_WAVEFORMVIEW) WaveformViewer waveformViewerPart) {
- if(this.waveformViewerPart!=null)
+ if(this.waveformViewerPart!=null) {
this.waveformViewerPart.storeDesignBrowerState(new DBState());
+ }
+ if( this.waveformViewerPart == null || this.waveformViewerPart != waveformViewerPart ) {
+ waveformViewerPart.addDisposeListener( new DisposeListener() {
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ Control control = treeViewer.getControl();
+ // check if widget is already disposed (f.ex. because of workbench closing)
+ if (control == null || control.isDisposed()) { //if so: do nothing
+ }else { //reset tree- and tableviewer
+ resetTreeViewer();
+ }
+ }
+ } );
+ }
this.waveformViewerPart=waveformViewerPart;
IWaveformDb database = waveformViewerPart.getDatabase();
Object input = treeViewer.getInput();
if(input!=null && input instanceof List>){
IWaveformDb db = ((List)input).get(0);
- if(db==database) return; // do nothing if old and new daabase is the same
+ if(db==database) return; // do nothing if old and new database is the same
((List)input).get(0).removePropertyChangeListener(treeViewerPCL);
}
treeViewer.setInput(Arrays.asList(database.isLoaded()?new IWaveformDb[]{database}:new IWaveformDb[]{new LoadingWaveformDb()}));
Object state=this.waveformViewerPart.retrieveDesignBrowerState();
if(state!=null && state instanceof DBState)
((DBState)state).apply();
- else
+ else
txTableViewer.setInput(null);
// Set up the tree viewer
database.addPropertyChangeListener(treeViewerPCL);
diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
index 251a9d8..26d42c6 100644
--- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
+++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
@@ -63,6 +63,8 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.events.MouseWheelListener;
@@ -72,6 +74,7 @@ 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.MessageBox;
import com.minres.scviewer.database.ITx;
import com.minres.scviewer.database.ITxEvent;
@@ -101,7 +104,7 @@ import com.minres.scviewer.e4.application.preferences.PreferenceConstants;
* The Class WaveformViewerPart.
*/
@SuppressWarnings("restriction")
-public class WaveformViewer implements IFileChangeListener, IPreferenceChangeListener {
+public class WaveformViewer implements IFileChangeListener, IPreferenceChangeListener, DisposeListener {
/** The Constant ACTIVE_WAVEFORMVIEW. */
public static final String ACTIVE_WAVEFORMVIEW = "Active_Waveform_View"; //$NON-NLS-1$
@@ -149,6 +152,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
/** The Constant WAVE_ACTION_ID. */
public static final String WAVE_ACTION_ID = "com.minres.scviewer.ui.action.AddToWave"; //$NON-NLS-1$
+ /** The number of active DisposeListeners */
+ private static int disposeListenerNumber = 0;
+
/** The factory. */
WaveformViewerFactory factory = new WaveformViewerFactory();
@@ -178,6 +184,8 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
@Inject
@Preference(nodePath = PreferenceConstants.PREFERENCES_SCOPE)
IEclipsePreferences prefs;
+
+ @Inject @Optional DesignBrowser designBrowser;
/** The database. */
private IWaveformDb database;
@@ -221,6 +229,8 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
*/
@PostConstruct
public void createComposite(MPart part, Composite parent, IWaveformDbFactory dbFactory) {
+ disposeListenerNumber += 1;
+
myPart = part;
myParent = parent;
database = dbFactory.getDatabase();
@@ -393,6 +403,8 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
}
});
prefs.addPreferenceChangeListener(this);
+
+ waveformPane.addDisposeListener(this);
}
/* (non-Javadoc)
@@ -478,7 +490,17 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
- if (event.getResult().getCode() != Status.OK_STATUS.getCode()) return;
+ IStatus result = event.getResult();
+ if( (!result.isMultiStatus() && result.getCode() != Status.OK_STATUS.getCode() ) ||
+ (result.isMultiStatus() && result.getChildren().length > 0 && result.getChildren()[0].getCode() != Status.OK_STATUS.getCode() ) ){
+ // kill editor and pop up warning for user
+ sync.asyncExec(() -> {
+ final Display display = myParent.getDisplay();
+ MessageDialog.openWarning(display.getActiveShell(), "Error loading database", "Database cannot be loaded. Aborting...");
+ ePartService.hidePart(myPart, true);
+ });
+ return;
+ }
sync.asyncExec(()->{
waveformPane.setMaxTime(database.getMaxTime());
if (state != null)
@@ -1185,4 +1207,28 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
waveformPane.update();
}
+ /**
+ * add dispose listener
+ *
+ * @param listener
+ */
+ public void addDisposeListener (DisposeListener listener) {
+ waveformPane.getControl().addDisposeListener(listener);
+ }
+
+ /**
+ * triggers included actions if widget is disposed
+ *
+ * @param e
+ */
+ public void widgetDisposed(DisposeEvent e) {
+ disposeListenerNumber -= 1;
+ if( disposeListenerNumber == 0) { //if the last tab is closed, reset statusbar
+ eventBroker.post(WaveStatusBarControl.ZOOM_LEVEL, null);
+ eventBroker.post(WaveStatusBarControl.CURSOR_TIME, null);
+ eventBroker.post(WaveStatusBarControl.MARKER_TIME, null);
+ eventBroker.post(WaveStatusBarControl.MARKER_DIFF, null);
+ }
+ }
+
}
\ No newline at end of file
diff --git a/com.minres.scviewer.parent/pom.xml b/com.minres.scviewer.parent/pom.xml
index 13bb8f3..f7296c1 100644
--- a/com.minres.scviewer.parent/pom.xml
+++ b/com.minres.scviewer.parent/pom.xml
@@ -1,4 +1,5 @@
-
4.0.0
com.minres.scviewer
@@ -24,25 +25,10 @@
- 0.23.1
- ${tycho-version}
- 2.8.0-01
-
- 2.1.8-01
-
+ 1.5.0
+ 3.5.0
+ 2.5.8-03
-
-
- mars
- p2
- http://download.eclipse.org/releases/photon
-
-
- GRECLIPSE
- p2
- http://dist.springsource.org/snapshot/GRECLIPSE/e4.8
-
-
@@ -53,11 +39,54 @@
true
+
+ org.eclipse.tycho
+ tycho-source-plugin
+ ${tycho-version}
+
+
+
+ plugin-source
+
+ plugin-source
+
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-p2-plugin
+ ${tycho-version}
+
+
+ attach-p2-metadata
+ package
+
+ p2-metadata
+
+
+
+
+
+
+ org.eclipse.tycho
+ tycho-versions-plugin
+ ${tycho-version}
+
+
org.eclipse.tycho
target-platform-configuration
${tycho-version}
+
+
+ com.minres.scviewer
+ com.minres.scviewer.target
+ 2.0.0-SNAPSHOT
+
+
linux
@@ -91,7 +120,7 @@
org.eclipse.tycho.extras
tycho-source-feature-plugin
- ${tycho-extras-version}
+ ${tycho-version}
@@ -111,41 +140,6 @@
-
- org.eclipse.tycho
- tycho-source-plugin
- ${tycho-version}
-
-
-
- plugin-source
-
- plugin-source
-
-
-
-
-
-
- org.eclipse.tycho
- tycho-p2-plugin
- ${tycho-version}
-
-
- attached-p2-metadata
- package
-
- p2-metadata
-
-
-
-
-
-
- org.eclipse.tycho
- tycho-versions-plugin
- ${tycho-version}
-
\ No newline at end of file
diff --git a/com.minres.scviewer.target/photon.target b/com.minres.scviewer.target/com.minres.scviewer.target.target
similarity index 83%
rename from com.minres.scviewer.target/photon.target
rename to com.minres.scviewer.target/com.minres.scviewer.target.target
index 5d6c71b..35d5d82 100644
--- a/com.minres.scviewer.target/photon.target
+++ b/com.minres.scviewer.target/com.minres.scviewer.target.target
@@ -1,4 +1,6 @@
-
+
+
+
@@ -11,8 +13,9 @@
-
+
+
diff --git a/com.minres.scviewer.target/neon.target b/com.minres.scviewer.target/neon.target
deleted file mode 100644
index d84fbf9..0000000
--- a/com.minres.scviewer.target/neon.target
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-x86_64
-de_DE
-
-
--Dosgi.requiredJavaVersion=1.7 -XX:MaxPermSize=256 -Xms40m -Xmx2G
-
-
\ No newline at end of file
diff --git a/com.minres.scviewer.target/pom.xml b/com.minres.scviewer.target/pom.xml
index 75a143f..459e328 100644
--- a/com.minres.scviewer.target/pom.xml
+++ b/com.minres.scviewer.target/pom.xml
@@ -4,7 +4,7 @@
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
- photon
+ com.minres.scviewer.target
eclipse-target-definition
SCViewer Target Definition