You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by je...@apache.org on 2005/04/09 15:19:07 UTC
svn commit: r160680 - in
cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples: flow/indexer.js
sitemap.xmap
Author: jeremy
Date: Sat Apr 9 06:19:04 2005
New Revision: 160680
URL: http://svn.apache.org/viewcvs?view=rev&rev=160680
Log:
updated to add a uri for re-indexing a single asset, changed indexer from using java.util.File to using Excalibur Source, so now any TraversableSource can be indexed.
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/flow/indexer.js
cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/sitemap.xmap
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/flow/indexer.js
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/flow/indexer.js?view=diff&r1=160679&r2=160680
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/flow/indexer.js (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/flow/indexer.js Sat Apr 9 06:19:04 2005
@@ -15,8 +15,7 @@
*/
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);
@@ -24,21 +23,24 @@
// 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 +49,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 +124,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 +134,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/branches/BRANCH_2_1_X/src/blocks/querybean/samples/sitemap.xmap
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/sitemap.xmap?view=diff&r1=160679&r2=160680
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/sitemap.xmap (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/querybean/samples/sitemap.xmap Sat Apr 9 06:19:04 2005
@@ -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>