search.jsp revision daba8f127bde81db38efd27fa72e7a0554de4987
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering<%--
e01a15b71e18bf2008aec7e75041ffa42eb80b80Kay SieversCDDL HEADER START
e01a15b71e18bf2008aec7e75041ffa42eb80b80Kay Sievers
ebcd5d3acd4c470668bbcd945a5aa42f0af5ccf0Kay SieversThe contents of this file are subject to the terms of the
ebcd5d3acd4c470668bbcd945a5aa42f0af5ccf0Kay SieversCommon Development and Distribution License (the "License").
80037e4d17d0c8f28d0ff610902babc9e2b4e2f9Kay SieversYou may not use this file except in compliance with the License.
ebcd5d3acd4c470668bbcd945a5aa42f0af5ccf0Kay Sievers
7c66aeba0f28cb82027d6015405ed71afa3b6059Kay SieversSee LICENSE.txt included in this distribution for the specific
7c66aeba0f28cb82027d6015405ed71afa3b6059Kay Sieverslanguage governing permissions and limitations under the License.
c904f64d84db8c4eebedf210ba10893f19ba05edLennart Poettering
c904f64d84db8c4eebedf210ba10893f19ba05edLennart PoetteringWhen distributing Covered Code, include this CDDL HEADER in each
05677bb78079c3fa0283101aac2c07581f4873f1Lennart Poetteringfile and include the License file at LICENSE.txt.
73090dc815390f4fca4e3ed8a7e1d3806605daaaLennart PoetteringIf applicable, add the following below this CDDL HEADER, with the
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poetteringfields enclosed by brackets "[]" replaced with your own identifying
ddd88763921a1534081ed28e36f6712a85449005Lennart Poetteringinformation: Portions Copyright [yyyy] [name of copyright owner]
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers
f957632b960a0a42999b38ded7089fa602b41745Kay SieversCDDL HEADER END
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers
f957632b960a0a42999b38ded7089fa602b41745Kay SieversCopyright 2005 Sun Microsystems, Inc. All rights reserved.
9a36607584bbd1d78775353e022a51794b4e27b1Lennart PoetteringUse is subject to license terms.
9a36607584bbd1d78775353e022a51794b4e27b1Lennart Poettering
a40593a0d0d740efa387e35411e1e456a6c5aba7Lennart Poetteringident "%Z%%M% %I% %E% SMI"
20ffc4c4a9226b0e45cc02ad9c0108981626c0bbKay Sievers
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering--%><%@ page import = "javax.servlet.*,
4ee717820208a4c8e92383d0dbefa401827fab38Kay Sieversjava.lang.Integer,
4ee717820208a4c8e92383d0dbefa401827fab38Kay Sieversjavax.servlet.http.*,
e01a15b71e18bf2008aec7e75041ffa42eb80b80Kay Sieversjava.util.Hashtable,
3d9a412243035beeaaf3465a62065444a5adf21cLennart Poetteringjava.util.Vector,
e01a15b71e18bf2008aec7e75041ffa42eb80b80Kay Sieversjava.util.Date,
a888b352eb53b07daa24fa859ceeb254336b293dLennart Poetteringjava.util.ArrayList,
3b2d5b02ae231f1d3eb0d96eb980155d7797304eLennart Poetteringjava.util.List,
3b2d5b02ae231f1d3eb0d96eb980155d7797304eLennart Poetteringjava.lang.*,
0f0dbc46ccf5aaaf3131446d0a4d78bc97a37295Lennart Poetteringjava.io.*,
0f0dbc46ccf5aaaf3131446d0a4d78bc97a37295Lennart Poetteringjava.io.StringReader,
3d9a412243035beeaaf3465a62065444a5adf21cLennart Poetteringorg.opensolaris.opengrok.analysis.*,
3d9a412243035beeaaf3465a62065444a5adf21cLennart Poetteringorg.opensolaris.opengrok.search.*,
88f642c00b1708c5e0203c1753a9ef91d1de5442Kay Sieversorg.opensolaris.opengrok.web.*,
88f642c00b1708c5e0203c1753a9ef91d1de5442Kay Sieversorg.opensolaris.opengrok.web.*,
20ffc4c4a9226b0e45cc02ad9c0108981626c0bbKay Sieversorg.opensolaris.opengrok.search.context.*,
f25626edf4c39bb9409cb165e6ce9551dd130661Lennart Poetteringorg.opensolaris.opengrok.configuration.*,
a0a3844815b0f346dba03f41245c620f432e462fLennart Poetteringorg.apache.lucene.search.spell.LuceneDictionary,
a0a3844815b0f346dba03f41245c620f432e462fLennart Poetteringorg.apache.lucene.search.spell.SpellChecker,
9efaf380a7c7fa16f44b1aa15b967e99f331203aLennart Poetteringorg.apache.lucene.store.FSDirectory,
9efaf380a7c7fa16f44b1aa15b967e99f331203aLennart Poetteringorg.apache.lucene.analysis.*,
9efaf380a7c7fa16f44b1aa15b967e99f331203aLennart Poetteringorg.apache.lucene.document.*,
9efaf380a7c7fa16f44b1aa15b967e99f331203aLennart Poetteringorg.apache.lucene.index.*,
9efaf380a7c7fa16f44b1aa15b967e99f331203aLennart Poetteringorg.apache.lucene.search.*,
9efaf380a7c7fa16f44b1aa15b967e99f331203aLennart Poetteringorg.apache.lucene.queryParser.*"
9efaf380a7c7fa16f44b1aa15b967e99f331203aLennart Poettering%><%@ page session="false" %><%@ page errorPage="error.jsp" %><%
9efaf380a7c7fa16f44b1aa15b967e99f331203aLennart PoetteringDate starttime = new Date();
a0a3844815b0f346dba03f41245c620f432e462fLennart PoetteringString q = request.getParameter("q");
a0a3844815b0f346dba03f41245c620f432e462fLennart PoetteringString defs = request.getParameter("defs");
25016cb67f22db15b6d2625177a5a2429dcaab66Lennart PoetteringString refs = request.getParameter("refs");
25016cb67f22db15b6d2625177a5a2429dcaab66Lennart PoetteringString hist = request.getParameter("hist");
4ee717820208a4c8e92383d0dbefa401827fab38Kay SieversString path = request.getParameter("path");
4ee717820208a4c8e92383d0dbefa401827fab38Kay Sievers
5ba2dc259f3cdd8fddef68cfd28380a32534e49aKay Sievers%>
5ba2dc259f3cdd8fddef68cfd28380a32534e49aKay Sievers<%@ include file="projects.jspf" %>
5ba2dc259f3cdd8fddef68cfd28380a32534e49aKay Sievers<%
5ba2dc259f3cdd8fddef68cfd28380a32534e49aKay SieversString sort = null;
20ffc4c4a9226b0e45cc02ad9c0108981626c0bbKay Sievers
b45f770f0049fbdf3f6c9db0ab11deeff4ccd86dKay Sieversfinal String LASTMODTIME = "lastmodtime";
b8217b7bd5fd171916a095b150fad4c3a37f5a41Kay Sieversfinal String RELEVANCY = "relevancy";
b45f770f0049fbdf3f6c9db0ab11deeff4ccd86dKay Sievers
b45f770f0049fbdf3f6c9db0ab11deeff4ccd86dKay SieversCookie[] cookies = request.getCookies();
b45f770f0049fbdf3f6c9db0ab11deeff4ccd86dKay Sieversif (cookies != null) {
b8217b7bd5fd171916a095b150fad4c3a37f5a41Kay Sievers for (Cookie cookie : cookies) {
b8217b7bd5fd171916a095b150fad4c3a37f5a41Kay Sievers if (cookie.getName().equals("OpenGrok/sorting")) {
b8217b7bd5fd171916a095b150fad4c3a37f5a41Kay Sievers sort = cookie.getValue();
512dabcdc65eece0bcebb4f971ec34794be8d35dKay Sievers if (!LASTMODTIME.equals(sort) && !RELEVANCY.equals(sort)) {
b45f770f0049fbdf3f6c9db0ab11deeff4ccd86dKay Sievers sort = null;
512dabcdc65eece0bcebb4f971ec34794be8d35dKay Sievers }
512dabcdc65eece0bcebb4f971ec34794be8d35dKay Sievers break;
512dabcdc65eece0bcebb4f971ec34794be8d35dKay Sievers }
b8217b7bd5fd171916a095b150fad4c3a37f5a41Kay Sievers }
08f23fd29c9df9c8b4e874933eb39711f069754bLennart Poettering}
08f23fd29c9df9c8b4e874933eb39711f069754bLennart Poettering
3cc588803dba3530cd39000d299353a31e4c068bLennart PoetteringString sortParam = request.getParameter("sort");
3cc588803dba3530cd39000d299353a31e4c068bLennart Poetteringif (sortParam != null) {
3cc588803dba3530cd39000d299353a31e4c068bLennart Poettering if (LASTMODTIME.equals(sortParam)) {
3cc588803dba3530cd39000d299353a31e4c068bLennart Poettering sort = LASTMODTIME;
18b754d345ecb0b15e369978aaffa72e9814b86aKay Sievers } else if (RELEVANCY.equals(sortParam)) {
068665b6fd9839f27bcace7e8f56c0baa6935272Lennart Poettering sort = RELEVANCY;
b070e7f3c9ed680c821bd89d42506695f2438506Lennart Poettering }
b070e7f3c9ed680c821bd89d42506695f2438506Lennart Poettering if (sort != null) {
231931ffba1bca9d8759bbd6f797e56f8c6971faLennart Poettering Cookie cookie = new Cookie("OpenGrok/sorting", sort);
231931ffba1bca9d8759bbd6f797e56f8c6971faLennart Poettering response.addCookie(cookie);
169c4f65131fbc7bcb51e7d5487a715cdcd0e0ebLennart Poettering }
169c4f65131fbc7bcb51e7d5487a715cdcd0e0ebLennart Poettering}
6ba383fa49e01302dfeae1f5083bb942b055628bLennart Poettering
6ba383fa49e01302dfeae1f5083bb942b055628bLennart PoetteringHits hits = null;
bd08f2422491169e92dc0899d5ba848fcae4c15cLennart PoetteringString errorMsg = null;
bd08f2422491169e92dc0899d5ba848fcae4c15cLennart Poettering
71100051c5d351daac20610f3a4b8c14901088d8Lennart Poetteringif( q!= null && q.equals("")) q = null;
d3c7d7dd77b2b72315164b672462825cef6c0f9aKay Sieversif( defs != null && defs.equals("")) defs = null;
71100051c5d351daac20610f3a4b8c14901088d8Lennart Poetteringif( refs != null && refs.equals("")) refs = null;
fb0864e7b9c6d26269ccea6ec5c0fd921c029781Lennart Poetteringif( hist != null && hist.equals("")) hist = null;
fb0864e7b9c6d26269ccea6ec5c0fd921c029781Lennart Poetteringif( path != null && path.equals("")) path = null;
18da49531e4c6b31bd2439b4d738dc1bb9660af1Lennart Poetteringif (project != null && project.equals("")) project = null;
18da49531e4c6b31bd2439b4d738dc1bb9660af1Lennart Poettering
8af0fcdb909b87ef4dcef34d50df814656acec81Lennart Poetteringif (q != null || defs != null || refs != null || hist != null || path != null) {
8af0fcdb909b87ef4dcef34d50df814656acec81Lennart Poettering Searcher searcher = null; //the searcher used to open/search the index
9586cdfab6a2638078702b7fea7e16b3a71899e2Lennart Poettering IndexReader ireader = null; //the reader used to open/search the index
9586cdfab6a2638078702b7fea7e16b3a71899e2Lennart Poettering Query query = null, defQuery = null; //the Query created by the QueryParser
9586cdfab6a2638078702b7fea7e16b3a71899e2Lennart Poettering
9586cdfab6a2638078702b7fea7e16b3a71899e2Lennart Poettering int start = 0; //the first index displayed on this page
6b80b9b8ee6d372e00ece51e6a11c6d31899aaecLennart Poettering int max = 25; //the maximum items displayed on this page
6b80b9b8ee6d372e00ece51e6a11c6d31899aaecLennart Poettering int thispage = 0; //used for the for/next either max or
7f110ff9b8828b477e87de7b28c708cf69a3d008Lennart Poettering String moreUrl = null;
7f110ff9b8828b477e87de7b28c708cf69a3d008Lennart Poettering CompatibleAnalyser analyzer = new CompatibleAnalyser();
7f110ff9b8828b477e87de7b28c708cf69a3d008Lennart Poettering String qstr = "";
7f110ff9b8828b477e87de7b28c708cf69a3d008Lennart Poettering String result = "";
7d900eb6f58ca76a0f742c6e1823aa7317d4471fLennart Poettering try {
7d900eb6f58ca76a0f742c6e1823aa7317d4471fLennart Poettering String DATA_ROOT = env.getDataRootPath();
101f077676e9fbe1a66c8b2dc4864a8d7a94c372Lennart Poettering if(DATA_ROOT.equals("")) {
101f077676e9fbe1a66c8b2dc4864a8d7a94c372Lennart Poettering throw new Exception("DATA_ROOT parameter is not configured in web.xml!");
f7f964eb3625e4cca7f16377fa12aa7a760243e7Lennart Poettering }
f7f964eb3625e4cca7f16377fa12aa7a760243e7Lennart Poettering File data_root = new File(DATA_ROOT);
144f0fc0c8a5e2f6b72179e2b5fb992474da24adLennart Poettering if(!data_root.isDirectory()) {
d0e5a33374cee92962af33dfc03873e470b014f6Lennart Poettering throw new Exception("DATA_ROOT parameter in web.xml does not exist or is not a directory!");
d0e5a33374cee92962af33dfc03873e470b014f6Lennart Poettering }
d0e5a33374cee92962af33dfc03873e470b014f6Lennart Poettering ireader = IndexReader.open(DATA_ROOT + "/index");
d0e5a33374cee92962af33dfc03873e470b014f6Lennart Poettering searcher = new IndexSearcher(ireader);
d0e5a33374cee92962af33dfc03873e470b014f6Lennart Poettering //String date = request.getParameter("date");
6edd7ca1624f89c9a36067b721a0280e748acb17Kay Sievers try {
6edd7ca1624f89c9a36067b721a0280e748acb17Kay Sievers start = Integer.parseInt(request.getParameter("start")); //parse the max results first
6edd7ca1624f89c9a36067b721a0280e748acb17Kay Sievers max = Integer.parseInt(request.getParameter("n")); //then the start index
15e9fbd851c15ecaad4888932584f37dcd26111aLennart Poettering if(max < 0 || (max % 10 != 0) || max > 50) max = 25;
15e9fbd851c15ecaad4888932584f37dcd26111aLennart Poettering if(start < 0 ) start = 0;
53ed2eeb2e709a6c0d152d7bdf2d9a4b9f997a16Lennart Poettering } catch (Exception e) { }
53ed2eeb2e709a6c0d152d7bdf2d9a4b9f997a16Lennart Poettering
353e12c2f4a9e96a47eb80b80d2ffb7bc1d44a1bLennart Poettering StringBuilder sb = new StringBuilder();
353e12c2f4a9e96a47eb80b80d2ffb7bc1d44a1bLennart Poettering if (q != null) {
680a1dbc354b2f437b4e06e27d4c43217977efdfLennart Poettering sb.append(q);
680a1dbc354b2f437b4e06e27d4c43217977efdfLennart Poettering }
7e64c73a93cdcc7068280f3e3ba8adbd6c6f8f84Lennart Poettering
7e64c73a93cdcc7068280f3e3ba8adbd6c6f8f84Lennart Poettering if (defs != null) {
c4aa65e7147dc742886edf25593e10466b02fc3aLennart Poettering sb.append(" defs:(");
7e64c73a93cdcc7068280f3e3ba8adbd6c6f8f84Lennart Poettering sb.append(defs);
36e43bddd0a4526e77cdae2c922bb29f67bd74adLennart Poettering sb.append(")");
36e43bddd0a4526e77cdae2c922bb29f67bd74adLennart Poettering }
b61c90514e134dc781617d172961f25e7352f53bLennart Poettering
b61c90514e134dc781617d172961f25e7352f53bLennart Poettering if (refs != null) {
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering sb.append(" refs:(");
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering sb.append(refs);
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering sb.append(")");
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering }
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering if (path != null) {
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering sb.append(" path:(");
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering sb.append(path);
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering sb.append(")");
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering }
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering if (hist != null) {
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering sb.append(" hist:(");
a558d00381291afd6a81f7df07269fe76eeae556Lennart Poettering sb.append(hist);
05aa9edde0f9f4077b8120389c93cb0134eda9c5Lennart Poettering sb.append(")");
05aa9edde0f9f4077b8120389c93cb0134eda9c5Lennart Poettering }
31ed59c51126fce7d958c188772a397e2a1ed010Lennart Poettering
31ed59c51126fce7d958c188772a397e2a1ed010Lennart Poettering if (project != null) {
62f21ec91ad8e7e24079962f4df066b0094fe68dLennart Poettering sb.append(" (");
62f21ec91ad8e7e24079962f4df066b0094fe68dLennart Poettering
62f21ec91ad8e7e24079962f4df066b0094fe68dLennart Poettering boolean first = true;
62f21ec91ad8e7e24079962f4df066b0094fe68dLennart Poettering for (String s : project.split(" ")) {
62f21ec91ad8e7e24079962f4df066b0094fe68dLennart Poettering if (first) {
62f21ec91ad8e7e24079962f4df066b0094fe68dLennart Poettering first = false;
62f21ec91ad8e7e24079962f4df066b0094fe68dLennart Poettering } else {
62f21ec91ad8e7e24079962f4df066b0094fe68dLennart Poettering sb.append(" OR ");
87a8baa35d6d65ac3b58ae8e26e338e67f8ae8edLennart Poettering }
87a8baa35d6d65ac3b58ae8e26e338e67f8ae8edLennart Poettering sb.append("project:(");
87a8baa35d6d65ac3b58ae8e26e338e67f8ae8edLennart Poettering sb.append(s);
87a8baa35d6d65ac3b58ae8e26e338e67f8ae8edLennart Poettering sb.append(")");
0716c60e37d2083325cd5316caf4310f0acc9a89Lennart Poettering }
87a8baa35d6d65ac3b58ae8e26e338e67f8ae8edLennart Poettering
5ba081b0fb02380cee4c2ff5bc7e05f869eb8415Lennart Poettering sb.append(")");
5ba081b0fb02380cee4c2ff5bc7e05f869eb8415Lennart Poettering }
b3fa47e0819b08ea32e69e19e6d88ce2daca069dLennart Poettering
b3fa47e0819b08ea32e69e19e6d88ce2daca069dLennart Poettering qstr = sb.toString();
7f3e62571a63ac90de6ac5eefeeb8d3e9aa6f49eLennart Poettering
7f3e62571a63ac90de6ac5eefeeb8d3e9aa6f49eLennart Poettering QueryParser qparser = new QueryParser("full", analyzer);
7f3e62571a63ac90de6ac5eefeeb8d3e9aa6f49eLennart Poettering qparser.setDefaultOperator(QueryParser.AND_OPERATOR);
7f3e62571a63ac90de6ac5eefeeb8d3e9aa6f49eLennart Poettering qparser.setAllowLeadingWildcard(env.isAllowLeadingWildcard());
4cbd9ecf45f64c3a9acc99d473fbf3be3687ae24Lennart Poettering
4cbd9ecf45f64c3a9acc99d473fbf3be3687ae24Lennart Poettering query = qparser.parse(qstr); //parse the
25d6283acfeb87730c2c0c4c2ef76a66fa397e87Lennart Poettering if ("lastmodtime".equals(sort)) {
25d6283acfeb87730c2c0c4c2ef76a66fa397e87Lennart Poettering hits = searcher.search(query, new Sort("date", true));
a6eb9147a820d1c08b315867373a21bd0ece2f05Lennart Poettering } else {
a6eb9147a820d1c08b315867373a21bd0ece2f05Lennart Poettering hits = searcher.search(query);
b011116d1829bde044a638cbabfb070a7e0e8fa7Kay Sievers }
b011116d1829bde044a638cbabfb070a7e0e8fa7Kay Sievers thispage = max;
7d441ddb5ca090b5a97f58ac4b4d97b3e84fa81eLennart Poettering } catch (BooleanQuery.TooManyClauses e) {
65c0cf7108ae3537a357c74b4586a783baba82f9Lennart Poettering errorMsg = "<b>Error:</b> Too many results for wildcard!";
65c0cf7108ae3537a357c74b4586a783baba82f9Lennart Poettering } catch (ParseException e) {
7ef5875d142f01ab4fe8d35412d48c10723ae2d4Lennart Poettering errorMsg = "<b>Error:</b><br/>" + Util.Htmlize(qstr) + "<br/>" + Util.Htmlize(e.getMessage());
7ef5875d142f01ab4fe8d35412d48c10723ae2d4Lennart Poettering } catch (FileNotFoundException e) {
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers errorMsg = "<b>Error:</b> Index database not found";
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers } catch (Exception e) {
f957632b960a0a42999b38ded7089fa602b41745Kay Sievers errorMsg = "<b>Error:</b> " + Util.Htmlize(e.getMessage());
a2f5666d06fe8233025738047115bb9e3959df3eLennart Poettering }
a2f5666d06fe8233025738047115bb9e3959df3eLennart Poettering // @TODO fix me. I should try to figure out where the exact hit is instead
ad740100d108282d0244d5739d4dcc86fe4c5fdeLennart Poettering // of returning a page with just _one_ entry in....
ad740100d108282d0244d5739d4dcc86fe4c5fdeLennart Poettering if (hits != null && hits.length() == 1 && request.getServletPath().equals("/s") && (query != null && query instanceof TermQuery)) {
c821bd28c2ecce8d35248d61949fe1c0c3030b6cLennart Poettering File file = new File(hits.doc(0).get("path"));
c821bd28c2ecce8d35248d61949fe1c0c3030b6cLennart Poettering String parent = file.getParent();
de6c78f8795743894431a099d26ec562a8acf3dfLennart Poettering
7d441ddb5ca090b5a97f58ac4b4d97b3e84fa81eLennart Poettering StringBuilder url = new StringBuilder(context);
14e639ae7a1dbf156273ce697d30fbc6c6594209Lennart Poettering url.append("/xref");
14e639ae7a1dbf156273ce697d30fbc6c6594209Lennart Poettering if (parent != null) {
ff01d048b4c1455241c894cf7982662c9d28fd34Lennart Poettering url.append(parent.getAbsolutePath());
ff01d048b4c1455241c894cf7982662c9d28fd34Lennart Poettering }
d3c7d7dd77b2b72315164b672462825cef6c0f9aKay Sievers url.append('/');
72b9ed828bd22f3ddd74b6853c183eebf006d6d8Lennart Poettering url.append(Util.URIEncode(file.getName());
1d6702e8d3877c0bebf3ac817dc45ff72f5ecfa9Lennart Poettering sb.append("#");
1d6702e8d3877c0bebf3ac817dc45ff72f5ecfa9Lennart Poettering sb.append(((TermQuery)query).getTerm().text());;
1d6702e8d3877c0bebf3ac817dc45ff72f5ecfa9Lennart Poettering
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering response.sendRedirect(sb.toString());
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering } else {
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering String pageTitle = "Search";
0a55b298d930543c8065bb9e708dd112562b1736Lennart Poettering RuntimeEnvironment environment = RuntimeEnvironment.getInstance();
97f73ffb04947acf0a5854e3a7bdbb7a0105f6faLennart Poettering environment.register();
97f73ffb04947acf0a5854e3a7bdbb7a0105f6faLennart Poettering %><%@ include file="httpheader.jspf" %>
85f248b26653f5322c26735661d63d4e8460c30eLennart Poettering<body>
85f248b26653f5322c26735661d63d4e8460c30eLennart Poettering<div id="page">
1258097cd3cdbc5dd3d264850119e553a29c5068Lennart Poettering <div id="header"><%@ include file="pageheader.jspf" %></div>
1258097cd3cdbc5dd3d264850119e553a29c5068Lennart Poettering<div id="Masthead"></div>
1258097cd3cdbc5dd3d264850119e553a29c5068Lennart Poettering<div id="bar">
a4c279f87451186b8beb1b8cc21c7cad561ecf4bLennart Poettering <table border="0" width="100%"><tr><td><a href="<%=context%>" id="home">Home</a></td><td align="right"><%
a4c279f87451186b8beb1b8cc21c7cad561ecf4bLennart Poettering {
d3fc81bd6a5a046b22600ac1204df220c93d2c15Lennart Poettering StringBuffer url = request.getRequestURL();
d3fc81bd6a5a046b22600ac1204df220c93d2c15Lennart Poettering url.append('?');
d3fc81bd6a5a046b22600ac1204df220c93d2c15Lennart Poettering String querys = request.getQueryString();
d3fc81bd6a5a046b22600ac1204df220c93d2c15Lennart Poettering if (querys != null) {
7c697168102cb64c5cb65a542959684014da99c7Lennart Poettering int idx = querys.indexOf("sort=");
253ee27a0c7a410d27d490bb79ea97caed6a2b68Lennart Poettering if (idx == -1) {
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering url.append(querys);
8d0e38a2b966799af884e78a54fd6a2dffa44788Lennart Poettering url.append('&');
f28f1daf754a9a07de90e6fc4ada581bf5de677dLennart Poettering } else {
f28f1daf754a9a07de90e6fc4ada581bf5de677dLennart Poettering url.append(querys.substring(0, idx));
f28f1daf754a9a07de90e6fc4ada581bf5de677dLennart Poettering }
f28f1daf754a9a07de90e6fc4ada581bf5de677dLennart Poettering }
88a07670cfa974a605c7c7b520b8a3135fce37f9Lennart Poettering url.append("sort=");
88a07670cfa974a605c7c7b520b8a3135fce37f9Lennart Poettering
88a07670cfa974a605c7c7b520b8a3135fce37f9Lennart Poettering if (sort == null || RELEVANCY.equals(sort)) {
916abb21d0a6653e0187b91591e492026886b0a4Lennart Poettering url.append(LASTMODTIME);
916abb21d0a6653e0187b91591e492026886b0a4Lennart Poettering %><b>Sort by relevance</b> <a href="<%=url.toString()%>">Sort by last modified time</a><%
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering } else {
916abb21d0a6653e0187b91591e492026886b0a4Lennart Poettering url.append(RELEVANCY);
b23de6af893c11da4286bc416455cd0926d1532eLennart Poettering %><a href="<%=url.toString()%>">Sort by relevance</a> <b>Sort by last modified time</b><%
b23de6af893c11da4286bc416455cd0926d1532eLennart Poettering }
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering } %></td></tr></table>
adf70c5e4e6673353b8d702baee4e1d21eb05dfeKay Sievers</div>
21bdae12e11ae20460715475d8a0c991f15464acLennart Poettering<div id="menu">
21bdae12e11ae20460715475d8a0c991f15464acLennart Poettering <%@ include file="menu.jspf"%>
9534ce54858c67363b841cdbdc315140437bfdb4Lennart Poettering</div>
9534ce54858c67363b841cdbdc315140437bfdb4Lennart Poettering<div id="results">
c798c40ec957a35cd4b7d04a196a9e58880c6ff3Lennart Poettering<%
c798c40ec957a35cd4b7d04a196a9e58880c6ff3Lennart Poetteringif( hits == null || errorMsg != null) {
68c7d001f4117f0c3d0a4582e32cbb03ae5fac57Lennart Poettering %><%=errorMsg%><%
68c7d001f4117f0c3d0a4582e32cbb03ae5fac57Lennart Poettering } else if (hits.length() == 0) {
68c7d001f4117f0c3d0a4582e32cbb03ae5fac57Lennart Poettering File spellIndex = new File(env.getDataRootPath(), "spellIndex");
7a2a0b907b5cc60f5d9a871997d7d6e7f62bf4d8Lennart Poettering
253ee27a0c7a410d27d490bb79ea97caed6a2b68Lennart Poettering if (spellIndex.exists()) {
5d0fcd7c8d29340ac9425c309e8ac436a9af699cLennart Poettering FSDirectory spellDirectory = FSDirectory.getDirectory(spellIndex);
5d0fcd7c8d29340ac9425c309e8ac436a9af699cLennart Poettering SpellChecker checker = new SpellChecker(spellDirectory);
acb14d318b84bda00d1e666d7dab6794d5bbeb3fLennart Poettering
73090dc815390f4fca4e3ed8a7e1d3806605daaaLennart Poettering Date sstart = new Date();
44143309dd0b37d61d7d842ca58f01a65646ec71Kay Sievers
3d57c6ab801f4437f12948e29589e3d00c3ad9dbLennart Poettering %><p><font color="#cc0000">Did you mean</font>:<%
b9a2a36b519ccd79c4198e7dda4e657d597a14adLennart Poettering String[] toks;
b9a2a36b519ccd79c4198e7dda4e657d597a14adLennart Poettering if(q != null) {
ba1a55152c50dfbcd3d4a64353b95f4a2f37985eLennart Poettering toks = q.split("[\t ]+");
9408a2d295a312a5472345090e28e0502570494bLennart Poettering if(toks != null){
71092d70af35567dd154d3de2ce04ce62e157a7cLennart Poettering for(int j=0; j<toks.length; j++) {
3f7a8c4e9f1d3ce48919e24eb2c9d56dd6fd88d8Kay Sievers if(toks[j].length() > 3) {
f9276855a1d270b6c3f857cdaf2c4b49920c2228Lennart Poettering String[] ret = checker.suggestSimilar(toks[j].toLowerCase(), 3);
f9276855a1d270b6c3f857cdaf2c4b49920c2228Lennart Poettering for(int i = 0;i < ret.length; i++) {
260abb780a135e4cae8c10715c7e85675efc345aLennart Poettering %> <a href=search?q=<%=ret[i]%>><%=ret[i]%></a> &nbsp; <%
260abb780a135e4cae8c10715c7e85675efc345aLennart Poettering }
260abb780a135e4cae8c10715c7e85675efc345aLennart Poettering }
2791a8f8dc8764a9247cdba3562bd4c04010f144Lennart Poettering }
a8f11321c209830a35edd0357e8def5d4437d854Lennart Poettering }
a8f11321c209830a35edd0357e8def5d4437d854Lennart Poettering }
21bdae12e11ae20460715475d8a0c991f15464acLennart Poettering if(refs != null) {
21bdae12e11ae20460715475d8a0c991f15464acLennart Poettering toks = refs.split("[\t ]+");
c32e0c40f7e706e3ebcd101187d5ced96f083491Lennart Poettering if(toks != null){
c32e0c40f7e706e3ebcd101187d5ced96f083491Lennart Poettering for(int j=0; j<toks.length; j++) {
35f10fccb06a0c7b4f26a28746db387aac376cb3Lennart Poettering if(toks[j].length() > 3) {
Error!

 

There was an error!

null

java.lang.NullPointerException