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>