]> SALOME platform Git repositories - tools/siman.git/blob - Workspace/Siman-Common/src/org/splat/service/ProjectElementServiceImpl.java
Salome HOME
Study validation cycle operations are implemented according to the specification.
[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.HashMap;
13 import java.util.Iterator;
14 import java.util.List;
15 import java.util.Map;
16
17 import org.splat.dal.bo.som.ProjectElement;
18 import org.splat.dal.bo.som.Publication;
19 import org.splat.dal.dao.som.ProjectElementDAO;
20 import org.splat.service.technical.ProjectSettingsService;
21 import org.splat.service.technical.StepsConfigService;
22 import org.splat.som.Step;
23 import org.springframework.transaction.annotation.Transactional;
24
25 /**
26  * Project element service implementation.
27  * 
28  * @author RKV
29  * 
30  */
31 public class ProjectElementServiceImpl implements ProjectElementService {
32
33         /**
34          * Injected project settings service.
35          */
36         private StepsConfigService _stepsConfigService;
37         /**
38          * Injected project element DAO.
39          */
40         private ProjectElementDAO _projectElementDAO;
41
42         /**
43          * {@inheritDoc}
44          * 
45          * @see org.splat.service.ProjectElementService#getFirstStep(org.splat.dal.bo.som.ProjectElement)
46          */
47         public Step getFirstStep(final ProjectElement elem) {
48                 return getSteps(elem)[0];
49         }
50
51         /** 
52          * {@inheritDoc}
53          * @see org.splat.service.ProjectElementService#getLastStep(org.splat.dal.bo.som.ProjectElement)
54          */
55         public Step getLastStep(final ProjectElement elem) {
56                 Step[] mystep = getSteps(elem); // For getting the folders length, if null
57                 return mystep[mystep.length - 1];
58         }
59
60         /**
61          * {@inheritDoc}
62          * 
63          * @see org.splat.service.ProjectElementService#getSteps(org.splat.dal.bo.som.ProjectElement)
64          */
65         public Step[] getSteps(final ProjectElement elem) {
66                 if (elem.getFolders() == null) {
67                         List<ProjectSettingsService.Step> steps = getStepsConfigService()
68                                         .getStepsOf(elem.getClass());
69                         Iterator<ProjectSettingsService.Step> nstep = steps.iterator();
70
71                         elem.setFolders(new Step[steps.size()]);
72                         for (int i = 0; i < elem.getFolders().length; i++) {
73                                 elem.getFolders()[i] = new Step(nstep.next(), elem);
74                         }
75                 }
76                 return elem.getFolders(); // No protection against this object corruption as it would not corrupt the database
77         }
78
79         /**
80          * {@inheritDoc}
81          * 
82          * @see org.splat.service.ProjectElementService#getStepsMap(org.splat.dal.bo.som.ProjectElement)
83          */
84         public Map<Integer, Step> getStepsMap(final ProjectElement elem) {
85                 Step[] steps = getSteps(elem);
86                 Map<Integer, Step> res = new HashMap<Integer, Step>();
87                 for (Step step : steps) {
88                         res.put(step.getNumber(), step);
89                 }
90                 return res;
91         }
92
93         /**
94          * Refreshes the internal data potentially out-of-date. This function needs to be called when Publication objects are added to this
95          * Project Element before being saved. The reason is, as saving a persistent object changes its hashcode, hashed data need to be rebuilt
96          * after saving for making functions based on this hashcode such as remove(), working.
97          * 
98          * @param elem
99          *            the project element to refresh
100          */
101         @Transactional
102         public void refresh(final ProjectElement elem) {
103                 Publication[] curdoc = elem.getDocums().toArray(
104                                 new Publication[elem.getDocums().size()]);
105
106                 elem.setFolders(null); // Just in case
107                 elem.getDocums().clear();
108                 for (int i = 0; i < curdoc.length; i++) {
109                         elem.getDocums().add(curdoc[i]);
110                 }
111                 // No need to rebuild the list of SimulationContext as it does not use hashcodes
112                 getProjectElementDAO().update(elem);
113         }
114
115         /**
116          * Get steps config.
117          * 
118          * @return steps config service
119          */
120         private StepsConfigService getStepsConfigService() {
121                 return _stepsConfigService;
122         }
123
124         /**
125          * Set steps config service.
126          * 
127          * @param stepsConfigService
128          *            steps config service
129          */
130         public void setStepsConfigService(
131                         final StepsConfigService stepsConfigService) {
132                 _stepsConfigService = stepsConfigService;
133         }
134
135         /**
136          * Get the projectElementDAO.
137          * 
138          * @return the projectElementDAO
139          */
140         public ProjectElementDAO getProjectElementDAO() {
141                 return _projectElementDAO;
142         }
143
144         /**
145          * Set the projectElementDAO.
146          * 
147          * @param projectElementDAO
148          *            the projectElementDAO to set
149          */
150         public void setProjectElementDAO(final ProjectElementDAO projectElementDAO) {
151                 _projectElementDAO = projectElementDAO;
152         }
153 }