1 /*****************************************************************************
5 * Creation date 06.10.2012
8 *****************************************************************************/
10 package org.splat.service;
12 import org.splat.dal.bo.som.KnowledgeElement;
13 import org.splat.dal.bo.som.ProgressState;
14 import org.splat.dal.dao.som.KnowledgeElementDAO;
15 import org.splat.kernel.InvalidPropertyException;
16 import org.splat.log.AppLogger;
17 import org.splat.service.technical.IndexService;
18 import org.springframework.transaction.annotation.Transactional;
21 * Knowledge element service implementation.
23 * @author <a href="mailto:roman.kozlov@opencascade.com">Roman Kozlov (RKV)</a>
25 public class KnowledgeElementServiceImpl implements KnowledgeElementService {
28 * The logger for the service.
30 public final static AppLogger logger = AppLogger
31 .getLogger(KnowledgeElementServiceImpl.class);
34 * Injected index service.
36 private IndexService _indexService;
38 * Injected knowledge element DAO.
40 private KnowledgeElementDAO _knowledgeElementDAO;
42 * Injected study service.
44 private StudyService _studyService;
49 * @see org.splat.service.KnowledgeElementService#approve(org.splat.dal.bo.som.KnowledgeElement)
51 public boolean approve(KnowledgeElement knowledgeElement) {
52 if (knowledgeElement.getProgressState() != ProgressState.inCHECK)
54 knowledgeElement.setProgressState(ProgressState.APPROVED);
55 return update(knowledgeElement);
61 * @see org.splat.service.KnowledgeElementService#demote(org.splat.dal.bo.som.KnowledgeElement)
63 public boolean demote(KnowledgeElement knowledgeElement) {
64 if (knowledgeElement.getProgressState() != ProgressState.APPROVED
65 && knowledgeElement.getProgressState() != ProgressState.inCHECK)
67 knowledgeElement.setProgressState(ProgressState.inDRAFT);
68 return update(knowledgeElement);
72 * Update knowledge element in the database and in the lucene index.
73 * @param knowledgeElement the knowledge element to update
74 * @return true if updating succeeded
76 protected boolean update(KnowledgeElement knowledgeElement) {
78 getKnowledgeElementDAO().update(knowledgeElement);
79 getIndexService().update(knowledgeElement);
81 } catch (Exception error) {
82 logger.error("Unable to re-index the knowledge '"
83 + knowledgeElement.getIndex() + "', reason:", error);
91 * @see org.splat.service.KnowledgeElementService#promote(org.splat.dal.bo.som.KnowledgeElement)
93 public boolean promote(KnowledgeElement knowledgeElement) {
94 // -------------------------
95 if (knowledgeElement.getProgressState() != ProgressState.inDRAFT)
97 knowledgeElement.setProgressState(ProgressState.inCHECK);
98 return update(knowledgeElement);
104 * @see org.splat.service.KnowledgeElementService#rename(org.splat.dal.bo.som.KnowledgeElement, java.lang.String)
106 public void rename(KnowledgeElement knowledgeElement, String title)
107 throws InvalidPropertyException {
108 if (title.length() == 0)
109 throw new InvalidPropertyException("name");
110 knowledgeElement.setTitle(title);
111 update(knowledgeElement);
117 * @see org.splat.service.KnowledgeElementService#selectKnowledgeElement(long)
119 public KnowledgeElement selectKnowledgeElement(long index) {
120 KnowledgeElement result = getKnowledgeElementDAO().get(index);
121 getStudyService().loadWorkflow(result.getOwnerScenario().getOwnerStudy());
126 * Update the description of the knowledge element.
129 * the knoledge element to update
131 * the new description
134 public void update(KnowledgeElement kelm, String description) {
135 kelm.setValue(description.trim());
136 if (!kelm.getValue().startsWith("<p>")) {
137 StringBuffer text = new StringBuffer("<p>");
138 int index = kelm.getValue().indexOf("<p>");
140 kelm.setValue(text.append(kelm.getValue().substring(0, index))
142 .append(kelm.getValue().substring(index)).toString());
144 kelm.setValue(text.append(kelm.getValue()).append("</p>")
148 getKnowledgeElementDAO().update(kelm); // No need to update the Lucene index
152 * Get the indexService.
154 * @return the indexService
156 public IndexService getIndexService() {
157 return _indexService;
161 * Set the indexService.
163 * @param indexService
164 * the indexService to set
166 public void setIndexService(IndexService indexService) {
167 _indexService = indexService;
171 * Get the knowledgeElementDAO.
173 * @return the knowledgeElementDAO
175 public KnowledgeElementDAO getKnowledgeElementDAO() {
176 return _knowledgeElementDAO;
180 * Set the knowledgeElementDAO.
182 * @param knowledgeElementDAO
183 * the knowledgeElementDAO to set
185 public void setKnowledgeElementDAO(KnowledgeElementDAO knowledgeElementDAO) {
186 _knowledgeElementDAO = knowledgeElementDAO;
190 * Get the studyService.
191 * @return the studyService
193 public StudyService getStudyService() {
194 return _studyService;
198 * Set the studyService.
199 * @param studyService the studyService to set
201 public void setStudyService(StudyService studyService) {
202 _studyService = studyService;