1 package org.splat.simer;
3 import java.util.LinkedHashMap;
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;
20 * Action for searching a knowledge in the database.
22 public class SearchKnowledgeAction extends
23 AbstractSearchBaseAction<KnowledgeSearchFilterDTO> {
28 private static final long serialVersionUID = -3104321907432838476L;
31 * Available knowledge types filter (initialized below).
33 private transient Map<Long, String> _knowledgeTypes;
35 * Injected search service.
37 private SearchService _searchService;
39 * Injected knowledge element service.
41 private KnowledgeElementTypeService _knowledgeElementTypeService;
43 // ==============================================================================================================================
45 // ==============================================================================================================================
48 * The action initialization.
50 * @return SUCCESS if succeeded, ERROR if doSearch() is failed
52 public String doInitialize() {
54 initializationFullScreenContext(Constants.OPEN, Constants.NONE,
62 // Final initialization of the form
63 _knowledgeTypes = buildKnowledgeTypesOptions();
64 getKnowledgeElementTypeService().selectTypesWhere(
65 ProgressState.APPROVED);
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);
77 * Build the map of translated knowledge types available for selection.
79 * @return the map of translated knowledge types
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()));
94 * @see org.splat.simer.AbstractSearchBaseAction#doSearch()
97 protected String doSearch() throws InvalidPropertyException {
99 initializationScreenContext(Constants.OPEN);
100 KnowledgeElement.Properties sprop = new KnowledgeElement.Properties();
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());
108 if (getFilter().getReference().length() > 0) {
109 sprop.setReference(getFilter().getReference());
111 if (getFilter().getSimContexts().size() > 0) {
112 sprop.setSimulationContexts(getFilter().getSimContexts());
114 int index = Integer.valueOf(getFilter().getAuthor());
116 User him = getUserService().selectUser(index);
117 sprop.setAuthor(him);
119 // Set of the visibility
120 KnowledgeElement.Properties other = sprop.copy();
122 other.setVisibility(Visibility.PUBLIC);
123 sprop.setVisibility(Visibility.PRIVATE);
124 sprop.setActor(getConnectedUser());
126 _result = getSearchService().selectKnowledgeElementsWhere(sprop, other);
127 getSession().put(RESULT_KEY, _result); // For redisplaying the page without re-executing the search
131 // ==============================================================================================================================
133 // ==============================================================================================================================
135 public Map<Long, String> getKnowledgeTypes() {
136 return _knowledgeTypes;
142 * @see org.splat.simer.AbstractSearchBaseAction#getInvolvedContexts()
145 protected List<SimulationContextType> getInvolvedContexts() {
146 return getSimulationContextService().selectAllTypes();
152 * @see org.splat.simer.AbstractSearchBaseAction#saveFilter()
155 protected Map<String, Object> saveFilter() {
156 Map<String, Object> filter = super.saveFilter();
158 // Initialization required by all do functions
159 _knowledgeTypes = buildKnowledgeTypesOptions();
164 * Get the searchService.
166 * @return the searchService
168 public SearchService getSearchService() {
169 return _searchService;
173 * Set the searchService.
175 * @param searchService
176 * the searchService to set
178 public void setSearchService(final SearchService searchService) {
179 _searchService = searchService;
183 * Get the knowledgeElementTypeService.
185 * @return the knowledgeElementTypeService
187 public KnowledgeElementTypeService getKnowledgeElementTypeService() {
188 return _knowledgeElementTypeService;
192 * Set the knowledgeElementTypeService.
194 * @param knowledgeElementTypeService
195 * the knowledgeElementTypeService to set
197 public void setKnowledgeElementTypeService(
198 final KnowledgeElementTypeService knowledgeElementTypeService) {
199 _knowledgeElementTypeService = knowledgeElementTypeService;
205 * @see org.splat.simer.AbstractSearchBaseAction#getFilterName()
208 protected String getFilterName() {
209 return "knowledge.filter";
215 * @see org.splat.simer.AbstractSearchBaseAction#getNewFilter()
218 protected KnowledgeSearchFilterDTO getNewFilter() {
219 return new KnowledgeSearchFilterDTO();