KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > contineo > actions > search > SearchAction


1 package org.contineo.actions.search;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Collection JavaDoc;
5
6 import javax.servlet.http.HttpServletRequest JavaDoc;
7 import javax.servlet.http.HttpServletResponse JavaDoc;
8 import javax.servlet.http.HttpSession JavaDoc;
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 /**
27  * Executes the query based on the content of the search form.
28  * Created on 16. Dezember 2003, 22:25
29  * @author Michael Scholz
30  * @version 1.0
31  */

32 public class SearchAction extends Action {
33
34     private Logger logger;
35
36     /** Creates a new instance of StrutsAction */
37     public SearchAction() {
38         logger = LoggingManager.getLogger(this.getClass());
39     }
40
41     public ActionForward execute(ActionMapping mapping,
42                     ActionForm form, HttpServletRequest JavaDoc request,
43                     HttpServletResponse JavaDoc response) {
44         ActionForward actionForward = new ActionForward();
45         HttpSession JavaDoc session = request.getSession();
46         if (SessionManagement.isValid(session)) {
47             try {
48                 String JavaDoc username = (String JavaDoc)session.getAttribute("authuser");
49                 SearchSettingsDAO settingsDao = new SearchSettingsDAO();
50                 SearchSettings settings = settingsDao.findByPrimaryKey(username);
51                 String JavaDoc 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 JavaDoc<String JavaDoc> fields = new ArrayList JavaDoc<String JavaDoc>();
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 JavaDoc[] flds = (String JavaDoc[])fields.toArray(new String JavaDoc[fields.size()]);
73                 opt.setFields(flds);
74                 ArrayList JavaDoc<String JavaDoc> languages = new ArrayList JavaDoc<String JavaDoc>();
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 JavaDoc[] langs = (String JavaDoc[])languages.toArray(new String JavaDoc[languages.size()]);
82                 opt.setLanguages(langs);
83 // fuzzy must be set before queryStr
84
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 JavaDoc 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 JavaDoc lang = (String JavaDoc)session.getAttribute("language");
99                 Collection JavaDoc 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 JavaDoc(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 JavaDoc(s));
113                 request.setAttribute("pages", new Integer JavaDoc(p));
114                 request.setAttribute("pg", new Integer JavaDoc(1));
115                 request.setAttribute("hpp", new Integer JavaDoc(opt.getHitsPerPage()));
116                 if (repres.equals("text")) {
117                         // textual representation
118
actionForward = mapping.findForward("resulttext");
119                 } else {
120                     // visual representation
121
request.setAttribute("doccount", new Integer JavaDoc(result.size()));
122                     
123                     // extract terms
124
Collection JavaDoc keywords = new TermSelector().getTopTerms(result, 10);
125                     request.setAttribute("keywords", keywords);
126                     request.setAttribute("kwcount", new Integer JavaDoc(keywords.size()));
127                     request.setAttribute("edgecount", new Integer JavaDoc(EdgeCounter.count(keywords)));
128                     request.setAttribute("elements", new Integer JavaDoc(20));
129                     request.setAttribute("screensize", new Integer JavaDoc(settings.getScreenSize()));
130                     actionForward = mapping.findForward("resultgraph");
131                 }
132             } catch (Exception JavaDoc 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