1 package org.splat.simer;
3 import java.util.LinkedHashMap;
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;
18 * Action for searching a knowledge in the database.
20 public class SearchKnowledgeAction extends
21 AbstractSearchBaseAction<KnowledgeSearchFilterDTO> {
26 private static final long serialVersionUID = -3104321907432838476L;
29 * Available knowledge types filter (initialized below).
31 private transient Map<Long, String> _knowledgeTypes;
33 * Injected search service.
35 private SearchService _searchService;
37 * Injected knowledge element service.
39 private KnowledgeElementTypeService _knowledgeElementTypeService;
41 // ==============================================================================================================================
43 // ==============================================================================================================================
46 * Common initialization for doInitialize() and doSetOrder() methods.
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
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));
62 * The action initialization.
64 * @return SUCCESS if succeeded, ERROR if doSearch() is failed
66 public String doInitialize() {
68 initializationFullScreenContext(Constants.OPEN, Constants.NONE,
75 } catch (Exception error) {
76 // No need to roll back the transaction as it is read only
77 LOG.error("Reason: ", error);
85 * @see org.splat.simer.AbstractSearchBaseAction#doSetOrder()
88 public String doSetOrder() {
90 return super.doSetOrder();
94 * Build the map of translated knowledge types available for selection.
96 * @return the map of translated knowledge types
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()));
111 * @see org.splat.simer.AbstractSearchBaseAction#doSearch()
114 protected String doSearch() throws InvalidPropertyException {
115 initializationScreenContext(Constants.OPEN);
116 if (getConnectedUser() != null) {
117 getFilter().setConnectedUserId(getConnectedUser().getIndex());
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);
127 // ==============================================================================================================================
129 // ==============================================================================================================================
132 * Get available knowledge types.
134 * @return map of knowledge type ids and translations.
136 public Map<Long, String> getKnowledgeTypes() {
137 return _knowledgeTypes;
143 * @see org.splat.simer.AbstractSearchBaseAction#getInvolvedContexts()
146 protected List<SimulationContextType> getInvolvedContexts() {
147 return getSimulationContextService().selectAllTypes();
153 * @see org.splat.simer.AbstractSearchBaseAction#saveFilter()
156 protected Map<String, Object> saveFilter() {
157 Map<String, Object> filter = super.saveFilter();
159 // Initialization required by all do functions
160 _knowledgeTypes = buildKnowledgeTypesOptions();
165 * Get the searchService.
167 * @return the searchService
169 public SearchService getSearchService() {
170 return _searchService;
174 * Set the searchService.
176 * @param searchService
177 * the searchService to set
179 public void setSearchService(final SearchService searchService) {
180 _searchService = searchService;
184 * Get the knowledgeElementTypeService.
186 * @return the knowledgeElementTypeService
188 public KnowledgeElementTypeService getKnowledgeElementTypeService() {
189 return _knowledgeElementTypeService;
193 * Set the knowledgeElementTypeService.
195 * @param knowledgeElementTypeService
196 * the knowledgeElementTypeService to set
198 public void setKnowledgeElementTypeService(
199 final KnowledgeElementTypeService knowledgeElementTypeService) {
200 _knowledgeElementTypeService = knowledgeElementTypeService;
206 * @see org.splat.simer.AbstractSearchBaseAction#getFilterName()
209 protected String getFilterName() {
210 return "knowledge.filter";
216 * @see org.splat.simer.AbstractSearchBaseAction#getNewFilter()
219 protected KnowledgeSearchFilterDTO getNewFilter() {
220 return new KnowledgeSearchFilterDTO();