1 package org.contineo.actions.search; 2 3 import java.util.ArrayList ; 4 import java.util.Collection ; 5 6 import javax.servlet.http.HttpServletRequest ; 7 import javax.servlet.http.HttpServletResponse ; 8 import javax.servlet.http.HttpSession ; 9 10 import org.apache.log4j.Level; 11 import org.apache.log4j.Logger; 12 import org.apache.struts.action.Action; 13 import org.apache.struts.action.ActionForm; 14 import org.apache.struts.action.ActionForward; 15 import org.apache.struts.action.ActionMapping; 16 import org.contineo.core.LoggingManager; 17 import org.contineo.core.SessionManagement; 18 import org.contineo.core.config.SearchSettings; 19 import org.contineo.core.config.dao.SearchSettingsDAO; 20 import org.contineo.forms.SearchForm; 21 import org.contineo.searchengine.search.Search; 22 import org.contineo.searchengine.search.SearchOptions; 23 import org.contineo.searchengine.util.EdgeCounter; 24 import org.contineo.searchengine.util.TermSelector; 25 26 32 public class SearchAction extends Action { 33 34 private Logger logger; 35 36 37 public SearchAction() { 38 logger = LoggingManager.getLogger(this.getClass()); 39 } 40 41 public ActionForward execute(ActionMapping mapping, 42 ActionForm form, HttpServletRequest request, 43 HttpServletResponse response) { 44 ActionForward actionForward = new ActionForward(); 45 HttpSession session = request.getSession(); 46 if (SessionManagement.isValid(session)) { 47 try { 48 String username = (String )session.getAttribute("authuser"); 49 SearchSettingsDAO settingsDao = new SearchSettingsDAO(); 50 SearchSettings settings = settingsDao.findByPrimaryKey(username); 51 String repres = settings.getRepresentation(); 52 if (repres.equals("text")) 53 session.setAttribute("helppage", "search"); 54 else 55 session.setAttribute("helppage", "civisearch"); 56 57 SearchForm sform = (SearchForm)form; 58 SearchOptions opt = new SearchOptions(); 59 ArrayList <String > fields = new ArrayList <String >(); 60 if (sform.getContent()) 61 fields.add("content"); 62 if (sform.getKeywords()) 63 fields.add("keywords"); 64 if (sform.getSource()) 65 fields.add("source"); 66 if (sform.getSourceAuthor()) 67 fields.add("sourceauthor"); 68 if (sform.getSourceType()) 69 fields.add("sourcetype"); 70 if (sform.getCoverage()) 71 fields.add("coverage"); 72 String [] flds = (String [])fields.toArray(new String [fields.size()]); 73 opt.setFields(flds); 74 ArrayList <String > languages = new ArrayList <String >(); 75 if (sform.getEnglish()) 76 languages.add("en"); 77 if (sform.getFrench()) 78 languages.add("fr"); 79 if (sform.getGerman()) 80 languages.add("de"); 81 String [] langs = (String [])languages.toArray(new String [languages.size()]); 82 opt.setLanguages(langs); 83 opt.setFuzzy(sform.getFuzzy()); 85 opt.setQueryStr(sform.getQuery(), sform.getPhrase(), sform.getAny(), sform.getNot()); 86 opt.setFormat(sform.getFormat()); 87 opt.setLength(sform.getSize()); 88 opt.setRelation(sform.getRelation()); 89 opt.setDate(sform.getDate()); 90 opt.setDateRelation(sform.getDateRelation()); 91 opt.setUsername(username); 92 String hitsPerPage = request.getParameter("hpp"); 93 if (hitsPerPage != null && !hitsPerPage.equals("")) 94 opt.setHitsPerPage(Integer.parseInt(hitsPerPage)); 95 else 96 opt.setHitsPerPage(20); 97 Search search = new Search(); 98 String lang = (String )session.getAttribute("language"); 99 Collection result = search.search(opt, lang); 100 opt.setPageVect(search.getPageVect()); 101 request.setAttribute("result", result); 102 session.setAttribute("options", opt); 103 request.setAttribute("hits", new Integer (search.getHitCount())); 104 request.setAttribute("query", sform.getQuery()); 105 106 logger.info("User: " + username + " Suchanfrage: " + sform.getQuery() + " Darstellung: " + repres); 107 108 int s = opt.getStart(); 109 int p = search.getHitCount() / opt.getHitsPerPage(); 110 if ((search.getHitCount() % opt.getHitsPerPage()) != 0) 111 p++; 112 request.setAttribute("start", new Integer (s)); 113 request.setAttribute("pages", new Integer (p)); 114 request.setAttribute("pg", new Integer (1)); 115 request.setAttribute("hpp", new Integer (opt.getHitsPerPage())); 116 if (repres.equals("text")) { 117 actionForward = mapping.findForward("resulttext"); 119 } else { 120 request.setAttribute("doccount", new Integer (result.size())); 122 123 Collection keywords = new TermSelector().getTopTerms(result, 10); 125 request.setAttribute("keywords", keywords); 126 request.setAttribute("kwcount", new Integer (keywords.size())); 127 request.setAttribute("edgecount", new Integer (EdgeCounter.count(keywords))); 128 request.setAttribute("elements", new Integer (20)); 129 request.setAttribute("screensize", new Integer (settings.getScreenSize())); 130 actionForward = mapping.findForward("resultgraph"); 131 } 132 } catch (Exception e) { 133 if (logger.isEnabledFor(Level.ERROR)) 134 logger.error(e.getMessage()); 135 } 136 } else 137 actionForward = mapping.findForward("invalid"); 138 return actionForward; 139 } 140 } | Popular Tags |