diff --git a/cactus/sample/.cvsignore b/cactus/sample/.cvsignore new file mode 100644 index 00000000..717cec97 --- /dev/null +++ b/cactus/sample/.cvsignore @@ -0,0 +1,4 @@ +target +cactus_client.log +maven.log +project.properties diff --git a/cactus/sample/project.xml b/cactus/sample/project.xml new file mode 100644 index 00000000..1d0e0782 --- /dev/null +++ b/cactus/sample/project.xml @@ -0,0 +1,67 @@ + + + + + 3 + + + maven-cactus-sample + + + Cactus Sample + + + 1.0-SNAPSHOT + + + + Apache Software Foundation + http://jakarta.apache.org/ + + + + 2002 + + + org.apache.maven.cactus.sample + + + A sample project using the Cactus plugin for Maven + + + http://maven.apache.org/ + + + + scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:maven + http://cvs.apache.org/viewcvs/maven/ + + + + + + + + + + + + servletapi> + servletapi> + 2.3 + + + + + + src/java + + + \ No newline at end of file diff --git a/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleBodyTag.java b/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleBodyTag.java new file mode 100644 index 00000000..dd75b65c --- /dev/null +++ b/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleBodyTag.java @@ -0,0 +1,141 @@ +package org.apache.maven.cactus.sample; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Maven" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Maven", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ + +import java.io.IOException; + +import javax.servlet.jsp.JspTagException; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.tagext.BodyTagSupport; + +/** + * Sample tag that interacts with its body. The tag acts as a filter for its + * body. "Target" and "Replacement" Strings are defined by the tag's attributes + * and each "occurrence" of the target is replaced by the "replacement". + * + * @author Nicholas Lesiecki + * + * @version $Id: SampleBodyTag.java,v 1.1 2003/03/22 16:39:10 vmassol Exp $ + */ +public class SampleBodyTag extends BodyTagSupport { + /** + * The substring to be replaced in the body. + */ + private String target; + + /** + * The substring that will replace the target in the body. + */ + private String replacement; + + /** + * Sets the substring to be replaced in the body. + * + * @param theTarget the substring to be replaced in the body + */ + public void setTarget(String theTarget) { + this.target = theTarget; + } + + /** + * Sets the substring that will replace the target in the body. + * + * @param theReplacement the replacement string + */ + public void setReplacement(String theReplacement) { + this.replacement = theReplacement; + } + + /** + * @see BodyTagSupport#doAfterBody() + */ + public int doAfterBody() throws JspTagException { + String contentString = this.bodyContent.getString(); + StringBuffer contentBuffer = new StringBuffer(contentString); + + int beginIndex = -1; + int targetLength = this.target.length(); + + // while instances of target still exist + while ((beginIndex = contentString.indexOf(this.target)) > -1) { + int endIndex = beginIndex + targetLength; + + contentBuffer.replace(beginIndex, endIndex, this.replacement); + + contentString = contentBuffer.toString(); + } + + // write out the changed body + JspWriter pageWriter = this.bodyContent.getEnclosingWriter(); + + try { + pageWriter.write(contentString); + } catch (IOException e) { + throw new JspTagException(e.getMessage()); + } + + return SKIP_BODY; + } + + /** + * @see BodyTagSupport#release() + */ + public void release() { + this.target = null; + this.replacement = null; + } +} \ No newline at end of file diff --git a/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleFilter.java b/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleFilter.java new file mode 100644 index 00000000..f1318157 --- /dev/null +++ b/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleFilter.java @@ -0,0 +1,173 @@ +package org.apache.maven.cactus.sample; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Maven" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Maven", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ + +import java.io.IOException; +import java.io.OutputStream; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; + +import org.apache.maven.cactus.sample.util.GenericResponseWrapper; + +/** + * Sample filter that implements some very simple business logic. The goal is + * to provide some functional tests for Cactus and examples for Cactus users. + * This filter simply adds a header and a footer to the returned HTML. + * + * @author Vincent Massol + * + * @version $Id: SampleFilter.java,v 1.1 2003/03/22 16:39:10 vmassol Exp $ + */ +public class SampleFilter implements Filter { + /** + * We need to save the filter config as the Fitler API does not offer + * a means to get the filter config ... except in the init() + */ + private FilterConfig config; + + /** + * Filter initialisation. Called by the servlet engine during the life + * cycle of the filter. + * + * @param theConfig the filter config + * + * @exception ServletException on failure + */ + public void init(FilterConfig theConfig) throws ServletException { + this.config = theConfig; + } + + /** + * Perform the filter function. Called by the container upon a request + * matching the filter pattern defined in web.xml. + * + * @param theRequest the incmoing HTTP request + * @param theResponse the returned HTTP response + * @param theChain the chain of filters extracted from the definition + * given in web.xml by the container. + * + * @exception ServletException on failure + * @exception IOException on failure + */ + public void doFilter(ServletRequest theRequest, + ServletResponse theResponse, FilterChain theChain) throws IOException, + ServletException { + OutputStream out = theResponse.getOutputStream(); + + addHeader(out); + + // Create a wrapper of the response so that we can later write to + // the response (add the footer). If we did not do this, we would + // get an error saying that the response has already been + // committed. + GenericResponseWrapper wrapper = + new GenericResponseWrapper((HttpServletResponse) theResponse); + + theChain.doFilter(theRequest, wrapper); + + out.write(wrapper.getData()); + addFooter(out); + out.close(); + } + + /** + * Write the header to the output stream. The header text is extracted + * from a filter initialisation parameter (defined in + * web.xml). Don't write anything if no parameter is defined. + * + * @param theOutputStream the output stream + * + * @exception IOException on failure + */ + protected void addHeader(OutputStream theOutputStream) throws IOException { + String header = this.config.getInitParameter("header"); + + if (header != null) { + theOutputStream.write(header.getBytes()); + } + } + + /** + * Write the footer to the output stream. The footer text is extracted + * from a filter initialisation parameter (defined in + * web.xml). Don't write anything if no parameter is defined. + * + * @param theOutputStream the output stream + * + * @exception IOException on failure + */ + protected void addFooter(OutputStream theOutputStream) throws IOException { + String footer = this.config.getInitParameter("footer"); + + if (footer != null) { + theOutputStream.write(footer.getBytes()); + } + } + + /** + * Filter un-initialisation. Called by the servlet engine during the life + * cycle of the filter. + */ + public void destroy() { + } +} \ No newline at end of file diff --git a/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleServlet.java b/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleServlet.java new file mode 100644 index 00000000..42283357 --- /dev/null +++ b/cactus/sample/src/java/org/apache/maven/cactus/sample/SampleServlet.java @@ -0,0 +1,96 @@ +package org.apache.maven.cactus.sample; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Maven" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Maven", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +/** + * Sample servlet that implements some very simple business logic. The goal is + * to provide some functional tests for Cactus and examples for Cactus users. + * This servlet simply checks is a user is authenticated + * + * @author Vincent Massol + * @author Eric Pugh + * + * @version $Id: SampleServlet.java,v 1.1 2003/03/22 16:39:10 vmassol Exp $ + */ + +public class SampleServlet extends HttpServlet { + + /** + *Take a request object and return whether the user is authenticated o not. + * + * @param request the HttpServletRequest object + * + * @return boolean whether the request is by an authenticated user or not + * + */ + public boolean isAuthenticated(HttpServletRequest request) { + HttpSession session = request.getSession(false); + + if (session == null) { + return false; + } + + String authenticationAttribute = + (String) session.getAttribute("authenticated"); + + return new Boolean(authenticationAttribute).booleanValue(); + } +} diff --git a/cactus/sample/src/java/org/apache/maven/cactus/sample/util/FilterServletOutputStream.java b/cactus/sample/src/java/org/apache/maven/cactus/sample/util/FilterServletOutputStream.java new file mode 100644 index 00000000..7dc07a27 --- /dev/null +++ b/cactus/sample/src/java/org/apache/maven/cactus/sample/util/FilterServletOutputStream.java @@ -0,0 +1,118 @@ +package org.apache.maven.cactus.sample.util; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Maven" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Maven", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ + +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import javax.servlet.ServletOutputStream; + +/** + * Helper class to help write filters that manipulates the output stream. This + * is because normally, the ServletOutputStream cannot be + * modified after a resource has committed it. + * + * Note: This code was adapted from the Filter tutorial found + * {@link + * here} + * + * @author Vincent Massol + * + * @version $Id: FilterServletOutputStream.java,v 1.1 2003/03/22 16:39:10 vmassol Exp $ + * + * @see GenericResponseWrapper + */ +public class FilterServletOutputStream extends ServletOutputStream { + /** + * The stream where all the data will get written to + */ + private DataOutputStream stream; + + /** + * Constructor. + * + * @param theOutput the output stream that we wrap in a + * DataOutputStream in order to hold the data + */ + public FilterServletOutputStream(OutputStream theOutput) { + stream = new DataOutputStream(theOutput); + } + + // Overriden methods from ServletOutputStream ---------------------------- + + /** + * @see ServletOutputStream#write(int) + */ + public void write(int b) throws IOException { + stream.write(b); + } + + /** + * @see ServletOutputStream#write(byte[]) + */ + public void write(byte[] b) throws IOException { + stream.write(b); + } + + /** + * @see ServletOutputStream#write(byte[], int, int) + */ + public void write(byte[] b, int off, int len) throws IOException { + stream.write(b, off, len); + } +} \ No newline at end of file diff --git a/cactus/sample/src/java/org/apache/maven/cactus/sample/util/GenericResponseWrapper.java b/cactus/sample/src/java/org/apache/maven/cactus/sample/util/GenericResponseWrapper.java new file mode 100644 index 00000000..452e1c2d --- /dev/null +++ b/cactus/sample/src/java/org/apache/maven/cactus/sample/util/GenericResponseWrapper.java @@ -0,0 +1,170 @@ +package org.apache.maven.cactus.sample.util; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Maven" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Maven", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ + +import java.io.ByteArrayOutputStream; +import java.io.PrintWriter; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletResponseWrapper; + +/** + * Wrapper around a HttpServletResponse that we use to easily + * write filters that manipulate the output stream. Indeed, we cannot pass + * the output stream of our filter direectly to the next filter in the chain + * because then we won't be able to write to it (the response will have been + * committed). Instead, we pass this wrapper class and then copy its data + * to our filter output stream. + * + * Note: This code was adapted from the Filter tutorial found + * {@link + * here} + * + * @author Vincent Massol + * + * @version $Id: GenericResponseWrapper.java,v 1.1 2003/03/22 16:39:10 vmassol Exp $ + * + * @see FilterServletOutputStream + */ +public class GenericResponseWrapper extends HttpServletResponseWrapper { + /** + * Holder for the output data + */ + private ByteArrayOutputStream output; + + /** + * Save the content length so that we can query it at a later time + * (otherwise it would not be possible as + * HttpServletResponseWrapper does not have a method to get + * the content length). + */ + private int contentLength; + + /** + * Save the content type so that we can query it at a later time + * (otherwise it would not be possible as + * HttpServletResponseWrapper does not have a method to get + * the content type). + */ + private String contentType; + + // Constructors ---------------------------------------------------------- + + /** + * @param theResponse the wrapped response object + */ + public GenericResponseWrapper(HttpServletResponse theResponse) { + super(theResponse); + this.output = new ByteArrayOutputStream(); + } + + // New methods ----------------------------------------------------------- + + /** + * @return the data sent to the output stream + */ + public byte[] getData() { + return output.toByteArray(); + } + + // Overridden methods ---------------------------------------------------- + + /** + * @see HttpServletResponseWrapper#getOutputStream() + */ + public ServletOutputStream getOutputStream() { + return new FilterServletOutputStream(this.output); + } + + /** + * @see HttpServletResponseWrapper#setContentLength(int) + */ + public void setContentLength(int theLength) { + this.contentLength = theLength; + super.setContentLength(theLength); + } + + /** + * @see HttpServletResponseWrapper#getContentLength() + */ + public int getContentLength() { + return this.contentLength; + } + + /** + * @see HttpServletResponseWrapper#setContentType(String) + */ + public void setContentType(String theType) { + this.contentType = theType; + super.setContentType(theType); + } + + /** + * @see HttpServletResponseWrapper#getContentType() + */ + public String getContentType() { + return this.contentType; + } + + /** + * @see HttpServletResponseWrapper#getWriter() + */ + public PrintWriter getWriter() { + return new PrintWriter(getOutputStream(), true); + } +} \ No newline at end of file diff --git a/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleBodyTag.java b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleBodyTag.java new file mode 100644 index 00000000..52076451 --- /dev/null +++ b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleBodyTag.java @@ -0,0 +1,166 @@ +package org.apache.maven.cactus.sample; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Maven" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Maven", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ + +import javax.servlet.jsp.tagext.BodyContent; +import javax.servlet.jsp.tagext.BodyTag; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.cactus.JspTestCase; +import org.apache.cactus.WebResponse; + +/** + * Tests of the SampleBodyTag class. + * + * @author Nciholas Lesiecki + * + * @version $Id: TestSampleBodyTag.java,v 1.1 2003/03/22 16:39:09 vmassol Exp $ + */ +public class TestSampleBodyTag extends JspTestCase { + private SampleBodyTag tag; + private BodyContent tagContent; + + /** + * Defines the testcase name for JUnit. + * + * @param theName the testcase's name. + */ + public TestSampleBodyTag(String theName) + { + super(theName); + } + + /** + * Start the tests. + * + * @param theArgs the arguments. Not used + */ + public static void main(String[] theArgs) { + junit.swingui.TestRunner.main( + new String[] { TestSampleBodyTag.class.getName() }); + } + + /** + * @return a test suite (TestSuite) that includes all methods + * starting with "test" + */ + public static Test suite() { + // All methods starting with "test" will be executed in the test suite. + return new TestSuite(TestSampleBodyTag.class); + } + + /** + * In addition to creating the tag instance and adding the pageContext to + * it, this method creates a BodyContent object and passes it to the tag. + */ + public void setUp() { + this.tag = new SampleBodyTag(); + this.tag.setPageContext(this.pageContext); + + //create the BodyContent object and call the setter on the tag instance + this.tagContent = this.pageContext.pushBody(); + this.tag.setBodyContent(this.tagContent); + } + + //------------------------------------------------------------------------- + + /** + * Sets the replacement target and replacement String on the tag, then calls + * doAfterBody(). Most of the assertion work is done in endReplacement(). + */ + public void testReplacement() throws Exception + { + //set the target and the String to replace it with + this.tag.setTarget("@target@"); + this.tag.setReplacement("replacement"); + + //add the tag's body by writing to the BodyContent object created in + //setUp() + this.tagContent.println("@target@ is now @target@"); + this.tagContent.println("@target@_@target@"); + + //none of the other life cycle methods need to be implemented, so they + //do not need to be called. + int result = this.tag.doAfterBody(); + + assertEquals(BodyTag.SKIP_BODY, result); + } + + public void tearDown() + { + //necessary for tag to output anything on most servlet engines. + this.pageContext.popBody(); + } + + /** + * Verifies that the target String has indeed been replaced in the tag's + * body. + */ + public void endReplacement(WebResponse theResponse) + { + String content = theResponse.getText(); + + assertTrue("Response should have contained the [" + + "replacement is now replacement] string", + content.indexOf("replacement is now replacement") > -1); + assertTrue("Response should have contained the [" + + "replacement_replacement] string", + content.indexOf("replacement") > -1); + } +} \ No newline at end of file diff --git a/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleFilter.java b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleFilter.java new file mode 100644 index 00000000..9faffe87 --- /dev/null +++ b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleFilter.java @@ -0,0 +1,259 @@ +package org.apache.maven.cactus.sample; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Maven" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Maven", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.cactus.FilterTestCase; +import org.apache.cactus.WebResponse; + +/** + * Tests of the SampleFilter filter class. + * + * @author Vincent Massol + * + * @version $Id: TestSampleFilter.java,v 1.1 2003/03/22 16:39:09 vmassol Exp $ + */ +public class TestSampleFilter extends FilterTestCase +{ + /** + * Defines the testcase name for JUnit. + * + * @param theName the testcase's name. + */ + public TestSampleFilter(String theName) + { + super(theName); + } + + /** + * Start the tests. + * + * @param theArgs the arguments. Not used + */ + public static void main(String[] theArgs) + { + junit.swingui.TestRunner.main( + new String[] { TestSampleFilter.class.getName() }); + } + + /** + * @return a test suite (TestSuite) that includes all methods + * starting with "test" + */ + public static Test suite() + { + // All methods starting with "test" will be executed in the test suite. + return new TestSuite(TestSampleFilter.class); + } + + //------------------------------------------------------------------------- + + /** + * Test that adding a header to the output stream is working fine when + * a header parameter is defined. + * + * @exception ServletException on test failure + * @exception IOException on test failure + */ + public void testAddHeaderParamOK() throws ServletException, IOException + { + SampleFilter filter = new SampleFilter(); + + config.setInitParameter("header", "

header

"); + filter.init(config); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + filter.addHeader(baos); + + assertEquals("

header

", baos.toString()); + } + + //------------------------------------------------------------------------- + + /** + * Test that adding a header to the output stream is working fine + * (i.e. nothing gets written) when no header parameter is defined. + * + * @exception ServletException on test failure + * @exception IOException on test failure + */ + public void testAddHeaderParamNotDefined() throws ServletException, + IOException + { + SampleFilter filter = new SampleFilter(); + + filter.init(config); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + filter.addHeader(baos); + + assertEquals("", baos.toString()); + } + + //------------------------------------------------------------------------- + + /** + * Test that adding a footer to the output stream is working fine when + * a footer parameter is defined. + * + * @exception ServletException on test failure + * @exception IOException on test failure + */ + public void testAddFooterParamOK() throws ServletException, IOException + { + SampleFilter filter = new SampleFilter(); + + config.setInitParameter("footer", "

footer

"); + filter.init(config); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + filter.addFooter(baos); + + assertEquals("

footer

", baos.toString()); + } + + //------------------------------------------------------------------------- + + /** + * Test that adding a footer to the output stream is working fine + * (i.e. nothing gets written) when no footer parameter is defined. + * + * @exception ServletException on test failure + * @exception IOException on test failure + */ + public void testAddFooterParamNotDefined() throws ServletException, + IOException + { + SampleFilter filter = new SampleFilter(); + + filter.init(config); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + filter.addFooter(baos); + + assertEquals("", baos.toString()); + } + + //------------------------------------------------------------------------- + + /** + * Test that the filter does correctly add a header and footer to + * any requets it is serving. + * + * @exception ServletException on test failure + * @exception IOException on test failure + */ + public void testDoFilterOK() throws ServletException, IOException + { + SampleFilter filter = new SampleFilter(); + + config.setInitParameter("header", "

header

"); + config.setInitParameter("footer", "

footer

"); + filter.init(config); + + FilterChain mockFilterChain = new FilterChain() + { + public void doFilter(ServletRequest theRequest, + ServletResponse theResponse) throws IOException, + ServletException + { + PrintWriter writer = theResponse.getWriter(); + + writer.print("

some content

"); + writer.close(); + } + + public void init(FilterConfig theConfig) + { + } + + public void destroy() + { + } + }; + + filter.doFilter(request, response, mockFilterChain); + } + + /** + * Test that the filter does correctly add a header and footer to + * any requets it is serving. + * + * @param theResponse the response from the server side. + */ + public void endDoFilterOK(WebResponse theResponse) + { + assertEquals("

header

some content

footer

", + theResponse.getText()); + } +} \ No newline at end of file diff --git a/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleServlet.java b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleServlet.java new file mode 100644 index 00000000..834a61d7 --- /dev/null +++ b/cactus/sample/src/test-cactus/org/apache/maven/cactus/sample/TestSampleServlet.java @@ -0,0 +1,97 @@ +package org.apache.maven.cactus.sample; + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Maven" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Maven", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ + +import org.apache.cactus.ServletTestCase; +import org.apache.cactus.WebRequest; + +public class TestSampleServlet extends ServletTestCase +{ + public TestSampleServlet(String testName) + { + super(testName); + } + + public void testIsAuthenticatedAuthenticated() + { + SampleServlet servlet = new SampleServlet(); + + session.setAttribute("authenticated", "true"); + + assertTrue(servlet.isAuthenticated(request)); + } + + public void testIsAuthenticatedNotAuthenticated() + { + SampleServlet servlet = new SampleServlet(); + + assertTrue(!servlet.isAuthenticated(request)); + } + + public void beginIsAuthenticatedNoSession(WebRequest request) + { + request.setAutomaticSession(false); + } + + public void testIsAuthenticatedNoSession() + { + SampleServlet servlet = new SampleServlet(); + + assertTrue(!servlet.isAuthenticated(request)); + } + +}