1 /*****************************************************************************
5 * Creation date 07.10.2012
8 *****************************************************************************/
10 package org.splat.service;
12 import java.util.HashMap;
13 import java.util.Iterator;
14 import java.util.List;
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;
26 * Project element service implementation.
31 public class ProjectElementServiceImpl implements ProjectElementService {
34 * Injected project settings service.
36 private StepsConfigService _stepsConfigService;
38 * Injected project element DAO.
40 private ProjectElementDAO _projectElementDAO;
45 * @see org.splat.service.ProjectElementService#getFirstStep(org.splat.dal.bo.som.ProjectElement)
47 public Step getFirstStep(final ProjectElement elem) {
48 return getSteps(elem)[0];
53 * @see org.splat.service.ProjectElementService#getLastStep(org.splat.dal.bo.som.ProjectElement)
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];
63 * @see org.splat.service.ProjectElementService#getSteps(org.splat.dal.bo.som.ProjectElement)
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();
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);
76 return elem.getFolders(); // No protection against this object corruption as it would not corrupt the database
82 * @see org.splat.service.ProjectElementService#getStepsMap(org.splat.dal.bo.som.ProjectElement)
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);
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.
99 * the project element to refresh
102 public void refresh(final ProjectElement elem) {
103 Publication[] curdoc = elem.getDocums().toArray(
104 new Publication[elem.getDocums().size()]);
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]);
111 // No need to rebuild the list of SimulationContext as it does not use hashcodes
112 getProjectElementDAO().update(elem);
118 * @return steps config service
120 private StepsConfigService getStepsConfigService() {
121 return _stepsConfigService;
125 * Set steps config service.
127 * @param stepsConfigService
128 * steps config service
130 public void setStepsConfigService(
131 final StepsConfigService stepsConfigService) {
132 _stepsConfigService = stepsConfigService;
136 * Get the projectElementDAO.
138 * @return the projectElementDAO
140 public ProjectElementDAO getProjectElementDAO() {
141 return _projectElementDAO;
145 * Set the projectElementDAO.
147 * @param projectElementDAO
148 * the projectElementDAO to set
150 public void setProjectElementDAO(final ProjectElementDAO projectElementDAO) {
151 _projectElementDAO = projectElementDAO;