Salome HOME
Modifications done to respect PMD rules. Versioning a document is fixed. Validation...
[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.som.Step;
20 import org.springframework.transaction.annotation.Transactional;
21
22 /**
23  * Project element service implementation.
24  * 
25  * @author RKV
26  * 
27  */
28 public class ProjectElementServiceImpl implements ProjectElementService {
29
30         /**
31          * Injected project settings service.
32          */
33         private ProjectSettingsService _projectSettings;
34         /**
35          * Injected project element DAO.
36          */
37         private ProjectElementDAO _projectElementDAO;
38
39         /**
40          * {@inheritDoc}
41          * 
42          * @see org.splat.service.ProjectElementService#getFirstStep(org.splat.dal.bo.som.ProjectElement)
43          */
44         public Step getFirstStep(final ProjectElement elem) {
45                 return getSteps(elem)[0];
46         }
47
48         public Step getLastStep(final ProjectElement elem) {
49                 Step[] mystep = getSteps(elem); // For getting the folders length, if null
50                 return mystep[mystep.length - 1];
51         }
52
53         /**
54          * {@inheritDoc}
55          * 
56          * @see org.splat.service.ProjectElementService#getSteps(org.splat.dal.bo.som.ProjectElement)
57          */
58         public Step[] getSteps(final ProjectElement elem) {
59                 if (elem.getFolders() == null) {
60                         List<ProjectSettingsService.Step> steps = getProjectSettings()
61                                         .getStepsOf(elem.getClass());
62                         Iterator<ProjectSettingsService.Step> nstep = steps.iterator();
63
64                         elem.setFolders(new Step[steps.size()]);
65                         for (int i = 0; i < elem.getFolders().length; i++) {
66                                 elem.getFolders()[i] = new Step(nstep.next(), elem);
67                         }
68                 }
69                 return elem.getFolders(); // No protection against this object corruption as it would not corrupt the database
70         }
71
72         /**
73          * Refreshes the internal data potentially out-of-date. This function needs to be called when Publication objects are added to this
74          * Project Element before being saved. The reason is, as saving a persistent object changes its hashcode, hashed data need to be rebuilt
75          * after saving for making functions based on this hashcode such as remove(), working.
76          * @param elem the project element to refresh
77          */
78         @Transactional
79         public void refresh(final ProjectElement elem) {
80                 // -------------------------
81                 Publication[] curdoc = elem.getDocums().toArray(
82                                 new Publication[elem.getDocums().size()]);
83
84                 elem.setFolders(null); // Just in case
85                 elem.getDocums().clear();
86                 for (int i = 0; i < curdoc.length; i++) {
87                         elem.getDocums().add(curdoc[i]);
88                 }
89                 // No need to rebuild the list of SimulationContext as it does not use hashcodes
90                 getProjectElementDAO().update(elem);
91         }
92
93         /**
94          * Get project settings.
95          * 
96          * @return Project settings service
97          */
98         private ProjectSettingsService getProjectSettings() {
99                 return _projectSettings;
100         }
101
102         /**
103          * Set project settings service.
104          * 
105          * @param projectSettingsService
106          *            project settings service
107          */
108         public void setProjectSettings(final ProjectSettingsService projectSettingsService) {
109                 _projectSettings = projectSettingsService;
110         }
111
112         /**
113          * Get the projectElementDAO.
114          * @return the projectElementDAO
115          */
116         public ProjectElementDAO getProjectElementDAO() {
117                 return _projectElementDAO;
118         }
119
120         /**
121          * Set the projectElementDAO.
122          * @param projectElementDAO the projectElementDAO to set
123          */
124         public void setProjectElementDAO(final ProjectElementDAO projectElementDAO) {
125                 _projectElementDAO = projectElementDAO;
126         }
127 }