Salome HOME
More business logic has been moved from BO to services. ServiceLocator is created...
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / KnowledgeElementServiceImpl.java
index 1c107d545aa496765d674095b84250f698861833..c6c23dd38161a4aa88609ad418ef6340e013dffb 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Company         EURIWARE
+ * Company         OPEN CASCADE
  * Application     SIMAN
  * File            $Id$ 
  * Creation date   06.10.2012
@@ -7,35 +7,60 @@
  * @version        $Revision$
  *****************************************************************************/
 
-package org.splat.service; 
+package org.splat.service;
 
 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.dao.som.KnowledgeElementDAO;
 import org.splat.kernel.InvalidPropertyException;
+import org.splat.log.AppLogger;
 import org.splat.service.technical.IndexService;
+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 logger = AppLogger
+                       .getLogger(KnowledgeElementServiceImpl.class);
+
+       /**
+        * Injected index service.
+        */
        private IndexService _indexService;
+       /**
+        * Injected knowledge element DAO.
+        */
        private KnowledgeElementDAO _knowledgeElementDAO;
+       /**
+        * Injected study service.
+        */
+       private StudyService _studyService;
 
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#approve(org.splat.dal.bo.som.KnowledgeElement)
+        */
        public boolean approve(KnowledgeElement knowledgeElement) {
-               // -------------------------
                if (knowledgeElement.getProgressState() != ProgressState.inCHECK)
                        return false;
                knowledgeElement.setProgressState(ProgressState.APPROVED);
                return update(knowledgeElement);
        }
 
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#demote(org.splat.dal.bo.som.KnowledgeElement)
+        */
        public boolean demote(KnowledgeElement knowledgeElement) {
-               // ------------------------
                if (knowledgeElement.getProgressState() != ProgressState.APPROVED
                                && knowledgeElement.getProgressState() != ProgressState.inCHECK)
                        return false;
@@ -43,50 +68,137 @@ public class KnowledgeElementServiceImpl implements KnowledgeElementService {
                return update(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(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);
+                       logger.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)
+        */
+       public boolean promote(KnowledgeElement knowledgeElement) {
+               // -------------------------
+               if (knowledgeElement.getProgressState() != ProgressState.inDRAFT)
+                       return false;
+               knowledgeElement.setProgressState(ProgressState.inCHECK);
+               return update(knowledgeElement);
+       }
 
-    public void rename (KnowledgeElement knowledgeElement, String title) throws InvalidPropertyException {
-      if (title.length() == 0) throw new InvalidPropertyException("name");
-      knowledgeElement.setTitle(title);
-      update(knowledgeElement);
-    }
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#rename(org.splat.dal.bo.som.KnowledgeElement, java.lang.String)
+        */
+       public void rename(KnowledgeElement knowledgeElement, String title)
+                       throws InvalidPropertyException {
+               if (title.length() == 0)
+                       throw new InvalidPropertyException("name");
+               knowledgeElement.setTitle(title);
+               update(knowledgeElement);
+       }
+
+       /**
+        * {@inheritDoc}
+        * 
+        * @see org.splat.service.KnowledgeElementService#selectKnowledgeElement(long)
+        */
+       public KnowledgeElement selectKnowledgeElement(long index) {
+               KnowledgeElement result = getKnowledgeElementDAO().get(index);
+               getStudyService().loadWorkflow(result.getOwnerScenario().getOwnerStudy());
+               return result;
+       }
+
+       /**
+        * Update the description of the knowledge element.
+        * 
+        * @param kelm
+        *            the knoledge element to update
+        * @param description
+        *            the new description
+        */
+       @Transactional
+       public void update(KnowledgeElement kelm, String description) {
+               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());
+                       }
+               }
+               getKnowledgeElementDAO().update(kelm); // No need to update the Lucene index
+       }
 
        /**
-        * @return
+        * Get the indexService.
+        * 
+        * @return the indexService
         */
        public IndexService getIndexService() {
                return _indexService;
        }
 
+       /**
+        * Set the indexService.
+        * 
+        * @param indexService
+        *            the indexService to set
+        */
        public void setIndexService(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(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(StudyService studyService) {
+               _studyService = studyService;
+       }
 }