]> SALOME platform Git repositories - tools/siman.git/blob - Workspace/Siman-Common/src/org/splat/service/KnowledgeElementServiceImpl.java
Salome HOME
app.root is no more used.
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / KnowledgeElementServiceImpl.java
1 /*****************************************************************************
2  * Company         OPEN CASCADE
3  * Application     SIMAN
4  * File            $Id$ 
5  * Creation date   06.10.2012
6  * @author         $Author$
7  * @version        $Revision$
8  *****************************************************************************/
9
10 package org.splat.service;
11
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;
19
20 /**
21  * Knowledge element service implementation.
22  * 
23  * @author <a href="mailto:roman.kozlov@opencascade.com">Roman Kozlov (RKV)</a>
24  */
25 public class KnowledgeElementServiceImpl implements KnowledgeElementService {
26
27         /**
28          * The logger for the service.
29          */
30         public final static AppLogger logger = AppLogger
31                         .getLogger(KnowledgeElementServiceImpl.class);
32
33         /**
34          * Injected index service.
35          */
36         private IndexService _indexService;
37         /**
38          * Injected knowledge element DAO.
39          */
40         private KnowledgeElementDAO _knowledgeElementDAO;
41         /**
42          * Injected study service.
43          */
44         private StudyService _studyService;
45
46         /**
47          * {@inheritDoc}
48          * 
49          * @see org.splat.service.KnowledgeElementService#approve(org.splat.dal.bo.som.KnowledgeElement)
50          */
51         @Transactional
52         public boolean approve(KnowledgeElement knowledgeElement) {
53                 if (knowledgeElement.getProgressState() != ProgressState.inCHECK)
54                         return false;
55                 knowledgeElement.setProgressState(ProgressState.APPROVED);
56                 return update(knowledgeElement);
57         }
58
59         /**
60          * {@inheritDoc}
61          * 
62          * @see org.splat.service.KnowledgeElementService#demote(org.splat.dal.bo.som.KnowledgeElement)
63          */
64         @Transactional
65         public boolean demote(KnowledgeElement knowledgeElement) {
66                 if (knowledgeElement.getProgressState() != ProgressState.APPROVED
67                                 && knowledgeElement.getProgressState() != ProgressState.inCHECK)
68                         return false;
69                 knowledgeElement.setProgressState(ProgressState.inDRAFT);
70                 return update(knowledgeElement);
71         }
72
73         /**
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
77          */
78         protected boolean update(KnowledgeElement knowledgeElement) {
79                 try {
80                         getKnowledgeElementDAO().update(knowledgeElement);
81                         getIndexService().update(knowledgeElement);
82                         return true;
83                 } catch (Exception error) {
84                         logger.error("Unable to re-index the knowledge '"
85                                         + knowledgeElement.getIndex() + "', reason:", error);
86                         return false;
87                 }
88         }
89
90         /**
91          * {@inheritDoc}
92          * 
93          * @see org.splat.service.KnowledgeElementService#promote(org.splat.dal.bo.som.KnowledgeElement)
94          */
95         @Transactional
96         public boolean promote(KnowledgeElement knowledgeElement) {
97                 // -------------------------
98                 if (knowledgeElement.getProgressState() != ProgressState.inDRAFT)
99                         return false;
100                 knowledgeElement.setProgressState(ProgressState.inCHECK);
101                 return update(knowledgeElement);
102         }
103
104         /**
105          * {@inheritDoc}
106          * 
107          * @see org.splat.service.KnowledgeElementService#rename(org.splat.dal.bo.som.KnowledgeElement, java.lang.String)
108          */
109         @Transactional
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);
116         }
117
118         /**
119          * {@inheritDoc}
120          * 
121          * @see org.splat.service.KnowledgeElementService#selectKnowledgeElement(long)
122          */
123         @Transactional(readOnly=true)
124         public KnowledgeElement selectKnowledgeElement(long index) {
125                 KnowledgeElement result = getKnowledgeElementDAO().get(index);
126                 getStudyService().loadWorkflow(result.getOwnerScenario().getOwnerStudy());
127                 return result;
128         }
129
130         /**
131          * Update the description of the knowledge element.
132          * 
133          * @param kelm
134          *            the knoledge element to update
135          * @param description
136          *            the new description
137          */
138         @Transactional
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>");
144                         if (index > 0) {
145                                 kelm.setValue(text.append(kelm.getValue().substring(0, index))
146                                                 .append("</p>")
147                                                 .append(kelm.getValue().substring(index)).toString());
148                         } else {
149                                 kelm.setValue(text.append(kelm.getValue()).append("</p>")
150                                                 .toString());
151                         }
152                 }
153                 getKnowledgeElementDAO().update(kelm); // No need to update the Lucene index
154         }
155
156         /**
157          * Get the indexService.
158          * 
159          * @return the indexService
160          */
161         public IndexService getIndexService() {
162                 return _indexService;
163         }
164
165         /**
166          * Set the indexService.
167          * 
168          * @param indexService
169          *            the indexService to set
170          */
171         public void setIndexService(IndexService indexService) {
172                 _indexService = indexService;
173         }
174
175         /**
176          * Get the knowledgeElementDAO.
177          * 
178          * @return the knowledgeElementDAO
179          */
180         public KnowledgeElementDAO getKnowledgeElementDAO() {
181                 return _knowledgeElementDAO;
182         }
183
184         /**
185          * Set the knowledgeElementDAO.
186          * 
187          * @param knowledgeElementDAO
188          *            the knowledgeElementDAO to set
189          */
190         public void setKnowledgeElementDAO(KnowledgeElementDAO knowledgeElementDAO) {
191                 _knowledgeElementDAO = knowledgeElementDAO;
192         }
193
194         /**
195          * Get the studyService.
196          * @return the studyService
197          */
198         public StudyService getStudyService() {
199                 return _studyService;
200         }
201
202         /**
203          * Set the studyService.
204          * @param studyService the studyService to set
205          */
206         public void setStudyService(StudyService studyService) {
207                 _studyService = studyService;
208         }
209 }