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