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