Salome HOME
Fix:
[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                 // Final initialization of the form
56                 _knowledgeTypes = buildKnowledgeTypesOptions();
57                 setCandidates(); // not selected by default
58                 setContextTypeOptions(getInvolvedContexts()); // not selected by default
59                 loadFilter();
60                 // Select the first knowledge type by default
61                 Long ktypeId = getKnowledgeTypes().keySet().iterator().next();
62                 if (ktypeId != null) {
63                         getFilter().setKtype(String.valueOf(ktypeId));
64                 }
65                 try {
66                         doSearch();
67                 } catch (Exception error) {
68                         // No need to roll back the transaction as it is read only
69                         LOG.error("Reason: ", error);
70                         res = ERROR;
71                 }
72                 return res;
73         }
74
75         /**
76          * Build the map of translated knowledge types available for selection.
77          * 
78          * @return the map of translated knowledge types
79          */
80         private Map<Long, String> buildKnowledgeTypesOptions() {
81                 Map<Long, String> options = new LinkedHashMap<Long, String>();
82                 List<KnowledgeElementType> types = getKnowledgeElementTypeService()
83                                 .selectTypesWhere(ProgressState.APPROVED);
84                 for (KnowledgeElementType ktype : types) {
85                         options.put(ktype.getIndex(), getText(ktype.getKey()));
86                 }
87                 return options;
88         }
89
90         /**
91          * {@inheritDoc}
92          * 
93          * @see org.splat.simer.AbstractSearchBaseAction#doSearch()
94          */
95         @Override
96         protected String doSearch() throws InvalidPropertyException {
97                 initializationScreenContext(Constants.OPEN);
98                 if (getConnectedUser() != null) {
99                         getFilter().setConnectedUserId(getConnectedUser().getIndex());
100                 }
101                 _result = getSearchService().selectKnowledgeElementsWhere(getFilter());
102                 getSession().put(RESULT_KEY, _result); // For redisplaying the page without re-executing the search
103                 return "refresh";
104         }
105
106         // ==============================================================================================================================
107         // Getters
108         // ==============================================================================================================================
109
110         /**
111          * Get available knowledge types.
112          * 
113          * @return map of knowledge type ids and translations.
114          */
115         public Map<Long, String> getKnowledgeTypes() {
116                 return _knowledgeTypes;
117         }
118
119         /**
120          * {@inheritDoc}
121          * 
122          * @see org.splat.simer.AbstractSearchBaseAction#getInvolvedContexts()
123          */
124         @Override
125         protected List<SimulationContextType> getInvolvedContexts() {
126                 return getSimulationContextService().selectAllTypes();
127         }
128
129         /**
130          * {@inheritDoc}
131          * 
132          * @see org.splat.simer.AbstractSearchBaseAction#saveFilter()
133          */
134         @Override
135         protected Map<String, Object> saveFilter() {
136                 Map<String, Object> filter = super.saveFilter();
137
138                 // Initialization required by all do functions
139                 _knowledgeTypes = buildKnowledgeTypesOptions();
140                 return filter;
141         }
142
143         /**
144          * Get the searchService.
145          * 
146          * @return the searchService
147          */
148         public SearchService getSearchService() {
149                 return _searchService;
150         }
151
152         /**
153          * Set the searchService.
154          * 
155          * @param searchService
156          *            the searchService to set
157          */
158         public void setSearchService(final SearchService searchService) {
159                 _searchService = searchService;
160         }
161
162         /**
163          * Get the knowledgeElementTypeService.
164          * 
165          * @return the knowledgeElementTypeService
166          */
167         public KnowledgeElementTypeService getKnowledgeElementTypeService() {
168                 return _knowledgeElementTypeService;
169         }
170
171         /**
172          * Set the knowledgeElementTypeService.
173          * 
174          * @param knowledgeElementTypeService
175          *            the knowledgeElementTypeService to set
176          */
177         public void setKnowledgeElementTypeService(
178                         final KnowledgeElementTypeService knowledgeElementTypeService) {
179                 _knowledgeElementTypeService = knowledgeElementTypeService;
180         }
181
182         /**
183          * {@inheritDoc}
184          * 
185          * @see org.splat.simer.AbstractSearchBaseAction#getFilterName()
186          */
187         @Override
188         protected String getFilterName() {
189                 return "knowledge.filter";
190         }
191
192         /**
193          * {@inheritDoc}
194          * 
195          * @see org.splat.simer.AbstractSearchBaseAction#getNewFilter()
196          */
197         @Override
198         protected KnowledgeSearchFilterDTO getNewFilter() {
199                 return new KnowledgeSearchFilterDTO();
200         }
201 }