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.wapp.Constants;
17 * Action for searching a knowledge in the database.
19 public class SearchKnowledgeAction extends
20 AbstractSearchBaseAction<KnowledgeSearchFilterDTO> {
25 private static final long serialVersionUID = -3104321907432838476L;
28 * Available knowledge types filter (initialized below).
30 private transient Map<Long, String> _knowledgeTypes;
32 * Injected search service.
34 private SearchService _searchService;
36 * Injected knowledge element service.
38 private KnowledgeElementTypeService _knowledgeElementTypeService;
40 // ==============================================================================================================================
42 // ==============================================================================================================================
45 * The action initialization.
47 * @return SUCCESS if succeeded, ERROR if doSearch() is failed
49 public String doInitialize() {
51 initializationFullScreenContext(Constants.OPEN, Constants.NONE,
59 // Final initialization of the form
60 _knowledgeTypes = buildKnowledgeTypesOptions();
61 getKnowledgeElementTypeService().selectTypesWhere(
62 ProgressState.APPROVED);
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);
74 * Build the map of translated knowledge types available for selection.
76 * @return the map of translated knowledge types
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()));
91 * @see org.splat.simer.AbstractSearchBaseAction#doSearch()
94 protected String doSearch() throws InvalidPropertyException {
95 initializationScreenContext(Constants.OPEN);
96 if (getConnectedUser() != null) {
97 getFilter().setConnectedUserId(getConnectedUser().getIndex());
99 _result = getSearchService().selectKnowledgeElementsWhere(getFilter());
100 getSession().put(RESULT_KEY, _result); // For redisplaying the page without re-executing the search
104 // ==============================================================================================================================
106 // ==============================================================================================================================
109 * Get available knowledge types.
111 * @return map of knowledge type ids and translations.
113 public Map<Long, String> getKnowledgeTypes() {
114 return _knowledgeTypes;
120 * @see org.splat.simer.AbstractSearchBaseAction#getInvolvedContexts()
123 protected List<SimulationContextType> getInvolvedContexts() {
124 return getSimulationContextService().selectAllTypes();
130 * @see org.splat.simer.AbstractSearchBaseAction#saveFilter()
133 protected Map<String, Object> saveFilter() {
134 Map<String, Object> filter = super.saveFilter();
136 // Initialization required by all do functions
137 _knowledgeTypes = buildKnowledgeTypesOptions();
142 * Get the searchService.
144 * @return the searchService
146 public SearchService getSearchService() {
147 return _searchService;
151 * Set the searchService.
153 * @param searchService
154 * the searchService to set
156 public void setSearchService(final SearchService searchService) {
157 _searchService = searchService;
161 * Get the knowledgeElementTypeService.
163 * @return the knowledgeElementTypeService
165 public KnowledgeElementTypeService getKnowledgeElementTypeService() {
166 return _knowledgeElementTypeService;
170 * Set the knowledgeElementTypeService.
172 * @param knowledgeElementTypeService
173 * the knowledgeElementTypeService to set
175 public void setKnowledgeElementTypeService(
176 final KnowledgeElementTypeService knowledgeElementTypeService) {
177 _knowledgeElementTypeService = knowledgeElementTypeService;
183 * @see org.splat.simer.AbstractSearchBaseAction#getFilterName()
186 protected String getFilterName() {
187 return "knowledge.filter";
193 * @see org.splat.simer.AbstractSearchBaseAction#getNewFilter()
196 protected KnowledgeSearchFilterDTO getNewFilter() {
197 return new KnowledgeSearchFilterDTO();