jstrachan 01/08/23 08:03:07
Modified: 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
AbstractTestCase.java CustomerBean.java
Log:
Tidied up the default mapping
Revision Changes Path
1.6 +36 -11
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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XMLIntrospector.java 2001/08/23 14:25:57 1.5
+++ XMLIntrospector.java 2001/08/23 15:03:07 1.6
@@ -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.5 2001/08/23 14:25:57 jstrachan Exp $
+ * $Id: XMLIntrospector.java,v 1.6 2001/08/23 15:03:07 jstrachan Exp $
*/
package org.apache.commons.betwixt;
@@ -35,12 +35,12 @@
/** <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.5 $
+ * @version $Revision: 1.6 $
*/
public class XMLIntrospector {
- /** Should methods inherited from {@link Object} be shown? */
- private boolean filterObject = true;
+ /** should attributes or elements be used for primitive types */
+ private boolean attributesForPrimitives;
public XMLIntrospector() {
}
@@ -72,8 +72,16 @@
loopDescriptor.setContextExpression(
new IteratorExpression( EmptyExpression.getInstance() )
);
-
+ if ( Map.class.isAssignableFrom( beanType ) ) {
+ loopDescriptor.setQualifiedName( "entry" );
+ }
elementDescriptor.setElementDescriptors( new ElementDescriptor[] {
loopDescriptor } );
+
+/*
+ elementDescriptor.setContextExpression(
+ new IteratorExpression( EmptyExpression.getInstance() )
+ );
+*/
}
else {
ArrayList elements = new ArrayList();
@@ -106,7 +114,17 @@
answer.setElementDescriptor( elementDescriptor );
return answer;
}
+
+ /** Should attributes be used for primitive types or elements.
+ */
+ public boolean isAttributesForPrimitives() {
+ return attributesForPrimitives;
+ }
+ public void setAttributesForPrimitives(boolean attributesForPrimitives) {
+ this.attributesForPrimitives = attributesForPrimitives;
+ }
+
// Implementation methods
//-------------------------------------------------------------------------
@@ -127,27 +145,34 @@
return;
}
if ( isPrimitiveType( type ) ) {
- nodeDescriptor = new AttributeDescriptor();
+ if ( isAttributesForPrimitives() ) {
+ nodeDescriptor = new AttributeDescriptor();
+ attributes.add( nodeDescriptor );
+ }
+ else {
+ nodeDescriptor = new ElementDescriptor();
+ elements.add( nodeDescriptor );
+ }
nodeDescriptor.setTextExpression( new MethodExpression( readMethod ) );
- attributes.add( nodeDescriptor );
}
else if ( isLoopType( type ) ) {
ElementDescriptor loopDescriptor = new ElementDescriptor();
loopDescriptor.setContextExpression(
new IteratorExpression( new MethodExpression( readMethod ) )
);
+ if ( Map.class.isAssignableFrom( type ) ) {
+ loopDescriptor.setQualifiedName( "entry" );
+ }
ElementDescriptor elementDescriptor = new ElementDescriptor();
elementDescriptor.setElementDescriptors( new ElementDescriptor[] {
loopDescriptor } );
+
nodeDescriptor = elementDescriptor;
elements.add( nodeDescriptor );
}
else {
- ElementDescriptor childDescriptor = new ElementDescriptor();
- childDescriptor.setContextExpression( new MethodExpression( readMethod
) );
-
ElementDescriptor elementDescriptor = new ElementDescriptor();
- elementDescriptor.setElementDescriptors( new ElementDescriptor[] {
childDescriptor } );
+ elementDescriptor.setContextExpression( new MethodExpression(
readMethod ) );
nodeDescriptor = elementDescriptor;
elements.add( nodeDescriptor );
1.6 +21 -8
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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- BeanWriter.java 2001/08/23 14:25:57 1.5
+++ BeanWriter.java 2001/08/23 15:03:07 1.6
@@ -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.5 2001/08/23 14:25:57 jstrachan Exp $
+ * $Id: BeanWriter.java,v 1.6 2001/08/23 15:03:07 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.5 $
+ * @version $Revision: 1.6 $
*/
public class BeanWriter {
@@ -64,7 +64,7 @@
ElementDescriptor elementDescriptor = beanInfo.getElementDescriptor();
if ( elementDescriptor != null ) {
Context context = new Context( bean );
- write( elementDescriptor, context );
+ write( elementDescriptor.getQualifiedName(), elementDescriptor,
context );
}
}
@@ -102,9 +102,21 @@
// Implementation methods
//-------------------------------------------------------------------------
+ public void write(String qualifiedName, Object bean) throws IOException,
IntrospectionException {
+ XMLBeanInfo beanInfo = introspector.introspect( bean );
+ if ( beanInfo != null ) {
+ ElementDescriptor elementDescriptor = beanInfo.getElementDescriptor();
+ if ( elementDescriptor != null ) {
+ Context context = new Context( bean );
+ if ( qualifiedName == null ) {
+ qualifiedName = elementDescriptor.getQualifiedName();
+ }
+ write( qualifiedName, elementDescriptor, context );
+ }
+ }
+ }
/** Writes the given element */
- protected void write( ElementDescriptor elementDescriptor, Context context )
throws IOException, IntrospectionException {
- String qualifiedName = elementDescriptor.getQualifiedName();
+ protected void write( String qualifiedName, ElementDescriptor
elementDescriptor, Context context ) throws IOException, IntrospectionException {
writePrintln();
writeIndent();
writer.write( "<" );
@@ -138,19 +150,20 @@
if ( childExpression != null ) {
Object childBean = childExpression.evaluate( context );
if ( childBean != null ) {
+ String qualifiedName = childDescriptor.getQualifiedName();
// XXXX: should we handle nulls better
if ( childBean instanceof Iterator ) {
for ( Iterator iter = (Iterator) childBean;
iter.hasNext(); ) {
- write( iter.next() );
+ write( qualifiedName, iter.next() );
}
}
else {
- write( childBean );
+ write( qualifiedName, childBean );
}
}
}
else {
- write( childDescriptor, childContext );
+ write( childDescriptor.getQualifiedName(), childDescriptor,
childContext );
}
}
--indentLevel;
1.3 +5 -2
jakarta-commons-sandbox/betwixt/src/test/org/apache/commons/betwixt/AbstractTestCase.java
Index: AbstractTestCase.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/betwixt/src/test/org/apache/commons/betwixt/AbstractTestCase.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractTestCase.java 2001/08/23 14:25:58 1.2
+++ AbstractTestCase.java 2001/08/23 15:03:07 1.3
@@ -5,7 +5,7 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*
- * $Id: AbstractTestCase.java,v 1.2 2001/08/23 14:25:58 jstrachan Exp $
+ * $Id: AbstractTestCase.java,v 1.3 2001/08/23 15:03:07 jstrachan Exp $
*/
package org.apache.commons.betwixt;
@@ -21,7 +21,7 @@
/** Abstract base class for test cases.
*
* @author <a href="mailto:[EMAIL PROTECTED]">James Strachan</a>
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
public abstract class AbstractTestCase extends TestCase {
@@ -35,6 +35,9 @@
bean.setName( "James" );
bean.setEmails( new String[] { "[EMAIL PROTECTED]",
"[EMAIL PROTECTED]" } );
bean.setNumbers( new int[] { 3, 4, 5 } );
+ bean.setLocation(0, "Highbury Barn" );
+ bean.setLocation(1, "Monument" );
+ bean.setLocation(2, "Leeds" );
Map projects = new HashMap();
projects.put( "dom4j", "http://dom4j.org" );
1.6 +21 -2
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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- CustomerBean.java 2001/08/23 14:25:58 1.5
+++ CustomerBean.java 2001/08/23 15:03:07 1.6
@@ -5,13 +5,15 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*
- * $Id: CustomerBean.java,v 1.5 2001/08/23 14:25:58 jstrachan Exp $
+ * $Id: CustomerBean.java,v 1.6 2001/08/23 15:03:07 jstrachan Exp $
*/
package org.apache.commons.betwixt;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import org.apache.commons.collections.IteratorEnumeration;
@@ -19,7 +21,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.5 $
+ * @version $Revision: 1.6 $
*/
public class CustomerBean implements Serializable {
@@ -29,6 +31,7 @@
private int[] numbers;
private AddressBean address;
private Map projectMap;
+ private List locations = new ArrayList();
public CustomerBean() {
}
@@ -71,6 +74,11 @@
return new IteratorEnumeration( projectMap.values().iterator() );
}
+ /** An indexed property */
+ public String getLocation(int index) {
+ return (String) locations.get(index);
+ }
+
public void setID(String id) {
this.id = id;
}
@@ -94,4 +102,15 @@
public void setProjectMap(Map projectMap) {
this.projectMap = projectMap;
}
+
+ /** An indexed property */
+ public void setLocation(int index, String location) {
+ if ( index == locations.size() ) {
+ locations.add( location );
+ }
+ else {
+ locations.set(index, location);
+ }
+ }
+
}