You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by js...@apache.org on 2002/07/17 19:37:59 UTC
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
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: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>