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,
55 // Final initialization of the form
56 _knowledgeTypes = buildKnowledgeTypesOptions();
57 setCandidates(); // not selected by default
58 setContextTypeOptions(getInvolvedContexts()); // not selected by default
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));
67 } catch (Exception error) {
68 // No need to roll back the transaction as it is read only
69 LOG.error("Reason: ", error);
76 * Build the map of translated knowledge types available for selection.
78 * @return the map of translated knowledge types
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()));
93 * @see org.splat.simer.AbstractSearchBaseAction#doSearch()
96 protected String doSearch() throws InvalidPropertyException {
97 initializationScreenContext(Constants.OPEN);
98 if (getConnectedUser() != null) {
99 getFilter().setConnectedUserId(getConnectedUser().getIndex());
101 _result = getSearchService().selectKnowledgeElementsWhere(getFilter());
102 getSession().put(RESULT_KEY, _result); // For redisplaying the page without re-executing the search
106 // ==============================================================================================================================
108 // ==============================================================================================================================
111 * Get available knowledge types.
113 * @return map of knowledge type ids and translations.
115 public Map<Long, String> getKnowledgeTypes() {
116 return _knowledgeTypes;
122 * @see org.splat.simer.AbstractSearchBaseAction#getInvolvedContexts()
125 protected List<SimulationContextType> getInvolvedContexts() {
126 return getSimulationContextService().selectAllTypes();
132 * @see org.splat.simer.AbstractSearchBaseAction#saveFilter()
135 protected Map<String, Object> saveFilter() {
136 Map<String, Object> filter = super.saveFilter();
138 // Initialization required by all do functions
139 _knowledgeTypes = buildKnowledgeTypesOptions();
144 * Get the searchService.
146 * @return the searchService
148 public SearchService getSearchService() {
149 return _searchService;
153 * Set the searchService.
155 * @param searchService
156 * the searchService to set
158 public void setSearchService(final SearchService searchService) {
159 _searchService = searchService;
163 * Get the knowledgeElementTypeService.
165 * @return the knowledgeElementTypeService
167 public KnowledgeElementTypeService getKnowledgeElementTypeService() {
168 return _knowledgeElementTypeService;
172 * Set the knowledgeElementTypeService.
174 * @param knowledgeElementTypeService
175 * the knowledgeElementTypeService to set
177 public void setKnowledgeElementTypeService(
178 final KnowledgeElementTypeService knowledgeElementTypeService) {
179 _knowledgeElementTypeService = knowledgeElementTypeService;
185 * @see org.splat.simer.AbstractSearchBaseAction#getFilterName()
188 protected String getFilterName() {
189 return "knowledge.filter";
195 * @see org.splat.simer.AbstractSearchBaseAction#getNewFilter()
198 protected KnowledgeSearchFilterDTO getNewFilter() {
199 return new KnowledgeSearchFilterDTO();