]> SALOME platform Git repositories - tools/siman.git/blob - Workspace/Siman-Common/src/org/splat/service/KnowledgeElementServiceImpl.java
Salome HOME
c6c23dd38161a4aa88609ad418ef6340e013dffb
[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         public boolean approve(KnowledgeElement knowledgeElement) {
52                 if (knowledgeElement.getProgressState() != ProgressState.inCHECK)
53                         return false;
54                 knowledgeElement.setProgressState(ProgressState.APPROVED);
55                 return update(knowledgeElement);
56         }
57
58         /**
59          * {@inheritDoc}
60          * 
61          * @see org.splat.service.KnowledgeElementService#demote(org.splat.dal.bo.som.KnowledgeElement)
62          */
63         public boolean demote(KnowledgeElement knowledgeElement) {
64                 if (knowledgeElement.getProgressState() != ProgressState.APPROVED
65                                 && knowledgeElement.getProgressState() != ProgressState.inCHECK)
66                         return false;
67                 knowledgeElement.setProgressState(ProgressState.inDRAFT);
68                 return update(knowledgeElement);
69         }
70
71         /**
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
75          */
76         protected boolean update(KnowledgeElement knowledgeElement) {
77                 try {
78                         getKnowledgeElementDAO().update(knowledgeElement);
79                         getIndexService().update(knowledgeElement);
80                         return true;
81                 } catch (Exception error) {
82                         logger.error("Unable to re-index the knowledge '"
83                                         + knowledgeElement.getIndex() + "', reason:", error);
84                         return false;
85                 }
86         }
87
88         /**
89          * {@inheritDoc}
90          * 
91          * @see org.splat.service.KnowledgeElementService#promote(org.splat.dal.bo.som.KnowledgeElement)
92          */
93         public boolean promote(KnowledgeElement knowledgeElement) {
94                 // -------------------------
95                 if (knowledgeElement.getProgressState() != ProgressState.inDRAFT)
96                         return false;
97                 knowledgeElement.setProgressState(ProgressState.inCHECK);
98                 return update(knowledgeElement);
99         }
100
101         /**
102          * {@inheritDoc}
103          * 
104          * @see org.splat.service.KnowledgeElementService#rename(org.splat.dal.bo.som.KnowledgeElement, java.lang.String)
105          */
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);
112         }
113
114         /**
115          * {@inheritDoc}
116          * 
117          * @see org.splat.service.KnowledgeElementService#selectKnowledgeElement(long)
118          */
119         public KnowledgeElement selectKnowledgeElement(long index) {
120                 KnowledgeElement result = getKnowledgeElementDAO().get(index);
121                 getStudyService().loadWorkflow(result.getOwnerScenario().getOwnerStudy());
122                 return result;
123         }
124
125         /**
126          * Update the description of the knowledge element.
127          * 
128          * @param kelm
129          *            the knoledge element to update
130          * @param description
131          *            the new description
132          */
133         @Transactional
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>");
139                         if (index > 0) {
140                                 kelm.setValue(text.append(kelm.getValue().substring(0, index))
141                                                 .append("</p>")
142                                                 .append(kelm.getValue().substring(index)).toString());
143                         } else {
144                                 kelm.setValue(text.append(kelm.getValue()).append("</p>")
145                                                 .toString());
146                         }
147                 }
148                 getKnowledgeElementDAO().update(kelm); // No need to update the Lucene index
149         }
150
151         /**
152          * Get the indexService.
153          * 
154          * @return the indexService
155          */
156         public IndexService getIndexService() {
157                 return _indexService;
158         }
159
160         /**
161          * Set the indexService.
162          * 
163          * @param indexService
164          *            the indexService to set
165          */
166         public void setIndexService(IndexService indexService) {
167                 _indexService = indexService;
168         }
169
170         /**
171          * Get the knowledgeElementDAO.
172          * 
173          * @return the knowledgeElementDAO
174          */
175         public KnowledgeElementDAO getKnowledgeElementDAO() {
176                 return _knowledgeElementDAO;
177         }
178
179         /**
180          * Set the knowledgeElementDAO.
181          * 
182          * @param knowledgeElementDAO
183          *            the knowledgeElementDAO to set
184          */
185         public void setKnowledgeElementDAO(KnowledgeElementDAO knowledgeElementDAO) {
186                 _knowledgeElementDAO = knowledgeElementDAO;
187         }
188
189         /**
190          * Get the studyService.
191          * @return the studyService
192          */
193         public StudyService getStudyService() {
194                 return _studyService;
195         }
196
197         /**
198          * Set the studyService.
199          * @param studyService the studyService to set
200          */
201         public void setStudyService(StudyService studyService) {
202                 _studyService = studyService;
203         }
204 }