Package org.apache.ws.jaxme.js.junit

Source Code of org.apache.ws.jaxme.js.junit.BeanReaderTest

package org.apache.ws.jaxme.js.junit;

import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import junit.framework.TestCase;

import org.apache.ws.jaxme.js.JavaInnerClass;
import org.apache.ws.jaxme.js.JavaQName;
import org.apache.ws.jaxme.js.JavaQNameImpl;
import org.apache.ws.jaxme.js.JavaSource;
import org.apache.ws.jaxme.js.JavaSourceFactory;
import org.apache.ws.jaxme.js.Util;
import org.apache.ws.jaxme.js.apps.JavaSourceResolver;
import org.apache.ws.jaxme.js.beanreader.BeanInfo;
import org.apache.ws.jaxme.js.beanreader.BeanInfoFactory;
import org.apache.ws.jaxme.js.beanreader.BeanProperty;
import org.apache.ws.jaxme.js.beanreader.BeanReaderException;
import org.apache.ws.jaxme.js.beanreader.BeanSchemaWriter;
import org.apache.ws.jaxme.js.util.JavaParser;

import antlr.RecognitionException;
import antlr.TokenStreamException;


/** Test case for the {@link BeanSchemaWriter}.
*/
public class BeanReaderTest extends TestCase {
  private static final String JAVA_SOURCE_1 =
    "package foo.bar;\n" +
    "\n" +
    "import java.math.BigDecimal;\n" +
    "import java.math.BigInteger;\n" +
    "import java.util.Calendar;\n" +
    "\n" +
    "import foo.bar.PrimitiveSimpleTypeBean.SimpleTypeBean;\n" +
    "\n" +
    "public class MyBean {\n" +
    "  public static class SimpleTypeArraysBean extends PrimitiveSimpleTypeArraysBean {\n" +
    "    private Byte[] objectByteArray;\n" +
    "    private Short[] objectShortArray;\n" +
    "    private Integer[] objectIntArray;\n" +
    "    private Long[] objectLongArray;\n" +
    "    private Float[] objectFloatArray;\n" +
    "    private Double[] objectDoubleArray;\n" +
    "    private Boolean[] objectBooleanArray;\n" +
    "    private Calendar[] calendarArray;\n" +
    "    private BigInteger[] bigIntegerArray;\n" +
    "    private BigDecimal[] bigDecimalArray;\n" +
    "    private byte[][] base64Array;\n" +
    "\n" +
    "    public Byte[] getObjectByteArray() { return objectByteArray; }\n" +
    "    public Short[] getObjectShortArray() { return objectShortArray; }\n" +
    "    public Integer[] getObjectIntArray() { return objectIntArray; }\n" +
    "    public Long[] getObjectLongArray() { return objectLongArray; }\n" +
    "    public Float[] getObjectFloatArray() { return objectFloatArray; }\n" +
    "    public Double[] getObjectDoubleArray() { return objectDoubleArray; }\n" +
    "    public Boolean[] getObjectBooleanArray() { return objectBooleanArray; }\n" +
    "    public Calendar[] getCalendarArray() { return calendarArray; }\n" +
    "    public BigInteger[] getBigIntegerArray() { return bigIntegerArray; }\n" +
    "    public BigDecimal[] getBigDecimalArray() { return bigDecimalArray; }\n" +
    "    public byte[][] getBase64Array() { return base64Array; }\n" +
    "\n" +
    "    public void setObjectByteArray(Byte[] pValue) { objectByteArray = pValue; }\n" +
    "    public void setObjectShortArray(Short[] pValue) { objectShortArray = pValue; }\n" +
    "    public void setObjectIntArray(Integer[] pValue) { objectIntArray = pValue; }\n" +
    "    public void setObjectLongArray(Long[] pValue) { objectLongArray = pValue; }\n" +
    "    public void setObjectFloatArray(Float[] pValue) { objectFloatArray = pValue; }\n" +
    "    public void setObjectDoubleArray(Double[] pValue) { objectDoubleArray = pValue; }\n" +
    "    public void setObjectBooleanArray(Boolean[] pValue) { objectBooleanArray = pValue; }\n" +
    "    public void setCalendarArray(Calendar[] pValue) { calendarArray = pValue; }\n" +
    "    public void setBigDecimalArray(BigDecimal[] pValue) { bigDecimalArray = pValue; }\n" +
    "    public void setBigIntegerArray(BigInteger[] pValue) { bigIntegerArray = pValue; }\n" +
    "    public void setBase64Array(byte[][] pValue) { base64Array = pValue; }\n" +
    "  }\n" +
    "\n" +
    "  private SimpleTypeBean simpleTypeBean;\n" +
    "  private SimpleTypeArraysBean simpleTypeArraysBean;\n" +
    "  private SimpleTypeBean[] simpleTypeArray;\n" +
    "  private SimpleTypeArraysBean[] simpleTypeArraysArray;\n" +
    "   private MyBean mySubBean;\n" +
    "\n" +
    "  public SimpleTypeBean getSimpleTypeBean() { return simpleTypeBean; }\n" +
    "  public void setSimpleTypeBean(SimpleTypeBean pBean) { simpleTypeBean = pBean; }\n" +
    "  public SimpleTypeArraysBean getSimpleTypeArraysBean() { return simpleTypeArraysBean; }\n" +
    "  public void setSimpleTypeArraysBean(SimpleTypeArraysBean pBean) { simpleTypeArraysBean = pBean; }\n" +
    "  public SimpleTypeBean[] getSimpleTypeArray() { return simpleTypeArray; }\n" +
    "  public void setSimpleTypeArray(SimpleTypeBean[] pArray) { simpleTypeArray = pArray; }\n" +
    "  public SimpleTypeArraysBean[] getSimpleTypeArraysArray() { return simpleTypeArraysArray; }\n" +
    "  public void setSimpleTypeArraysArray(SimpleTypeArraysBean[] pArray) { simpleTypeArraysArray = pArray; }\n" +
    "   public MyBean getMySubBean() { return mySubBean; }\n" +
    "   public void setMySubBean(MyBean pBean) { mySubBean = pBean; }\n" +
    "}\n";

  private static final String JAVA_SOURCE_2 =
    "package foo.bar;\n" +
    "\n" +
    "public class PrimitiveSimpleTypeArraysBean {\n" +
    "  private short[] primitiveShortField;\n" +
    "  private int[] primitiveIntField;\n" +
    "  private long[] primitiveLongField;\n" +
    "  private float[] primitiveFloatField;\n" +
    "  private double[] primitiveDoubleField;\n" +
    "  private boolean[] primitiveBooleanField;\n" +
    "  \n" +
    "  public short[] getPrimitiveShortField() { return primitiveShortField; }\n" +
    "  public int[] getPrimitiveIntField() { return primitiveIntField; }\n" +
    "  public long[] getPrimitiveLongField() { return primitiveLongField; }\n" +
    "  public float[] getPrimitiveFloatField() { return primitiveFloatField; }\n" +
    "  public double[] getPrimitiveDoubleField() { return primitiveDoubleField; }\n" +
    "  public boolean[] isPrimitiveBooleanField() { return primitiveBooleanField; }\n" +
    "  \n" +
    "  public void setPrimitiveShortField(short[] pValue) { primitiveShortField = pValue; }\n" +
    "  public void setPrimitiveIntField(int[] pValue) { primitiveIntField = pValue; }\n" +
    "  public void setPrimitiveLongField(long[] pValue) { primitiveLongField = pValue; }\n" +
    "  public void setPrimitiveFloatField(float[] pValue) { primitiveFloatField = pValue; }\n" +
    "  public void setPrimitiveDoubleField(double[] pValue) { primitiveDoubleField = pValue; }\n" +
    "  public void setPrimitiveBooleanField(boolean[] pValue) { primitiveBooleanField = pValue; }\n" +
    "}\n";

  private static final String JAVA_SOURCE_3 =
    "package foo.bar;\n" +
    "\n" +
    "import java.math.BigDecimal;\n" +
    "import java.math.BigInteger;\n" +
    "import java.util.Calendar;\n" +
    "\n" +
    "public class PrimitiveSimpleTypeBean {\n" +
    "  public static class SimpleTypeBean extends PrimitiveSimpleTypeBean {\n" +
    "    private Byte objectByteField;\n" +
    "    private Short objectShortField;\n" +
    "    private Integer objectIntField;\n" +
    "    private Long objectLongField;\n" +
    "    private Float objectFloatField;\n" +
    "    private Double objectDoubleField;\n" +
    "    private Boolean objectBooleanField;\n" +
    "    private Calendar calendarField;\n" +
    "    private BigDecimal bigDecimalField;\n" +
    "    private BigInteger bigIntegerField;\n" +
    "    private byte[] base64Field;\n" +
    "    \n" +
    "    public Byte getObjectByteField() { return objectByteField; }\n" +
    "    public Short getObjectShortField() { return objectShortField; }\n" +
    "    public Integer getObjectIntField() { return objectIntField; }\n" +
    "    public Long getObjectLongField() { return objectLongField; }\n" +
    "    public Float getObjectFloatField() { return objectFloatField; }\n" +
    "    public Double getObjectDoubleField() { return objectDoubleField; }\n" +
    "    public Boolean getObjectBooleanField() { return objectBooleanField; }\n" +
    "    public Calendar getCalendarField() { return calendarField; }\n" +
    "    public BigDecimal getBigDecimalField() { return bigDecimalField; }\n" +
    "    public BigInteger getBigIntegerField() { return bigIntegerField; }\n" +
    "    public byte[] getBase64Field() { return base64Field; }\n" +
    "\n" +
    "    public void setObjectByteField(Byte pValue) { objectByteField = pValue; }\n" +
    "    public void setObjectShortField(Short pValue) { objectShortField = pValue; }\n" +
    "    public void setObjectIntField(Integer pValue) { objectIntField = pValue; }\n" +
    "    public void setObjectLongField(Long pValue) { objectLongField = pValue; }\n" +
    "    public void setObjectFloatField(Float pValue) { objectFloatField = pValue; }\n" +
    "    public void setObjectDoubleField(Double pValue) { objectDoubleField = pValue; }\n" +
    "    public void setObjectBooleanField(Boolean pValue) { objectBooleanField = pValue; }\n" +
    "    public void setCalendarField(Calendar pValue) { calendarField = pValue; }\n" +
    "    public void setBigDecimalField(BigDecimal pValue) { bigDecimalField = pValue; }\n" +
    "    public void setBigIntegerField(BigInteger pValue) { bigIntegerField = pValue; }\n" +
    "    public void setBase64Field(byte[] pValue) { base64Field = pValue; }\n" +
    "\n" +
    "    // Example of overwriting a parent objects property\n" +
    "    public void setPrimitiveIntField(int pValue) { super.setPrimitiveIntField(pValue); }\n" +
    "    public int getPrimitiveIntField() { return super.getPrimitiveIntField(); }\n" +
    "  }\n" +
    "\n" +
    "  private byte primitiveByteField;\n" +
    "  private short primitiveShortField;\n" +
    "  private int primitiveIntField;\n" +
    "  private long primitiveLongField;\n" +
    "  private float primitiveFloatField;\n" +
    "  private double primitiveDoubleField;\n" +
    "  private boolean primitiveBooleanField;\n" +
    "  \n" +
    "  public byte getPrimitiveByteField() { return primitiveByteField; }\n" +
    "  public short getPrimitiveShortField() { return primitiveShortField; }\n" +
    "  public int getPrimitiveIntField() { return primitiveIntField; }\n" +
    "  public long getPrimitiveLongField() { return primitiveLongField; }\n" +
    "  public float getPrimitiveFloatField() { return primitiveFloatField; }\n" +
    "  public double getPrimitiveDoubleField() { return primitiveDoubleField; }\n" +
    "  public boolean isPrimitiveBooleanField() { return primitiveBooleanField; }\n" +
    "  \n" +
    "  public void setPrimitiveByteField(byte pValue) { primitiveByteField = pValue; }\n" +
    "  public void setPrimitiveShortField(short pValue) { primitiveShortField = pValue; }\n" +
    "  public void setPrimitiveIntField(int pValue) { primitiveIntField = pValue; }\n" +
    "  public void setPrimitiveLongField(long pValue) { primitiveLongField = pValue; }\n" +
    "  public void setPrimitiveFloatField(float pValue) { primitiveFloatField = pValue; }\n" +
    "  public void setPrimitiveDoubleField(double pValue) { primitiveDoubleField = pValue; }\n" +
    "  public void setPrimitiveBooleanField(boolean pValue) { primitiveBooleanField = pValue; }\n" +
    "}\n";

  final String[] sources = new String[]{
      JAVA_SOURCE_1, JAVA_SOURCE_2, JAVA_SOURCE_3
  };

  private String asKey(JavaQName pQName) {
    return pQName.toString().replace('$', '.');
  }

  private void register(Map pSourcesByName, JavaSource pJs) {
    String qName = asKey(pJs.getQName());
    pSourcesByName.put(qName, pJs);
    JavaInnerClass[] innerClasses = pJs.getInnerClasses();
    for (int i = 0;  i < innerClasses.length;  i++) {
      register(pSourcesByName, innerClasses[i]);
    }
  }

  private JavaSourceResolver getResolver()
      throws TokenStreamException, RecognitionException {
    final Map sourcesByName = new HashMap();
    final JavaSourceFactory jsf = new JavaSourceFactory();
    JavaParser parser = new JavaParser(jsf);
    for (int i = 0;  i < sources.length;  i++) {
      List list = parser.parse(new StringReader(sources[i]));
      for (int j = 0;  j < list.size();  j++) {
        JavaSource js = (JavaSource) list.get(i);
        register(sourcesByName, js);
      }
    }
    return new JavaSourceResolver(){
      public JavaSource getJavaSource(JavaQName pQName) {
        String key = asKey(pQName);
        JavaSource js = (JavaSource) sourcesByName.get(key);
        if (js != null) {
          return js;
        }
        Class c;
        try {
          c = Class.forName(key);
        } catch (ClassNotFoundException e) {
          return null;
        }
        return Util.newJavaSource(jsf, c);
      }
    };
  }

  /** Tests creating a bean info factory.
   */
  public void testBeanInfoFactory() throws Exception {
    BeanInfoFactory bif = newBeanInfoFactory();
    checkRootBean(bif);
    checkPrimitiveSimpleTypeBean(bif);
    checkSimpleTypeBean(bif);
  }

  private void checkSimpleTypeBean(BeanInfoFactory pFactory) {
    JavaQName primitiveSimpleTypeBeanType = JavaQNameImpl.getInstance("foo.bar.PrimitiveSimpleTypeBean");
    JavaQName simpleTypeBeanType = JavaQNameImpl.getInstance("foo.bar.PrimitiveSimpleTypeBean.SimpleTypeBean");
    BeanInfo bi = pFactory.getBeanInfo(simpleTypeBeanType);
    assertEquals("simpleTypeBean", bi.getElementName());
    assertEquals(primitiveSimpleTypeBeanType, bi.getSuperType());
    assertNull(bi.getTargetNamespace());
    assertEquals(asKey(simpleTypeBeanType), asKey(bi.getType()));
    BeanProperty[] props = bi.getBeanProperties();
    assertEquals(11, props.length);
  }

  private void checkPrimitiveSimpleTypeBean(BeanInfoFactory pFactory) {
    JavaQName primitiveSimpleTypeBeanType = JavaQNameImpl.getInstance("foo.bar.PrimitiveSimpleTypeBean");
    BeanInfo bi = pFactory.getBeanInfo(primitiveSimpleTypeBeanType);
    assertEquals("primitiveSimpleTypeBean", bi.getElementName());
    assertNull(bi.getSuperType());
    assertNull(bi.getTargetNamespace());
    assertEquals(primitiveSimpleTypeBeanType, bi.getType());
    BeanProperty[] props = bi.getBeanProperties();
    assertEquals(7, props.length);
  }

  private void checkRootBean(BeanInfoFactory pFactory) {
    JavaQName myBeanType = JavaQNameImpl.getInstance("foo.bar.MyBean");
    BeanInfo bi = pFactory.getBeanInfo(myBeanType);
    assertEquals("myBean", bi.getElementName());
    assertNull(bi.getSuperType());
    assertNull(bi.getTargetNamespace());
    assertEquals(myBeanType, bi.getType());
    BeanProperty[] myBeanProperties = bi.getBeanProperties();
    assertEquals(5, myBeanProperties.length);
  }

  private BeanInfoFactory newBeanInfoFactory() throws BeanReaderException, TokenStreamException, RecognitionException {
    return new BeanInfoFactory(getResolver(), getRootBeanType());
  }

  private JavaQName getRootBeanType() {
    return JavaQNameImpl.getInstance("foo.bar.MyBean");
  }

  /** Tests creating an XML schema.
   */
  public void testCreateSchema() throws Exception {
    StringWriter sw = new StringWriter();
    TransformerHandler t = ((SAXTransformerFactory) TransformerFactory.newInstance()).newTransformerHandler();
    t.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
    t.setResult(new StreamResult(sw));
    BeanInfoFactory beanInfoFactory = newBeanInfoFactory();
    BeanInfo beanInfo = beanInfoFactory.getBeanInfo(getRootBeanType());
    new BeanSchemaWriter(beanInfoFactory).write(beanInfo, t);
    System.out.println(sw.toString());
  }
}
TOP

Related Classes of org.apache.ws.jaxme.js.junit.BeanReaderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.