X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Workspace%2FSiman-Common%2Fsrc%2Forg%2Fsplat%2Fservice%2FKnowledgeElementServiceImpl.java;h=2171ff9f4d05d14f4acf1419ddb5e97204dd6de8;hb=f14d0cbc29a7347dc197650114562cceffe504ca;hp=1c107d545aa496765d674095b84250f698861833;hpb=e2ce0069b9e8edf8719ff26b2b1a68498d108fbc;p=tools%2Fsiman.git diff --git a/Workspace/Siman-Common/src/org/splat/service/KnowledgeElementServiceImpl.java b/Workspace/Siman-Common/src/org/splat/service/KnowledgeElementServiceImpl.java index 1c107d5..2171ff9 100644 --- a/Workspace/Siman-Common/src/org/splat/service/KnowledgeElementServiceImpl.java +++ b/Workspace/Siman-Common/src/org/splat/service/KnowledgeElementServiceImpl.java @@ -1,5 +1,5 @@ /***************************************************************************** - * Company EURIWARE + * Company OPEN CASCADE * Application SIMAN * File $Id$ * Creation date 06.10.2012 @@ -7,86 +7,288 @@ * @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 Roman Kozlov (RKV) */ 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("

")) { + StringBuffer text = new StringBuffer("

"); + int index = kelm.getValue().indexOf("

"); + if (index > 0) { + kelm.setValue(text.append(kelm.getValue().substring(0, index)) + .append("

") + .append(kelm.getValue().substring(index)).toString()); + } else { + kelm.setValue(text.append(kelm.getValue()).append("

") + .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 getAllSteps(final Scenario scenar) { + Vector result = new Vector(); + 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; + } }