You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/12/26 18:44:15 UTC
svn commit: r490341 - in /cocoon/trunk/core/cocoon-core/src:
main/java/org/apache/cocoon/generation/
main/resources/META-INF/cocoon/avalon/ main/resources/META-INF/cocoon/spring/
test/java/org/apache/cocoon/generation/
Author: cziegeler
Date: Tue Dec 26 09:44:14 2006
New Revision: 490341
URL: http://svn.apache.org/viewvc?view=rev&rev=490341
Log:
Implement file generator as spring bean; no need for special factory anymore
Added:
cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/spring/cocoon-core-generators.xml (with props)
Removed:
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/FileGeneratorFactory.java
Modified:
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/CSVGenerator.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/FileGenerator.java
cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/avalon/cocoon-core-sitemapcomponents.xconf
cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/FileGeneratorTestCase.java
cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/PauseGenerator.java
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/CSVGenerator.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/CSVGenerator.java?view=diff&rev=490341&r1=490340&r2=490341
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/CSVGenerator.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/CSVGenerator.java Tue Dec 26 09:44:14 2006
@@ -30,11 +30,12 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.xml.AttributesImpl;
+import org.apache.cocoon.xml.XMLUtils;
import org.apache.excalibur.source.Source;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
/**
* <p>A simple parser converting a Comma Separated Values (CSV) file into XML.</p>
@@ -147,11 +148,11 @@
}
/**
- * <p>Recycle this component.</p>.
+ * @see org.apache.cocoon.generation.FileGenerator#dispose()
*/
- public void recycle() {
- super.recycle();
-
+ public void dispose() {
+ super.dispose();
+
this.encoding = DEFAULT_ENCODING;
this.separator = DEFAULT_SEPARATOR.charAt(0);
this.escape = DEFAULT_ESCAPE.charAt(0);
@@ -208,9 +209,9 @@
try {
/* Start the document */
- this.contentHandler.setDocumentLocator(csv);
- this.contentHandler.startDocument();
- this.contentHandler.startPrefixMapping(NAMESPACE_PREFIX, NAMESPACE_URI);
+ this.consumer.setDocumentLocator(csv);
+ this.consumer.startDocument();
+ this.consumer.startPrefixMapping(NAMESPACE_PREFIX, NAMESPACE_URI);
this.indent(0);
this.startElement("document");
@@ -266,8 +267,8 @@
/* Terminate the document */
this.indent(0);
this.endElement("document");
- this.contentHandler.endPrefixMapping(NAMESPACE_PREFIX);
- this.contentHandler.endDocument();
+ this.consumer.endPrefixMapping(NAMESPACE_PREFIX);
+ this.consumer.endDocument();
} finally {
csv.close();
@@ -288,7 +289,7 @@
if (this.recordnumber > 0) {
AttributesImpl attributes = new AttributesImpl();
String value = Integer.toString(this.recordnumber);
- attributes.addAttribute("", "number", "number", "CDATA", value);
+ attributes.addCDATAAttribute("number", value);
this.startElement("record", attributes);
} else {
this.startElement("header");
@@ -303,7 +304,7 @@
AttributesImpl attributes = new AttributesImpl();
String value = Integer.toString(this.fieldnumber);
- attributes.addAttribute("", "number", "number", "CDATA", value);
+ attributes.addCDATAAttribute("number", value);
if (this.recordnumber < 1) {
this.columns.put(new Integer(this.fieldnumber), new String(array));
@@ -311,12 +312,12 @@
} else if (this.columns != null) {
String header = (String) this.columns.get(new Integer(this.fieldnumber));
if (header != null) {
- attributes.addAttribute("", "column", "column", "CDATA", header);
+ attributes.addCDATAAttribute("column", header);
}
}
this.startElement(element, attributes);
- this.contentHandler.characters(array, 0, array.length);
+ this.consumer.characters(array, 0, array.length);
this.endElement(element);
this.buffer.reset();
@@ -339,26 +340,25 @@
private void indent(int level)
throws SAXException {
- this.contentHandler.characters(INDENT_STRING, 0, level + 1);
+ this.consumer.characters(INDENT_STRING, 0, level + 1);
}
private void startElement(String name)
throws SAXException {
- this.startElement(name, new AttributesImpl());
+ this.startElement(name, XMLUtils.EMPTY_ATTRIBUTES);
}
private void startElement(String name, Attributes atts)
throws SAXException {
if (name == null) throw new NullPointerException("Null name");
- if (atts == null) atts = new AttributesImpl();
String qual = NAMESPACE_PREFIX + ':' + name;
- this.contentHandler.startElement(NAMESPACE_URI, name, qual, atts);
+ this.consumer.startElement(NAMESPACE_URI, name, qual, (atts == null ? XMLUtils.EMPTY_ATTRIBUTES : atts));
}
private void endElement(String name)
throws SAXException {
String qual = NAMESPACE_PREFIX + ':' + name;
- this.contentHandler.endElement(NAMESPACE_URI, name, qual);
+ this.consumer.endElement(NAMESPACE_URI, name, qual);
}
private static final class CSVReader extends Reader implements Locator {
@@ -369,7 +369,7 @@
private int line = 1;
private int last = -1;
- private CSVReader(Source source, String encoding, int buffer)
+ protected CSVReader(Source source, String encoding, int buffer)
throws IOException {
InputStream stream = source.getInputStream();
Reader reader = new InputStreamReader(stream, encoding);
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/FileGenerator.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/FileGenerator.java?view=diff&rev=490341&r1=490340&r2=490341
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/FileGenerator.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/generation/FileGenerator.java Tue Dec 26 09:44:14 2006
@@ -20,7 +20,11 @@
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.components.source.SourceUtil;
+import org.apache.cocoon.core.xml.SAXParser;
import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.sitemap.DisposableSitemapComponent;
+import org.apache.cocoon.util.AbstractLogEnabled;
+import org.apache.cocoon.xml.XMLConsumer;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceException;
import org.apache.excalibur.source.SourceValidity;
@@ -36,50 +40,64 @@
* and generates SAX Events. The <code>FileGenerator</code> implements the
* <code>CacheableProcessingComponent</code> interface.
*
- * <br>See {@link FileGeneratorFactory} for thread safe implementation of this
- * component.
- *
* @cocoon.sitemap.component.name file
* @cocoon.sitemap.component.label content
* @cocoon.sitemap.component.logger sitemap.generator.file
* @cocoon.sitemap.component.documentation.caching
* Uses the last modification date of the xml document for validation
*
- * @cocoon.sitemap.component.pooling.max 32
- *
* @version $Id$
*/
-public class FileGenerator extends ServiceableGenerator
- implements CacheableProcessingComponent {
+public class FileGenerator
+ extends AbstractLogEnabled
+ implements Generator, CacheableProcessingComponent, DisposableSitemapComponent {
/** The input source */
protected Source inputSource;
+ /** The source resolver. */
+ protected SourceResolver resolver;
+
+ /** The consumer. */
+ protected XMLConsumer consumer;
+
+ /** The SAX Parser. */
+ protected SAXParser parser;
+
+ public void setParser(SAXParser parser) {
+ this.parser = parser;
+ }
+
/**
- * Recycle this component.
- * All instance variables are set to <code>null</code>.
+ * @see org.apache.cocoon.sitemap.DisposableSitemapComponent#dispose()
*/
- public void recycle() {
- if (null != this.inputSource) {
- super.resolver.release(this.inputSource);
+ public void dispose() {
+ if ( this.inputSource != null ) {
+ this.resolver.release(this.inputSource);
this.inputSource = null;
}
- super.recycle();
+ this.resolver = null;
+ this.consumer = null;
}
/**
* Setup the file generator.
* Try to get the last modification date of the source for caching.
+ *
+ * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
*/
public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par)
throws ProcessingException, SAXException, IOException {
-
- super.setup(resolver, objectModel, src, par);
+ this.resolver = resolver;
try {
- this.inputSource = super.resolver.resolveURI(src);
+ this.inputSource = this.resolver.resolveURI(src);
} catch (SourceException se) {
throw SourceUtil.handle("Error during resolving of '" + src + "'.", se);
}
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("Source " + src +
+ " resolved to " + this.inputSource.getURI());
+ }
}
/**
@@ -103,17 +121,19 @@
}
/**
+ * @see org.apache.cocoon.xml.XMLProducer#setConsumer(org.apache.cocoon.xml.XMLConsumer)
+ */
+ public void setConsumer(XMLConsumer consumer) {
+ this.consumer = consumer;
+ }
+
+ /**
* Generate XML data.
*/
public void generate()
throws IOException, SAXException, ProcessingException {
-
try {
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Source " + super.source +
- " resolved to " + this.inputSource.getURI());
- }
- SourceUtil.parse(this.manager, this.inputSource, super.xmlConsumer);
+ this.parser.parse(SourceUtil.getInputSource(this.inputSource), this.consumer);
} catch (SAXException e) {
SourceUtil.handleSAXException(this.inputSource.getURI(), e);
}
Modified: cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/avalon/cocoon-core-sitemapcomponents.xconf
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/avalon/cocoon-core-sitemapcomponents.xconf?view=diff&rev=490341&r1=490340&r2=490341
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/avalon/cocoon-core-sitemapcomponents.xconf (original)
+++ cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/avalon/cocoon-core-sitemapcomponents.xconf Tue Dec 26 09:44:14 2006
@@ -53,7 +53,6 @@
| All components follow this scheme.
+-->
<map:generators default="file">
- <map:generator label="content" logger="sitemap.generator.file" name="file" pool-max="32" src="org.apache.cocoon.generation.FileGenerator"/>
<map:generator label="content" logger="sitemap.generator.directory" name="directory" pool-max="16" src="org.apache.cocoon.generation.DirectoryGenerator"/>
<map:generator label="content" logger="sitemap.generator.xpathdirectory" name="xpathdirectory" src="org.apache.cocoon.generation.XPathDirectoryGenerator"/>
<map:generator label="content" logger="sitemap.generator.traversable" name="traversable" pool-max="16" src="org.apache.cocoon.generation.TraversableGenerator"/>
Added: cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/spring/cocoon-core-generators.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/spring/cocoon-core-generators.xml?view=auto&rev=490341
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/spring/cocoon-core-generators.xml (added)
+++ cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/spring/cocoon-core-generators.xml Tue Dec 26 09:44:14 2006
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
+ "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- @version $Id$ -->
+<beans>
+ <bean name="org.apache.cocoon.generation.Generator/file"
+ class="org.apache.cocoon.generation.FileGenerator"
+ scope="prototype">
+ <property name="parser" ref="org.apache.cocoon.core.xml.SAXParser"/>
+ </bean>
+
+</beans>
\ No newline at end of file
Propchange: cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/spring/cocoon-core-generators.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-core/src/main/resources/META-INF/cocoon/spring/cocoon-core-generators.xml
------------------------------------------------------------------------------
svn:keywords = Id
Modified: cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/FileGeneratorTestCase.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/FileGeneratorTestCase.java?view=diff&rev=490341&r1=490340&r2=490341
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/FileGeneratorTestCase.java (original)
+++ cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/FileGeneratorTestCase.java Tue Dec 26 09:44:14 2006
@@ -23,9 +23,9 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.cocoon.MockLogger;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.source.SourceUtil;
+import org.apache.cocoon.core.xml.impl.JaxpSAXParser;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.xml.WhitespaceFilter;
import org.apache.cocoon.xml.dom.DOMBuilder;
@@ -76,7 +76,6 @@
Parameters parameters = new Parameters();
String result = "resource://org/apache/cocoon/generation/FileGeneratorTestCase.source.xml";
FileGenerator generator = new FileGenerator();
- generator.enableLogging(new MockLogger(generator.getClass()));
manager.expects(atLeastOnce()).method("lookup").with(same(SAXParser.ROLE)).
will(returnValue(parser));
manager.expects(once()).method("release").with(same(parser));
@@ -85,7 +84,7 @@
resolver.expects(once()).method("resolveURI").with(same(src)).
will(returnValue(source));
resolver.expects(once()).method("release").with(same(source));
- generator.service((ServiceManager) manager.proxy());
+ generator.setParser(new JaxpSAXParser());
generator.setup((SourceResolver) resolver.proxy(), objectModel, src, parameters);
DOMBuilder builder = new DOMBuilder();
generator.setConsumer(new WhitespaceFilter(builder));
Modified: cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/PauseGenerator.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/PauseGenerator.java?view=diff&rev=490341&r1=490340&r2=490341
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/PauseGenerator.java (original)
+++ cocoon/trunk/core/cocoon-core/src/test/java/org/apache/cocoon/generation/PauseGenerator.java Tue Dec 26 09:44:14 2006
@@ -17,8 +17,11 @@
package org.apache.cocoon.generation;
import java.io.IOException;
+import java.util.Map;
+import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.generation.FileGenerator;
import org.xml.sax.SAXException;
@@ -34,17 +37,34 @@
public class PauseGenerator
extends FileGenerator {
+ protected long secs;
+ /**
+ * @see org.apache.cocoon.generation.FileGenerator#setup(org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
+ */
+ public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par) throws ProcessingException, SAXException, IOException {
+ super.setup(resolver, objectModel, src, par);
+ this.secs = par.getParameterAsLong("pause", 60);
+ }
+
+ /**
+ * @see org.apache.cocoon.generation.FileGenerator#generate()
+ */
public void generate()
throws IOException, SAXException, ProcessingException {
- long secs = this.parameters.getParameterAsLong("pause", 60);
- this.getLogger().debug("Waiting for " + secs + " secs.");
+ if ( this.getLogger().isDebugEnabled() ) {
+ this.getLogger().debug("Waiting for " + secs + " secs.");
+ }
try {
Thread.sleep(secs * 1000);
} catch (InterruptedException ie) {
+ // ignore
+ }
+ if ( this.getLogger().isDebugEnabled() ) {
+ this.getLogger().debug("Finished waiting.");
}
- this.getLogger().debug("Finished waiting.");
super.generate();
}
+
}