Salome HOME
The checkin from SALOME operation is updated (ScenarioService.checkin()). Versioning...
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / KnowledgeElementServiceImpl.java
index 1c107d545aa496765d674095b84250f698861833..2171ff9f4d05d14f4acf1419ddb5e97204dd6de8 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Company         EURIWARE
+ * Company         OPEN CASCADE
  * Application     SIMAN
  * File            $Id$ 
  * Creation date   06.10.2012
  * @version        $Revision$
  *****************************************************************************/
 
-package org.splat.service; 
+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.dao.kernel.GenericDAO;
-import org.splat.dal.dao.som.Database;
+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;
 
 /**
- * @author RKV
- *
+ * Knowledge element service implementation.
+ * 
+ * @author <a href="mailto:roman.kozlov@opencascade.com">Roman Kozlov (RKV)</a>
  */
 public class KnowledgeElementServiceImpl implements KnowledgeElementService {
 
+       /**
+        * The logger for the service.
+        */
+       public final static AppLogger LOG = AppLogger
+                       .getLogger(KnowledgeElementServiceImpl.class);
+
+       /**
+        * Injected index service.
+        */
        private IndexService _indexService;
+       /**
+        * Injected knowledge element DAO.
+        */
        private KnowledgeElementDAO _knowledgeElementDAO;
+       /**
+        * Injected study service.
+        */
+       private StudyService _studyService;
+       /**
+        * Injected project element service.
+        */
+       private ProjectElementService _projectElementService;
 
-       public boolean approve(KnowledgeElement knowledgeElement) {
-               // -------------------------
-               if (knowledgeElement.getProgressState() != ProgressState.inCHECK)
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#approve(org.splat.dal.bo.som.KnowledgeElement)
+        */
+       @Transactional
+       public boolean approve(final KnowledgeElement knowledgeElement) {
+               if (knowledgeElement.getProgressState() != ProgressState.inCHECK) {
                        return false;
+               }
                knowledgeElement.setProgressState(ProgressState.APPROVED);
                return update(knowledgeElement);
        }
 
-       public boolean demote(KnowledgeElement knowledgeElement) {
-               // ------------------------
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#demote(org.splat.dal.bo.som.KnowledgeElement)
+        */
+       @Transactional
+       public boolean demote(final KnowledgeElement knowledgeElement) {
                if (knowledgeElement.getProgressState() != ProgressState.APPROVED
-                               && knowledgeElement.getProgressState() != ProgressState.inCHECK)
+                               && knowledgeElement.getProgressState() != ProgressState.inCHECK) {
                        return false;
+               }
                knowledgeElement.setProgressState(ProgressState.inDRAFT);
                return update(knowledgeElement);
        }
 
-       protected boolean update(KnowledgeElement knowledgeElement) {
-               // -----------------------------
+       /**
+        * Update knowledge element in the database and in the lucene index.
+        * 
+        * @param knowledgeElement
+        *            the knowledge element to update
+        * @return true if updating succeeded
+        */
+       protected boolean update(final KnowledgeElement knowledgeElement) {
                try {
                        getKnowledgeElementDAO().update(knowledgeElement);
                        getIndexService().update(knowledgeElement);
                        return true;
                } catch (Exception error) {
-                       // logger.error("Unable to re-index the knowledge '" + getIndex() + "', reason:", error);
+                       LOG.error("Unable to re-index the knowledge '"
+                                       + knowledgeElement.getIndex() + "', reason:", error);
                        return false;
                }
        }
 
-       public boolean promote (KnowledgeElement knowledgeElement) {
-//  -------------------------
-      if  (knowledgeElement.getProgressState() != ProgressState.inDRAFT) return false;      
-      knowledgeElement.setProgressState(ProgressState.inCHECK);
-      return  update(knowledgeElement);
-    }
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#promote(org.splat.dal.bo.som.KnowledgeElement)
+        */
+       @Transactional
+       public boolean promote(final KnowledgeElement knowledgeElement) {
+               if (knowledgeElement.getProgressState() != ProgressState.inDRAFT) {
+                       return false;
+               }
+               knowledgeElement.setProgressState(ProgressState.inCHECK);
+               return update(knowledgeElement);
+       }
+
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#rename(org.splat.dal.bo.som.KnowledgeElement, java.lang.String)
+        */
+       @Transactional
+       public void rename(final KnowledgeElementDTO kelmDTO, final String title)
+                       throws InvalidPropertyException {
+               if (title.length() == 0) {
+                       throw new InvalidPropertyException("name");
+               }
+               KnowledgeElement kelm = getKnowledgeElementDAO().get(kelmDTO.getIndex());
+               kelm.setTitle(title);
+               // Update lucene index.
+               update(kelm);
+       }
+
+       /**
+        * Update the description of the knowledge element.
+        * 
+        * @param kelm
+        *            the knoledge element to update
+        * @param description
+        *            the new description
+        */
+       @Transactional
+       public void update(final KnowledgeElementDTO kelmDTO, final String description) {
+               KnowledgeElement kelm = getKnowledgeElementDAO().get(kelmDTO.getIndex());
+               kelm.setValue(description.trim());
+               if (!kelm.getValue().startsWith("<p>")) {
+                       StringBuffer text = new StringBuffer("<p>");
+                       int index = kelm.getValue().indexOf("<p>");
+                       if (index > 0) {
+                               kelm.setValue(text.append(kelm.getValue().substring(0, index))
+                                               .append("</p>")
+                                               .append(kelm.getValue().substring(index)).toString());
+                       } else {
+                               kelm.setValue(text.append(kelm.getValue()).append("</p>")
+                                               .toString());
+                       }
+               }
+       }
+
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#selectKnowledgeElement(long)
+        */
+       @Transactional(readOnly = true)
+       public KnowledgeElement selectKnowledgeElement(final long index) {
+               KnowledgeElement result = getKnowledgeElementDAO().get(index);
+               getStudyService().loadWorkflow(
+                               result.getOwnerScenario().getOwnerStudy());
+               return result;
+       }
+
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#getKnowledgeElement(long)
+        */
+       @Transactional(readOnly = true)
+       public KnowledgeElementDTO getKnowledgeElement(final 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(final Scenario scenar) {
+               Vector<Step> result = new Vector<Step>();
+               Step[] step = getProjectElementService().getSteps(scenar);
 
-    public void rename (KnowledgeElement knowledgeElement, String title) throws InvalidPropertyException {
-      if (title.length() == 0) throw new InvalidPropertyException("name");
-      knowledgeElement.setTitle(title);
-      update(knowledgeElement);
-    }
+               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;
+       }
 
        /**
-        * @return
+        * Get the indexService.
+        * 
+        * @return the indexService
         */
        public IndexService getIndexService() {
                return _indexService;
        }
 
-       public void setIndexService(IndexService indexService) {
+       /**
+        * Set the indexService.
+        * 
+        * @param indexService
+        *            the indexService to set
+        */
+       public void setIndexService(final IndexService indexService) {
                _indexService = indexService;
        }
 
        /**
-        * @return
+        * Get the knowledgeElementDAO.
+        * 
+        * @return the knowledgeElementDAO
         */
        public KnowledgeElementDAO getKnowledgeElementDAO() {
                return _knowledgeElementDAO;
        }
-       
-    public void setKnowledgeElementDAO(KnowledgeElementDAO knowledgeElementDAO) {
+
+       /**
+        * Set the knowledgeElementDAO.
+        * 
+        * @param knowledgeElementDAO
+        *            the knowledgeElementDAO to set
+        */
+       public void setKnowledgeElementDAO(final KnowledgeElementDAO knowledgeElementDAO) {
                _knowledgeElementDAO = knowledgeElementDAO;
        }
+
+       /**
+        * Get the studyService.
+        * 
+        * @return the studyService
+        */
+       public StudyService getStudyService() {
+               return _studyService;
+       }
+
+       /**
+        * Set the studyService.
+        * 
+        * @param studyService
+        *            the studyService to set
+        */
+       public void setStudyService(final 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(final ProjectElementService projectElementService) {
+               _projectElementService = projectElementService;
+       }
 }