Update of /cvsroot/xdoclet/xdoclet2/src/java/xdoclet/sdk/beans
In directory sc8-pr-cvs1:/tmp/cvs-serv22426/src/java/xdoclet/sdk/beans
Modified Files:
BeanInfo.vm BeanInfoPlugin.java
Log Message:
-Improved JavaBeans support (which is the metadata layer for XDoclet configuration)
-Made tests able to run in unforked mode
Index: BeanInfo.vm
===================================================================
RCS file: /cvsroot/xdoclet/xdoclet2/src/java/xdoclet/sdk/beans/BeanInfo.vm,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** BeanInfo.vm 8 Mar 2003 14:21:10 -0000 1.1
--- BeanInfo.vm 12 Mar 2003 23:41:03 -0000 1.2
***************
*** 1,2 ****
--- 1,6 ----
+ ## Template for BeanInfo classes
+ ## Author: Aslak Hellesoy
+ ## Author: Laurent Etiemble ([EMAIL PROTECTED])
+ ## Version: $Revision$
package $destinationPackageName;
***************
*** 11,17 ****
import java.beans.SimpleBeanInfo;
import java.lang.reflect.Method;
! import java.util.Vector;
!
public class $destinationUnqualifiedClassName extends SimpleBeanInfo {
#set( $beanTag = $class.doc.getTag("bean.class", false) )
--- 15,34 ----
import java.beans.SimpleBeanInfo;
import java.lang.reflect.Method;
! import java.util.List;
! import java.util.ArrayList;
! import java.util.Map;
! import java.util.HashMap;
!
! /**
! * This BeanInfo class includes information from JavaDoc tags in the
! * bean it describes.
! */
public class $destinationUnqualifiedClassName extends SimpleBeanInfo {
+
+ /**
+ * The BeanInfo provided by java.beans.Introspector.
+ */
+ private final BeanInfo _introspectedBeanInfo;
+
#set( $beanTag = $class.doc.getTag("bean.class", false) )
***************
*** 37,50 ****
private final BeanDescriptor _beanDescriptor = new BeanDescriptor(
${class.qualifiedName}.class );
! #end
public $destinationUnqualifiedClassName() throws
java.beans.IntrospectionException {
#if( $beanTag.getAttributeValue("displayName") )
_beanDescriptor.setDisplayName("$beanTag.getAttributeValue("displayName")");
#end
! #if( $beanTag.getAttributeValue("expert") )
! _beanDescriptor.setExpert("$beanTag.getAttributeValue("expert")");
#end
#if( $beanTag.getAttributeValue("hidden") )
! _beanDescriptor.setHidden("$beanTag.getAttributeValue("hidden")");
#end
#if( $beanTag.getAttributeValue("name") )
--- 54,81 ----
private final BeanDescriptor _beanDescriptor = new BeanDescriptor(
${class.qualifiedName}.class );
! #end
! private MethodDescriptor[] _methodDescriptors;
! private PropertyDescriptor[] _propertyDescriptors;
!
public $destinationUnqualifiedClassName() throws
java.beans.IntrospectionException {
+ // Let the Introspector do the dirty work.
+ _introspectedBeanInfo = Introspector.getBeanInfo(
${class.qualifiedName}.class, Introspector.IGNORE_ALL_BEANINFO );
+
+ createPropertyDescriptors();
+ try {
+ createMethodDescriptors();
+ } catch( NoSuchMethodException e ) {
+ throw new IntrospectionException( e.getMessage() );
+ }
+
+ try{
#if( $beanTag.getAttributeValue("displayName") )
_beanDescriptor.setDisplayName("$beanTag.getAttributeValue("displayName")");
#end
! #if( $beanTag.getAttributeValue("expert") == true )
! _beanDescriptor.setExpert( $beanTag.getAttributeValue("expert") );
#end
#if( $beanTag.getAttributeValue("hidden") )
! _beanDescriptor.setHidden( $beanTag.getAttributeValue("hidden") );
#end
#if( $beanTag.getAttributeValue("name") )
***************
*** 65,74 ****
String order = info.getBeanDescriptor().getValue("propertyorder") == null ?
"" : (String) info.getBeanDescriptor().getValue("propertyorder");
PropertyDescriptor[] pd = getPropertyDescriptors();
! for (int i = 0; i != pd.length; i++) {
! if (order.indexOf(pd[i].getName()) == -1) {
! order = order + (order.length() == 0 ? "" : ":") + pd[i].getName();
}
}
getBeanDescriptor().setValue("propertyorder", order);
}
--- 96,109 ----
String order = info.getBeanDescriptor().getValue("propertyorder") == null ?
"" : (String) info.getBeanDescriptor().getValue("propertyorder");
PropertyDescriptor[] pd = getPropertyDescriptors();
! if( pd != null ) {
! for (int i = 0; i != pd.length; i++) {
! if (order.indexOf(pd[i].getName()) == -1) {
! order = order + (order.length() == 0 ? "" : ":") +
pd[i].getName();
! }
}
}
getBeanDescriptor().setValue("propertyorder", order);
+
+ }catch(Throwable t){t.printStackTrace();}
}
***************
*** 79,90 ****
*/
public BeanInfo[] getAdditionalBeanInfo() {
! Vector bi = new Vector();
BeanInfo[] result = null;
#if( $beanTag.getAttributeValue("stopClass") )
for (Class cl = ${class.qualifiedName}.class.getSuperclass();
!cl.equals($beanTag.getAttributeValue("stopClass").class.getSuperclass()); cl =
cl.getSuperclass()) {
! bi.addElement(Introspector.getBeanInfo(cl));
}
! result = new BeanInfo[bi.size()];
! bi.copyInto(result);
#end
return result;
--- 114,124 ----
*/
public BeanInfo[] getAdditionalBeanInfo() {
! List bi = new ArrayList();
BeanInfo[] result = null;
#if( $beanTag.getAttributeValue("stopClass") )
for (Class cl = ${class.qualifiedName}.class.getSuperclass();
!cl.equals($beanTag.getAttributeValue("stopClass").class.getSuperclass()); cl =
cl.getSuperclass()) {
! bi.add(Introspector.getBeanInfo(cl));
}
! result = (BeanInfo[]) bi.toAray(mew BeanInfo[bi.size()]);
#end
return result;
***************
*** 118,120 ****
--- 152,270 ----
}
+ ## Here we create PropertyDescriptors. We will use the PropertyDescriptors
+ ## provided by Introspector, set them all to hidden unless they are
+ ## described in the source code.
+ private void createPropertyDescriptors() {
+ // Map the existing property descriptors for easier manipulation.
+ Map propertyMap = new HashMap();
+
+ _propertyDescriptors = _introspectedBeanInfo.getPropertyDescriptors();
+ for( int i = 0; i < _propertyDescriptors.length; i++ ) {
+ // Set them to expert. We'll adjust that further down.
+ _propertyDescriptors[ i ].setHidden( true );
+ propertyMap.put( _propertyDescriptors[ i ].getName(),
_propertyDescriptors[ i ] );
+ }
+ PropertyDescriptor propertyDescriptor = null;
+ #foreach( $method in $class.getMethods(true) )
+ #if( $method.public && $method.propertyName && $method.doc.hasTag("bean.property",
true) )
+ #set( $beanPropertyTag = $method.doc.getTag("bean.property", true) )
+ propertyDescriptor = (PropertyDescriptor) propertyMap.get(
"$method.propertyName" );
+ #if( $beanPropertyTag.getAttributeValue("name") )
+ propertyDescriptor.setName( "$beanPropertyTag.getAttributeValue("name")" );
+ #end
+ #if( $beanPropertyTag.getAttributeValue("shortDescription") )
+ propertyDescriptor.setShortDescription(
"$beanPropertyTag.getAttributeValue("shortDescription")" );
+ #end
+ #if( $beanPropertyTag.getAttributeValue("displayName") )
+ propertyDescriptor.setDisplayName(
"$beanPropertyTag.getAttributeValue("displayName")" );
+ #end
+ #if( $beanPropertyTag.getAttributeValue("expert") )
+ propertyDescriptor.setExpert( $beanPropertyTag.getAttributeValue("expert") );
+ #end
+ #if( $beanPropertyTag.getAttributeValue("hidden") )
+ propertyDescriptor.setExpert( $beanPropertyTag.getAttributeValue("hidden") );
+ #else
+ propertyDescriptor.setHidden( false );
+ #end
+ #foreach($attributeTag in $method.doc.getTags("bean.attribute", false))
+
propertyDescriptor.setValue("$attributeTag.getAttributeValue("name")","$attributeTag.getAttributeValue("value")");
+ #end
+ #end
+ #end
+ }
+
+ public PropertyDescriptor[] getPropertyDescriptors() {
+ return _propertyDescriptors;
+ }
+
+ private void createMethodDescriptors() throws NoSuchMethodException {
+ // Map the existing method descriptors for easier manipulation.
+ Map methodMap = new HashMap();
+
+ MethodDescriptor[] methodDescriptors =
_introspectedBeanInfo.getMethodDescriptors();
+ for( int i = 0; i < methodDescriptors.length; i++ ) {
+ // Set them to expert. We'll adjust that further down.
+ methodDescriptors[ i ].setHidden( true );
+ methodMap.put( methodDescriptors[ i ].getMethod(), methodDescriptors[ i
] );
+ }
+ Method method = null;
+ // The original introspected MethodDescriptor
+ MethodDescriptor methodDescriptor = null;
+ // The new methodDescriptor
+ MethodDescriptor methodDescriptor2 = null;
+ ParameterDescriptor[] parameterDescriptors = null;
+ #foreach( $method in $class.getMethods(true) )
+ #if( $method.public && $method.doc.hasTag("bean.method", true) )
+ #set( $beanMethodTag = $method.doc.getTag("bean.method", true) )
+ method = ${class.type}.getMethod( "${method.name}", new Class[]
{${method.parameterTypes}} );
+ methodDescriptor = (MethodDescriptor) methodMap.get( method );
+
+ // Make a new MethodDescriptor with ParameterDescriptors
+ parameterDescriptors = new
ParameterDescriptor[method.getParameterTypes().length];
+ #foreach( $parameter in $method.parameters )
+ parameterDescriptors[${velocityCount}] = new ParameterDescriptor();
+ parameterDescriptors[${velocityCount}].setName("${parameter.name}");
+
parameterDescriptors[${velocityCount}].setShortDescription("${parameter.description}");
+
parameterDescriptors[${velocityCount}].setDisplayName("${parameter.description}");
+ #end
+ methodDescriptor2 = new MethodDescriptor( method, parameterDescriptors );
+ methodMap.put( method, methodDescriptor2 );
+
+ #if( $beanPropertyTag.getAttributeValue("name") )
+ methodDescriptor2.setName( "$beanMethodTag.getAttributeValue("name")" );
+ #else
+ methodDescriptor2.setName( methodDescriptor.getName() );
+ #end
+ #if( $beanPropertyTag.getAttributeValue("shortDescription") )
+ methodDescriptor2.setShortDescription(
"$beanMethodTag.getAttributeValue("shortDescription")" );
+ #else
+ methodDescriptor2.setShortDescription(
methodDescriptor.getShortDescription() );
+ #end
+ #if( $beanPropertyTag.getAttributeValue("displayName") )
+ methodDescriptor2.setDisplayName(
"$beanMethodTag.getAttributeValue("displayName")" );
+ #else
+ methodDescriptor2.setDisplayName( methodDescriptor.getDisplayName() );
+ #end
+ #if( $beanPropertyTag.getAttributeValue("expert") )
+ methodDescriptor2.setExpert( $beanPropertyTag.getAttributeValue("expert") );
+ #else
+ methodDescriptor2.setExpert( methodDescriptor.isExpert() );
+ #end
+ #if( $beanPropertyTag.getAttributeValue("hidden") )
+ methodDescriptor2.setExpert( $beanPropertyTag.getAttributeValue("hidden") );
+ #else
+ methodDescriptor2.setHidden( false );
+ #end
+ #foreach($attributeTag in $method.doc.getTags("bean.attribute", false))
+
methodDescriptor2.setValue("$attributeTag.getAttributeValue("name")","$attributeTag.getAttributeValue("value")");
+ #end
+ #end
+ #end
+ List methodList = new ArrayList(methodMap.values());
+ _methodDescriptors = (MethodDescriptor[]) methodList.toArray(new
MethodDescriptor[methodMap.size()]);
+ }
+
+ public MethodDescriptor[] getMethodDescriptors() {
+ return _methodDescriptors;
+ }
}
Index: BeanInfoPlugin.java
===================================================================
RCS file: /cvsroot/xdoclet/xdoclet2/src/java/xdoclet/sdk/beans/BeanInfoPlugin.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** BeanInfoPlugin.java 8 Mar 2003 14:21:11 -0000 1.1
--- BeanInfoPlugin.java 12 Mar 2003 23:41:03 -0000 1.2
***************
*** 11,17 ****
--- 11,19 ----
* @ant.element display-name="BeanInfo" name="BeanInfo" parent="xdoclet.XDoclet"
* @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a>
+ * @author Laurent Etiemble ([EMAIL PROTECTED])
* @version $Revision$
*/
public class BeanInfoPlugin extends VelocityPlugin {
+
public BeanInfoPlugin() {
// We don't want inner classes, classes should be public and not abstract.
-------------------------------------------------------
This SF.net email is sponsored by:Crypto Challenge is now open!
Get cracking and register here for some mind boggling fun and
the chance of winning an Apple iPod:
http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0031en
_______________________________________________
xdoclet-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel