1 package org.splat.simer;
3 import java.util.Iterator;
4 import java.util.Vector;
6 import org.splat.dal.bo.som.ProjectElement;
7 import org.splat.dal.bo.som.Scenario;
8 import org.splat.service.ProjectElementService;
9 import org.splat.service.ScenarioService;
10 import org.splat.som.Step;
11 import org.splat.dal.bo.som.Study;
12 import org.splat.wapp.MenuItem;
13 import org.splat.wapp.SlidMenu;
15 public class StudyMenu extends SlidMenu {
18 private Scenario scopen; // Currently "open" scenario
19 private Step stopen; // Currently selected step
20 private ScenarioService _scenarioService;
21 private ProjectElementService _projectElementService;
23 // ==============================================================================================================================
25 // ==============================================================================================================================
28 super("activities", "study");
32 public StudyMenu init(Study context) {
38 public StudyMenu(Study context) {
39 // --------------------------------
40 super("activities", "study");
45 // ==============================================================================================================================
47 // ==============================================================================================================================
49 public void selects(String name) {
50 // ---------------------------------
51 String[] parse = name.split("\\x2E");
52 Scenario[] scenes = study.getScenarii();
53 Scenario scenew = scopen;
57 if (scenew == null && scenes.length == 1)
60 int askdex = Integer.valueOf(parse[0]);
62 while (askid < scenes.length) {
63 if (scenes[askid].getIndex() == askdex)
67 scenew = scenes[askid]; // Throws an exception if the scenario does not exist (that is, if name is not correct)
69 } catch (Exception error) {
74 // Study with several scenarii, non of them open
75 // Collection of steps to be displayed
76 Vector<Step> steps = new Vector<Step>();
77 Step[] newstep = getProjectElementService().getSteps(scenes[0]); // All scenarii have the same steps
79 int base = newstep[0].getNumber();
80 int last = newstep[newstep.length - 1].getNumber();
81 for (int i = 0; i < scenes.length; i++)
82 steps.add(getProjectElementService().getFirstStep(scenes[i]));
84 newstep = getProjectElementService().getSteps(study);
85 stopen = newstep[0]; // Default selected step
86 for (int i = newstep.length - 1; i > -1; i--) {
87 if (newstep[i].getNumber() >= base)
89 steps.add(0, newstep[i]);
91 for (int i = 0; i < newstep.length; i++) {
92 if (newstep[i].getNumber() <= last)
94 steps.add(newstep[i]);
96 // Creation of the menu
97 for (Iterator<Step> i = steps.iterator(); i.hasNext();) {
99 int number = step.getNumber();
101 if (step.getOwner() instanceof Study) {
102 if (!step.isStarted())
103 icon = "icon.empty.png";
104 else if (step.isFinished())
105 icon = "icon.checked.png";
107 icon = "icon.done.png";
108 addItem("0." + number, "menu.step." + number, icon,
109 "step-study?selection=0." + number);
110 // WARNING: The selection number must end the action's parameters for the need of refreshGivenStepItem()
112 Scenario group = (Scenario) step.getOwner();
113 long index = group.getIndex();
114 String value = index + "." + number;
115 if (group.isCheckedout())
116 icon = "icon.checkedout.png";
117 else if (getScenarioService().isEmpty(group))
118 icon = "icon.empty.png";
119 // else if (group.isFinished()) icon = "icon.checked.png";
121 icon = "icon.done.png";
122 addGroup(value, group.getTitle(), icon,
123 "step-study?selection=" + value);
126 } else if (scopen == null || !scenew.equals(scopen)) {
128 // Opening a scenario
130 // Collection of steps to be displayed
131 Vector<Step> steps = new Vector<Step>();
132 Step[] newstep = getProjectElementService().getSteps(scenew);
134 int base = newstep[0].getNumber();
135 int last = newstep[newstep.length - 1].getNumber();
136 for (int i = 0; i < newstep.length; i++) {
137 steps.add(newstep[i]);
139 for (int i = askid - 1; i > -1; i--)
141 .add(0, getProjectElementService().getFirstStep(
143 newstep = getProjectElementService().getSteps(study);
144 for (int i = newstep.length - 1; i > -1; i--) {
145 if (newstep[i].getNumber() >= base)
147 steps.add(0, newstep[i]);
149 for (int i = askid + 1; i < scenes.length; i++)
150 steps.add(getProjectElementService().getFirstStep(scenes[i]));
151 for (int i = 0; i < newstep.length; i++) {
152 if (newstep[i].getNumber() <= last)
154 steps.add(newstep[i]);
156 // Creation of the menu
157 boolean first = true; // For differentiating the first scenario step
158 int askdex = Integer.valueOf(parse[1]);
159 for (Iterator<Step> i = steps.iterator(); i.hasNext();) {
160 Step step = i.next();
161 int number = step.getNumber();
163 if (!step.isStarted())
164 icon = "icon.empty.png";
165 else if (step.isFinished())
166 icon = "icon.checked.png";
168 icon = "icon.done.png";
169 if (number == askdex)
171 if (step.getOwner() instanceof Study) {
172 addItem("0." + number, "menu.step." + number, icon,
173 "step-study?selection=0." + number);
175 Scenario group = (Scenario) step.getOwner();
176 long index = group.getIndex();
177 String value = index + "." + number;
178 if (index != scenew.getIndex()) {
179 if (group.isCheckedout())
180 icon = "icon.checkedout.png";
181 else if (getScenarioService().isEmpty(group))
182 icon = "icon.empty.png";
183 // else if (group.isFinished()) icon = "icon.checked.png";
185 icon = "icon.done.png";
186 addGroup(value, group.getTitle(), icon,
187 "step-study?selection=" + value);
189 if (group.isCheckedout())
190 icon = "icon.checkedout.png";
191 addGroup(value, scenew.getTitle(), icon,
192 "step-study?selection=" + value);
195 addSubItem(value, "menu.step." + number, icon,
196 "step-study?selection=" + value);
202 Step[] step = getProjectElementService().getSteps(scopen);
203 int selected = Integer.valueOf(parse[1]);
204 for (int i = 0; i < step.length; i++) {
205 if (step[i].getNumber() != selected)
214 public void refreshGivenStepItem(Step step) {
215 // --------------------------------------------
216 String number = "." + step.getNumber();
217 ProjectElement owner = step.getOwner();
220 for (Iterator<MenuItem> action = menu.iterator(); action.hasNext();) {
221 MenuItem item = action.next();
222 String index = item.getAction(); // Returns the above string ended by the selection number
223 if (!index.endsWith(number))
227 if (owner instanceof Scenario) {
228 if (range == 0 && ((Scenario) owner).isCheckedout())
229 icon = "icon.checkedout.png";
232 if (!step.isStarted())
233 icon = "icon.empty.png";
234 else if (step.isFinished())
235 icon = "icon.checked.png";
237 icon = "icon.done.png";
242 public void refreshSelectedItem() {
243 // ----------------------------------
244 MenuItem item = this.getSelectedItem();
246 if (!stopen.isStarted())
247 icon = "icon.empty.png";
248 else if (stopen.isFinished())
249 icon = "icon.checked.png";
251 icon = "icon.done.png";
256 * Get the scenarioService.
258 * @return the scenarioService
260 public ScenarioService getScenarioService() {
261 return _scenarioService;
265 * Set the scenarioService.
267 * @param scenarioService
268 * the scenarioService to set
270 public void setScenarioService(ScenarioService scenarioService) {
271 _scenarioService = scenarioService;
275 * Get the projectElementService.
277 * @return the projectElementService
279 public ProjectElementService getProjectElementService() {
280 return _projectElementService;
284 * Set the projectElementService.
286 * @param projectElementService
287 * the projectElementService to set
289 public void setProjectElementService(
290 ProjectElementService projectElementService) {
291 _projectElementService = projectElementService;