]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.simulation.ui/src/org/simantics/simulation/ui/ExperimentManagerListener.java
Prevent undesirable UI code access when workbench is not running
[simantics/platform.git] / bundles / org.simantics.simulation.ui / src / org / simantics / simulation / ui / ExperimentManagerListener.java
index 504e81ccb00f1d135d5f3a5449874a51076b5153..f418b09a11069d47637c8b0f985d78fe378441cc 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.simulation.ui;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
-\r
-import org.eclipse.ui.IWorkbench;\r
-import org.eclipse.ui.PlatformUI;\r
-import org.eclipse.ui.contexts.IContextActivation;\r
-import org.eclipse.ui.contexts.IContextService;\r
-import org.simantics.simulation.experiment.IDynamicExperiment;\r
-import org.simantics.simulation.experiment.IExperiment;\r
-import org.simantics.simulation.project.IExperimentManager;\r
-import org.simantics.simulation.project.IExperimentManagerListener;\r
-\r
-public class ExperimentManagerListener implements IExperimentManagerListener {\r
-\r
-    public static final String     EXPERIMENT_CONTEXT         = "org.simantics.simulation.ui.experiment";\r
-    public static final String     DYNAMIC_EXPERIMENT_CONTEXT = "org.simantics.simulation.ui.dynamicExperiment";\r
-\r
-    static Set<IExperimentManager> managers = \r
-        new HashSet<IExperimentManager>();\r
-\r
-    IExperimentManager manager;\r
-\r
-    Collection<IContextActivation> contextActivations = \r
-        new ArrayList<IContextActivation>();\r
-\r
-    public ExperimentManagerListener(IExperimentManager manager) {\r
-        this.manager = manager;\r
-    }\r
-\r
-    public static void listenManager(IExperimentManager manager) {\r
-        synchronized(managers) {\r
-            if(managers.contains(manager))\r
-                return;\r
-            ExperimentManagerListener listener = \r
-                new ExperimentManagerListener(manager);\r
-            manager.addListener(listener);\r
-            managers.add(manager);\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void activeExperimentLoaded(final IExperiment experiment) {\r
-//        experiment.addListener(new ExperimentListener());\r
-        experiment.addListener(new org.simantics.simulation.ui.e4.ExperimentListener());\r
-\r
-        if (!PlatformUI.isWorkbenchRunning())\r
-            return;\r
-\r
-        final IWorkbench workbench = PlatformUI.getWorkbench();\r
-        workbench.getDisplay().asyncExec(new Runnable() {\r
-            @Override\r
-            public void run() {\r
-                if (workbench.isClosing())\r
-                    return;\r
-                IContextService contextService =\r
-                    (IContextService)PlatformUI.getWorkbench()\r
-                    .getService(IContextService.class);\r
-                synchronized(contextActivations) {\r
-                    contextActivations.add(contextService.activateContext(EXPERIMENT_CONTEXT));\r
-                    if(experiment instanceof IDynamicExperiment)\r
-                        contextActivations.add(contextService.activateContext(DYNAMIC_EXPERIMENT_CONTEXT));\r
-                }\r
-            }\r
-        });\r
-    }\r
-\r
-    @Override\r
-    public void activeExperimentUnloaded() {\r
-        synchronized(contextActivations) {\r
-            final Collection<IContextActivation> oldContextActivations = \r
-                contextActivations;\r
-\r
-            contextActivations = new ArrayList<IContextActivation>();\r
-\r
-            if (!PlatformUI.isWorkbenchRunning())\r
-                return;\r
-\r
-            final IWorkbench workbench = PlatformUI.getWorkbench();\r
-            workbench.getDisplay().asyncExec(new Runnable() {\r
-                @Override\r
-                public void run() {\r
-                    if (workbench.isClosing())\r
-                        return;\r
-\r
-                    IContextService contextService =\r
-                        (IContextService)workbench.getService(IContextService.class);\r
-                    contextService.deactivateContexts(oldContextActivations);\r
-                }\r
-            });\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void managerDisposed() {\r
-        synchronized(managers) {\r
-            manager.removeListener(this);\r
-            managers.remove(manager);\r
-        }\r
-    }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2019 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * 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:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *     Semantum Oy - gitlab #384
+ *******************************************************************************/
+package org.simantics.simulation.ui;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.contexts.IContextActivation;
+import org.eclipse.ui.contexts.IContextService;
+import org.simantics.simulation.experiment.IDynamicExperiment;
+import org.simantics.simulation.experiment.IExperiment;
+import org.simantics.simulation.project.IExperimentManager;
+import org.simantics.simulation.project.IExperimentManagerListener;
+
+public class ExperimentManagerListener implements IExperimentManagerListener {
+
+    public static final String     EXPERIMENT_CONTEXT         = "org.simantics.simulation.ui.experiment";
+    public static final String     DYNAMIC_EXPERIMENT_CONTEXT = "org.simantics.simulation.ui.dynamicExperiment";
+
+    static Set<IExperimentManager> managers = 
+        new HashSet<IExperimentManager>();
+
+    IExperimentManager manager;
+
+    Collection<IContextActivation> contextActivations = 
+        new ArrayList<IContextActivation>();
+
+    public ExperimentManagerListener(IExperimentManager manager) {
+        this.manager = manager;
+    }
+
+    public static void listenManager(IExperimentManager manager) {
+        synchronized(managers) {
+            if(managers.contains(manager))
+                return;
+            ExperimentManagerListener listener = 
+                new ExperimentManagerListener(manager);
+            manager.addListener(listener);
+            managers.add(manager);
+        }
+    }
+
+    @Override
+    public void activeExperimentLoaded(final IExperiment experiment) {
+        if (!PlatformUI.isWorkbenchRunning())
+            return;
+
+        experiment.addListener(new org.simantics.simulation.ui.e4.ExperimentListener());
+
+        final IWorkbench workbench = PlatformUI.getWorkbench();
+        workbench.getDisplay().asyncExec(new Runnable() {
+            @Override
+            public void run() {
+                if (workbench.isClosing())
+                    return;
+                IContextService contextService =
+                    (IContextService)PlatformUI.getWorkbench()
+                    .getService(IContextService.class);
+                synchronized(contextActivations) {
+                    contextActivations.add(contextService.activateContext(EXPERIMENT_CONTEXT));
+                    if(experiment instanceof IDynamicExperiment)
+                        contextActivations.add(contextService.activateContext(DYNAMIC_EXPERIMENT_CONTEXT));
+                }
+            }
+        });
+    }
+
+    @Override
+    public void activeExperimentUnloaded() {
+        synchronized(contextActivations) {
+            final Collection<IContextActivation> oldContextActivations = 
+                contextActivations;
+
+            contextActivations = new ArrayList<IContextActivation>();
+
+            if (!PlatformUI.isWorkbenchRunning())
+                return;
+
+            final IWorkbench workbench = PlatformUI.getWorkbench();
+            workbench.getDisplay().asyncExec(new Runnable() {
+                @Override
+                public void run() {
+                    if (workbench.isClosing())
+                        return;
+
+                    IContextService contextService =
+                        (IContextService)workbench.getService(IContextService.class);
+                    contextService.deactivateContexts(oldContextActivations);
+                }
+            });
+        }
+    }
+
+    @Override
+    public void managerDisposed() {
+        synchronized(managers) {
+            manager.removeListener(this);
+            managers.remove(manager);
+        }
+    }
+
+}