1 package org.splat.simer;
3 import java.util.Arrays;
4 import java.util.Iterator;
6 import java.util.ResourceBundle;
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;
21 public class NewScenarioAction extends Action {
23 private OpenStudy mystudy;
24 private List<Scenario> myscene;
25 private String mytitle;
26 private String selection;
30 private StudyService _studyService;
31 private ProjectElementService _projectElementService;
36 private static final long serialVersionUID = -5586724442986956861L;
38 protected enum ToDo { cancel, save };
40 // ==============================================================================================================================
42 // ==============================================================================================================================
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());
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;
59 Menu menu = new NewScenarioMenu(study);
60 menu.selects(selection);
61 getSession().put("menu.scenario", menu);
65 public String doSelectStep () {
66 // -----------------------------
67 mystudy = getOpenStudy();
68 Study study = mystudy.getStudyObject();
69 Scenario[] scene = study.getScenarii();
71 myscene = Arrays.asList(scene);
72 bastep = getProjectElementService().getFirstStep(scene[0]).getNumber(); // All scenarios have the same first step number
75 getMenu("scenario").selects(selection);
79 public String doCreate () {
80 // -------------------------
81 if (action == ToDo.cancel) return "cancel";
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]);
92 Scenario[] scene = study.getScenarii();
93 Scenario bascene = scene[0];
94 for (int i=1; i<scene.length; i++) {
96 if (bascene.getIndex() == scindex) break;
99 Scenario.Properties sprop = new Scenario.Properties().setManager(getConnectedUser()).setTitle(mytitle).setInsertAfter(bascene);
101 bastep = getProjectElementService().getFirstStep(bascene).getNumber();
102 if (this.sharesStep()) {
103 step = getProjectElementService().getSteps(bascene);
104 sprop.setBaseStep(step[number-bastep]);
106 bascene = getStudyService().addScenario(study, sprop);
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());
114 mystudy.setSelection(bascene.getIndex() + "." + number);
115 getSession().remove("menu.scenario");
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
124 } catch (HibernateException backerror) {
125 logger.debug("Error rolling back transaction", backerror);
130 catch (Exception error) {
135 // ==============================================================================================================================
136 // Getters and setters
137 // ==============================================================================================================================
139 public List<Scenario> getScenarii () {
140 // ------------------------------------
143 public long getSelectedScenarioIndex () {
144 // --------------------------------------
147 public String getSelection () {
148 // -----------------------------
151 public String getSharedStep () {
152 // -------------------------------
153 String[] parse = selection.split("\\x2E");
156 public String getTitle () {
157 // -------------------------
161 public void setCancel (boolean cancel) {
162 // --------------------------------------
163 action = ToDo.cancel;
165 public void setSave (boolean save) {
166 // ----------------------------------
169 public void setSelectedScenario (String index) {
170 // ----------------------------------------------
171 scindex = Integer.valueOf(index);
173 public void setSelection (String step) {
174 // --------------------------------------
177 public void setTitle (String title) {
178 // -----------------------------------
181 public Boolean sharesStep () {
182 // ----------------------------
183 return (Integer.valueOf(getSharedStep()) > bastep);
186 * Get the studyService.
188 * @return the studyService
190 public StudyService getStudyService() {
191 return _studyService;
195 * Set the studyService.
197 * @param studyService
198 * the studyService to set
200 public void setStudyService(StudyService studyService) {
201 _studyService = studyService;
204 * Get the projectElementService.
206 * @return the projectElementService
208 public ProjectElementService getProjectElementService() {
209 return _projectElementService;
213 * Set the projectElementService.
215 * @param projectElementService
216 * the projectElementService to set
218 public void setProjectElementService(
219 ProjectElementService projectElementService) {
220 _projectElementService = projectElementService;