peterreilly 2003/08/05 09:01:10 Modified: docs/manual/CoreTasks style.html src/main/org/apache/tools/ant/taskdefs XSLTProcess.java Added: src/etc/testcases/taskdefs/style build.xml data.xml printParams.xsl src/testcases/org/apache/tools/ant/taskdefs StyleTest.java Log: Add if/unless attributes to <param/> element of <style/> task PR: 22044 Obtained from: Jens Submitted by: Peter Reilly & Jan Matèrne Revision Changes Path 1.29 +14 -4 ant/docs/manual/CoreTasks/style.html Index: style.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/style.html,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- style.html 26 Jul 2003 16:40:07 -0000 1.28 +++ style.html 5 Aug 2003 16:01:10 -0000 1.29 @@ -187,9 +187,20 @@ <tr> <td valign="top">expression</td> <td valign="top">Text value to be placed into the param.<br/> - Was originally intended to be an XSL expression. + Was originally intended to be an XSL expression.</td> <td align="center" valign="top">Yes</td> </tr> + <tr> + <td valign="top">if</td> + <td valign="top">The param will only passed if this property is set.</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">unless</td> + <td valign="top">The param will only passed unless this property is set.</td> + <td align="center" valign="top">No</td> + </tr> + </table> <h4>outputproperty ('trax' processors only)</h4> @@ -230,7 +241,7 @@ transformer factory to use. For example <tt>org.apache.xalan.processor.TransformerFactoryImpl</tt> or <tt>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</tt> - or <tt>net.sf.saxon.TransformerFactoryImpl</tt>... + or <tt>net.sf.saxon.TransformerFactoryImpl</tt>... </td> <td align="center" valign="top">No. Defaults to the JAXP lookup mechanism.</td> </tr> @@ -318,7 +329,7 @@ <h4>Using factory settings</h4> <pre><xslt in="doc.xml" out="build/doc/output.xml" style="style/apache.xsl"> - <factory name="org.apache.xalan.processor.TransformerFactoryImpl"> + <factory name="org.apache.xalan.processor.TransformerFactoryImpl"> <attribute name="http://xml.apache.org/xalan/features/optimize" value="true"/> </factory> </xslt></pre> @@ -329,4 +340,3 @@ </body> </html> - 1.1 ant/src/etc/testcases/taskdefs/style/build.xml Index: build.xml =================================================================== <?xml version="1.0"?> <project name="style-test" basedir="." default="nothing"> <property name="out.dir" value="out"/> <target name="setup"> </target> <target name="teardown"> <delete dir="${out.dir}" failonerror="false" /> </target> <target name="testStyleIsSet"> <style in="data.xml" out="${out.dir}/out.xml"/> </target> <target name="testTransferParameterSet"> <property name="value" value="myvalue"/> <style in="data.xml" out="${out.dir}/out.xml" style="printParams.xsl"> <param name="set" expression="${value}"/> </style> </target> <target name="testTransferParameterEmpty"> <property name="value" value=""/> <style in="data.xml" out="${out.dir}/out.xml" style="printParams.xsl"> <param name="empty" expression="${value}"/> </style> </target> <target name="testTransferParameterUnset"> <style in="data.xml" out="${out.dir}/out.xml" style="printParams.xsl"> <param name="undefined" expression="${value}"/> </style> </target> <target name="testTransferParameterUnsetWithIf"> <style in="data.xml" out="${out.dir}/out.xml" style="printParams.xsl"> <param name="undefined" expression="${value}" if="value" /> </style> </target> </project> 1.1 ant/src/etc/testcases/taskdefs/style/data.xml Index: data.xml =================================================================== <data/> 1.1 ant/src/etc/testcases/taskdefs/style/printParams.xsl Index: printParams.xsl =================================================================== <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <!-- get the xsl-parameter --> <xsl:param name="set">set default value</xsl:param> <xsl:param name="empty">empty default value</xsl:param> <xsl:param name="undefined">undefined default value</xsl:param> <!-- use the xsl-parameter --> <xsl:template match="/"> set='<xsl:value-of select="$set"/>' empty='<xsl:value-of select="$empty"/>' undefined='<xsl:value-of select="$undefined"/>' </xsl:template> </xsl:stylesheet> 1.72 +50 -2 ant/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java Index: XSLTProcess.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java,v retrieving revision 1.71 retrieving revision 1.72 diff -u -r1.71 -r1.72 --- XSLTProcess.java 26 Jul 2003 16:58:14 -0000 1.71 +++ XSLTProcess.java 5 Aug 2003 16:01:10 -0000 1.72 @@ -615,6 +615,19 @@ /** The parameter's value */ private String expression = null; + private String ifProperty; + private String unlessProperty; + private Project project; + + /** + * Set the current project + * + * @param project the current project + */ + public void setProject(Project project) { + this.project = project; + } + /** * Set the parameter name. * @@ -658,6 +671,39 @@ } return expression; } + + /** + * Set whether this param should be used. It will be + * used if the property has been set, otherwise it won't. + * @param ifProperty name of property + */ + public void setIf(String ifProperty) { + this.ifProperty = ifProperty; + } + + /** + * Set whether this param should NOT be used. It + * will not be used if the property has been set, orthwise it + * will be used. + * @param unlessProperty name of property + */ + public void setUnless(String unlessProperty) { + this.unlessProperty = unlessProperty; + } + /** + * Ensures that the param passes the conditions placed + * on it with <code>if</code> and <code>unless</code> properties. + */ + public boolean shouldUse() { + if (ifProperty != null && project.getProperty(ifProperty) == null) { + return false; + } else if (unlessProperty != null + && project.getProperty(unlessProperty) != null) { + return false; + } + + return true; + } } // Param @@ -743,7 +789,9 @@ liaison.setStylesheet(stylesheet); for (Enumeration e = params.elements(); e.hasMoreElements();) { Param p = (Param) e.nextElement(); - liaison.addParam(p.getName(), p.getExpression()); + if (p.shouldUse()) { + liaison.addParam(p.getName(), p.getExpression()); + } } if (liaison instanceof TraXLiaison) { configureTraXLiaison((TraXLiaison) liaison); 1.1 ant/src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java Index: StyleTest.java =================================================================== /* * The Apache Software License, Version 1.1 * * Copyright (c) 2001-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 acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "Ant" and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 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 * <http://www.apache.org/>. */ package org.apache.tools.ant.taskdefs; import org.apache.tools.ant.BuildFileTest; import org.apache.tools.ant.util.FileUtils; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; /** * TestCases für <style> / <xslt> task. * @author Jan Matèrne * @version 2003-08-05 */ public class StyleTest extends BuildFileTest { public StyleTest(String s) { super(s); } protected void setUp() throws Exception { configureProject("src/etc/testcases/taskdefs/style/build.xml"); //executeTarget("setup"); //commented out for performance while target is empty } protected void tearDown() throws Exception { executeTarget("teardown"); } public void testStyleIsSet() throws Exception { expectBuildException("testStyleIsSet", "no stylesheet specified"); } public void testTransferParameterSet() throws Exception { expectFileContains("testTransferParameterSet", // target "out/out.xml", // file "set='myvalue'"); // exptected string } public void testTransferParameterEmpty() throws Exception { expectFileContains("testTransferParameterEmpty", "out/out.xml", "empty=''"); } public void testTransferParameterUnset() throws Exception { expectFileContains("testTransferParameterUnset", "out/out.xml", "undefined='${value}'"); } public void testTransferParameterUnsetWithIf() throws Exception { expectFileContains("testTransferParameterUnsetWithIf", "out/out.xml", "undefined='undefined default value'"); } // ************* copied from ConcatTest ************* // ------------------------------------------------------ // Helper methods - should be in BuildFileTest // ----------------------------------------------------- private String getFileString(String filename) throws IOException { Reader r = null; try { r = new FileReader(getProject().resolveFile(filename)); return FileUtils.newFileUtils().readFully(r); } finally { try {r.close();} catch (Throwable ignore) {} } } private String getFileString(String target, String filename) throws IOException { executeTarget(target); return getFileString(filename); } private void expectFileContains( String target, String filename, String contains) throws IOException { String content = getFileString(target, filename); assertTrue( "expecting file " + filename + " to contain " + contains + " but got " + content, content.indexOf(contains) > -1); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]