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