Salome HOME
Search actions have been improved. Searching by dates has been 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.kernel.User;
8 import org.splat.dal.bo.som.KnowledgeElement;
9 import org.splat.dal.bo.som.KnowledgeElementType;
10 import org.splat.dal.bo.som.ProgressState;
11 import org.splat.dal.bo.som.SimulationContextType;
12 import org.splat.dal.bo.som.Visibility;
13 import org.splat.kernel.InvalidPropertyException;
14 import org.splat.service.KnowledgeElementTypeService;
15 import org.splat.service.SearchService;
16 import org.splat.service.dto.KnowledgeSearchFilterDTO;
17 import org.splat.wapp.Constants;
18
19 /**
20  * Action for searching a knowledge in the database.
21  */
22 public class SearchKnowledgeAction extends
23                 AbstractSearchBaseAction<KnowledgeSearchFilterDTO> {
24
25         /**
26          * Serial version ID.
27          */
28         private static final long serialVersionUID = -3104321907432838476L;
29
30         /**
31          * Available knowledge types filter (initialized below).
32          */
33         private transient Map<Long, String> _knowledgeTypes;
34         /**
35          * Injected search service.
36          */
37         private SearchService _searchService;
38         /**
39          * Injected knowledge element service.
40          */
41         private KnowledgeElementTypeService _knowledgeElementTypeService;
42
43         // ==============================================================================================================================
44         // Action methods
45         // ==============================================================================================================================
46
47         /**
48          * The action initialization.
49          * 
50          * @return SUCCESS if succeeded, ERROR if doSearch() is failed
51          */
52         public String doInitialize() {
53
54                 initializationFullScreenContext(Constants.OPEN, Constants.NONE,
55                                 Constants.OPEN);
56
57                 String res = SUCCESS;
58                 try {
59                         loadFilter();
60                         doSearch();
61
62                         // Final initialization of the form
63                         _knowledgeTypes = buildKnowledgeTypesOptions();
64                         getKnowledgeElementTypeService().selectTypesWhere(
65                                         ProgressState.APPROVED);
66                         setCandidates();
67                         setContextTypeOptions(getInvolvedContexts());
68                 } catch (Exception error) {
69                         // No need to roll back the transaction as it is read only
70                         LOG.error("Reason: ", error);
71                         res = ERROR;
72                 }
73                 return res;
74         }
75
76         /**
77          * Build the map of translated knowledge types available for selection.
78          * 
79          * @return the map of translated knowledge types
80          */
81         private Map<Long, String> buildKnowledgeTypesOptions() {
82                 Map<Long, String> options = new LinkedHashMap<Long, String>();
83                 List<KnowledgeElementType> types = getKnowledgeElementTypeService()
84                                 .selectTypesWhere(ProgressState.APPROVED);
85                 for (KnowledgeElementType ktype : types) {
86                         options.put(ktype.getIndex(), getText(ktype.getKey()));
87                 }
88                 return options;
89         }
90
91         /**
92          * {@inheritDoc}
93          * 
94          * @see org.splat.simer.AbstractSearchBaseAction#doSearch()
95          */
96         @Override
97         protected String doSearch() throws InvalidPropertyException {
98
99                 initializationScreenContext(Constants.OPEN);
100                 KnowledgeElement.Properties sprop = new KnowledgeElement.Properties();
101
102                 // Search matching all criteria
103                 sprop.setType(getKnowledgeElementTypeService().selectType(
104                                 Integer.valueOf(getFilter().getKtype())));
105                 if (getFilter().getWords().length() > 0) {
106                         sprop.setTitle(getFilter().getWords());
107                 }
108                 if (getFilter().getReference().length() > 0) {
109                         sprop.setReference(getFilter().getReference());
110                 }
111                 if (getFilter().getSimContexts().size() > 0) {
112                         sprop.setSimulationContexts(getFilter().getSimContexts());
113                 }
114                 int index = Integer.valueOf(getFilter().getAuthor());
115                 if (index > 0) {
116                         User him = getUserService().selectUser(index);
117                         sprop.setAuthor(him);
118                 }
119                 // Set of the visibility
120                 KnowledgeElement.Properties other = sprop.copy();
121
122                 other.setVisibility(Visibility.PUBLIC);
123                 sprop.setVisibility(Visibility.PRIVATE);
124                 sprop.setActor(getConnectedUser());
125
126                 _result = getSearchService().selectKnowledgeElementsWhere(sprop, other);
127                 getSession().put(RESULT_KEY, _result); // For redisplaying the page without re-executing the search
128                 return "refresh";
129         }
130
131         // ==============================================================================================================================
132         // Getters
133         // ==============================================================================================================================
134
135         public Map<Long, String> getKnowledgeTypes() {
136                 return _knowledgeTypes;
137         }
138
139         /**
140          * {@inheritDoc}
141          * 
142          * @see org.splat.simer.AbstractSearchBaseAction#getInvolvedContexts()
143          */
144         @Override
145         protected List<SimulationContextType> getInvolvedContexts() {
146                 return getSimulationContextService().selectAllTypes();
147         }
148
149         /**
150          * {@inheritDoc}
151          * 
152          * @see org.splat.simer.AbstractSearchBaseAction#saveFilter()
153          */
154         @Override
155         protected Map<String, Object> saveFilter() {
156                 Map<String, Object> filter = super.saveFilter();
157
158                 // Initialization required by all do functions
159                 _knowledgeTypes = buildKnowledgeTypesOptions();
160                 return filter;
161         }
162
163         /**
164          * Get the searchService.
165          * 
166          * @return the searchService
167          */
168         public SearchService getSearchService() {
169                 return _searchService;
170         }
171
172         /**
173          * Set the searchService.
174          * 
175          * @param searchService
176          *            the searchService to set
177          */
178         public void setSearchService(final SearchService searchService) {
179                 _searchService = searchService;
180         }
181
182         /**
183          * Get the knowledgeElementTypeService.
184          * 
185          * @return the knowledgeElementTypeService
186          */
187         public KnowledgeElementTypeService getKnowledgeElementTypeService() {
188                 return _knowledgeElementTypeService;
189         }
190
191         /**
192          * Set the knowledgeElementTypeService.
193          * 
194          * @param knowledgeElementTypeService
195          *            the knowledgeElementTypeService to set
196          */
197         public void setKnowledgeElementTypeService(
198                         final KnowledgeElementTypeService knowledgeElementTypeService) {
199                 _knowledgeElementTypeService = knowledgeElementTypeService;
200         }
201
202         /**
203          * {@inheritDoc}
204          * 
205          * @see org.splat.simer.AbstractSearchBaseAction#getFilterName()
206          */
207         @Override
208         protected String getFilterName() {
209                 return "knowledge.filter";
210         }
211
212         /**
213          * {@inheritDoc}
214          * 
215          * @see org.splat.simer.AbstractSearchBaseAction#getNewFilter()
216          */
217         @Override
218         protected KnowledgeSearchFilterDTO getNewFilter() {
219                 return new KnowledgeSearchFilterDTO();
220         }
221 }