Salome HOME
DTO is introduced for knowledge elements. BeanHelper is modified so that setters...
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / KnowledgeElementServiceImpl.java
index 76f86676cc9a76b825c59958e222f2d53af28e2c..c01cd6858eb99cae7553620e50f04055e115c7b5 100644 (file)
@@ -9,12 +9,19 @@
 
 package org.splat.service;
 
+import java.util.Collection;
+import java.util.Vector;
+
 import org.splat.dal.bo.som.KnowledgeElement;
 import org.splat.dal.bo.som.ProgressState;
+import org.splat.dal.bo.som.Scenario;
 import org.splat.dal.dao.som.KnowledgeElementDAO;
 import org.splat.kernel.InvalidPropertyException;
 import org.splat.log.AppLogger;
+import org.splat.service.dto.KnowledgeElementDTO;
 import org.splat.service.technical.IndexService;
+import org.splat.som.Step;
+import org.splat.util.BeanHelper;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
@@ -42,6 +49,10 @@ public class KnowledgeElementServiceImpl implements KnowledgeElementService {
         * Injected study service.
         */
        private StudyService _studyService;
+       /**
+        * Injected project element service.
+        */
+       private ProjectElementService _projectElementService;
 
        /**
         * {@inheritDoc}
@@ -72,7 +83,9 @@ public class KnowledgeElementServiceImpl implements KnowledgeElementService {
 
        /**
         * Update knowledge element in the database and in the lucene index.
-        * @param knowledgeElement the knowledge element to update
+        * 
+        * @param knowledgeElement
+        *            the knowledge element to update
         * @return true if updating succeeded
         */
        protected boolean update(KnowledgeElement knowledgeElement) {
@@ -120,10 +133,56 @@ public class KnowledgeElementServiceImpl implements KnowledgeElementService {
         * 
         * @see org.splat.service.KnowledgeElementService#selectKnowledgeElement(long)
         */
-       @Transactional(readOnly=true)
+       @Transactional(readOnly = true)
        public KnowledgeElement selectKnowledgeElement(long index) {
                KnowledgeElement result = getKnowledgeElementDAO().get(index);
-               getStudyService().loadWorkflow(result.getOwnerScenario().getOwnerStudy());
+               getStudyService().loadWorkflow(
+                               result.getOwnerScenario().getOwnerStudy());
+               return result;
+       }
+
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#getKnowledgeElement(long)
+        */
+       @Transactional(readOnly = true)
+       public KnowledgeElementDTO getKnowledgeElement(long index) {
+               KnowledgeElement kelm = getKnowledgeElementDAO().get(index);
+               getStudyService().loadWorkflow(kelm.getOwnerScenario().getOwnerStudy());
+               KnowledgeElementDTO result = BeanHelper.copyBean(kelm,
+                               KnowledgeElementDTO.class);
+               result.setScenarioTitle(kelm.getOwnerScenario().getTitle());
+               result.setStudyTitle(kelm.getOwnerScenario().getOwnerStudy().getTitle());
+               result.getInvolving().addAll(getAllSteps(kelm.getOwnerScenario()));
+               return result;
+       }
+
+       /**
+        * Get all steps of the scenario.
+        * @param scenar the scenario
+        * @return collection of steps
+        */
+       private Collection<? extends Step> getAllSteps(Scenario scenar) {
+               Vector<Step> result = new Vector<Step>();
+               Step[] step = getProjectElementService().getSteps(scenar);
+
+               int base = step[0].getNumber();
+               int last = step[step.length - 1].getNumber();
+               for (int i = 0; i < step.length; i++) {
+                       result.add(step[i]);
+               }
+               step = getProjectElementService().getSteps(scenar.getOwnerStudy());
+               for (int i = step.length - 1; i > -1; i--) {
+                       if (step[i].getNumber() >= base)
+                               continue;
+                       result.add(0, step[i]);
+               }
+               for (int i = 0; i < step.length; i++) {
+                       if (step[i].getNumber() <= last)
+                               continue;
+                       result.add(step[i]);
+               }
                return result;
        }
 
@@ -193,6 +252,7 @@ public class KnowledgeElementServiceImpl implements KnowledgeElementService {
 
        /**
         * Get the studyService.
+        * 
         * @return the studyService
         */
        public StudyService getStudyService() {
@@ -201,9 +261,27 @@ public class KnowledgeElementServiceImpl implements KnowledgeElementService {
 
        /**
         * Set the studyService.
-        * @param studyService the studyService to set
+        * 
+        * @param studyService
+        *            the studyService to set
         */
        public void setStudyService(StudyService studyService) {
                _studyService = studyService;
        }
+
+       /**
+        * Get the projectElementService.
+        * @return the projectElementService
+        */
+       public ProjectElementService getProjectElementService() {
+               return _projectElementService;
+       }
+
+       /**
+        * Set the projectElementService.
+        * @param projectElementService the projectElementService to set
+        */
+       public void setProjectElementService(ProjectElementService projectElementService) {
+               _projectElementService = projectElementService;
+       }
 }