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;
33 private static final long serialVersionUID = -5586724442986956861L;
35 protected enum ToDo { cancel, save };
37 // ==============================================================================================================================
39 // ==============================================================================================================================
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());
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;
56 Menu menu = new NewScenarioMenu(study);
57 menu.selects(selection);
58 getSession().put("menu.scenario", menu);
62 public String doSelectStep () {
63 // -----------------------------
64 mystudy = getOpenStudy();
65 Study study = mystudy.getStudyObject();
66 Scenario[] scene = study.getScenarii();
68 myscene = Arrays.asList(scene);
69 bastep = getProjectElementService().getFirstStep(scene[0]).getNumber(); // All scenarios have the same first step number
72 getMenu("scenario").selects(selection);
76 public String doCreate () {
77 // -------------------------
78 if (action == ToDo.cancel) return "cancel";
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]);
89 Scenario[] scene = study.getScenarii();
90 Scenario bascene = scene[0];
91 for (int i=1; i<scene.length; i++) {
93 if (bascene.getIndex() == scindex) break;
96 Scenario.Properties sprop = new Scenario.Properties().setManager(getConnectedUser()).setTitle(mytitle).setInsertAfter(bascene);
98 bastep = getProjectElementService().getFirstStep(bascene).getNumber();
99 if (this.sharesStep()) {
100 step = getProjectElementService().getSteps(bascene);
101 sprop.setBaseStep(step[number-bastep]);
103 bascene = getStudyService().addScenario(study, sprop);
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());
111 mystudy.setSelection(bascene.getIndex() + "." + number);
112 getSession().remove("menu.scenario");
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
121 } catch (HibernateException backerror) {
122 logger.debug("Error rolling back transaction", backerror);
127 catch (Exception error) {
132 // ==============================================================================================================================
133 // Getters and setters
134 // ==============================================================================================================================
136 public List<Scenario> getScenarii () {
137 // ------------------------------------
140 public long getSelectedScenarioIndex () {
141 // --------------------------------------
144 public String getSelection () {
145 // -----------------------------
148 public String getSharedStep () {
149 // -------------------------------
150 String[] parse = selection.split("\\x2E");
153 public String getTitle () {
154 // -------------------------
158 public void setCancel (boolean cancel) {
159 // --------------------------------------
160 action = ToDo.cancel;
162 public void setSave (boolean save) {
163 // ----------------------------------
166 public void setSelectedScenario (String index) {
167 // ----------------------------------------------
168 scindex = Integer.valueOf(index);
170 public void setSelection (String step) {
171 // --------------------------------------
174 public void setTitle (String title) {
175 // -----------------------------------
178 public Boolean sharesStep () {
179 // ----------------------------
180 return (Integer.valueOf(getSharedStep()) > bastep);
183 * Get the studyService.
185 * @return the studyService
187 public StudyService getStudyService() {
188 return _studyService;
192 * Set the studyService.
194 * @param studyService
195 * the studyService to set
197 public void setStudyService(StudyService studyService) {
198 _studyService = studyService;
201 * Get the projectElementService.
203 * @return the projectElementService
205 public ProjectElementService getProjectElementService() {
206 return _projectElementService;
210 * Set the projectElementService.
212 * @param projectElementService
213 * the projectElementService to set
215 public void setProjectElementService(
216 ProjectElementService projectElementService) {
217 _projectElementService = projectElementService;