]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.workbench/src/org/simantics/workbench/internal/SimanticsWorkbenchAdvisor.java
Merge "Easier baselines"
[simantics/platform.git] / bundles / org.simantics.workbench / src / org / simantics / workbench / internal / SimanticsWorkbenchAdvisor.java
index cb1ee16d315c28d197016d491130a77d38c98e1c..8a8b493753e3be04b14156483ba9f4df63dba9a8 100644 (file)
@@ -82,16 +82,20 @@ import org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog;
 import org.eclipse.ui.keys.IBindingService;
 import org.eclipse.ui.progress.IProgressService;
 import org.eclipse.ui.statushandlers.AbstractStatusHandler;
+import org.eclipse.ui.statushandlers.StatusAdapter;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.Version;
 import org.simantics.CancelStartupException;
+import org.simantics.DatabaseBaselines;
 import org.simantics.PlatformException;
 import org.simantics.Simantics;
 import org.simantics.SimanticsPlatform;
 import org.simantics.SimanticsPlatform.OntologyRecoveryPolicy;
 import org.simantics.SimanticsPlatform.RecoveryPolicy;
 import org.simantics.TimingProgressMonitor;
+import org.simantics.UnhandledExceptionService;
 import org.simantics.application.arguments.IArguments;
 import org.simantics.application.arguments.SimanticsArguments;
 import org.simantics.db.common.Indexing;
@@ -428,6 +432,11 @@ public class SimanticsWorkbenchAdvisor extends WorkbenchAdvisor {
             if (PROFILE_PLATFORM_STARTUP)
                 mon = new TimingProgressMonitor();
             SimanticsPlatform.INSTANCE.startUp(databaseDriverId, mon, workspacePolicy, ontologyPolicy, requireSynchronize, new JFaceUserAgent());
+            if(DatabaseBaselines.shouldCreateAutomaticBaseline(SimanticsPlatform.INSTANCE.databaseExists() != null)) {
+                SimanticsPlatform.INSTANCE.shutdown(null);
+                DatabaseBaselines.createAutomaticBaseline(SimanticsPlatform.INSTANCE.dbLocation());
+                SimanticsPlatform.INSTANCE.reconnect(Simantics.getDefaultDatabaseDriver());
+            }
 
             // Make sure that the default perspective comes from the project if
             // the project has set ProjectKeys#DEFAULT_PERSPECTIVE.
@@ -1133,17 +1142,17 @@ public class SimanticsWorkbenchAdvisor extends WorkbenchAdvisor {
      *         location is not being shown
      */
     public String getWorkspaceLocation() {
-               // read command line, which has priority
-               IEclipseContext context = getWorkbenchConfigurer().getWorkbench().getService(IEclipseContext.class);
-               String location = context != null ? (String) context.get(E4Workbench.FORCED_SHOW_LOCATION) : null;
-               if (location != null) {
-                       return location;
-               }
-               // read the preference
-               if (IDEWorkbenchPlugin.getDefault().getPreferenceStore().getBoolean(IDEInternalPreferences.SHOW_LOCATION)) {
-                       return Platform.getLocation().toOSString();
-               }
-               return null;
+        // read command line, which has priority
+        IEclipseContext context = getWorkbenchConfigurer().getWorkbench().getService(IEclipseContext.class);
+        String location = context != null ? (String) context.get(E4Workbench.FORCED_SHOW_LOCATION) : null;
+        if (location != null) {
+            return location;
+        }
+        // read the preference
+        if (IDEWorkbenchPlugin.getDefault().getPreferenceStore().getBoolean(IDEInternalPreferences.SHOW_LOCATION)) {
+            return Platform.getLocation().toOSString();
+        }
+        return null;
     }
 
     /**
@@ -1175,13 +1184,30 @@ public class SimanticsWorkbenchAdvisor extends WorkbenchAdvisor {
      *
      * @see org.eclipse.ui.application.WorkbenchAdvisor#getWorkbenchErrorHandler()
      */
+
+    private AbstractStatusHandler workbenchErrorHandler = new AbstractStatusHandler() {
+
+        @Override
+        public void handle(StatusAdapter statusAdapter, int style) {
+            if (ideWorkbenchErrorHandler == null) {
+                ideWorkbenchErrorHandler = new IDEWorkbenchErrorHandler(
+                        getWorkbenchConfigurer());
+            }
+            ideWorkbenchErrorHandler.handle(statusAdapter, style);
+
+            BundleContext context = Activator.getDefault().getBundle().getBundleContext();
+            ServiceReference<?> ref = context.getServiceReference(UnhandledExceptionService.class.getName());
+            UnhandledExceptionService unhandled = (UnhandledExceptionService)context.getService(ref);
+            Throwable t = statusAdapter.getStatus().getException();
+            if(t != null)
+                unhandled.handle(t);
+
+        }
+    };
+
     @Override
     public AbstractStatusHandler getWorkbenchErrorHandler() {
-        if (ideWorkbenchErrorHandler == null) {
-            ideWorkbenchErrorHandler = new IDEWorkbenchErrorHandler(
-                    getWorkbenchConfigurer());
-        }
-        return ideWorkbenchErrorHandler;
+        return workbenchErrorHandler;
     }
 
     /* (non-Javadoc)