Salome HOME
f5914a6b4992607ec932847a335b1e489f9977b3
[tools/siman.git] / Workspace / Siman / src / org / splat / simer / NewScenarioMenu.java
1 package org.splat.simer;
2
3 import java.util.Iterator;
4 import java.util.Vector;
5
6 import org.splat.dal.bo.som.Scenario;
7 import org.splat.service.ProjectElementService;
8 import org.splat.service.ScenarioService;
9 import org.splat.som.Step;
10 import org.splat.dal.bo.som.Study;
11 import org.splat.wapp.MenuItem;
12 import org.splat.wapp.SlidMenu;
13
14 public class NewScenarioMenu extends SlidMenu {
15
16         private Study study;
17         private Scenario scopen; // Currently "open" scenario
18         private Step stopen; // Currently selected step
19         private ProjectElementService _projectElementService;
20         private ScenarioService _scenarioService;
21
22         // ==============================================================================================================================
23         // Constructor
24         // ==============================================================================================================================
25
26         public NewScenarioMenu(Study context) {
27                 // -----------------------------------
28                 super("scenarii", "study");
29                 study = context;
30                 scopen = null;
31         }
32
33         // ==============================================================================================================================
34         // Member functions
35         // ==============================================================================================================================
36
37         public void selects(String name) {
38                 // ---------------------------------
39                 String[] parse = name.split("\\x2E");
40                 Scenario[] scenes = study.getScenarii();
41                 Scenario scenew = scopen;
42                 int askid = 0;
43
44                 // Initialization
45                 if (scenew == null && scenes.length == 1)
46                         scenew = scenes[0];
47                 try {
48                         int askdex = Integer.valueOf(parse[0]);
49                         if (askdex > 0) {
50                                 while (askid < scenes.length) {
51                                         if (scenes[askid].getIndex() == askdex)
52                                                 break;
53                                         askid += 1;
54                                 }
55                                 scenew = scenes[askid]; // Throws an exception if the scenario does not exist (that is, if name is not correct)
56                         }
57                 } catch (Exception error) {
58                         return;
59                 }
60                 if (scenew == null) {
61
62                         // Study with several scenarii, non of them open
63
64                         // Collection of steps to be displayed
65                         Vector<Step> steps = new Vector<Step>();
66                         Step[] newstep = getProjectElementService().getSteps(scenes[0]); // All scenarii have the same steps
67
68                         for (int i = 0; i < scenes.length; i++)
69                                 steps.add(getProjectElementService().getFirstStep(scenes[i]));
70                         newstep = getProjectElementService().getSteps(study);
71                         stopen = newstep[0]; // Default selected step
72
73                         // Creation of the menu
74                         for (Iterator<Step> i = steps.iterator(); i.hasNext();) {
75                                 Step step = i.next();
76                                 int number = step.getNumber();
77                                 Scenario group = (Scenario) step.getOwner(); // The menu includes first scenario steps only
78                                 int index = group.getIndex();
79                                 String value = index + "." + number;
80                                 String icon;
81                                 if (getScenarioService().isEmpty(group))
82                                         icon = "icon.empty.png";
83                                 // else if (group.isFinished()) icon = "icon.checked.png";
84                                 else
85                                         icon = "icon.done.png";
86                                 addGroup(value, group.getTitle(), icon,
87                                                 "select-step?selection=" + value + "&title=%{title}");
88                         }
89                 } else if (scopen == null || !scenew.equals(scopen)) {
90
91                         // Opening a scenario
92                         this.clear();
93                         // Collection of steps to be displayed
94                         Vector<Step> steps = new Vector<Step>();
95                         Step[] newstep = getProjectElementService().getSteps(scenew);
96
97                         for (int i = 0; i < newstep.length; i++) {
98                                 steps.add(newstep[i]);
99                         }
100                         for (int i = askid - 1; i > -1; i--)
101                                 steps.add(0, getProjectElementService().getFirstStep(scenes[i]));
102                         newstep = getProjectElementService().getSteps(study);
103                         for (int i = askid + 1; i < scenes.length; i++)
104                                 steps.add(getProjectElementService().getFirstStep(scenes[i]));
105
106                         // Creation of the menu
107                         boolean first = true; // For differentiating the first scenario step
108                         int askdex = Integer.valueOf(parse[1]);
109                         for (Iterator<Step> i = steps.iterator(); i.hasNext();) {
110                                 Step step = i.next();
111                                 int number = step.getNumber();
112                                 String icon;
113                                 if (!step.isStarted())
114                                         icon = "icon.empty.png";
115                                 else if (step.isFinished())
116                                         icon = "icon.checked.png";
117                                 else
118                                         icon = "icon.done.png";
119                                 if (number == askdex)
120                                         stopen = step;
121                                 Scenario group = (Scenario) step.getOwner();
122                                 int index = group.getIndex();
123                                 String value = index + "." + number;
124                                 if (index != scenew.getIndex()) {
125                                         if (getScenarioService().isEmpty(group))
126                                                 icon = "icon.empty.png";
127                                         // else if (group.isFinished()) icon = "icon.checked.png";
128                                         else
129                                                 icon = "icon.done.png";
130                                         addGroup(value, group.getTitle(), icon,
131                                                         "select-step?selection=" + value
132                                                                         + "&title=%{title}");
133                                 } else if (first) {
134                                         addGroup(value, scenew.getTitle(), icon,
135                                                         "select-step?selection=" + value
136                                                                         + "&title=%{title}");
137                                         first = false;
138                                 } else {
139                                         addSubItem(value, "menu.step." + number, icon,
140                                                         "select-step?selection=" + value
141                                                                         + "&title=%{title}");
142                                 }
143                         }
144                         scopen = scenew;
145                 }
146                 super.selects(name);
147         }
148
149         public void refreshSelectedItem() {
150                 // ----------------------------------
151                 MenuItem item = this.getSelectedItem();
152                 String icon;
153                 if (!stopen.isStarted())
154                         icon = "icon.empty.png";
155                 else if (stopen.isFinished())
156                         icon = "icon.checked.png";
157                 else
158                         icon = "icon.done.png";
159                 item.icon(icon);
160         }
161
162         /**
163          * Get the scenarioService.
164          * 
165          * @return the scenarioService
166          */
167         public ScenarioService getScenarioService() {
168                 return _scenarioService;
169         }
170
171         /**
172          * Set the scenarioService.
173          * 
174          * @param scenarioService
175          *            the scenarioService to set
176          */
177         public void setScenarioService(ScenarioService scenarioService) {
178                 _scenarioService = scenarioService;
179         }
180
181         /**
182          * Get the projectElementService.
183          * 
184          * @return the projectElementService
185          */
186         public ProjectElementService getProjectElementService() {
187                 return _projectElementService;
188         }
189
190         /**
191          * Set the projectElementService.
192          * 
193          * @param projectElementService
194          *            the projectElementService to set
195          */
196         public void setProjectElementService(
197                         ProjectElementService projectElementService) {
198                 _projectElementService = projectElementService;
199         }
200 }