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>