[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tomcat-dev
Subject:    Re: cvs commit: jakarta-tomcat/proposals/build2/ant tomcat.jsp
From:       Casey Lucas <clucas () armassolutions ! com>
Date:       2001-04-29 22:22:22
[Download RAW message or body]



duh... too fast to type, too slow to think!  how about move the clears to
the end of doEndTag instead of doStartTag. :)

-casey

Casey Lucas wrote:
> 
> Costin,
> 
> Web based build will be a nice addition -- cool.
> 
> Small comment though.  Keep in mind that I don't have a complete understanding
> of all associated code, but at first glance, it appears that AntTag won't work
> correctly if tag pooling is being used.  I think the fix is simple though.  Just
> reset the list of targets and args at tag start time:
> 
> >   1.1                  jakarta-tomcat/proposals/build2/WEB-INF/src/AntTag.java
> >
> >   Index: AntTag.java
> >   ===================================================================
> >   package tadm;
> >   import java.util.*;
> >   import java.io.*;
> >   import java.net.URL;
> >   import javax.servlet.http.*;
> >   import javax.servlet.*;
> >
> >   import javax.servlet.jsp.*;
> >   import javax.servlet.jsp.tagext.*;
> >
> >   import org.apache.tools.ant.*;
> >
> >   /**
> >    * This tag will run ant tasks
> >    *
> >    */
> >   public class AntTag extends TagSupport {
> >
> >       public AntTag() {}
> >
> >       public int doStartTag() throws JspException {
> 
> add:
> 
> args.clear()
> targets.clear() // or removeAllElements() etc.
> 
> >         try {
> >             pageContext.setAttribute("antProperties",
> >                                      args);
> >         } catch (Exception ex ) {
> >             ex.printStackTrace();
> >         }
> >         return EVAL_BODY_INCLUDE;
> >       }
> >
> >       public int doEndTag() throws JspException {
> >         runTest();
> >         return EVAL_PAGE;
> >       }
> >
> >       // -------------------- child tag support --------------------
> >       Properties args=new Properties();
> >       Vector targets=new Vector();
> >
> >       public void setProperty( String name, String value ) {
> >         System.out.println("Adding property " + name + "=" + value );
> >         args.put(name, value );
> >       }
> >
> >       public String getProperty( String name ) {
> >         System.out.println("Getting property " + name  );
> >         return args.getProperty(name );
> >       }
> >
> >       public void addTarget( String n ) {
> >         System.out.println("Adding target " + n );
> >         targets.addElement( n );
> >       }
> >
> >       //-------------------- Properties --------------------
> >
> >       /** Set the name of the test.xml, relative to the base dir.
> >        *  For example, /WEB-INF/test-tomcat.xml
> >        */
> >       public void setTestFile( String s ) {
> >         args.put("ant.file", s);
> >       }
> >
> >       /** Set the target - a subset of tests to be run
> >        */
> >       public void setTarget( String s ) {
> >         addTarget(s);
> >       }
> >
> >       public void setDebug( String s ) {
> >         args.put( "debug", s);
> >       }
> >
> >       // -------------------- Implementation methods --------------------
> >
> >       private void runTest() throws JspException {
> >         PrintWriter out=null;
> >         try {
> >             out=pageContext.getResponse().getWriter();
> >             pageContext.getOut().flush();
> >             out.flush(); // we need a writer for ant
> >
> >             Project project=new Project();
> >
> >             AntServletLogger log=new AntServletLogger();
> >             log.setWriter( out );
> >             project.addBuildListener( log );
> >
> >             project.init();
> >
> >             Enumeration argsE=args.propertyNames();
> >             while( argsE.hasMoreElements() ) {
> >                 String k=(String)argsE.nextElement();
> >                 String v=args.getProperty( k );
> >                 if( k!=null && v!= null )
> >                     project.setUserProperty( k, v );
> >             }
> >
> >             String antFileN=args.getProperty("ant.file");
> >             if( antFileN==null )
> >                 throw new JspException( "ant.file not specified");
> >             File antF=new File(antFileN);
> >             ProjectHelper.configureProject( project,
> >                                            antF );
> >
> >             // pre-execution properties
> >             Hashtable antProperties=project.getProperties();
> >             argsE=antProperties.keys();
> >             while( argsE.hasMoreElements() ) {
> >                 String k=(String)argsE.nextElement();
> >                 String v=(String)antProperties.get( k );
> >                 if( k!=null && v!= null )
> >                     args.put( k, v ); // includes "revision"
> >             }
> >
> >             if( targets.size()==0 ) {
> >                 //targets.addElement("client");
> >             }
> >
> >             project.executeTargets( targets );
> >
> >             // post-execution properties
> >             antProperties=project.getProperties();
> >
> >             argsE=antProperties.keys();
> >             while( argsE.hasMoreElements() ) {
> >                 String k=(String)argsE.nextElement();
> >                 String v=(String)antProperties.get( k );
> >                 if( k!=null && v!= null )
> >                     args.put( k, v );
> >             }
> >
> >         } catch( BuildException ex ) {
> >             if( out==null ) out=new PrintWriter(System.out);
> >             ex.printStackTrace(out);
> >             Throwable ex1=ex.getException();
> >             out.println("Root cause: " );
> >             if( ex1!=null)
> >                 ex1.printStackTrace(out);
> >             out.flush();
> >             throw new JspException( ex.toString() );
> >         } catch( IOException ioex ) {
> >             if( out==null ) out=new PrintWriter(System.out);
> >             ioex.printStackTrace(out);
> >             throw new JspException( ioex.toString() );
> >         }
> >       }
> >   }
> >

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic