From 4f2134272b3d68c9c9e83da8fb7b231d33135c17 Mon Sep 17 00:00:00 2001 From: Costin Manolache Date: Fri, 30 Aug 2002 23:11:02 +0000 Subject: [PATCH] Added velocity and jexp dynamic properties. Started a bit of support for jxpath set. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273268 13f79535-47bb-0310-9956-ffa450edef68 --- .../tools/ant/taskdefs/optional/JXPath.java | 23 +--- .../ant/taskdefs/optional/JXPathSet.java | 110 +++++++++++++++++ .../ant/taskdefs/optional/JexlProperties.java | 105 ++++++++++++++++ .../taskdefs/optional/VelocityProperties.java | 113 ++++++++++++++++++ 4 files changed, 332 insertions(+), 19 deletions(-) create mode 100644 proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPathSet.java create mode 100644 proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JexlProperties.java create mode 100644 proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/VelocityProperties.java diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPath.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPath.java index 5880ce414..ef70ae5d8 100644 --- a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPath.java +++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPath.java @@ -59,22 +59,6 @@ import org.apache.tools.ant.types.*; import java.io.*; import java.util.*; -import org.xml.sax.Locator; -import org.xml.sax.InputSource; -//import org.xml.sax.HandlerBase; -import org.xml.sax.SAXParseException; -import org.xml.sax.XMLReader; -import org.xml.sax.SAXException; -import org.xml.sax.DocumentHandler; -import org.xml.sax.Attributes; -import org.xml.sax.AttributeList; -import org.xml.sax.helpers.XMLReaderAdapter; -import org.xml.sax.helpers.DefaultHandler; -import org.xml.sax.helpers.AttributeListImpl; - -import javax.xml.parsers.SAXParserFactory; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.ParserConfigurationException; import org.apache.commons.jxpath.*; @@ -87,17 +71,18 @@ import org.apache.commons.jxpath.*; * @author Costin Manolache */ public class JXPath extends Task implements PropertyInterceptor { + + public static String PREFIX="jxpath:"; JXPathContext jxpathCtx; public JXPath() { } public Object getProperty( Project p, String ns, String name ) { - if( ! name.startsWith("jxpath:" ) ) + if( ! name.startsWith(PREFIX) ) return null; - name=name.substring( 7 ); + name=name.substring( PREFIX.length() ); Object o=jxpathCtx.getValue( name ); - //System.out.println("JXPath: getProperty " + ns + " " + name + "=" + o); if( o==null ) return "null"; return o; } diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPathSet.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPathSet.java new file mode 100644 index 000000000..da87a898b --- /dev/null +++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JXPathSet.java @@ -0,0 +1,110 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2000-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 "The Jakarta Project", "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 + * . + */ + +package org.apache.tools.ant.taskdefs.optional; + +import org.apache.tools.ant.*; +import org.apache.tools.ant.types.*; + +import java.io.*; +import java.util.*; + +import org.apache.commons.jxpath.*; + + +/** + * Set a JXPath property + * + * + * @author Costin Manolache + */ +public class JXPathSet extends Task { + + JXPathContext jxpathCtx; + String path; + String value; + String refId; + + + public JXPathSet() { + } + + /** The JXPath pointing to the target. + * The root of the tree is the Project. + * Example: + * /references[@name='myRef'] + * + */ + public void setPath( String path ) { + this.path=path; + } + + /** The value will be the referenced object. + */ + public void setRefId( String refId ) { + this.refId=refId; + } + + /** Set the value to be used. + */ + public void setValue( String s ) { + this.value=s; + } + + public void execute() { + jxpathCtx=JXPathContext.newContext( project ); + + + } +} diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JexlProperties.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JexlProperties.java new file mode 100644 index 000000000..559b388e1 --- /dev/null +++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/JexlProperties.java @@ -0,0 +1,105 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2000-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 "The Jakarta Project", "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 + * . + */ + +package org.apache.tools.ant.taskdefs.optional; + +import org.apache.tools.ant.*; +import org.apache.tools.ant.types.*; +import java.io.*; +import java.util.*; + +import org.apache.commons.jexl.*; + +/** + * Enable JEXL dynamic properties + * + * + * @author Costin Manolache + */ +public class JexlProperties extends Task implements PropertyInterceptor { + JexlContext jc; + public static String PREFIX="jexl:"; + + public JexlProperties() { + } + + public Object getProperty( Project p, String ns, String name ) { + if( ! name.startsWith(PREFIX) ) + return null; + try { + name=name.substring( PREFIX.length() ); + Expression e = ExpressionFactory.createExpression(name); + Object o = e.evaluate(jc); + + return o; + } catch( Exception ex ) { + ex.printStackTrace(); + return null; + } + } + + + public void execute() { + PropertyHelper phelper=PropertyHelper.getPropertyHelper( project ); + phelper.addPropertyInterceptor( this ); + + /* + * First make a jexlContext and put stuff in it + */ + jc = JexlHelper.createContext(); + + jc.getVars().put("ant", project); + + } +} diff --git a/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/VelocityProperties.java b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/VelocityProperties.java new file mode 100644 index 000000000..90b835a34 --- /dev/null +++ b/proposal/embed/src/java/org/apache/tools/ant/taskdefs/optional/VelocityProperties.java @@ -0,0 +1,113 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2000-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 "The Jakarta Project", "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 + * . + */ + +package org.apache.tools.ant.taskdefs.optional; + +import org.apache.tools.ant.*; +import org.apache.tools.ant.types.*; +import java.io.*; +import java.util.*; + +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.Template; + +/** + * Enable Velocity dynamic properties + * + * + * @author Costin Manolache + */ +public class VelocityProperties extends Task implements PropertyInterceptor { + VelocityEngine engine; + VelocityContext context; + public static final String PREFIX="vm:"; + + public VelocityProperties() { + } + + public Object getProperty( Project p, String ns, String name ) { + if( ! name.startsWith(PREFIX) ) + return null; + try { + name=name.substring( PREFIX.length() ); + StringWriter sw=new StringWriter(); + + engine.evaluate( context, sw, "antVM", name ); + + System.out.println("VM: getProperty " + ns + " " + name + "=" + sw.toString()); + return sw.toString(); + } catch( Exception ex ) { + ex.printStackTrace(); + return null; + } + } + + + public void execute() { + try { + PropertyHelper phelper=PropertyHelper.getPropertyHelper( project ); + phelper.addPropertyInterceptor( this ); + + engine=new VelocityEngine(); + engine.init(); + + context=new VelocityContext(); + context.put( "ant", project ); + } catch( Exception ex ) { + ex.printStackTrace(); + } + + } +}