jstrachan 01/08/22 21:34:40 Modified: betwixt build.xml betwixt/src/java/org/apache/commons/betwixt XMLIntrospector.java betwixt/src/java/org/apache/commons/betwixt/io BeanWriter.java betwixt/src/test/org/apache/commons/betwixt CustomerBean.java Added: betwixt/src/java/org/apache/commons/betwixt/expression StringExpression.java betwixt/src/test/org/apache/commons/betwixt SampleBeanWriter.java Log: Navigating iterators and arrays appears to work Revision Changes Path 1.2 +10 -1 jakarta-commons-sandbox/betwixt/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/betwixt/build.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- build.xml 2001/08/22 12:25:01 1.1 +++ build.xml 2001/08/23 04:34:40 1.2 @@ -1,4 +1,4 @@ -<!-- $Id: build.xml,v 1.1 2001/08/22 12:25:01 jstrachan Exp $ --> +<!-- $Id: build.xml,v 1.2 2001/08/23 04:34:40 jstrachan Exp $ --> <project name="betwixt" default="test" basedir="."> <!-- patternset describing files to be copied from the doc directory --> @@ -236,4 +236,13 @@ <!-- ######################################################### --> + <target name="demo" depends="build-test" description="runs sample program"> + <java classname="org.apache.commons.betwixt.SampleBeanWriter" fork="yes"> + <classpath> + <pathelement location="${dest.classes}" /> + <pathelement path="${classpath}" /> + <pathelement path="${java.class.path}" /> + </classpath> + </java> + </target> </project> 1.4 +40 -29 jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java Index: XMLIntrospector.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- XMLIntrospector.java 2001/08/22 19:44:55 1.3 +++ XMLIntrospector.java 2001/08/23 04:34:40 1.4 @@ -5,7 +5,7 @@ * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. * - * $Id: XMLIntrospector.java,v 1.3 2001/08/22 19:44:55 jstrachan Exp $ + * $Id: XMLIntrospector.java,v 1.4 2001/08/23 04:34:40 jstrachan Exp $ */ package org.apache.commons.betwixt; @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; +import org.apache.commons.betwixt.expression.StringExpression; import org.apache.commons.betwixt.expression.Expression; import org.apache.commons.betwixt.expression.IteratorExpression; import org.apache.commons.betwixt.expression.MethodExpression; @@ -33,7 +34,7 @@ /** <p><code>XMLIntrospector</code> an introspector of beans to create a XMLBeanInfo instance.</p> * * @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a> - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ public class XMLIntrospector { @@ -56,36 +57,42 @@ public XMLBeanInfo introspect(BeanInfo beanInfo) throws IntrospectionException { XMLBeanInfo answer = createXMLBeanInfo( beanInfo ); - ArrayList elements = new ArrayList(); - ArrayList attributes = new ArrayList(); - - addProperties( beanInfo, elements, attributes ); - - BeanInfo[] additionals = beanInfo.getAdditionalBeanInfo(); - if ( additionals != null ) { - for ( int i = 0, size = additionals.length; i < size; i++ ) { - BeanInfo otherInfo = additionals[i]; - addProperties( otherInfo, elements, attributes ); - } - } - ElementDescriptor elementDescriptor = new ElementDescriptor(); elementDescriptor.setLocalName( beanInfo.getBeanDescriptor().getName() ); - int size = elements.size(); - if ( size > 0 ) { - ElementDescriptor[] descriptors = new ElementDescriptor[size]; - elements.toArray( descriptors ); - elementDescriptor.setElementDescriptors( descriptors ); - } - size = attributes.size(); - if ( size > 0 ) { - AttributeDescriptor[] descriptors = new AttributeDescriptor[size]; - attributes.toArray( descriptors ); - elementDescriptor.setAttributeDescriptors( descriptors ); + // add default string value for primitive types + if ( isPrimitiveType( beanInfo.getBeanDescriptor().getBeanClass() ) ) { + elementDescriptor.setTextExpression( StringExpression.getInstance() ); + } + else { + ArrayList elements = new ArrayList(); + ArrayList attributes = new ArrayList(); + + addProperties( beanInfo, elements, attributes ); + + BeanInfo[] additionals = beanInfo.getAdditionalBeanInfo(); + if ( additionals != null ) { + for ( int i = 0, size = additionals.length; i < size; i++ ) { + BeanInfo otherInfo = additionals[i]; + addProperties( otherInfo, elements, attributes ); + } + } + + int size = elements.size(); + if ( size > 0 ) { + ElementDescriptor[] descriptors = new ElementDescriptor[size]; + elements.toArray( descriptors ); + elementDescriptor.setElementDescriptors( descriptors ); + } + size = attributes.size(); + if ( size > 0 ) { + AttributeDescriptor[] descriptors = new AttributeDescriptor[size]; + attributes.toArray( descriptors ); + elementDescriptor.setAttributeDescriptors( descriptors ); + } } - answer.setElementDescriptor( elementDescriptor ); + answer.setElementDescriptor( elementDescriptor ); return answer; } @@ -111,7 +118,10 @@ Expression loop = createLoopExpression( propertyDescriptor, type ); if ( loop != null ) { ElementDescriptor elementDescriptor = new ElementDescriptor(); - elementDescriptor.setContextExpression( loop ); + + ElementDescriptor loopDescriptor = new ElementDescriptor(); + loopDescriptor.setContextExpression( loop ); + elementDescriptor.setElementDescriptors( new ElementDescriptor[] { loopDescriptor } ); nodeDescriptor = elementDescriptor; elements.add( nodeDescriptor ); @@ -164,6 +174,7 @@ /** Returns true for primitive types */ protected boolean isPrimitiveType(Class type) { - return type.getName().startsWith( "java.lang." ) || type.isAssignableFrom( Date.class ); + String name = type.getName(); + return name.startsWith( "java.lang." ) || type.isAssignableFrom( Date.class ); } } 1.1 jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/expression/StringExpression.java Index: StringExpression.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. * * $Id: StringExpression.java,v 1.1 2001/08/23 04:34:40 jstrachan Exp $ */ package org.apache.commons.betwixt.expression; /** <p><code>StringExpression</code> returns the current context object as a string.</p> * * @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a> * @version $Revision: 1.1 $ */ public class StringExpression implements Expression { private static final StringExpression singleton = new StringExpression(); public static StringExpression getInstance() { return singleton; } public StringExpression() { } public Object evaluate(Context context) { Object value = context.getBean(); if ( value != null ) { return value.toString(); } return null; } } 1.4 +3 -3 jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/io/BeanWriter.java Index: BeanWriter.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/betwixt/src/java/org/apache/commons/betwixt/io/BeanWriter.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- BeanWriter.java 2001/08/22 19:44:55 1.3 +++ BeanWriter.java 2001/08/23 04:34:40 1.4 @@ -5,7 +5,7 @@ * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. * - * $Id: BeanWriter.java,v 1.3 2001/08/22 19:44:55 jstrachan Exp $ + * $Id: BeanWriter.java,v 1.4 2001/08/23 04:34:40 jstrachan Exp $ */ package org.apache.commons.betwixt.io; @@ -27,7 +27,7 @@ /** <p><code>BeanWriter</code> outputs a bean as XML.</p> * * @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a> - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ public class BeanWriter { @@ -105,6 +105,7 @@ /** Writes the given element */ protected void write( ElementDescriptor elementDescriptor, Context context ) throws IOException, IntrospectionException { String qualifiedName = elementDescriptor.getQualifiedName(); + writePrintln(); writeIndent(); writer.write( "<" ); writer.write( qualifiedName ); @@ -151,7 +152,6 @@ } } - writePrintln(); write( childDescriptor, childContext ); } --indentLevel; 1.4 +4 -4 jakarta-commons-sandbox/betwixt/src/test/org/apache/commons/betwixt/CustomerBean.java Index: CustomerBean.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/betwixt/src/test/org/apache/commons/betwixt/CustomerBean.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- CustomerBean.java 2001/08/22 19:44:56 1.3 +++ CustomerBean.java 2001/08/23 04:34:40 1.4 @@ -5,7 +5,7 @@ * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. * - * $Id: CustomerBean.java,v 1.3 2001/08/22 19:44:56 jstrachan Exp $ + * $Id: CustomerBean.java,v 1.4 2001/08/23 04:34:40 jstrachan Exp $ */ package org.apache.commons.betwixt; @@ -19,7 +19,7 @@ /** <p><code>CustomerBean</code> is a sample bean for use by the test cases.</p> * * @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a> - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ public class CustomerBean implements Serializable { @@ -52,7 +52,8 @@ public Map getProjectMap() { return projectMap; } - +*/ + public Iterator getProjectNames() { if ( projectMap == null ) { return null; @@ -66,7 +67,6 @@ } return new IteratorEnumeration( projectMap.values().iterator() ); } -*/ public void setID(String id) { this.id = id; 1.1 jakarta-commons-sandbox/betwixt/src/test/org/apache/commons/betwixt/SampleBeanWriter.java Index: SampleBeanWriter.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. * * $Id: SampleBeanWriter.java,v 1.1 2001/08/23 04:34:40 jstrachan Exp $ */ package org.apache.commons.betwixt; import java.io.StringWriter; import junit.framework.*; import org.apache.commons.betwixt.io.BeanWriter; /** A sample program to output a bean as pretty printed XML * * @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a> * @version $Revision: 1.1 $ */ public class SampleBeanWriter extends AbstractTestCase { public SampleBeanWriter(String testName) { super(testName); } public static void main(String[] args) throws Exception { SampleBeanWriter sample = new SampleBeanWriter("foo"); sample.run( args ); } public void run(String[] args) throws Exception { Object bean = null; if ( args.length > 0 ) { bean = Class.forName( args[0] ).newInstance(); } else { bean = createBean(); } write( bean ); } public void write(Object bean) throws Exception { BeanWriter writer = new BeanWriter(); writer.enablePrettyPrint(); writer.write( bean ); } }