1 /*****************************************************************************
5 * Creation date 07.10.2012
8 *****************************************************************************/
10 package org.splat.service;
12 import java.util.Iterator;
13 import java.util.List;
15 import org.splat.dal.bo.som.ProjectElement;
16 import org.splat.dal.bo.som.Publication;
17 import org.splat.dal.dao.som.Database;
18 import org.splat.dal.dao.som.ProjectElementDAO;
19 import org.splat.service.technical.ProjectSettingsService;
20 import org.splat.som.Step;
21 import org.springframework.transaction.annotation.Transactional;
24 * Project element service implementation.
29 public class ProjectElementServiceImpl implements ProjectElementService {
32 * Injected project settings service.
34 private ProjectSettingsService _projectSettingsService;
36 * Injected project element DAO.
38 private ProjectElementDAO _projectElementDAO;
43 * @see org.splat.service.ProjectElementService#getFirstStep(org.splat.dal.bo.som.ProjectElement)
45 public Step getFirstStep(ProjectElement elem) {
46 return getSteps(elem)[0];
49 public Step getLastStep(ProjectElement elem) {
50 Step[] mystep = getSteps(elem); // For getting the folders length, if null
51 return mystep[mystep.length - 1];
57 * @see org.splat.service.ProjectElementService#getSteps(org.splat.dal.bo.som.ProjectElement)
59 public Step[] getSteps(ProjectElement elem) {
60 if (elem.getFolders() == null) {
61 List<ProjectSettingsService.Step> steps = getProjectSettings()
62 .getStepsOf(elem.getClass());
63 Iterator<ProjectSettingsService.Step> nstep = steps.iterator();
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);
70 return elem.getFolders(); // No protection against this object corruption as it would not corrupt the database
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
80 public void refresh(ProjectElement elem) {
81 // -------------------------
82 Publication[] curdoc = elem.getDocums().toArray(
83 new Publication[elem.getDocums().size()]);
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 // No need to rebuild the list of SimulationContext as it does not use hashcodes
90 getProjectElementDAO().update(elem);
94 * Get project settings.
96 * @return Project settings service
98 private ProjectSettingsService getProjectSettings() {
99 return _projectSettingsService;
103 * Set project settings service.
105 * @param projectSettingsService
106 * project settings service
108 public void setProjectSettings(ProjectSettingsService projectSettingsService) {
109 _projectSettingsService = projectSettingsService;
113 * Get the projectElementDAO.
114 * @return the projectElementDAO
116 public ProjectElementDAO getProjectElementDAO() {
117 return _projectElementDAO;
121 * Set the projectElementDAO.
122 * @param projectElementDAO the projectElementDAO to set
124 public void setProjectElementDAO(ProjectElementDAO projectElementDAO) {
125 _projectElementDAO = projectElementDAO;