]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.simulation/src/org/simantics/simulation/experiment/Experiment.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.simulation / src / org / simantics / simulation / experiment / Experiment.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.experiment;\r
13 \r
14 import java.util.UUID;\r
15 import java.util.concurrent.locks.Lock;\r
16 \r
17 import org.eclipse.core.runtime.IProgressMonitor;\r
18 import org.simantics.databoard.accessor.Accessor;\r
19 import org.simantics.db.ReadGraph;\r
20 import org.simantics.db.Resource;\r
21 import org.simantics.db.exception.DatabaseException;\r
22 import org.simantics.utils.datastructures.ListenerList;\r
23 \r
24 public abstract class Experiment implements IExperiment {\r
25 \r
26     protected Resource experiment;\r
27     protected Resource model;\r
28     protected ListenerList<IExperimentListener> listeners =\r
29         new ListenerList<IExperimentListener>(IExperimentListener.class);\r
30     protected ListenerList<IExperimentStatusListener> statusListeners =\r
31         new ListenerList<IExperimentStatusListener>(IExperimentStatusListener.class);\r
32     protected volatile ExperimentState state = ExperimentState.INITIALIZING;\r
33     protected String identifier;\r
34 \r
35     public Experiment(Resource model) {\r
36         this(null, model, UUID.randomUUID().toString());\r
37     }\r
38 \r
39     public Experiment(Resource model, String identifier) {\r
40         this(null, model, identifier);\r
41     }\r
42 \r
43     public Experiment(Resource experiment, Resource model) {\r
44         this(experiment, model, UUID.randomUUID().toString());\r
45     }\r
46 \r
47     public Experiment(Resource experiment, Resource model, String identifier) {\r
48         this.experiment = experiment;\r
49         this.model = model;\r
50         this.identifier = identifier;\r
51     }\r
52     \r
53     @Override\r
54     public <T> T getService(Class<T> clazz) {\r
55         return null;\r
56     }\r
57 \r
58     @Override\r
59     public ExperimentState getState() {\r
60         if(state == null)\r
61                 System.err.println("nullstate");\r
62         return state;\r
63     }\r
64     \r
65     @Override\r
66     public ExperimentState getState(ReadGraph graph) throws DatabaseException {\r
67         throw new UnsupportedOperationException();\r
68     }\r
69 \r
70     public void changeState(ExperimentState newState) {\r
71         if (state == ExperimentState.DISPOSED) {\r
72             if (newState != ExperimentState.DISPOSED) {\r
73                 // TODO: this might be worth logging as an error.\r
74             }\r
75             return;\r
76         }\r
77         if(newState != state) {\r
78             state = newState;\r
79             localStateChange();\r
80             for(IExperimentListener listener : listeners.getListeners())\r
81                 listener.stateChanged(newState);\r
82         }\r
83     }\r
84 \r
85     protected void localStateChange() {\r
86     }\r
87 \r
88     @Override\r
89     public void addListener(IExperimentListener listener) {\r
90         listeners.add(listener);\r
91         listener.stateChanged(state);\r
92     }\r
93 \r
94     @Override\r
95     public Resource getResource() {\r
96         return experiment;\r
97     }\r
98 \r
99     @Override\r
100     public Resource getModel() {\r
101         return model;\r
102     }\r
103 \r
104     @Override\r
105     public void removeListener(IExperimentListener listener) {\r
106         listeners.remove(listener);\r
107     }\r
108 \r
109     @Override\r
110     public void addStatusListener(IExperimentStatusListener listener) {\r
111         statusListeners.add(listener);\r
112     }\r
113 \r
114     @Override\r
115     public void removeStatusListener(IExperimentStatusListener listener) {\r
116         statusListeners.remove(listener);\r
117     }\r
118 \r
119     @Override\r
120     public void shutdown(IProgressMonitor monitor) {\r
121         changeState(ExperimentState.DISPOSED);\r
122     }\r
123 \r
124     @Override\r
125     public Lock getDatasourceLock() {\r
126         throw new UnsupportedOperationException("deprecated operation");\r
127     }\r
128 \r
129     @Override\r
130     public Accessor getAccessor() {\r
131         return null;\r
132     }\r
133 \r
134     @Override\r
135     public String getIdentifier() {\r
136         return identifier;\r
137     }\r
138 \r
139 }\r