Browse Source

Add if/unless attributes to <param/> element of <style/> task

PR: 22044
Obtained from: Jens
Submitted by:	 Peter Reilly & Jan Mat��rne


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275023 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 22 years ago
parent
commit
5d847c583e
6 changed files with 283 additions and 5 deletions
  1. +14
    -4
      docs/manual/CoreTasks/style.html
  2. +45
    -0
      src/etc/testcases/taskdefs/style/build.xml
  3. +1
    -0
      src/etc/testcases/taskdefs/style/data.xml
  4. +20
    -0
      src/etc/testcases/taskdefs/style/printParams.xsl
  5. +49
    -1
      src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
  6. +154
    -0
      src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java

+ 14
- 4
docs/manual/CoreTasks/style.html View File

@@ -187,9 +187,20 @@ element is used to perform Entity and URI resolution.</p>
<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 @@ Used to specify factory settings.
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 @@ And in Saxon 7.x:
<h4>Using factory settings</h4>
<pre>&lt;xslt in=&quot;doc.xml&quot; out=&quot;build/doc/output.xml&quot;
style=&quot;style/apache.xsl&quot;&gt;
&lt;factory name=&quot;org.apache.xalan.processor.TransformerFactoryImpl&quot;&gt;
&lt;factory name=&quot;org.apache.xalan.processor.TransformerFactoryImpl&quot;&gt;
&lt;attribute name=&quot;http://xml.apache.org/xalan/features/optimize&quot; value=&quot;true&quot;/&gt;
&lt;/factory&gt;
&lt;/xslt&gt;</pre>
@@ -329,4 +340,3 @@ Reserved.</p>

</body>
</html>


+ 45
- 0
src/etc/testcases/taskdefs/style/build.xml View File

@@ -0,0 +1,45 @@
<?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
- 0
src/etc/testcases/taskdefs/style/data.xml View File

@@ -0,0 +1 @@
<data/>

+ 20
- 0
src/etc/testcases/taskdefs/style/printParams.xsl View File

@@ -0,0 +1,20 @@
<?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>

+ 49
- 1
src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java View File

@@ -615,6 +615,19 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
/** 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 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
}
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 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
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);


+ 154
- 0
src/testcases/org/apache/tools/ant/taskdefs/StyleTest.java View File

@@ -0,0 +1,154 @@
/*
* 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 apache@apache.org.
*
* 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);
}

}

Loading…
Cancel
Save