joerg 2003/09/27 06:21:11
Modified: src/blocks/lucene/java/org/apache/cocoon/generation
SearchGenerator.java
Log:
fixed namespace output (bug 23434, thanks to Conal Tuohy)
Revision Changes Path
1.4 +91 -51
cocoon-2.1/src/blocks/lucene/java/org/apache/cocoon/generation/SearchGenerator.java
Index: SearchGenerator.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/lucene/java/org/apache/cocoon/generation/SearchGenerator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SearchGenerator.java 4 Sep 2003 09:38:38 -0000 1.3
+++ SearchGenerator.java 27 Sep 2003 13:21:11 -0000 1.4
@@ -128,6 +128,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Bernhard Huber</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Jeremy Quinn</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Conal Tuohy</a>
* @version CVS $Id$
*/
public class SearchGenerator extends ServiceableGenerator
@@ -137,12 +138,17 @@
/**
* The XML namespace for the output document.
*/
- protected final static String namespace =
"http://apache.org/cocoon/search/1.0";
+ protected final static String NAMESPACE =
"http://apache.org/cocoon/search/1.0";
+
+ /**
+ * The XML namespace prefix for the output document.
+ */
+ protected final static String PREFIX = "search";
/**
* The XML namespace for xlink
*/
- protected final static String xlinkNamespace =
"http://www.w3.org/1999/xlink";
+ protected final static String XLINK_NAMESPACE =
"http://www.w3.org/1999/xlink";
/**
* Description of the Field
@@ -150,11 +156,17 @@
protected final static String CDATA = "CDATA";
/**
- * Root element of generated xml content, ie <code>results</code>.
+ * Name of root element of generated xml content, ie
<code>results</code>.
*/
protected final static String RESULTS_ELEMENT = "results";
/**
+ * Qualified name of root element of generated xml content, ie
<code>search:results</code>.
+ */
+ protected final static String Q_RESULTS_ELEMENT = PREFIX + ":" +
RESULTS_ELEMENT;
+
+
+ /**
* Attribute <code>date</code> of <code>results</code> element.
* It contains the date a long value, indicating when a search
* generated this xml content.
@@ -169,23 +181,34 @@
/**
* Attribute <code>start-index</code> of <code>results</code> element.
- * Echos the <code>startIndex</code> query parameter.
+ * Echoes the <code>startIndex</code> query parameter.
*/
protected final static String START_INDEX_ATTRIBUTE = "start-index";
/**
* Attribute <code>page-length</code> of <code>results</code> element.
- * Echos the <code>pageLenth</code> query parameter.
+ * Echoes the <code>pageLenth</code> query parameter.
*/
protected final static String PAGE_LENGTH_ATTRIBUTE = "page-length";
/**
+ * Attribute <code>name</code> of <code>hit</code> element.
+ */
+ protected final static String NAME_ATTRIBUTE = "name";
+
+ /**
* Child element of generated xml content, ie <code>hits</code>.
* This element describes all hits.
*/
protected final static String HITS_ELEMENT = "hits";
/**
+ * QName of child element of generated xml content, ie
<code>search:hits</code>.
+ * This element describes all hits.
+ */
+ protected final static String Q_HITS_ELEMENT = PREFIX + ":" +
HITS_ELEMENT;
+
+ /**
* Attribute <code>total-count</code> of <code>hits</code> element.
* The value describes total number of hits found by the search engine.
*/
@@ -204,6 +227,12 @@
protected final static String HIT_ELEMENT = "hit";
/**
+ * QName of child element of generated xml content, ie
<code>search:hit</code>.
+ * This element describes a single hit.
+ */
+ protected final static String Q_HIT_ELEMENT = PREFIX + ":" + HIT_ELEMENT;
+
+ /**
* Attribute <code>rank</code> of <code>hit</code> element.
* The value describes the count index of this hits, ranging between 0,
and
* total-count minus 1.
@@ -231,18 +260,34 @@
protected final static String FIELD_ELEMENT = "field";
/**
+ * QName of child element <code>search:field</code> of the
<code>hit</code> element.
+ */
+ protected final static String Q_FIELD_ELEMENT = PREFIX + ":" +
FIELD_ELEMENT;
+
+ /**
* Child element of generated xml content, ie <code>navigation</code>.
* This element describes some hints for easier navigation.
*/
protected final static String NAVIGATION_ELEMENT = "navigation";
/**
- * Child element of generated xml content, ie <code>navigation</code>.
+ * QName of child element of generated xml content, ie
<code>search:navigation</code>.
+ */
+ protected final static String Q_NAVIGATION_ELEMENT = PREFIX + ":" +
NAVIGATION_ELEMENT;
+
+ /**
+ * Child element of generated xml content, ie
<code>navigation-page</code>.
* This element describes the start-index of page containing hits.
*/
protected final static String NAVIGATION_PAGE_ELEMENT =
"navigation-page";
/**
+ * QName of child element of generated xml content, ie
<code>search:navigation-page</code>.
+ * This element describes the start-index of page containing hits.
+ */
+ protected final static String Q_NAVIGATION_PAGE_ELEMENT = PREFIX + ":" +
NAVIGATION_PAGE_ELEMENT;
+
+ /**
* Attribute <code>has-next</code> of <code>navigation-page</code>
element.
* The value is true if a next navigation control should be presented.
*/
@@ -438,16 +483,15 @@
// try getting the queryString from the generator sitemap params
- queryString = "";
queryString = par.getParameter(QUERY_PARAM, "");
// try getting the queryString from the request params
if (queryString.equals("")) {
- param_name =
par.getParameter(QUERY_STRING_PARAM, QUERY_STRING_PARAM_DEFAULT);
- if (request.getParameter(param_name) !=
null) {
- queryString =
request.getParameter(param_name);
- }
- }
+ param_name = par.getParameter(QUERY_STRING_PARAM,
QUERY_STRING_PARAM_DEFAULT);
+ if (request.getParameter(param_name) != null) {
+ queryString = request.getParameter(param_name);
+ }
+ }
// always try lookup the start index from the request params
// get startIndex
startIndex = null;
@@ -523,14 +567,14 @@
// Start the document and set the namespace.
this.contentHandler.startDocument();
- this.contentHandler.startPrefixMapping("search", namespace);
- this.contentHandler.startPrefixMapping("xlink", xlinkNamespace);
+ this.contentHandler.startPrefixMapping(PREFIX, NAMESPACE);
+ this.contentHandler.startPrefixMapping("xlink", XLINK_NAMESPACE);
generateResults();
// End the document.
this.contentHandler.endPrefixMapping("xlink");
- this.contentHandler.endPrefixMapping("");
+ this.contentHandler.endPrefixMapping(PREFIX);
this.contentHandler.endDocument();
}
@@ -538,7 +582,7 @@
/**
* Create an Integer.
* <p>
- * Create an Integer from String s, iff conversion fails return null.
+ * Create an Integer from String s, if conversion fails return null.
* </p>
*
* @param s Converting s to an Integer
@@ -579,24 +623,20 @@
long time = System.currentTimeMillis();
atts.clear();
- atts.addAttribute(namespace, DATE_ATTRIBUTE,
- DATE_ATTRIBUTE, CDATA, String.valueOf(time));
+ atts.addAttribute("", DATE_ATTRIBUTE, DATE_ATTRIBUTE, CDATA,
String.valueOf(time));
if (queryString != null && queryString.length() > 0)
- atts.addAttribute(namespace, QUERY_STRING_ATTRIBUTE,
- QUERY_STRING_ATTRIBUTE, CDATA, String.valueOf(queryString));
- atts.addAttribute(namespace, START_INDEX_ATTRIBUTE,
- START_INDEX_ATTRIBUTE, CDATA, String.valueOf(startIndex));
- atts.addAttribute(namespace, PAGE_LENGTH_ATTRIBUTE,
- PAGE_LENGTH_ATTRIBUTE, CDATA, String.valueOf(pageLength));
+ atts.addAttribute("", QUERY_STRING_ATTRIBUTE,
QUERY_STRING_ATTRIBUTE, CDATA, String.valueOf(queryString));
+ atts.addAttribute("", START_INDEX_ATTRIBUTE, START_INDEX_ATTRIBUTE,
CDATA, String.valueOf(startIndex));
+ atts.addAttribute("", PAGE_LENGTH_ATTRIBUTE, PAGE_LENGTH_ATTRIBUTE,
CDATA, String.valueOf(pageLength));
- contentHandler.startElement(namespace, RESULTS_ELEMENT,
RESULTS_ELEMENT, atts);
+ contentHandler.startElement(NAMESPACE, RESULTS_ELEMENT,
Q_RESULTS_ELEMENT, atts);
// build xml from the hits
generateHits(pager);
generateNavigation(pager);
// End root element.
- contentHandler.endElement(namespace, "results", "results");
+ contentHandler.endElement(NAMESPACE, RESULTS_ELEMENT,
Q_RESULTS_ELEMENT);
}
@@ -610,13 +650,13 @@
private void generateHits(LuceneCocoonPager pager) throws SAXException {
if (pager != null && pager.hasNext()) {
atts.clear();
- atts.addAttribute(namespace, TOTAL_COUNT_ATTRIBUTE,
TOTAL_COUNT_ATTRIBUTE,
+ atts.addAttribute("", TOTAL_COUNT_ATTRIBUTE,
TOTAL_COUNT_ATTRIBUTE,
CDATA, String.valueOf(pager.getCountOfHits()));
- atts.addAttribute(namespace, COUNT_OF_PAGES_ATTRIBUTE,
COUNT_OF_PAGES_ATTRIBUTE,
+ atts.addAttribute("", COUNT_OF_PAGES_ATTRIBUTE,
COUNT_OF_PAGES_ATTRIBUTE,
CDATA, String.valueOf(pager.getCountOfPages()));
- contentHandler.startElement(namespace, HITS_ELEMENT,
HITS_ELEMENT, atts);
+ contentHandler.startElement(NAMESPACE, HITS_ELEMENT,
Q_HITS_ELEMENT, atts);
generateHit(pager);
- contentHandler.endElement(namespace, HITS_ELEMENT, HITS_ELEMENT);
+ contentHandler.endElement(NAMESPACE, HITS_ELEMENT,
Q_HITS_ELEMENT);
}
}
@@ -642,13 +682,13 @@
String uri = doc.get(LuceneXMLIndexer.URL_FIELD);
atts.clear();
- atts.addAttribute(namespace, RANK_ATTRIBUTE, RANK_ATTRIBUTE,
CDATA,
+ atts.addAttribute("", RANK_ATTRIBUTE, RANK_ATTRIBUTE, CDATA,
String.valueOf(counter));
- atts.addAttribute(namespace, SCORE_ATTRIBUTE, SCORE_ATTRIBUTE,
CDATA,
+ atts.addAttribute("", SCORE_ATTRIBUTE, SCORE_ATTRIBUTE, CDATA,
String.valueOf(score));
- atts.addAttribute(namespace, URI_ATTRIBUTE, URI_ATTRIBUTE, CDATA,
+ atts.addAttribute("", URI_ATTRIBUTE, URI_ATTRIBUTE, CDATA,
String.valueOf(uri));
- contentHandler.startElement(namespace, HIT_ELEMENT, HIT_ELEMENT,
atts);
+ contentHandler.startElement(NAMESPACE, HIT_ELEMENT,
Q_HIT_ELEMENT, atts);
// fix me, add here a summary of this hit
for (Enumeration e = doc.fields(); e.hasMoreElements(); ) {
Field field = (Field)e.nextElement();
@@ -656,15 +696,15 @@
if (LuceneXMLIndexer.URL_FIELD.equals(field.name()))
continue;
atts.clear();
- atts.addAttribute(namespace, "name", "name", CDATA,
field.name());
- contentHandler.startElement(namespace, FIELD_ELEMENT,
FIELD_ELEMENT, atts);
+ atts.addAttribute("", NAME_ATTRIBUTE, NAME_ATTRIBUTE,
CDATA, field.name());
+ contentHandler.startElement(NAMESPACE, FIELD_ELEMENT,
Q_FIELD_ELEMENT, atts);
String value = field.stringValue();
contentHandler.characters(value.toCharArray(), 0,
value.length());
- contentHandler.endElement(namespace, FIELD_ELEMENT,
FIELD_ELEMENT);
+ contentHandler.endElement(NAMESPACE, FIELD_ELEMENT,
Q_FIELD_ELEMENT);
}
}
- contentHandler.endElement(namespace, HIT_ELEMENT, HIT_ELEMENT);
+ contentHandler.endElement(NAMESPACE, HIT_ELEMENT, Q_HIT_ELEMENT);
}
}
@@ -681,31 +721,31 @@
if (pager != null) {
// generate navigation element
atts.clear();
- atts.addAttribute(namespace, TOTAL_COUNT_ATTRIBUTE,
TOTAL_COUNT_ATTRIBUTE,
+ atts.addAttribute("", TOTAL_COUNT_ATTRIBUTE,
TOTAL_COUNT_ATTRIBUTE,
CDATA, String.valueOf(pager.getCountOfHits()));
- atts.addAttribute(namespace, COUNT_OF_PAGES_ATTRIBUTE,
COUNT_OF_PAGES_ATTRIBUTE,
+ atts.addAttribute("", COUNT_OF_PAGES_ATTRIBUTE,
COUNT_OF_PAGES_ATTRIBUTE,
CDATA, String.valueOf(pager.getCountOfPages()));
- atts.addAttribute(namespace, HAS_NEXT_ATTRIBUTE,
HAS_NEXT_ATTRIBUTE,
+ atts.addAttribute("", HAS_NEXT_ATTRIBUTE, HAS_NEXT_ATTRIBUTE,
CDATA, String.valueOf(pager.hasNext()));
- atts.addAttribute(namespace, HAS_PREVIOUS_ATTRIBUTE,
HAS_PREVIOUS_ATTRIBUTE,
+ atts.addAttribute("", HAS_PREVIOUS_ATTRIBUTE,
HAS_PREVIOUS_ATTRIBUTE,
CDATA, String.valueOf(pager.hasPrevious()));
- atts.addAttribute(namespace, NEXT_INDEX_ATTRIBUTE,
NEXT_INDEX_ATTRIBUTE,
+ atts.addAttribute("", NEXT_INDEX_ATTRIBUTE, NEXT_INDEX_ATTRIBUTE,
CDATA, String.valueOf(pager.nextIndex()));
- atts.addAttribute(namespace, PREVIOUS_INDEX_ATTRIBUTE,
PREVIOUS_INDEX_ATTRIBUTE,
+ atts.addAttribute("", PREVIOUS_INDEX_ATTRIBUTE,
PREVIOUS_INDEX_ATTRIBUTE,
CDATA, String.valueOf(pager.previousIndex()));
- contentHandler.startElement(namespace, NAVIGATION_ELEMENT,
NAVIGATION_ELEMENT, atts);
+ contentHandler.startElement(NAMESPACE, NAVIGATION_ELEMENT,
Q_NAVIGATION_ELEMENT, atts);
int count_of_pages = pager.getCountOfPages();
for (int i = 0, page_start_index = 0;
i < count_of_pages;
i++, page_start_index += pageLength.intValue()) {
atts.clear();
- atts.addAttribute(namespace, START_INDEX_ATTRIBUTE,
START_INDEX_ATTRIBUTE,
+ atts.addAttribute("", START_INDEX_ATTRIBUTE,
START_INDEX_ATTRIBUTE,
CDATA, String.valueOf(page_start_index));
- contentHandler.startElement(namespace,
NAVIGATION_PAGE_ELEMENT, NAVIGATION_PAGE_ELEMENT, atts);
- contentHandler.endElement(namespace,
NAVIGATION_PAGE_ELEMENT, NAVIGATION_PAGE_ELEMENT);
+ contentHandler.startElement(NAMESPACE,
NAVIGATION_PAGE_ELEMENT, Q_NAVIGATION_PAGE_ELEMENT, atts);
+ contentHandler.endElement(NAMESPACE,
NAVIGATION_PAGE_ELEMENT, Q_NAVIGATION_PAGE_ELEMENT);
}
// navigation is EMPTY element
- contentHandler.endElement(namespace, NAVIGATION_ELEMENT,
NAVIGATION_ELEMENT);
+ contentHandler.endElement(NAMESPACE, NAVIGATION_ELEMENT,
Q_NAVIGATION_ELEMENT);
}
}
@@ -714,7 +754,7 @@
* Build hits from a query input, and setup paging object.
*
* @since
- * @throws ProcessingException iff an error occurs
+ * @throws ProcessingException if an error occurs
*/
private LuceneCocoonPager buildHits() throws ProcessingException {