/*****************************************************************************
- * 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 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;
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;
+ }
}