Salome HOME
9ff3ed6c8708e70f177acf8962624893d31eef64
[tools/siman.git] / Workspace / Siman / src / org / splat / simer / NewScenarioAction.java
1 package org.splat.simer;
2
3 import java.util.Arrays;
4 import java.util.Iterator;
5 import java.util.List;
6 import java.util.ResourceBundle;
7
8 import org.hibernate.HibernateException;
9 import org.hibernate.Session;
10 import org.hibernate.Transaction;
11 import org.splat.dal.dao.som.Database;
12 import org.splat.dal.bo.som.Publication;
13 import org.splat.dal.bo.som.Scenario;
14 import org.splat.service.ProjectElementService;
15 import org.splat.service.StudyService;
16 import org.splat.som.Step;
17 import org.splat.dal.bo.som.Study;
18 import org.splat.wapp.Menu;
19
20
21 public class NewScenarioAction extends Action {
22
23         private  OpenStudy        mystudy;
24         private  List<Scenario>   myscene;
25         private  String           mytitle;
26     private  String           selection;
27     private  long              scindex;
28     private  int              bastep;
29     private  ToDo             action;
30         private StudyService _studyService;
31         private ProjectElementService _projectElementService;
32         private Menu _menu;
33
34         /**
35          * Serial version ID.
36          */
37         private static final long serialVersionUID = -5586724442986956861L;
38
39     protected enum  ToDo { cancel, save };
40
41 //  ==============================================================================================================================
42 //  Action methods
43 //  ==============================================================================================================================
44
45     public String doInitialize () {
46 //  -----------------------------    
47                      mystudy = getOpenStudy();
48       Study          study   = mystudy.getStudyObject();
49       Scenario[]     scene   = study.getScenarii();
50       Scenario       base    = scene[scene.length-1];   // Default base scenario
51       ResourceBundle locale  = ResourceBundle.getBundle("labels", ApplicationSettings.getCurrentLocale());
52
53       myscene   = Arrays.asList(scene);
54       scindex   = base.getIndex();
55       mytitle   = locale.getString("label.scenario") + " " + String.valueOf(scene.length+1);
56       bastep    = getProjectElementService().getFirstStep(base).getNumber();      // Better use the last current step ?
57       selection = scindex + "." + bastep;
58       action    = null;
59       
60 //RKV      Menu menu = new NewScenarioMenu(study);
61       Menu menu = ((NewScenarioMenu)getMenu()).init(study); //RKV
62       menu.selects(selection);
63       getSession().put("menu.scenario", menu);
64       return SUCCESS;
65     }
66
67     public String doSelectStep () {
68 //  -----------------------------
69                  mystudy = getOpenStudy();
70       Study      study   = mystudy.getStudyObject();
71       Scenario[] scene   = study.getScenarii();
72
73       myscene   = Arrays.asList(scene);
74       bastep    = getProjectElementService().getFirstStep(scene[0]).getNumber();  // All scenarios have the same first step number
75       action    = null;
76         
77       getMenu("scenario").selects(selection);
78       return SUCCESS;
79     }
80
81     public String doCreate () {
82 //  -------------------------
83       if (action == ToDo.cancel) return "cancel";
84
85       Session      session   = Database.getSession();
86           Transaction  transax   = session.beginTransaction();  
87           try {        mystudy   = getOpenStudy();
88                    selection = getMenu("scenario").getSelection();
89         Study      study     = mystudy.getStudyObject();
90         String[]   parse     = selection.split("\\x2E");
91         int        scindex   = Integer.valueOf(parse[0]);
92         int        number    = Integer.valueOf(parse[1]);
93
94         Scenario[] scene     = study.getScenarii(); 
95         Scenario   bascene   = scene[0];
96         for (int i=1; i<scene.length; i++) {
97           bascene = scene[i];
98           if (bascene.getIndex() == scindex) break;
99         }
100         Step[]              step  = null;        
101         Scenario.Properties sprop = new Scenario.Properties().setManager(getConnectedUser()).setTitle(mytitle).setInsertAfter(bascene);
102
103         bastep = getProjectElementService().getFirstStep(bascene).getNumber();
104         if (this.sharesStep()) {
105           step = getProjectElementService().getSteps(bascene);
106           sprop.setBaseStep(step[number-bastep]);
107         }
108         bascene = getStudyService().addScenario(study, sprop);
109         transax.commit();
110
111 //      Update of the display
112         if (step != null) for (int i=0; i<number-bastep+1; i++) {
113           List<Publication>  contents = step[i].getAllDocuments();
114           for (Iterator<Publication> j=contents.iterator(); j.hasNext(); ) mystudy.update(j.next());
115         }
116         mystudy.setSelection(bascene.getIndex() + "." + number);
117         getSession().remove("menu.scenario");
118             return SUCCESS;
119           }
120       catch (RuntimeException saverror) {
121         logger.error("Reason:", saverror);
122         if (transax != null && transax.isActive()) {
123 //        Second try-catch as the rollback could fail as well
124           try {
125                 transax.rollback();
126           } catch (HibernateException backerror) {
127             logger.debug("Error rolling back transaction", backerror);
128           }
129         }
130         return ERROR;
131       }
132           catch (Exception error) {
133         return INPUT;
134       }
135     }
136
137 //  ==============================================================================================================================
138 //  Getters and setters
139 //  ==============================================================================================================================
140
141     public List<Scenario> getScenarii () {
142 //  ------------------------------------
143       return myscene;
144     }
145     public long getSelectedScenarioIndex () {
146 //  --------------------------------------
147       return scindex;
148     }
149     public String getSelection () {
150 //  -----------------------------
151       return selection;
152     }
153     public String getSharedStep () {
154 //  -------------------------------
155       String[] parse = selection.split("\\x2E");
156       return   parse[1];
157     }
158     public String getTitle () {
159 //  -------------------------
160       return mytitle;
161     }
162
163     public void setCancel (boolean cancel) {
164 //  --------------------------------------
165       action = ToDo.cancel;
166     }
167     public void setSave (boolean save) {
168 //  ----------------------------------
169       action = ToDo.save;
170     }
171     public void setSelectedScenario (String index) {
172 //  ----------------------------------------------
173       scindex = Integer.valueOf(index);
174     }
175     public void setSelection (String step) {
176 //  --------------------------------------
177       selection = step;
178     }
179     public void setTitle (String title) {
180 //  -----------------------------------
181       mytitle = title;
182     }
183     public Boolean sharesStep () {
184 //  ----------------------------
185       return (Integer.valueOf(getSharedStep()) > bastep);
186     }
187         /**
188          * Get the studyService.
189          * 
190          * @return the studyService
191          */
192         public StudyService getStudyService() {
193                 return _studyService;
194         }
195
196         /**
197          * Set the studyService.
198          * 
199          * @param studyService
200          *            the studyService to set
201          */
202         public void setStudyService(StudyService studyService) {
203                 _studyService = studyService;
204         }
205         /**
206          * Get the projectElementService.
207          * 
208          * @return the projectElementService
209          */
210         public ProjectElementService getProjectElementService() {
211                 return _projectElementService;
212         }
213
214         /**
215          * Set the projectElementService.
216          * 
217          * @param projectElementService
218          *            the projectElementService to set
219          */
220         public void setProjectElementService(
221                         ProjectElementService projectElementService) {
222                 _projectElementService = projectElementService;
223         }
224
225         /**
226          * Get the menu.
227          * @return the menu
228          */
229         public Menu getMenu() {
230                 return _menu;
231         }
232
233         /**
234          * Set the menu.
235          * @param menu the menu to set
236          */
237         public void setMenu(Menu menu) {
238                 _menu = menu;
239         }
240 }