]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.simulation/src/org/simantics/simulation/experiment/Experiment.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.simulation / src / org / simantics / simulation / experiment / Experiment.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.simulation.experiment;
13
14 import java.util.UUID;
15 import java.util.concurrent.locks.Lock;
16
17 import org.eclipse.core.runtime.IProgressMonitor;
18 import org.simantics.databoard.accessor.Accessor;
19 import org.simantics.db.ReadGraph;
20 import org.simantics.db.Resource;
21 import org.simantics.db.exception.DatabaseException;
22 import org.simantics.utils.datastructures.ListenerList;
23
24 public abstract class Experiment implements IExperiment {
25
26     protected Resource experiment;
27     protected Resource model;
28     protected ListenerList<IExperimentListener> listeners =
29         new ListenerList<IExperimentListener>(IExperimentListener.class);
30     protected ListenerList<IExperimentStatusListener> statusListeners =
31         new ListenerList<IExperimentStatusListener>(IExperimentStatusListener.class);
32     protected volatile ExperimentState state = ExperimentState.INITIALIZING;
33     protected String identifier;
34
35     public Experiment(Resource model) {
36         this(null, model, UUID.randomUUID().toString());
37     }
38
39     public Experiment(Resource model, String identifier) {
40         this(null, model, identifier);
41     }
42
43     public Experiment(Resource experiment, Resource model) {
44         this(experiment, model, UUID.randomUUID().toString());
45     }
46
47     public Experiment(Resource experiment, Resource model, String identifier) {
48         this.experiment = experiment;
49         this.model = model;
50         this.identifier = identifier;
51     }
52     
53     @Override
54     public <T> T getService(Class<T> clazz) {
55         return null;
56     }
57
58     @Override
59     public ExperimentState getState() {
60         if(state == null)
61                 System.err.println("nullstate");
62         return state;
63     }
64     
65     @Override
66     public ExperimentState getState(ReadGraph graph) throws DatabaseException {
67         throw new UnsupportedOperationException();
68     }
69
70     public void changeState(ExperimentState newState) {
71         if (state == ExperimentState.DISPOSED) {
72             if (newState != ExperimentState.DISPOSED) {
73                 // TODO: this might be worth logging as an error.
74             }
75             return;
76         }
77         if(newState != state) {
78             state = newState;
79             localStateChange();
80             for(IExperimentListener listener : listeners.getListeners())
81                 listener.stateChanged(newState);
82         }
83     }
84
85     protected void localStateChange() {
86     }
87
88     @Override
89     public void addListener(IExperimentListener listener) {
90         listeners.add(listener);
91         listener.stateChanged(state);
92     }
93
94     @Override
95     public Resource getResource() {
96         return experiment;
97     }
98
99     @Override
100     public Resource getModel() {
101         return model;
102     }
103
104     @Override
105     public void removeListener(IExperimentListener listener) {
106         listeners.remove(listener);
107     }
108
109     @Override
110     public void addStatusListener(IExperimentStatusListener listener) {
111         statusListeners.add(listener);
112     }
113
114     @Override
115     public void removeStatusListener(IExperimentStatusListener listener) {
116         statusListeners.remove(listener);
117     }
118
119     @Override
120     public void shutdown(IProgressMonitor monitor) {
121         changeState(ExperimentState.DISPOSED);
122     }
123
124     @Override
125     public Lock getDatasourceLock() {
126         throw new UnsupportedOperationException("deprecated operation");
127     }
128
129     @Override
130     public Accessor getAccessor() {
131         return null;
132     }
133
134     @Override
135     public String getIdentifier() {
136         return identifier;
137     }
138
139 }