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)
52 public boolean approve(KnowledgeElement knowledgeElement) {
53 if (knowledgeElement.getProgressState() != ProgressState.inCHECK)
55 knowledgeElement.setProgressState(ProgressState.APPROVED);
56 return update(knowledgeElement);
62 * @see org.splat.service.KnowledgeElementService#demote(org.splat.dal.bo.som.KnowledgeElement)
65 public boolean demote(KnowledgeElement knowledgeElement) {
66 if (knowledgeElement.getProgressState() != ProgressState.APPROVED
67 && knowledgeElement.getProgressState() != ProgressState.inCHECK)
69 knowledgeElement.setProgressState(ProgressState.inDRAFT);
70 return update(knowledgeElement);
74 * Update knowledge element in the database and in the lucene index.
75 * @param knowledgeElement the knowledge element to update
76 * @return true if updating succeeded
78 protected boolean update(KnowledgeElement knowledgeElement) {
80 getKnowledgeElementDAO().update(knowledgeElement);
81 getIndexService().update(knowledgeElement);
83 } catch (Exception error) {
84 logger.error("Unable to re-index the knowledge '"
85 + knowledgeElement.getIndex() + "', reason:", error);
93 * @see org.splat.service.KnowledgeElementService#promote(org.splat.dal.bo.som.KnowledgeElement)
96 public boolean promote(KnowledgeElement knowledgeElement) {
97 // -------------------------
98 if (knowledgeElement.getProgressState() != ProgressState.inDRAFT)
100 knowledgeElement.setProgressState(ProgressState.inCHECK);
101 return update(knowledgeElement);
107 * @see org.splat.service.KnowledgeElementService#rename(org.splat.dal.bo.som.KnowledgeElement, java.lang.String)
110 public void rename(KnowledgeElement knowledgeElement, String title)
111 throws InvalidPropertyException {
112 if (title.length() == 0)
113 throw new InvalidPropertyException("name");
114 knowledgeElement.setTitle(title);
115 update(knowledgeElement);
121 * @see org.splat.service.KnowledgeElementService#selectKnowledgeElement(long)
123 @Transactional(readOnly=true)
124 public KnowledgeElement selectKnowledgeElement(long index) {
125 KnowledgeElement result = getKnowledgeElementDAO().get(index);
126 getStudyService().loadWorkflow(result.getOwnerScenario().getOwnerStudy());
131 * Update the description of the knowledge element.
134 * the knoledge element to update
136 * the new description
139 public void update(KnowledgeElement kelm, String description) {
140 kelm.setValue(description.trim());
141 if (!kelm.getValue().startsWith("<p>")) {
142 StringBuffer text = new StringBuffer("<p>");
143 int index = kelm.getValue().indexOf("<p>");
145 kelm.setValue(text.append(kelm.getValue().substring(0, index))
147 .append(kelm.getValue().substring(index)).toString());
149 kelm.setValue(text.append(kelm.getValue()).append("</p>")
153 getKnowledgeElementDAO().update(kelm); // No need to update the Lucene index
157 * Get the indexService.
159 * @return the indexService
161 public IndexService getIndexService() {
162 return _indexService;
166 * Set the indexService.
168 * @param indexService
169 * the indexService to set
171 public void setIndexService(IndexService indexService) {
172 _indexService = indexService;
176 * Get the knowledgeElementDAO.
178 * @return the knowledgeElementDAO
180 public KnowledgeElementDAO getKnowledgeElementDAO() {
181 return _knowledgeElementDAO;
185 * Set the knowledgeElementDAO.
187 * @param knowledgeElementDAO
188 * the knowledgeElementDAO to set
190 public void setKnowledgeElementDAO(KnowledgeElementDAO knowledgeElementDAO) {
191 _knowledgeElementDAO = knowledgeElementDAO;
195 * Get the studyService.
196 * @return the studyService
198 public StudyService getStudyService() {
199 return _studyService;
203 * Set the studyService.
204 * @param studyService the studyService to set
206 public void setStudyService(StudyService studyService) {
207 _studyService = studyService;