Salome HOME
Refactoring continues: UserService is created instead of UserDirectory. Database...
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / ProjectElementServiceImpl.java
index 84fc9df07753b7b7734a2f350cb868401403ccdb..7e7537617365fe1214b3ee0239384dba073269fc 100644 (file)
@@ -13,11 +13,16 @@ import java.util.Iterator;
 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
  * 
  */
@@ -27,9 +32,14 @@ public class ProjectElementServiceImpl implements ProjectElementService {
         * 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) {
@@ -41,8 +51,9 @@ public class ProjectElementServiceImpl implements ProjectElementService {
                return mystep[mystep.length - 1];
        }
 
-       /** 
+       /**
         * {@inheritDoc}
+        * 
         * @see org.splat.service.ProjectElementService#getSteps(org.splat.dal.bo.som.ProjectElement)
         */
        public Step[] getSteps(ProjectElement elem) {
@@ -59,6 +70,26 @@ public class ProjectElementServiceImpl implements ProjectElementService {
                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.
         * 
@@ -77,4 +108,20 @@ public class ProjectElementServiceImpl implements ProjectElementService {
        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;
+       }
 }