Salome HOME
ProjectSettings are now configured when the bean is created (without call to a struts...
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / ProjectElementServiceImpl.java
1 /*****************************************************************************
2  * Company         OPEN CASCADE
3  * Application     SIMAN
4  * File            $Id$ 
5  * Creation date   07.10.2012
6  * @author         $Author$
7  * @version        $Revision$
8  *****************************************************************************/
9
10 package org.splat.service;
11
12 import java.util.Iterator;
13 import java.util.List;
14
15 import org.splat.dal.bo.som.ProjectElement;
16 import org.splat.dal.bo.som.Publication;
17 import org.splat.dal.dao.som.ProjectElementDAO;
18 import org.splat.service.technical.ProjectSettingsService;
19 import org.splat.service.technical.StepsConfigService;
20 import org.splat.som.Step;
21 import org.springframework.transaction.annotation.Transactional;
22
23 /**
24  * Project element service implementation.
25  * 
26  * @author RKV
27  * 
28  */
29 public class ProjectElementServiceImpl implements ProjectElementService {
30
31         /**
32          * Injected project settings service.
33          */
34         private StepsConfigService _stepsConfigService;
35         /**
36          * Injected project element DAO.
37          */
38         private ProjectElementDAO _projectElementDAO;
39
40         /**
41          * {@inheritDoc}
42          * 
43          * @see org.splat.service.ProjectElementService#getFirstStep(org.splat.dal.bo.som.ProjectElement)
44          */
45         public Step getFirstStep(final ProjectElement elem) {
46                 return getSteps(elem)[0];
47         }
48
49         public Step getLastStep(final ProjectElement elem) {
50                 Step[] mystep = getSteps(elem); // For getting the folders length, if null
51                 return mystep[mystep.length - 1];
52         }
53
54         /**
55          * {@inheritDoc}
56          * 
57          * @see org.splat.service.ProjectElementService#getSteps(org.splat.dal.bo.som.ProjectElement)
58          */
59         public Step[] getSteps(final ProjectElement elem) {
60                 if (elem.getFolders() == null) {
61                         List<ProjectSettingsService.Step> steps = getStepsConfigService()
62                                         .getStepsOf(elem.getClass());
63                         Iterator<ProjectSettingsService.Step> nstep = steps.iterator();
64
65                         elem.setFolders(new Step[steps.size()]);
66                         for (int i = 0; i < elem.getFolders().length; i++) {
67                                 elem.getFolders()[i] = new Step(nstep.next(), elem);
68                         }
69                 }
70                 return elem.getFolders(); // No protection against this object corruption as it would not corrupt the database
71         }
72
73         /**
74          * Refreshes the internal data potentially out-of-date. This function needs to be called when Publication objects are added to this
75          * Project Element before being saved. The reason is, as saving a persistent object changes its hashcode, hashed data need to be rebuilt
76          * after saving for making functions based on this hashcode such as remove(), working.
77          * @param elem the project element to refresh
78          */
79         @Transactional
80         public void refresh(final ProjectElement elem) {
81                 // -------------------------
82                 Publication[] curdoc = elem.getDocums().toArray(
83                                 new Publication[elem.getDocums().size()]);
84
85                 elem.setFolders(null); // Just in case
86                 elem.getDocums().clear();
87                 for (int i = 0; i < curdoc.length; i++) {
88                         elem.getDocums().add(curdoc[i]);
89                 }
90                 // No need to rebuild the list of SimulationContext as it does not use hashcodes
91                 getProjectElementDAO().update(elem);
92         }
93
94         /**
95          * Get steps config.
96          * 
97          * @return steps config service
98          */
99         private StepsConfigService getStepsConfigService() {
100                 return _stepsConfigService;
101         }
102
103         /**
104          * Set steps config service.
105          * 
106          * @param stepsConfigService
107          *            steps config service
108          */
109         public void setStepsConfigService(final StepsConfigService stepsConfigService) {
110                 _stepsConfigService = stepsConfigService;
111         }
112
113         /**
114          * Get the projectElementDAO.
115          * @return the projectElementDAO
116          */
117         public ProjectElementDAO getProjectElementDAO() {
118                 return _projectElementDAO;
119         }
120
121         /**
122          * Set the projectElementDAO.
123          * @param projectElementDAO the projectElementDAO to set
124          */
125         public void setProjectElementDAO(final ProjectElementDAO projectElementDAO) {
126                 _projectElementDAO = projectElementDAO;
127         }
128 }