EMMA Coverage Report (generated Tue May 01 18:46:53 CEST 2007)
[all classes][dk.deepthought.sidious.gui]

COVERAGE SUMMARY FOR SOURCE FILE [SidiousController.java]

nameclass, %method, %block, %line, %
SidiousController.java0%   (0/3)0%   (0/13)0%   (0/435)0%   (0/76)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class SidiousController0%   (0/1)0%   (0/8)0%   (0/378)0%   (0/74)
SidiousController (SidiousController$PLAN_MODE): void 0%   (0/1)0%   (0/23)0%   (0/9)
bigger (): void 0%   (0/1)0%   (0/148)0%   (0/19)
finished (Plan): void 0%   (0/1)0%   (0/10)0%   (0/4)
main (String []): void 0%   (0/1)0%   (0/6)0%   (0/2)
small (): void 0%   (0/1)0%   (0/94)0%   (0/14)
start (): void 0%   (0/1)0%   (0/8)0%   (0/3)
stop (): void 0%   (0/1)0%   (0/6)0%   (0/2)
vertex (Vertex): void 0%   (0/1)0%   (0/83)0%   (0/21)
     
class SidiousController$10%   (0/1)0%   (0/1)0%   (0/19)0%   (0/1)
<static initializer> 0%   (0/1)0%   (0/19)0%   (0/1)
     
class SidiousController$PLAN_MODE0%   (0/1)0%   (0/4)0%   (0/38)0%   (0/2)
<static initializer> 0%   (0/1)0%   (0/24)0%   (0/2)
SidiousController$PLAN_MODE (String, int): void 0%   (0/1)0%   (0/5)0%   (0/1)
valueOf (String): SidiousController$PLAN_MODE 0%   (0/1)0%   (0/5)0%   (0/1)
values (): SidiousController$PLAN_MODE [] 0%   (0/1)0%   (0/4)0%   (0/1)

1package dk.deepthought.sidious.gui;
2 
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.Collection;
6import java.util.Collections;
7import java.util.Stack;
8 
9import dk.deepthought.sidious.blackboard.BlackBoardEngine;
10import dk.deepthought.sidious.greenhouse.CO2SetPoint;
11import dk.deepthought.sidious.greenhouse.ClimaticState;
12import dk.deepthought.sidious.greenhouse.Greenhouse;
13import dk.deepthought.sidious.greenhouse.HeaterSetPoint;
14import dk.deepthought.sidious.greenhouse.ScreenSetPoint;
15import dk.deepthought.sidious.greenhouse.SensorInput;
16import dk.deepthought.sidious.greenhouse.WindowSetPoint;
17import dk.deepthought.sidious.planner.Plan;
18import dk.deepthought.sidious.planner.PlannerEngine;
19import dk.deepthought.sidious.planner.graph.Vertex;
20import dk.deepthought.sidious.rules.ConstrainingRule;
21import dk.deepthought.sidious.rules.PhotosynthesisRule;
22import dk.deepthought.sidious.rules.Rule;
23import dk.deepthought.sidious.rules.TemperatureRule;
24import dk.deepthought.sidious.services.ServiceEngine;
25import dk.deepthought.sidious.supportsystem.Adjustable;
26import dk.deepthought.sidious.supportsystem.Step;
27import dk.deepthought.sidious.supportsystem.SuperLinkID;
28import dk.deepthought.sidious.supportsystem.SystemSettings;
29 
30/**
31 * This class works as the controller for the model-view-controller hook into
32 * the planner.
33 * 
34 * @author Deepthought
35 * 
36 */
37public class SidiousController {
38 
39        /**
40         * The displayed GUI.
41         */
42        private Display display;
43 
44        /**
45         * The the current greenhouse to calculate for.
46         */
47        private Greenhouse requester;
48 
49        /**
50         * Constructor.
51         * 
52         * @param mode
53         *            the plan mode to calculate
54         */
55        public SidiousController(PLAN_MODE mode) {
56                switch (mode) {
57                case BIG:
58                        bigger();
59                        break;
60                case SMALL:
61                        small();
62                        break;
63 
64                default:
65                        break;
66                }
67                display = new Display();
68                display.setController(this);
69        }
70 
71        /**
72         * Calculate the bigger plan.
73         */
74        private void bigger() {
75                SuperLinkID greenhouseID = new SuperLinkID("bigger");
76                // Add adjustables
77                Collection<Adjustable> adjs = new ArrayList<Adjustable>();
78                adjs.add(new HeaterSetPoint(22));
79                adjs.add(new CO2SetPoint(750));
80                adjs.add(new ScreenSetPoint(0));
81                adjs.add(new WindowSetPoint(0));
82                // Add rules
83                Collection<Rule> rules = new ArrayList<Rule>();
84                rules.add(new ConstrainingRule(SystemSettings.getTemperatureID(),
85                                SystemSettings.getHumidityID(), SystemSettings
86                                                .getIrradianceID(), SystemSettings.getCO2ID()));
87                rules.add(new TemperatureRule(greenhouseID));
88                rules.add(new PhotosynthesisRule(greenhouseID));
89                // Creating current state
90                SensorInput temperature = new SensorInput(SystemSettings
91                                .getTemperatureID(), 26);
92                SensorInput hum = new SensorInput(SystemSettings.getHumidityID(), 10);
93                SensorInput light = new SensorInput(SystemSettings.getIrradianceID(),
94                                800);
95                SensorInput time = new SensorInput(SystemSettings.getTimeID(), 50);
96                SensorInput co2 = new SensorInput(SystemSettings.getCO2ID(), 790);
97                ClimaticState source = new ClimaticState(Arrays.asList(temperature,
98                                hum, light, co2, time));
99                // Setting sensors on service engine
100                ServiceEngine.setSensorList(source.getSensors());
101                // Request plan
102                requester = new Greenhouse(greenhouseID, adjs, rules);
103        }
104 
105        /**
106         * Calculate the smaller plan.
107         */
108        private void small() {
109                SuperLinkID greenhouseID = new SuperLinkID("small");
110                Collection<Adjustable> adjs = new ArrayList<Adjustable>();
111                adjs.add(new HeaterSetPoint(25));
112                // Add rules
113                Collection<Rule> rules = new ArrayList<Rule>();
114                TemperatureRule temperatureRule = new TemperatureRule(greenhouseID);
115                rules.add(temperatureRule);
116                rules.add(new ConstrainingRule(SystemSettings.getHumidityID(),
117                                SystemSettings.getTimeID()));
118                // Creating current state
119                SensorInput temperature = new SensorInput(SystemSettings
120                                .getTemperatureID(), 25);
121                SensorInput hum = new SensorInput(SystemSettings.getHumidityID(), 50);
122                SensorInput time = new SensorInput(SystemSettings.getTimeID(), 0);
123                ClimaticState source = new ClimaticState(Arrays.asList(temperature,
124                                hum, time));
125                // Setting sensors on service engine
126                ServiceEngine.setSensorList(source.getSensors());
127                // Request plan
128                requester = new Greenhouse(greenhouseID, adjs, rules);
129        }
130 
131        /**
132         * Starts the calculations.
133         */
134        public void start() {
135                SidiousOutput.getInstance().register(this);
136                BlackBoardEngine.getInstance().requestPlan(requester);
137        }
138 
139        /**
140         * Sets the newly created vertex. Callback method from the model.
141         * 
142         * @param vertex
143         *            the vertex that have been created in the model.
144         */
145        public void vertex(Vertex vertex) {
146                double cost = vertex.g();
147                ClimaticState state = (ClimaticState) vertex.getState();
148                double temperature = 0;
149                double humidity = 0;
150                double co2 = 0;
151                double irradiance = 0;
152                double time = 0;
153                for (SensorInput input : state.getSensors()) {
154                        if (input.getID().equals(SystemSettings.getTemperatureID())) {
155                                temperature = input.getValue();
156                        } else if (input.getID().equals(SystemSettings.getHumidityID())) {
157                                humidity = input.getValue();
158                        } else if (input.getID().equals(SystemSettings.getCO2ID())) {
159                                co2 = input.getValue();
160                        } else if (input.getID().equals(SystemSettings.getIrradianceID())) {
161                                irradiance = input.getValue();
162                        } else if (input.getID().equals(SystemSettings.getTimeID())) {
163                                time = input.getValue();
164                        }
165                }
166                display.setVertexAndStateValues(cost, temperature, humidity, co2,
167                                irradiance, time);
168        }
169 
170        /**
171         * Sets the newly generated plan. Callback method from the model.
172         * 
173         * @param plan
174         *            the plan that have been generated in the model.
175         */
176        public void finished(Plan plan) {
177                Stack<Step> steps = plan.getSteps();
178                Collections.reverse(steps);
179                display.finished(steps);
180        }
181 
182        /**
183         * Stop calculating.
184         */
185        public void stop() {
186                PlannerEngine.getInstance().stop(requester.getID());
187        }
188 
189        /**
190         * Enumeration to specify which plan to calculate.
191         * 
192         * @author Deepthought
193         * 
194         */
195        public static enum PLAN_MODE {
196                SMALL, BIG;
197        }
198 
199        /**
200         * The main method.
201         */
202        public static void main(String[] args) {
203                new SidiousController(PLAN_MODE.BIG);
204        }
205}

[all classes][dk.deepthought.sidious.gui]
EMMA 2.0.5312 (C) Vladimir Roubtsov