Author: jeremy Date: Sat Apr 9 10:48:36 2005 New Revision: 160703 URL: http://svn.apache.org/viewcvs?view=rev&rev=160703 Log: updated to add a pipeline for re-indexing a single asset, changed indexer from using java.io.File to using Excalibur Source, so now any TraversableSource can be indexed.
Modified: cocoon/blocks/unsupported/querybean/trunk/samples/flow/indexer.js cocoon/blocks/unsupported/querybean/trunk/samples/screens/index.xml cocoon/blocks/unsupported/querybean/trunk/samples/sitemap.xmap Modified: cocoon/blocks/unsupported/querybean/trunk/samples/flow/indexer.js URL: http://svn.apache.org/viewcvs/cocoon/blocks/unsupported/querybean/trunk/samples/flow/indexer.js?view=diff&r1=160702&r2=160703 ============================================================================== --- cocoon/blocks/unsupported/querybean/trunk/samples/flow/indexer.js (original) +++ cocoon/blocks/unsupported/querybean/trunk/samples/flow/indexer.js Sat Apr 9 10:48:36 2005 @@ -15,30 +15,31 @@ */ importClass(Packages.org.apache.excalibur.source.SourceResolver); -importClass(Packages.java.net.URL); -importClass(Packages.java.io.File); +importClass(Packages.org.apache.excalibur.source.TraversableSource); importClass(Packages.java.util.ArrayList); // flowscripts for indexing content for the Query Bean -// $Id: query.js,v 1.3 2004/10/22 12:14:23 jeremy Exp $ -function createIndex () { +function indexItem() { var cdir = cocoon.parameters["content-directory"] + var target = cocoon.parameters["indexer-target"] var rdir = cocoon.parameters["result-directory"]; - var include = cocoon.parameters["include-pattern"]; - var exclude = cocoon.parameters["exclude-pattern"]; var rsuffix = cocoon.parameters["result-suffix"]; var files = new ArrayList(); + var resolver = cocoon.getComponent(SourceResolver.ROLE); + var base; + var source; try { - var inRegExp = "undefined".equals(include) ? new RegExp(".*") : new RegExp(include); - var exRegExp = "undefined".equals(exclude) ? null : new RegExp(exclude); - var base = new File(new URL(resolve(cdir).getURI()).getFile()); - if (base.isDirectory()) { - getFiles(base, files, inRegExp, exRegExp); + base = resolver.resolveURI(cdir); + if (!base.isCollection()) throw ("error.invalid.content"); + source = resolver.resolveURI(base.getURI() + target); + if (source.isCollection()) { + throw ("error.invalid.content"); } else { - throw("error.invalid.content"); + files.add(source.getURI()); + cocoon.log.error("reindexing: " + source.getURI()); } cocoon.sendPage(cocoon.parameters["screen"], { @@ -47,47 +48,72 @@ merge: cocoon.parameters["lucene-merge-factor"], create: cocoon.parameters["lucene-create-index"], files: files, - converter: new Converter(base, rdir, rsuffix), + converter: new Converter(base.getURI(), rdir, rsuffix), content: cocoon.parameters["lucene-content"] } ); } catch (error) { cocoon.log.error(error); cocoon.sendPage("screen/error", {message: error}); + } finally { + resolver.release(base); + resolver.release(source); + cocoon.releaseComponent(resolver); } + } -/** - * Utility function - resolve a URI to a Source - * - */ -function resolve(uri) { - try { - var resolver = cocoon.getComponent(SourceResolver.ROLE); - return resolver.resolveURI(uri); - } catch (error) { - cocoon.log.error("Unable to resolve source", error); - throw (error); - } finally { - cocoon.releaseComponent(resolver); - } +function indexCollection () { + var cdir = cocoon.parameters["content-directory"] + var rdir = cocoon.parameters["result-directory"]; + var include = cocoon.parameters["include-pattern"]; + var exclude = cocoon.parameters["exclude-pattern"]; + var rsuffix = cocoon.parameters["result-suffix"]; + var files = new ArrayList(); + var resolver = cocoon.getComponent(SourceResolver.ROLE); + var source; + try { + var inRegExp = "undefined".equals(include) || "".equals(include) ? new RegExp(".*") : new RegExp(include); + var exRegExp = "undefined".equals(exclude) || "".equals(exclude) ? null : new RegExp(exclude); + source = resolver.resolveURI(cdir); + if (source instanceof TraversableSource && source.isCollection()) { + getFiles(source, files, inRegExp, exRegExp); + } else { + throw ("error.invalid.content"); + } + cocoon.sendPage(cocoon.parameters["screen"], + { + directory: cocoon.parameters["lucene-directory"], + analyzer: cocoon.parameters["lucene-analyzer"], + merge: cocoon.parameters["lucene-merge-factor"], + create: cocoon.parameters["lucene-create-index"], + files: files, + converter: new Converter(source.getURI(), rdir, rsuffix), + content: cocoon.parameters["lucene-content"] + } + ); + } catch (error) { + cocoon.log.error(error); + cocoon.sendPage("screen/error", {message: error}); + } finally { + resolver.release(source); + cocoon.releaseComponent(resolver); + } } function getFiles(dir, files, inRegExp, exRegExp) { try { - var theFiles = dir.listFiles(); - for (var i = 0; i < theFiles.length; i++ ) { - var f = theFiles[i]; - if (f.isDirectory()) { + var theFiles = dir.getChildren(); + for (var i = 0; i < theFiles.size(); i++ ) { + var f = theFiles.get(i); + if (f.isCollection()) { getFiles(f, files, inRegExp, exRegExp); - } else if (f.isFile()) { - if (f.canRead()) { - var apath = f.getAbsolutePath(); - if (inRegExp.test(apath)) { - if (exRegExp == null || !exRegExp.test(apath)) { - files.add(apath); - } - } + } else { + var apath = f.getURI(); + if (inRegExp.test(apath)) { + if (exRegExp == null || !exRegExp.test(apath)) { + files.add(apath); + } } } } @@ -97,7 +123,7 @@ } function Converter (base, rdir, rsuffix) { - this._base = base.getAbsolutePath(); + this._base = base; this._rdir = rdir; this._rsuffix = rsuffix; if ("undefined".equals(this._rdir)) this._rdir = ""; @@ -107,7 +133,7 @@ Converter.prototype.convert = function(file) { var path = file.toString(); // remove the absolute base path - path = path.substring(this._base.length() +1); + path = path.substring(this._base.length()); // replace the suffix, if a replacement was provided if (!"".equals(this._rsuffix)) path = path.substring(0, path.lastIndexOf(".")) + this._rsuffix; // prefix with the results path Modified: cocoon/blocks/unsupported/querybean/trunk/samples/screens/index.xml URL: http://svn.apache.org/viewcvs/cocoon/blocks/unsupported/querybean/trunk/samples/screens/index.xml?view=diff&r1=160702&r2=160703 ============================================================================== --- cocoon/blocks/unsupported/querybean/trunk/samples/screens/index.xml (original) +++ cocoon/blocks/unsupported/querybean/trunk/samples/screens/index.xml Sat Apr 9 10:48:36 2005 @@ -14,13 +14,19 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- $Id: index.xml 30942 2004-07-29 20:16:54Z vgritsenko $ --> + <page> <title>Query Bean Samples</title> <content> <p> <b>NB. You need to make an index first.</b> <br/> If you have not already made an index of the Cocoon Documentation, you may do so <a href="create.html">here</a>. + </p> + <p> + <b>This sample currently does not work.</b> + This sample used to use the docs built-in to Cocoon as a search target. + While the new documentation effort is in flux, there is nothing to index. + Try this sample in the current 2.1 version. </p> <h3>Search</h3> Modified: cocoon/blocks/unsupported/querybean/trunk/samples/sitemap.xmap URL: http://svn.apache.org/viewcvs/cocoon/blocks/unsupported/querybean/trunk/samples/sitemap.xmap?view=diff&r1=160702&r2=160703 ============================================================================== --- cocoon/blocks/unsupported/querybean/trunk/samples/sitemap.xmap (original) +++ cocoon/blocks/unsupported/querybean/trunk/samples/sitemap.xmap Sat Apr 9 10:48:36 2005 @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- CVS $Id: sitemap.xmap 56371 2004-11-02 13:17:20Z cziegeler $ --> + <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <!-- =========================== Components =================================== --> @@ -158,10 +158,9 @@ <map:read src="resources/images/{1}"/> </map:match> - - <!-- create the index --> + <!-- create the index from the contents of a collection --> <map:match pattern="create.html"> - <map:call function="createIndex"> + <map:call function="indexCollection"> <map:parameter name="screen" value="screen/indexer"/> <map:parameter name="lucene-directory" value="{global:lucene-directory}"/> <map:parameter name="lucene-analyzer" value="{global:lucene-analyzer}"/> @@ -171,6 +170,22 @@ <map:parameter name="content-directory" value="context://docs/xdocs"/> <map:parameter name="include-pattern" value="\.xml$"/> <map:parameter name="exclude-pattern" value="/book\.xml$"/> + <map:parameter name="result-directory" value="/docs/"/> + <map:parameter name="result-suffix" value=".html"/> + </map:call> + </map:match> + + <!-- update the index with a single resource --> + <map:match pattern="update/**"> + <map:call function="indexItem"> + <map:parameter name="screen" value="screen/indexer"/> + <map:parameter name="lucene-directory" value="{global:lucene-directory}"/> + <map:parameter name="lucene-analyzer" value="{global:lucene-analyzer}"/> + <map:parameter name="lucene-merge-factor" value="10"/> + <map:parameter name="lucene-create-index" value="false"/> + <map:parameter name="lucene-content" value="cocoon:/prepare4indexing/"/> + <map:parameter name="content-directory" value="{global:root}"/> + <map:parameter name="indexer-target" value="{1}"/><!-- the resource to be indexed --> <map:parameter name="result-directory" value="/docs/"/> <map:parameter name="result-suffix" value=".html"/> </map:call>