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