import java.util.List;
import org.splat.dal.bo.som.ProjectElement;
+import org.splat.dal.bo.som.Publication;
+import org.splat.dal.dao.som.Database;
+import org.splat.dal.dao.som.ProjectElementDAO;
import org.splat.service.technical.ProjectSettingsService;
import org.splat.som.Step;
+import org.springframework.transaction.annotation.Transactional;
/**
* Project element service implementation.
+ *
* @author RKV
*
*/
* Injected project settings service.
*/
private ProjectSettingsService _projectSettingsService;
+ /**
+ * Injected project element DAO.
+ */
+ private ProjectElementDAO _projectElementDAO;
- /**
+ /**
* {@inheritDoc}
+ *
* @see org.splat.service.ProjectElementService#getFirstStep(org.splat.dal.bo.som.ProjectElement)
*/
public Step getFirstStep(ProjectElement elem) {
return mystep[mystep.length - 1];
}
- /**
+ /**
* {@inheritDoc}
+ *
* @see org.splat.service.ProjectElementService#getSteps(org.splat.dal.bo.som.ProjectElement)
*/
public Step[] getSteps(ProjectElement elem) {
return elem.getFolders(); // No protection against this object corruption as it would not corrupt the database
}
+ /**
+ * Refreshes the internal data potentially out-of-date. This function needs to be called when Publication objects are added to this
+ * Project Element before being saved. The reason is, as saving a persistent object changes its hashcode, hashed data need to be rebuilt
+ * after saving for making functions based on this hashcode such as remove(), working.
+ * @param elem the project element to refresh
+ */
+ @Transactional
+ public void refresh(ProjectElement elem) {
+ // -------------------------
+ Publication[] curdoc = elem.getDocums().toArray(
+ new Publication[elem.getDocums().size()]);
+
+ elem.setFolders(null); // Just in case
+ elem.getDocums().clear();
+ for (int i = 0; i < curdoc.length; i++)
+ elem.getDocums().add(curdoc[i]);
+ // No need to rebuild the list of SimulationContext as it does not use hashcodes
+ getProjectElementDAO().update(elem);
+ }
+
/**
* Get project settings.
*
public void setProjectSettings(ProjectSettingsService projectSettingsService) {
_projectSettingsService = projectSettingsService;
}
+
+ /**
+ * Get the projectElementDAO.
+ * @return the projectElementDAO
+ */
+ public ProjectElementDAO getProjectElementDAO() {
+ return _projectElementDAO;
+ }
+
+ /**
+ * Set the projectElementDAO.
+ * @param projectElementDAO the projectElementDAO to set
+ */
+ public void setProjectElementDAO(ProjectElementDAO projectElementDAO) {
+ _projectElementDAO = projectElementDAO;
+ }
}