commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jstrac...@apache.org
Subject cvs commit: jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define DefineBeanTag.java Attribute.java AttributeTag.java DefineJellyBeanTag.java BeanTag.java DefineTagLibrary.java
Date Wed, 17 Jul 2002 17:37:59 GMT
jstrachan    2002/07/17 10:37:59

  Modified:    jelly/src/java/org/apache/commons/jelly/tags/define
                        DefineJellyBeanTag.java BeanTag.java
                        DefineTagLibrary.java
  Added:       jelly/src/java/org/apache/commons/jelly/tags/define
                        DefineBeanTag.java Attribute.java AttributeTag.java
  Log:
  * Added support for <define:attribute> qualifiers in <define:jellybean> tag
so that default values can be specified, or attributes can be marked as being required.
  
  * also <define:jellybean> now expects an invoke method to be specified, otherwise
an exception is thrown
  
  * the new <define:bean> tag allows regular java beans to be created and bound to a
variable, which is useful for entity based beans such as working with OJB or parsing config
files etc.
  
  There are examples of the above, try running
  
  	maven demo:bean
  	maven demo:jellybean
  
  and it will make much more sense.
  
  Revision  Changes    Path
  1.2       +14 -90    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/DefineJellyBeanTag.java
  
  Index: DefineJellyBeanTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/DefineJellyBeanTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefineJellyBeanTag.java	25 Jun 2002 19:12:28 -0000	1.1
  +++ DefineJellyBeanTag.java	17 Jul 2002 17:37:58 -0000	1.2
  @@ -82,7 +82,7 @@
    * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
    * @version $Revision$
    */
  -public class DefineJellyBeanTag extends DefineTagSupport {
  +public class DefineJellyBeanTag extends DefineBeanTag {
   
       /** The Log to which logging calls will be made. */
       private static final Log log = LogFactory.getLog(DefineJellyBeanTag.class);
  @@ -90,80 +90,12 @@
       /** Empty parameter types for Method lookup */
       private static final Class[] emptyParamTypes = {};
       
  -    /** the name of the tag to create */
  -    private String name;
  -    
  -    /** the Java class name to use for the tag */
  -    private String className;
  -
  -    /** the ClassLoader used to load beans */
  -    private ClassLoader classLoader;
  -    
       /** the name of the method to invoke on the bean */
       private String method;
       
  -    // Tag interface
  -    //-------------------------------------------------------------------------       
            
  -    public void doTag(XMLOutput output) throws Exception {
  -		if (name == null) {
  -			throw new MissingAttributeException("name");
  -		}
  -		if (className == null) {
  -			throw new MissingAttributeException("className");
  -		}
  -        
  -		Class theClass = null;
  -		try {
  -			ClassLoader classLoader = getClassLoader();
  -			theClass = classLoader.loadClass(className);
  -		} 
  -		catch (ClassNotFoundException e) {
  -			try {
  -				theClass = getClass().getClassLoader().loadClass(className);
  -			} 
  -            catch (ClassNotFoundException e2) {
  -				try {
  -					theClass = Class.forName(className);
  -				} 
  -                catch (ClassNotFoundException e3) {
  -                    log.error( "Could not load class: " + className + " exception: " +
e, e );
  -					throw new JellyException(
  -						"Could not find class: "
  -							+ className
  -							+ " using ClassLoader: "
  -							+ classLoader);
  -				}
  -			}
  -		}
  -
  -		Method invokeMethod =
  -			MethodUtils.getAccessibleMethod(
  -				theClass,
  -				getMethod(),
  -				emptyParamTypes);
  -
  -		BeanTag tag = new BeanTag(theClass, invokeMethod);
  -		getTagLibrary().registerBeanTag(name, tag);
  -	}
  -
  -    
       // Properties
       //-------------------------------------------------------------------------       
            
       
  -    /** 
  -     * Sets the name of the tag to create
  -     */
  -    public void setName(String name) {
  -        this.name = name;
  -    }
  -    
  -    /** 
  -     * Sets the Java class name to use for the tag
  -     */
  -    public void setClassName(String className) {
  -        this.className = className;
  -    }
  -    
       /**
        * @return the method name to use, which defaults to 'run' for Runnable
        * objects
  @@ -185,27 +117,19 @@
           this.method = method;
       }
       
  -    /**
  -     * Sets the ClassLoader to use to load the class. 
  -     * If no value is set then the current threads context class
  -     * loader is used.
  -     */
  -    public void setClassLoader(ClassLoader classLoader) {
  -        this.classLoader = classLoader;
  -    }
  -
  -    /**
  -     * @return the ClassLoader to use to load classes
  -     *  or will use the thread context loader if none is specified.
  -     */    
  -    public ClassLoader getClassLoader() {
  -        if ( classLoader == null ) {
  -            ClassLoader answer = Thread.currentThread().getContextClassLoader();
  -            if ( answer == null ) {
  -                answer = getClass().getClassLoader();
  -            }
  -            return answer;
  +    
  +    // Implementation methods
  +    //-------------------------------------------------------------------------       
            
  +    
  +    protected Method getInvokeMethod( Class theClass ) throws Exception {
  +        Method invokeMethod =
  +            MethodUtils.getAccessibleMethod(
  +                theClass,
  +                getMethod(),
  +                emptyParamTypes);
  +                
  +        if ( invokeMethod == null ) {
           }
  -        return classLoader;
  +        return invokeMethod;
       }
   }
  
  
  
  1.6       +80 -4     jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/BeanTag.java
  
  Index: BeanTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/BeanTag.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- BeanTag.java	16 Jul 2002 06:49:17 -0000	1.5
  +++ BeanTag.java	17 Jul 2002 17:37:58 -0000	1.6
  @@ -63,9 +63,11 @@
   
   import java.lang.reflect.Method;
   import java.lang.reflect.InvocationTargetException;
  -import java.util.HashMap;
   import java.util.Iterator;
   import java.util.HashMap;
  +import java.util.HashSet;
  +import java.util.Map;
  +import java.util.Set;
   
   import org.apache.commons.beanutils.ConvertingWrapDynaBean;
   
  @@ -73,10 +75,12 @@
   
   import org.apache.commons.jelly.DynaBeanTagSupport;
   import org.apache.commons.jelly.JellyContext;
  +import org.apache.commons.jelly.JellyException;
  +import org.apache.commons.jelly.MissingAttributeException;
   import org.apache.commons.jelly.Script;
   import org.apache.commons.jelly.TagSupport;
   import org.apache.commons.jelly.XMLOutput;
  -import org.apache.commons.jelly.JellyException;
  +import org.apache.commons.jelly.expression.Expression;
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  @@ -108,22 +112,94 @@
       /** the method to invoke on the bean */
       private Method method;    
   
  -
  -    public BeanTag(Class beanClass, Method method) {
  +    /** 
  +     * the tag attribute name that is used to declare the name 
  +     * of the variable to export after running this tag
  +     */
  +    private String variableNameAttribute;
  +
  +    /** the current variable name that the bean should be exported as */
  +    private String var;
  +
  +    /** the set of attribute names we've already set */
  +    private Set setAttributesSet = new HashSet();
  +
  +    /** the attribute definitions */
  +    private Map attributes;    
  +        
  +    public BeanTag(Class beanClass, Map attributes, String variableNameAttribute, Method
method) {
           this.beanClass = beanClass;
           this.method = method;
  +        this.attributes = attributes;
  +        this.variableNameAttribute = variableNameAttribute;
       }
   
       public void beforeSetAttributes() throws Exception {
           // create a new dynabean before the attributes are set
           bean = beanClass.newInstance();
           setDynaBean( new ConvertingWrapDynaBean( bean ) );
  +
  +        setAttributesSet.clear();                    
  +    }
  +
  +    public void setAttribute(String name, Object value) throws Exception {        
  +        boolean isVariableName = false;
  +        if (variableNameAttribute != null ) {
  +            if ( variableNameAttribute.equals( name ) ) {
  +                if (value == null) {
  +                    var = null;
  +                }
  +                else {
  +                    var = value.toString();
  +                }
  +                isVariableName = true;
  +            }
  +        }
  +        if (! isVariableName) {
  +            
  +            // #### strictly speaking we could
  +            // know what attributes are specified at compile time
  +            // so this dynamic set is unnecessary            
  +            setAttributesSet.add(name);
  +            
  +            // we could maybe implement attribute specific validation here
  +            
  +            super.setAttribute(name, value);
  +        }
       }
   
       // Tag interface
       //-------------------------------------------------------------------------       
            
       public void doTag(XMLOutput output) throws Exception {
  +
  +        // lets find any attributes that are not set and 
  +        for ( Iterator iter = attributes.values().iterator(); iter.hasNext(); ) {
  +            Attribute attribute = (Attribute) iter.next();
  +            String name = attribute.getName();
  +            if ( ! setAttributesSet.contains( name ) ) {
  +                if ( attribute.isRequired() ) {
  +                    throw new MissingAttributeException(name);
  +                }
  +                // lets get the default value
  +                Object value = null;
  +                Expression expression = attribute.getDefaultValue();
  +                if ( expression != null ) {
  +                    value = expression.evaluate(context);
  +                }
  +                
  +                // only set non-null values?
  +                if ( value != null ) {
  +                    super.setAttribute(name, value);
  +                }
  +            }
  +        }
  +        
           invokeBody(output);
  +
  +        // export the bean if required
  +        if ( var != null ) {
  +            context.setVariable(var, bean);
  +        }
           
           // now, I may invoke the 'execute' method if I have one
           if ( method != null ) {
  
  
  
  1.5       +7 -5      jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/DefineTagLibrary.java
  
  Index: DefineTagLibrary.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/DefineTagLibrary.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DefineTagLibrary.java	25 Jun 2002 19:12:28 -0000	1.4
  +++ DefineTagLibrary.java	17 Jul 2002 17:37:58 -0000	1.5
  @@ -74,7 +74,9 @@
       public DefineTagLibrary() {
           registerTag( "taglib", DefineTagLibTag.class );
           registerTag( "tag", DefineTagTag.class );
  +        registerTag( "bean", DefineBeanTag.class );
           registerTag( "jellybean", DefineJellyBeanTag.class );
  +        registerTag( "attribute", AttributeTag.class );
           registerTag( "invokeBody", InvokeBodyTag.class );
           registerTag( "script", DefineScriptTag.class );
       }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/DefineBeanTag.java
  
  Index: DefineBeanTag.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/taglibs/beanshell/src/java/org/apache/commons/jelly/tags/beanshell/BeanShellExpressionFactory.java,v
1.1 2002/05/21 07:58:55 jstrachan Exp $
   * $Revision: 1.1 $
   * $Date: 2002/05/21 07:58:55 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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 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/>.
   * 
   * $Id: BeanShellExpressionFactory.java,v 1.1 2002/05/21 07:58:55 jstrachan Exp $
   */
  
  package org.apache.commons.jelly.tags.define;
  
  import java.lang.reflect.Method;
  import java.util.HashMap;
  import java.util.Map;
  
  import org.apache.commons.jelly.JellyException;
  import org.apache.commons.jelly.MissingAttributeException;
  import org.apache.commons.jelly.XMLOutput;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  
  /** 
   * Binds a Java bean to the given named Jelly tag so that the attributes of
   * the tag set the bean properties..
   * 
   * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
   * @version $Revision: 1.1 $
   */
  public class DefineBeanTag extends DefineTagSupport {
  
      /** The Log to which logging calls will be made. */
      private static final Log log = LogFactory.getLog(DefineBeanTag.class);
  
      /** An empty Map as I think Collections.EMPTY_MAP is only JDK 1.3 onwards */
      private static final Map EMPTY_MAP = new HashMap();
  
      /** the name of the tag to create */
      private String name;
      
      /** the Java class name to use for the tag */
      private String className;
  
      /** the ClassLoader used to load beans */
      private ClassLoader classLoader;
      
      /** the name of the attribute used for the variable name */
      private String varAttribute = "var";
  
      /** the attribute definitions for this dynamic tag */
      private Map attributes;
      
      /**
       * Adds a new attribute definition to this dynamic tag 
       */
      public void addAttribute(Attribute attribute) {
          if ( attributes == null ) {
              attributes = new HashMap();
          }
          attributes.put( attribute.getName(), attribute );
      }
      
      // Tag interface
      //-------------------------------------------------------------------------        
           
      public void doTag(XMLOutput output) throws Exception {
          invokeBody(output);
          
  		if (name == null) {
  			throw new MissingAttributeException("name");
  		}
  		if (className == null) {
  			throw new MissingAttributeException("className");
  		}
          
  		Class theClass = null;
  		try {
  			ClassLoader classLoader = getClassLoader();
  			theClass = classLoader.loadClass(className);
  		} 
  		catch (ClassNotFoundException e) {
  			try {
  				theClass = getClass().getClassLoader().loadClass(className);
  			} 
              catch (ClassNotFoundException e2) {
  				try {
  					theClass = Class.forName(className);
  				} 
                  catch (ClassNotFoundException e3) {
                      log.error( "Could not load class: " + className + " exception: " + e,
e );
  					throw new JellyException(
  						"Could not find class: "
  							+ className
  							+ " using ClassLoader: "
  							+ classLoader);
  				}
  			}
  		}
          
          Method invokeMethod = getInvokeMethod( theClass );
  
          if ( attributes == null ) {
              attributes = EMPTY_MAP;        
          }
          
          BeanTag tag = new BeanTag(theClass, attributes, varAttribute, invokeMethod);
          getTagLibrary().registerBeanTag(name, tag);
          
          // now lets clear the attributes for next invocation and help the GC
          attributes = null;
  	}
  
      
      // Properties
      //-------------------------------------------------------------------------        
           
      
      /** 
       * Sets the name of the tag to create
       */
      public void setName(String name) {
          this.name = name;
      }
      
      /** 
       * Sets the Java class name to use for the tag
       */
      public void setClassName(String className) {
          this.className = className;
      }
      
      /**
       * Sets the ClassLoader to use to load the class. 
       * If no value is set then the current threads context class
       * loader is used.
       */
      public void setClassLoader(ClassLoader classLoader) {
          this.classLoader = classLoader;
      }
  
      /**
       * @return the ClassLoader to use to load classes
       *  or will use the thread context loader if none is specified.
       */    
      public ClassLoader getClassLoader() {
          if ( classLoader == null ) {
              ClassLoader answer = Thread.currentThread().getContextClassLoader();
              if ( answer == null ) {
                  answer = getClass().getClassLoader();
              }
              return answer;
          }
          return classLoader;
      }
  
      /**
       * Sets the name of the attribute used to define the bean variable that this dynamic
       * tag will output its results as. This defaults to 'var' though this property
       * can be used to change this if it conflicts with a bean property called 'var'.
       */
      public void setVarAttribute(String varAttribute) {    
          this.varAttribute = varAttribute;
      }
          
      
      // Implementation methods
      //-------------------------------------------------------------------------        
           
      
      /**
       * Extracts the invoke method for the class if one is used.
       */
      protected Method getInvokeMethod( Class theClass ) throws Exception {
          return null;
      }
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/Attribute.java
  
  Index: Attribute.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/DynamicTag.java,v
1.7 2002/05/17 15:18:12 jstrachan Exp $
   * $Revision: 1.7 $
   * $Date: 2002/05/17 15:18:12 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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 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/>.
   * 
   * $Id: DynamicTag.java,v 1.7 2002/05/17 15:18:12 jstrachan Exp $
   */
  package org.apache.commons.jelly.tags.define;
  
  import org.apache.commons.jelly.expression.Expression;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  /** 
   * Represents the attribute definition used by dynamic tags, such as whether the attribute
is required
   * or any default values etc.
   * 
   * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
   * @version $Revision: 1.7 $
   */
  public class Attribute {
  
      /** the name of the attribute */
      private String name;
      
      /** the default value expression */
      private Expression defaultValue;
      
      /** whether this attribute is required */
      private boolean required;
      
      public Attribute() {
      }
  
      // Properties
      //-------------------------------------------------------------------------   
                       
      /**
       * Returns whether this attribute is required.
       * @return boolean
       */
      public boolean isRequired() {
          return required;
      }
  
      /**
       * Sets whether this attribute is required.
       * @param required is true if this attribute is a mandatory attribute
       */
      public void setRequired(boolean required) {
          this.required = required;
      }
  
      /**
       * Returns the name.
       * @return String
       */
      public String getName() {
          return name;
      }
  
      /**
       * Sets the name.
       * @param name The name to set
       */
      public void setName(String name) {
          this.name = name;
      }
  
      /**
       * Returns the defaultValue.
       * @return Expression
       */
      public Expression getDefaultValue() {
          return defaultValue;
      }
  
      /**
       * Sets the defaultValue.
       * @param defaultValue The defaultValue to set
       */
      public void setDefaultValue(Expression defaultValue) {
          this.defaultValue = defaultValue;
      }
  
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/AttributeTag.java
  
  Index: AttributeTag.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/define/DynamicTag.java,v
1.7 2002/05/17 15:18:12 jstrachan Exp $
   * $Revision: 1.7 $
   * $Date: 2002/05/17 15:18:12 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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 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/>.
   * 
   * $Id: DynamicTag.java,v 1.7 2002/05/17 15:18:12 jstrachan Exp $
   */
  package org.apache.commons.jelly.tags.define;
  
  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;
  
  /** 
   * This tag is bound onto a Java Bean class. When the tag is invoked a bean will be created
   * using the tags attributes. 
   * The bean may also have an invoke method called invoke(), run(), execute() or some such
method
   * which will be invoked after the bean has been configured.</p>
   *
   * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
   * @author <a href="mailto:jason@zenplex.com">Jason van Zyl</a>
   * @version $Revision: 1.7 $
   */
  public class AttributeTag extends TagSupport {
  
      /** The Log to which logging calls will be made. */
      private static final Log log = LogFactory.getLog(AttributeTag.class);
  
      /** the attribute definition */
      private Attribute attribute;    
          
      public AttributeTag() {
          attribute = new Attribute();
      }
  
      public AttributeTag(Attribute attribute) {
          this.attribute = attribute;
      }
  
      // Tag interface
      //-------------------------------------------------------------------------        
           
      public void doTag(XMLOutput output) throws Exception {
          DefineBeanTag tag = (DefineBeanTag) findAncestorWithClass( DefineBeanTag.class );
          if ( tag == null ) {
              throw new JellyException( "This tag should be nested inside a <define:bean>
or <define:jellybean> tag" );
          }
  
          tag.addAttribute( attribute );        
      }
      
      // Properties
      //-------------------------------------------------------------------------        
           
      
      /**
       * Sets the name of the attribute 
       */
      public void setName(String name) {
          attribute.setName(name);
      }
      
      /**
       * Sets whether this attribute is mandatory or not
       */
      public void setRequired(boolean required) {
          attribute.setRequired(required);
      }
      
      /**
       * Sets the default value of this attribute
       */
      public void setDefaultValue(Expression defaultValue) {
          attribute.setDefaultValue(defaultValue);
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>


Mime
View raw message