Salome HOME
Search knowledge is implemented. Unit tests are improved. Lucene index is not used...
[tools/siman.git] / Workspace / Siman / src / org / splat / simer / SearchKnowledgeAction.java
1 package org.splat.simer;
2
3 import java.util.LinkedHashMap;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.splat.dal.bo.som.KnowledgeElementType;
8 import org.splat.dal.bo.som.ProgressState;
9 import org.splat.dal.bo.som.SimulationContextType;
10 import org.splat.kernel.InvalidPropertyException;
11 import org.splat.service.KnowledgeElementTypeService;
12 import org.splat.service.SearchService;
13 import org.splat.service.dto.KnowledgeSearchFilterDTO;
14 import org.splat.wapp.Constants;
15
16 /**
17  * Action for searching a knowledge in the database.
18  */
19 public class SearchKnowledgeAction extends
20                 AbstractSearchBaseAction<KnowledgeSearchFilterDTO> {
21
22         /**
23          * Serial version ID.
24          */
25         private static final long serialVersionUID = -3104321907432838476L;
26
27         /**
28          * Available knowledge types filter (initialized below).
29          */
30         private transient Map<Long, String> _knowledgeTypes;
31         /**
32          * Injected search service.
33          */
34         private SearchService _searchService;
35         /**
36          * Injected knowledge element service.
37          */
38         private KnowledgeElementTypeService _knowledgeElementTypeService;
39
40         // ==============================================================================================================================
41         // Action methods
42         // ==============================================================================================================================
43
44         /**
45          * The action initialization.
46          * 
47          * @return SUCCESS if succeeded, ERROR if doSearch() is failed
48          */
49         public String doInitialize() {
50
51                 initializationFullScreenContext(Constants.OPEN, Constants.NONE,
52                                 Constants.OPEN);
53
54                 String res = SUCCESS;
55                 try {
56                         loadFilter();
57                         doSearch();
58
59                         // Final initialization of the form
60                         _knowledgeTypes = buildKnowledgeTypesOptions();
61                         getKnowledgeElementTypeService().selectTypesWhere(
62                                         ProgressState.APPROVED);
63                         setCandidates();
64                         setContextTypeOptions(getInvolvedContexts());
65                 } catch (Exception error) {
66                         // No need to roll back the transaction as it is read only
67                         LOG.error("Reason: ", error);
68                         res = ERROR;
69                 }
70                 return res;
71         }
72
73         /**
74          * Build the map of translated knowledge types available for selection.
75          * 
76          * @return the map of translated knowledge types
77          */
78         private Map<Long, String> buildKnowledgeTypesOptions() {
79                 Map<Long, String> options = new LinkedHashMap<Long, String>();
80                 List<KnowledgeElementType> types = getKnowledgeElementTypeService()
81                                 .selectTypesWhere(ProgressState.APPROVED);
82                 for (KnowledgeElementType ktype : types) {
83                         options.put(ktype.getIndex(), getText(ktype.getKey()));
84                 }
85                 return options;
86         }
87
88         /**
89          * {@inheritDoc}
90          * 
91          * @see org.splat.simer.AbstractSearchBaseAction#doSearch()
92          */
93         @Override
94         protected String doSearch() throws InvalidPropertyException {
95                 initializationScreenContext(Constants.OPEN);
96                 if (getConnectedUser() != null) {
97                         getFilter().setConnectedUserId(getConnectedUser().getIndex());
98                 }
99                 _result = getSearchService().selectKnowledgeElementsWhere(getFilter());
100                 getSession().put(RESULT_KEY, _result); // For redisplaying the page without re-executing the search
101                 return "refresh";
102         }
103
104         // ==============================================================================================================================
105         // Getters
106         // ==============================================================================================================================
107
108         /**
109          * Get available knowledge types.
110          * 
111          * @return map of knowledge type ids and translations.
112          */
113         public Map<Long, String> getKnowledgeTypes() {
114                 return _knowledgeTypes;
115         }
116
117         /**
118          * {@inheritDoc}
119          * 
120          * @see org.splat.simer.AbstractSearchBaseAction#getInvolvedContexts()
121          */
122         @Override
123         protected List<SimulationContextType> getInvolvedContexts() {
124                 return getSimulationContextService().selectAllTypes();
125         }
126
127         /**
128          * {@inheritDoc}
129          * 
130          * @see org.splat.simer.AbstractSearchBaseAction#saveFilter()
131          */
132         @Override
133         protected Map<String, Object> saveFilter() {
134                 Map<String, Object> filter = super.saveFilter();
135
136                 // Initialization required by all do functions
137                 _knowledgeTypes = buildKnowledgeTypesOptions();
138                 return filter;
139         }
140
141         /**
142          * Get the searchService.
143          * 
144          * @return the searchService
145          */
146         public SearchService getSearchService() {
147                 return _searchService;
148         }
149
150         /**
151          * Set the searchService.
152          * 
153          * @param searchService
154          *            the searchService to set
155          */
156         public void setSearchService(final SearchService searchService) {
157                 _searchService = searchService;
158         }
159
160         /**
161          * Get the knowledgeElementTypeService.
162          * 
163          * @return the knowledgeElementTypeService
164          */
165         public KnowledgeElementTypeService getKnowledgeElementTypeService() {
166                 return _knowledgeElementTypeService;
167         }
168
169         /**
170          * Set the knowledgeElementTypeService.
171          * 
172          * @param knowledgeElementTypeService
173          *            the knowledgeElementTypeService to set
174          */
175         public void setKnowledgeElementTypeService(
176                         final KnowledgeElementTypeService knowledgeElementTypeService) {
177                 _knowledgeElementTypeService = knowledgeElementTypeService;
178         }
179
180         /**
181          * {@inheritDoc}
182          * 
183          * @see org.splat.simer.AbstractSearchBaseAction#getFilterName()
184          */
185         @Override
186         protected String getFilterName() {
187                 return "knowledge.filter";
188         }
189
190         /**
191          * {@inheritDoc}
192          * 
193          * @see org.splat.simer.AbstractSearchBaseAction#getNewFilter()
194          */
195         @Override
196         protected KnowledgeSearchFilterDTO getNewFilter() {
197                 return new KnowledgeSearchFilterDTO();
198         }
199 }