1 16 package com.blandware.atleap.webapp.action.core.search; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.common.util.PartialCollection; 20 import com.blandware.atleap.model.core.User; 21 import com.blandware.atleap.search.SearchManager; 22 import com.blandware.atleap.service.core.UserManager; 23 import com.blandware.atleap.webapp.action.core.grid.BaseGridAction; 24 import com.blandware.atleap.webapp.form.core.SearchForm; 25 import com.blandware.atleap.webapp.util.core.GlobalProperties; 26 import com.blandware.atleap.webapp.util.core.WebappConstants; 27 import com.blandware.atleap.webapp.util.core.WebappUtil; 28 import org.apache.lucene.queryParser.ParseException; 29 import org.apache.struts.Globals; 30 import org.apache.struts.action.ActionForm; 31 import org.apache.struts.action.ActionForward; 32 import org.apache.struts.action.ActionMapping; 33 import org.apache.struts.action.ActionMessage; 34 import org.apache.struts.action.ActionMessages; 35 36 import javax.servlet.http.HttpServletRequest ; 37 import javax.servlet.http.HttpServletResponse ; 38 import java.util.List ; 39 import java.util.Locale ; 40 41 58 public final class SearchAction extends BaseGridAction { 59 60 69 public ActionForward execute(ActionMapping mapping, ActionForm form, 70 HttpServletRequest request, HttpServletResponse response) throws Exception { 71 72 SearchForm searchForm = (SearchForm) form; 73 74 int pageNumber = 1; 76 if ( request.getParameter("pageNumber") != null ) { 77 pageNumber = Integer.parseInt(request.getParameter("pageNumber")); 78 } else { 79 request.getSession().removeAttribute(WebappConstants.SEARCH_HITS_COLLECTION_KEY); 81 request.getSession().removeAttribute(WebappConstants.SEARCH_QUERY_KEY); 82 } 83 84 boolean allLanguages = false; 86 String language = searchForm.getSearchLanguage(); 87 if (language == null || language.trim().length() == 0) { 88 allLanguages = true; 89 if (request.getSession().getAttribute(Globals.LOCALE_KEY) != null) { 90 language = ((Locale ) request.getSession().getAttribute(Globals.LOCALE_KEY)).getLanguage(); 91 } 92 } 93 if ( language == null ) { 94 language = Locale.getDefault().getLanguage(); 95 } 96 97 int days = 0; 99 if ( searchForm.getTimePeriod() != null ) { 100 days = Integer.parseInt(searchForm.getTimePeriod()); 101 } 102 103 List hits = null; 105 String criteria = searchForm.getQuery(); 106 if ( criteria == null || criteria.trim().length() == 0 ) { 107 hits = (List ) request.getSession().getAttribute(WebappConstants.SEARCH_HITS_COLLECTION_KEY); 109 if ( hits != null ) { 110 criteria = (String ) request.getSession().getAttribute(WebappConstants.SEARCH_QUERY_KEY); 111 } else { 112 criteria = ""; 113 } 114 } 115 116 String roles = ""; 118 User user = (User) request.getSession().getAttribute(Constants.USER_KEY); 119 if ( user != null ) { 120 UserManager userManager = (UserManager) getBean(Constants.USER_MANAGER_BEAN); 121 user = userManager.retrieveUser(user.getName()); 122 if ( user != null ) { 123 roles = WebappUtil.rolesToString(user.getRoles()); 124 } 125 } 126 127 int pageSize = GlobalProperties.getInstance(servlet.getServletContext()).getInteger(WebappConstants.GRID_PAGE_SIZE, 10).intValue(); 128 int offset = (pageNumber - 1) * pageSize; 129 130 if ( log.isDebugEnabled() ) { 131 log.debug("Begin to search with following criteria: '" + criteria + "' and language: " + language); 132 } 133 134 SearchManager searchManager = SearchManager.getInstance(request.getSession().getServletContext()); 135 try { 136 hits = searchManager.search(hits, criteria, language, allLanguages, days, roles, offset, pageSize, request); 137 request.getSession().setAttribute(WebappConstants.SEARCH_HITS_COLLECTION_KEY, hits); 138 request.getSession().setAttribute(WebappConstants.SEARCH_QUERY_KEY, criteria); 139 } catch ( ParseException ex ) { 140 ActionMessages errors = new ActionMessages(); 141 errors.add("searchQueryInvalid", new ActionMessage("core.search.errors.queryInvalid", ex.getMessage())); 142 saveToken(request); 143 return mapping.getInputForward(); 144 } 145 146 int limit = (offset + pageSize) > hits.size() ? hits.size() : (offset + pageSize); 147 List pagedHits = hits.subList(offset, limit); 148 request.setAttribute(WebappConstants.HIT_COLLECTION_KEY, new PartialCollection(pagedHits, hits.size())); 149 150 return mapping.findForward("searchResults"); 151 } 152 153 154 } | Popular Tags |