]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.simulation.ui/src/org/simantics/simulation/ui/ExperimentManagerListener.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.simulation.ui / src / org / simantics / simulation / ui / ExperimentManagerListener.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.simulation.ui;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.Collection;\r
16 import java.util.HashSet;\r
17 import java.util.Set;\r
18 \r
19 import org.eclipse.ui.IWorkbench;\r
20 import org.eclipse.ui.PlatformUI;\r
21 import org.eclipse.ui.contexts.IContextActivation;\r
22 import org.eclipse.ui.contexts.IContextService;\r
23 import org.simantics.simulation.experiment.IDynamicExperiment;\r
24 import org.simantics.simulation.experiment.IExperiment;\r
25 import org.simantics.simulation.project.IExperimentManager;\r
26 import org.simantics.simulation.project.IExperimentManagerListener;\r
27 \r
28 public class ExperimentManagerListener implements IExperimentManagerListener {\r
29 \r
30     public static final String     EXPERIMENT_CONTEXT         = "org.simantics.simulation.ui.experiment";\r
31     public static final String     DYNAMIC_EXPERIMENT_CONTEXT = "org.simantics.simulation.ui.dynamicExperiment";\r
32 \r
33     static Set<IExperimentManager> managers = \r
34         new HashSet<IExperimentManager>();\r
35 \r
36     IExperimentManager manager;\r
37 \r
38     Collection<IContextActivation> contextActivations = \r
39         new ArrayList<IContextActivation>();\r
40 \r
41     public ExperimentManagerListener(IExperimentManager manager) {\r
42         this.manager = manager;\r
43     }\r
44 \r
45     public static void listenManager(IExperimentManager manager) {\r
46         synchronized(managers) {\r
47             if(managers.contains(manager))\r
48                 return;\r
49             ExperimentManagerListener listener = \r
50                 new ExperimentManagerListener(manager);\r
51             manager.addListener(listener);\r
52             managers.add(manager);\r
53         }\r
54     }\r
55 \r
56     @Override\r
57     public void activeExperimentLoaded(final IExperiment experiment) {\r
58 //        experiment.addListener(new ExperimentListener());\r
59         experiment.addListener(new org.simantics.simulation.ui.e4.ExperimentListener());\r
60 \r
61         if (!PlatformUI.isWorkbenchRunning())\r
62             return;\r
63 \r
64         final IWorkbench workbench = PlatformUI.getWorkbench();\r
65         workbench.getDisplay().asyncExec(new Runnable() {\r
66             @Override\r
67             public void run() {\r
68                 if (workbench.isClosing())\r
69                     return;\r
70                 IContextService contextService =\r
71                     (IContextService)PlatformUI.getWorkbench()\r
72                     .getService(IContextService.class);\r
73                 synchronized(contextActivations) {\r
74                     contextActivations.add(contextService.activateContext(EXPERIMENT_CONTEXT));\r
75                     if(experiment instanceof IDynamicExperiment)\r
76                         contextActivations.add(contextService.activateContext(DYNAMIC_EXPERIMENT_CONTEXT));\r
77                 }\r
78             }\r
79         });\r
80     }\r
81 \r
82     @Override\r
83     public void activeExperimentUnloaded() {\r
84         synchronized(contextActivations) {\r
85             final Collection<IContextActivation> oldContextActivations = \r
86                 contextActivations;\r
87 \r
88             contextActivations = new ArrayList<IContextActivation>();\r
89 \r
90             if (!PlatformUI.isWorkbenchRunning())\r
91                 return;\r
92 \r
93             final IWorkbench workbench = PlatformUI.getWorkbench();\r
94             workbench.getDisplay().asyncExec(new Runnable() {\r
95                 @Override\r
96                 public void run() {\r
97                     if (workbench.isClosing())\r
98                         return;\r
99 \r
100                     IContextService contextService =\r
101                         (IContextService)workbench.getService(IContextService.class);\r
102                     contextService.deactivateContexts(oldContextActivations);\r
103                 }\r
104             });\r
105         }\r
106     }\r
107 \r
108     @Override\r
109     public void managerDisposed() {\r
110         synchronized(managers) {\r
111             manager.removeListener(this);\r
112             managers.remove(manager);\r
113         }\r
114     }\r
115 \r
116 }\r