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 + + + 1.7 @@ -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