You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by js...@apache.org on 2002/10/01 18:45:23 UTC

cvs commit: jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core FileTag.java

jstrachan    2002/10/01 09:45:23

  Modified:    jelly/src/test/org/apache/commons/jelly suite.jelly
               jelly/src/java/org/apache/commons/jelly/tags/core
                        FileTag.java
  Log:
  Added patch to <j:file> so that a variable can be specified instead of a file name and the body will be turned into a variable string.
  
  Its not a brilliantly named tag but the following could generate some XML as a String
  
  <j:file var="foo">
  	<some>
  		<x m="l"/>
  	</some>
  <j:file>
  I now have a value ${foo}
  
  Revision  Changes    Path
  1.4       +10 -0     jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/suite.jelly
  
  Index: suite.jelly
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/suite.jelly,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- suite.jelly	24 Sep 2002 11:39:50 -0000	1.3
  +++ suite.jelly	1 Oct 2002 16:45:23 -0000	1.4
  @@ -106,4 +106,14 @@
   			expected="org.apache.commons.jelly.define.Customer" 
   			actual="${customer.class.name}"/>
     </test:case>
  +
  +	<test:case name="testFileToVar">
  +		<j:file var="foo" omitXmlDeclaration="true">
  +			<foo x="1">hello</foo>
  +		</j:file>
  +
  +		<test:assertEquals 
  +			expected='&lt;foo x="1"&gt;hello&lt;/foo&gt;' 
  +			actual="${foo}"/>
  +  </test:case>
   </test:suite>
  
  
  
  1.3       +60 -21    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/FileTag.java
  
  Index: FileTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/FileTag.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FileTag.java	29 Jul 2002 18:14:21 -0000	1.2
  +++ FileTag.java	1 Oct 2002 16:45:23 -0000	1.3
  @@ -56,11 +56,12 @@
    */
   package org.apache.commons.jelly.tags.core;
   
  -import java.io.FileOutputStream;
  +import java.io.FileWriter;
   import java.io.IOException;
  -import java.io.OutputStream;
  +import java.io.StringWriter;
  +import java.io.Writer;
   
  -import org.apache.commons.jelly.MissingAttributeException;
  +import org.apache.commons.jelly.JellyException;
   import org.apache.commons.jelly.TagSupport;
   import org.apache.commons.jelly.XMLOutput;
   
  @@ -69,12 +70,13 @@
   import org.dom4j.io.XMLWriter;
   
   /** 
  - * A tag that pipes its body to a file.
  + * A tag that pipes its body to a file denoted by the name attribute or to an in memory String
  + * which is then output to a variable denoted by the var variable.
    *
    * @author <a href="mailto:vinayc@apache.org">Vinay Chandran</a>
    */
  -public class FileTag extends TagSupport 
  -{
  +public class FileTag extends TagSupport {
  +    private String var;
       private String name;
       private boolean omitXmlDeclaration = false;
       private String outputMode = "xml";
  @@ -87,19 +89,22 @@
       // Tag interface
       //------------------------------------------------------------------------- 
       public void doTag(final XMLOutput output) throws Exception {
  -        if ( name == null ) {
  -            throw new MissingAttributeException( "name" );
  +        if ( name != null ) {
  +            Writer writer = new FileWriter(name);
  +            writeBody(writer);
  +        }
  +        else if (var != null) {
  +            StringWriter writer = new StringWriter();
  +            writeBody(writer);
  +            context.setVariable(var, writer.toString());
           }
  -        XMLOutput newOutput = createXMLOutput();
  -        try {
  -            newOutput.startDocument();
  -            invokeBody(newOutput);
  -            newOutput.endDocument();
  -        }
  -        finally {
  -            newOutput.close();
  +        else {
  +            throw new JellyException( "This tag must have either the 'name' or the 'var' variables defined" );
           }
       }
  +        
  +    // Properties
  +    //------------------------------------------------------------------------- 
       
       /**
        * Sets the file name for the output
  @@ -137,9 +142,45 @@
           this.encoding = encoding;
       }
           
  +    /**
  +     * Returns the var.
  +     * @return String
  +     */
  +    public String getVar() {
  +        return var;
  +    }
  +
  +    /**
  +     * Sets the var.
  +     * @param var The var to set
  +     */
  +    public void setVar(String var) {
  +        this.var = var;
  +    }
  +
       // Implementation methods
       //------------------------------------------------------------------------- 
  -    protected XMLOutput createXMLOutput() throws Exception {
  +
  +    /**
  +     * Writes the body fo this tag to the given Writer
  +     */
  +    protected void writeBody(Writer writer) throws Exception {
  +
  +        XMLOutput newOutput = createXMLOutput(writer);
  +        try {
  +            newOutput.startDocument();
  +            invokeBody(newOutput);
  +            newOutput.endDocument();
  +        }
  +        finally {
  +            newOutput.close();
  +        }
  +    }
  +    
  +    /**
  +     * A Factory method to create a new XMLOutput from the given Writer.
  +     */
  +    protected XMLOutput createXMLOutput(Writer writer) throws Exception {
           
           OutputFormat format = null;
           if (prettyPrint) {
  @@ -155,12 +196,10 @@
               format.setSuppressDeclaration(true);
           }
                       
  -        OutputStream out = new FileOutputStream(name);
  -        
           boolean isHtml = outputMode != null && outputMode.equalsIgnoreCase( "html" );
           final XMLWriter xmlWriter = (isHtml) 
  -            ? new HTMLWriter(out, format)
  -            : new XMLWriter(out, format);
  +            ? new HTMLWriter(writer, format)
  +            : new XMLWriter(writer, format);
   
           XMLOutput answer = new XMLOutput() {
               public void close() throws IOException {
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>