You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by jb...@apache.org on 2006/10/06 22:20:27 UTC
svn commit: r453749 - in /cocoon/trunk: commons/status.xml
core/cocoon-core/src/main/java/org/apache/cocoon/transformation/TeeTransformer.java
Author: jbq
Date: Fri Oct 6 13:20:27 2006
New Revision: 453749
URL: http://svn.apache.org/viewvc?view=rev&rev=453749
Log:
<action dev="JBQ" type="update" fixes-bug="COCOON-1706" due-to="Philippe Gassmann" due-to-email="philippe.gassmann@anyware-tech.com">
Allow TeeTransformer to run a system command for debugging purposes
</action>
Modified:
cocoon/trunk/commons/status.xml
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/transformation/TeeTransformer.java
Modified: cocoon/trunk/commons/status.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/commons/status.xml?view=diff&rev=453749&r1=453748&r2=453749
==============================================================================
--- cocoon/trunk/commons/status.xml (original)
+++ cocoon/trunk/commons/status.xml Fri Oct 6 13:20:27 2006
@@ -178,6 +178,9 @@
<!-- These are the changes from the last 2.1.x version. -->
<changes>
<release version="@version@" date="@date@">
+ <action dev="JBQ" type="update" fixes-bug="COCOON-1706" due-to="Philippe Gassmann" due-to-email="philippe.gassmann@anyware-tech.com">
+ Allow TeeTransformer to run a system command for debugging purposes
+ </action>
<action dev="JBQ" type="update">
Ported various caching pipeline fixes and improvements from branch 2.1:
<ul>
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/transformation/TeeTransformer.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/transformation/TeeTransformer.java?view=diff&rev=453749&r1=453748&r2=453749
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/transformation/TeeTransformer.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/transformation/TeeTransformer.java Fri Oct 6 13:20:27 2006
@@ -38,6 +38,7 @@
import org.apache.excalibur.source.ModifiableSource;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceException;
+import org.apache.excalibur.source.impl.FileSource;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
@@ -50,13 +51,16 @@
* The Teetransformer serializes SAX events as-is to the {@link org.apache.excalibur.source.ModifiableSource}
* specified by its <code>src</code> parameter.
* It does not in any way change the events.
- * <p/>
- * This transformer works just like the unix "tee" command and is useful for debugging
- * received XML streams.
- * <p/>
+ * <p>This transformer works just like the unix "tee" command and is useful for debugging
+ * received XML streams.</p>
+ * <p>It is also able to launch an optional system command to view or edit the generated file, so that every time the
+ * pipeline is executed, your editor pops up.</p>
+ *
* Usage:<br>
* <pre>
- * <map:transform type="tee" src="url"/>
+ * <map:transform type="tee" src="url">
+ * <command>emacs %s>
+ * </map:transform>
* </pre>
*
* @version $Id$
@@ -71,9 +75,11 @@
/** the resolver */
private SourceResolver resolver;
-
+
private OutputStream os;
+ private String osCommand;
+ private String fileName = null;
/*
* (non-Javadoc)
*
@@ -94,8 +100,13 @@
if (!(source instanceof ModifiableSource)) {
throw new ProcessingException("Source '" + systemId + "' is not writeable.");
}
+ if (this.osCommand != null) {
+ // FileSource is the only option when using the system command feature
+ fileName = ((FileSource)source).getFile().getAbsolutePath();
+ }
this.serializer = this.transformerFactory.newTransformerHandler();
os = ((ModifiableSource) source).getOutputStream();
+
this.serializer.setResult(new StreamResult(os));
} catch (SourceException e) {
throw SourceUtil.handle(e);
@@ -117,6 +128,7 @@
*/
public void configure(Configuration configuration) throws ConfigurationException {
String tFactoryClass = configuration.getChild("transformer-factory").getValue(null);
+ this.osCommand = configuration.getChild("command").getValue(null);
if (tFactoryClass != null) {
try {
this.transformerFactory = (SAXTransformerFactory) ClassUtils
@@ -152,6 +164,7 @@
/**
* Receive notification of the end of a document.
+ * Optionally execute a command to view the output file
*/
public void endDocument() throws SAXException {
super.contentHandler.endDocument();
@@ -159,6 +172,15 @@
if (os != null) {
try {
os.close();
+
+ if (this.osCommand != null) {
+ String command = this.osCommand.replace("%s", this.fileName);
+ try {
+ (Runtime.getRuntime()).exec(command,null);
+ } catch(Exception e) {
+ throw new CascadingRuntimeException("Unable to lauch the specified program : "+command, e);
+ }
+ }
} catch (IOException e) {
throw new CascadingRuntimeException("Error closing output stream.", e);
}