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>


Reply via email to