dion 2003/01/15 07:18:32 Added: jelly/jelly-tags/dynabean maven.xml .cvsignore project.properties project.xml jelly/jelly-tags/dynabean/src/test/org/apache/commons/jelly/tags/dynabean suite.jelly TestJelly.java jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean package.html DynabeanTag.java DynabeanTagLibrary.java PropertyTag.java SetTag.java DynaclassTag.java Log: Move dynabean taglib out of core Revision Changes Path 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/maven.xml Index: maven.xml =================================================================== <project default="java:jar"> </project> 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/.cvsignore Index: .cvsignore =================================================================== target maven.log 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/project.properties Index: project.properties =================================================================== # ------------------------------------------------------------------- # P R O J E C T P R O P E R T I E S # ------------------------------------------------------------------- maven.junit.fork=true maven.compile.deprecation = on # Installation dir maven.dist.install.dir = /usr/local/jelly maven.checkstyle.properties=../tag-checkstyle.properties 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/project.xml Index: project.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE project [ <!-- see file for description --> <!ENTITY commonDeps SYSTEM "file:../../commonDependencies.ent"> ]> <project> <extend>../tag-project.xml</extend> <id>commons-jelly-tags-dynabean</id> <name>commons-jelly-tags-dynabean</name> <package>org.apache.commons.jelly.tags.dynabean</package> <description> The Jelly DynaBean Tag Library </description> <shortDescription>Commons Jelly Dyna Bean Tag Library</shortDescription> <url>http://jakarta.apache.org/commons/sandbox/jelly/tags/dynabean/</url> <siteDirectory>/www/jakarta.apache.org/commons/sandbox/jelly/dynabean/</siteDirectory> <distributionDirectory>/www/jakarta.apache.org/builds/jakarta-commons-sandbox/jelly/tags/dynabean</distributionDirectory> <repository> <connection>scm:cvs:pserver:[EMAIL PROTECTED]:/home/cvspublic:jakarta-commons-sandbox/jelly/jelly-tags/dynabean/</connection> <url>http://cvs.apache.org/viewcvs/jakarta-commons-sandbox/jelly/jelly-tags/dynabean/</url> </repository> <dependencies> &commonDeps; <!-- START for compilation --> <dependency> <id>commons-jelly</id> <version>SNAPSHOT</version> </dependency> <!-- END for compilation --> </dependencies> </project> 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/test/org/apache/commons/jelly/tags/dynabean/suite.jelly Index: suite.jelly =================================================================== <?xml version="1.0"?> <test:suite xmlns:j="jelly:core" xmlns:dynabean="jelly:dynabean" xmlns:test="jelly:junit" xmlns:log="jelly:log"> <test:case name="simpleDynaBean"> <dynabean:dynaclass var="CustomerType" name ="CustomerDynaClass"> <dynabean:property name="name" type="String" /> <dynabean:property name="address" type="String" /> </dynabean:dynaclass> <dynabean:dynabean var="customer" dynaclass="${CustomerType}"/> <dynabean:set var="customer" property="name" value="Customer 1" /> <dynabean:set var="customer" property="address" value="Address of Customer 1" /> <test:assertEquals expected="Customer 1" actual="${customer.name}"/> <test:assertEquals expected="Address of Customer 1" actual="${customer.address}"/> <test:assertEquals expected="CustomerDynaClass" actual="${customer.dynaClass.name}"/> </test:case> <test:case name="nestedDynaBean"> <dynabean:dynaclass var="AddressType" name="AddressDynaClass"> <dynabean:property name="city" type="String" /> <dynabean:property name="street" type="String" /> <dynabean:property name="housenumber" type="Integer" /> </dynabean:dynaclass> <dynabean:dynaclass var="CustomerType" name="CustomerDynaClass"> <dynabean:property name="name" type="String" /> <dynabean:property name="address" type="org.apache.commons.beanutils.DynaBean"/> </dynabean:dynaclass> <dynabean:dynabean var="customer" dynaclass="${CustomerType}" /> <dynabean:dynabean var="address" dynaclass="${AddressType}" /> <dynabean:set var="customer" property="name" value="Customer 1" /> <dynabean:set var="customer" property="address" value="${address}" /> <dynabean:set var="customer" property="address.city" value="London" /> <dynabean:set var="customer" property="address.street" value="Downing Street" /> <dynabean:set var="customer" property="address.housenumber" value="10" /> <test:assertEquals expected="Customer 1" actual="${customer.name}"/> <test:assertEquals expected="London" actual="${customer.address.city}"/> <test:assertEquals expected="Downing Street" actual="${customer.address.street}"/> <!-- #### JellyUnit needs to support type cooercion for this to work... <test:assertEquals expected="10" actual="${customer.address.housenumber}"/> --> </test:case> </test:suite> 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/test/org/apache/commons/jelly/tags/dynabean/TestJelly.java Index: TestJelly.java =================================================================== /* * $Header: /home/cvs/jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/test/org/apache/commons/jelly/tags/dynabean/TestJelly.java,v 1.1 2003/01/15 15:18:32 dion Exp $ * $Revision: 1.1 $ * $Date: 2003/01/15 15:18:32 $ * * ==================================================================== * * 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 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", "Commons", 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/>. * * $Id: TestJelly.java,v 1.1 2003/01/15 15:18:32 dion Exp $ */ package org.apache.commons.jelly.tags.dynabean; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.apache.commons.jelly.tags.junit.JellyTestSuite; /** * A helper class to run jelly test cases as part of Ant's JUnit tests * * @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a> * @version $Revision: 1.1 $ */ public class TestJelly extends JellyTestSuite { public static void main( String[] args ) throws Exception { TestRunner.run( suite() ); } public static TestSuite suite() throws Exception { return createTestSuite(TestJelly.class, "suite.jelly"); } } 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/package.html Index: package.html =================================================================== <html> <head> </head> <body> <p>A tag library for creating new DynaClass and DynaBean objects from the <a href="http://jakarta.apache.org/commons/beanutils.html">beanutils</a> library </p> </body> </html> 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/DynabeanTag.java Index: DynabeanTag.java =================================================================== /* * $Header: /home/cvs/jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/DynabeanTag.java,v 1.1 2003/01/15 15:18:32 dion Exp $ * $Revision: 1.1 $ * $Date: 2003/01/15 15:18:32 $ * * ==================================================================== * * 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 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", "Commons", 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/>. * * $Id: DynabeanTag.java,v 1.1 2003/01/15 15:18:32 dion Exp $ */ package org.apache.commons.jelly.tags.dynabean; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaClass; import org.apache.commons.jelly.MissingAttributeException; import org.apache.commons.jelly.TagSupport; import org.apache.commons.jelly.XMLOutput; /** A tag which conditionally evaluates its body based on some condition * * @author Theo Niemeijer * @version $Revision: 1.1 $ */ public class DynabeanTag extends TagSupport { private DynaClass dynaClass; private String var; public DynabeanTag() { } // Tag interface //------------------------------------------------------------------------- public void doTag(XMLOutput output) throws Exception { if (dynaClass == null) { throw new MissingAttributeException( "dynaclass" ); } if (var == null) { throw new MissingAttributeException( "var" ); } // Create dynabean instance for this dynaclass DynaBean dynaBean = dynaClass.newInstance(); // Place new dynabean in context as a variable context.setVariable(getVar(), dynaBean); } // Properties //------------------------------------------------------------------------- /** * Sets the DynaClass of the new instance to create */ public void setDynaclass(DynaClass dynaClass) { this.dynaClass = dynaClass; } public String getVar() { return var; } /** * Sets the name of the variable to export the new DynaBean instance to */ public void setVar(String var) { this.var = var; } } 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/DynabeanTagLibrary.java Index: DynabeanTagLibrary.java =================================================================== /* * $Header: /home/cvs/jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/DynabeanTagLibrary.java,v 1.1 2003/01/15 15:18:32 dion Exp $ * $Revision: 1.1 $ * $Date: 2003/01/15 15:18:32 $ * * ==================================================================== * * 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 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", "Commons", 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/>. * * $Id: DynabeanTagLibrary.java,v 1.1 2003/01/15 15:18:32 dion Exp $ */ package org.apache.commons.jelly.tags.dynabean; import org.apache.commons.jelly.TagLibrary; /** Describes the Taglib. This class could be generated by XDoclet * * @author Theo Niemeijer * @version $Revision: 1.1 $ */ public class DynabeanTagLibrary extends TagLibrary { public DynabeanTagLibrary() { registerTag("dynaclass", DynaclassTag.class); registerTag("property", PropertyTag.class); registerTag("dynabean", DynabeanTag.class); registerTag("set", SetTag.class); } } 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/PropertyTag.java Index: PropertyTag.java =================================================================== /* * $Header: /home/cvs/jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/PropertyTag.java,v 1.1 2003/01/15 15:18:32 dion Exp $ * $Revision: 1.1 $ * $Date: 2003/01/15 15:18:32 $ * * ==================================================================== * * 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 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", "Commons", 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/>. * * $Id: PropertyTag.java,v 1.1 2003/01/15 15:18:32 dion Exp $ */ package org.apache.commons.jelly.tags.dynabean; import org.apache.commons.beanutils.DynaProperty; import org.apache.commons.jelly.JellyException; import org.apache.commons.jelly.MissingAttributeException; import org.apache.commons.jelly.TagSupport; import org.apache.commons.jelly.XMLOutput; /** * DynaProperty tag defines a property of a DynaClass * It can only exist inside a DynaClass parent context * The properties are added to the properties array * of the parent context, and will be used to * create the DynaClass object * * @author Theo Niemeijer * @version 1.0 */ public class PropertyTag extends TagSupport { private String name; private String type; private Class propertyClass; private DynaProperty prop; public PropertyTag() { } // Tag interface //------------------------------------------------------------------------- public void doTag (XMLOutput output) throws Exception { // Check that this tag is used inside the body of // a DynaClass tag, so that it can access the // context of that tag DynaclassTag parentTag = (DynaclassTag) findAncestorWithClass( DynaclassTag.class ); if ( parentTag == null ) { throw new JellyException( "This tag must be enclosed inside a <dynaclass> tag" ); } // Check property name if (name == null) { throw new MissingAttributeException( "name" ); } // Lookup appropriate property class Class propClass = propertyClass; if (propClass == null) { // Check property type if (type == null) { throw new MissingAttributeException( "type" ); } if (type.equals("String")) { propClass = String.class; } else if (type.equals("Integer")) { propClass = Integer.TYPE; } else if (type.equals("Short")) { propClass = Short.TYPE; } else if (type.equals("Long")) { propClass = Long.TYPE; } else if (type.equals("Float")) { propClass = Float.TYPE; } else if (type.equals("Double")) { propClass = Double.TYPE; } else if (type.equals("Long")) { propClass = Long.TYPE; } if (propClass == null) { try { propClass = Class.forName(type); } catch (Exception e) { throw new JellyException ("Class " + type + " not found by Class.forName"); } } } // Create dynaproperty object with given name and type prop = new DynaProperty (name, propClass); // Add new property to dynaclass context parentTag.addDynaProperty(prop); } // Properties //------------------------------------------------------------------------- /** * Sets the name of this property */ public void setName(String name) { this.name = name; } /** * Sets the type name of this property */ public void setType(String type) { this.type = type; } /** * Returns the Class for this property */ public Class getPropertyClass() { return propertyClass; } /** * Sets the Class instance for this property */ public void setPropertyClass(Class propertyClass) { this.propertyClass = propertyClass; } } 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/SetTag.java Index: SetTag.java =================================================================== /* * $Header: /home/cvs/jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/SetTag.java,v 1.1 2003/01/15 15:18:32 dion Exp $ * $Revision: 1.1 $ * $Date: 2003/01/15 15:18:32 $ * * ==================================================================== * * 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 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", "Commons", 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/>. * * $Id: SetTag.java,v 1.1 2003/01/15 15:18:32 dion Exp $ */ package org.apache.commons.jelly.tags.dynabean; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.jelly.JellyException; import org.apache.commons.jelly.TagSupport; import org.apache.commons.jelly.XMLOutput; import org.apache.commons.jelly.expression.Expression; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** A tag which sets a variable from the result of an expression * * @author Theo Niemeijer * @version 1.0 */ public class SetTag extends TagSupport { /** The Log to which logging calls will be made. */ private static final Log log = LogFactory.getLog(SetTag.class); /** The variable name to export. */ private String var; /** The variable scope to export */ private String scope; /** The expression to evaluate. */ private Expression value; /** The target object on which to set a property. */ private Object target; /** The name of the property to set on the target object. */ private String property; public SetTag() { } // Tag interface //------------------------------------------------------------------------- public void doTag(XMLOutput output) throws Exception { Object answer = null; if ( value != null ) { answer = value.evaluate(context); } else { answer = getBodyText(); } // Assume that if a var name and a property is given then // var is the name of an object in the context if (( var != null ) && ( property != null) && ( target == null )) { // Get object from context if ( scope != null ) { target = context.getVariable(var, scope); } else { target = context.getVariable(var); } if (target != null) { var = null; } } if ( var != null ) { if ( scope != null ) { context.setVariable(var, scope, answer); } else { context.setVariable(var, answer); } } else { if ( target == null ) { throw new JellyException( "Either a 'var' or a 'target' attribute must be defined for this tag" ); } if ( property == null ) { throw new JellyException( "You must define a 'property' attribute if you specify a 'target'" ); } setPropertyValue( target, property, answer ); } } // Properties //------------------------------------------------------------------------- /** Sets the variable name to define for this expression */ public void setVar(String var) { this.var = var; } /** * Sets the variable scope for this variable. For example setting this value to 'parent' will * set this value in the parent scope. When Jelly is run from inside a Servlet environment * then other scopes will be available such as 'request', 'session' or 'application'. * * Other applications may implement their own custom scopes. */ public void setScope(String scope) { this.scope = scope; } /** Sets the expression to evaluate. */ public void setValue(Expression value) { this.value = value; } /** Sets the target object on which to set a property. */ public void setTarget(Object target) { this.target = target; } /** Sets the name of the property to set on the target object. */ public void setProperty(String property) { this.property = property; } // Implementation methods //------------------------------------------------------------------------- protected void setPropertyValue( Object target, String property, Object value ) throws Exception { try { if ( target instanceof Map ) { Map map = (Map) target; map.put( property, value ); } else { BeanUtils.setProperty( target, property, value ); } } catch (Exception e) { log.error( "Failed to set the property: " + property + " on bean: " + target + " to value: " + value + " due to exception: " + e, e ); } } } 1.1 jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/DynaclassTag.java Index: DynaclassTag.java =================================================================== /* * $Header: /home/cvs/jakarta-commons-sandbox/jelly/jelly-tags/dynabean/src/java/org/apache/commons/jelly/tags/dynabean/DynaclassTag.java,v 1.1 2003/01/15 15:18:32 dion Exp $ * $Revision: 1.1 $ * $Date: 2003/01/15 15:18:32 $ * * ==================================================================== * * 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 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", "Commons", 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/>. * * $Id: DynaclassTag.java,v 1.1 2003/01/15 15:18:32 dion Exp $ */ package org.apache.commons.jelly.tags.dynabean; import java.util.ArrayList; import org.apache.commons.beanutils.BasicDynaClass; import org.apache.commons.beanutils.DynaClass; import org.apache.commons.beanutils.DynaProperty; import org.apache.commons.jelly.JellyException; import org.apache.commons.jelly.MissingAttributeException; import org.apache.commons.jelly.TagSupport; import org.apache.commons.jelly.XMLOutput; /** * A tag which creates and defines and creates a DynaClass * The DynaClass object is placed by name in the context, * so that a DynaBean tag can use it by name to instantiate * a DynaBean object * * @author Theo Niemeijer * @version 1.0 */ public class DynaclassTag extends TagSupport { private ArrayList propList = new ArrayList(); private DynaProperty[] props = null; private DynaClass dynaClass = null; private String name; private String var; public DynaclassTag() { } // Tag interface //------------------------------------------------------------------------- public void doTag(XMLOutput output) throws Exception { if (name == null) { throw new MissingAttributeException("name"); } if (var == null) { var = name; } // Evaluate the body of the dynaclass definition invokeBody(output); // Convert the list of properties into array props = (DynaProperty[]) propList.toArray( new DynaProperty[propList.size()]); if (props == null) { throw new JellyException("No properties list"); } if (props.length == 0) { throw new JellyException("No properties"); } // Create the dynaclass with name and properties dynaClass = (DynaClass) new BasicDynaClass(name, null, props); // Place new dynaclass in context context.setVariable(getVar(), dynaClass); } // Properties //------------------------------------------------------------------------- /** * Sets the name of the new DynaClass */ public void setName(String name) { this.name = name; } public String getVar() { return var; } /** * Sets the name of the variable to export the DynaClass instance */ public void setVar(String var) { this.var = var; } protected void addDynaProperty(DynaProperty prop) { propList.add(prop); } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>