/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.openwire.tool; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import org.codehaus.jam.JAnnotation; import org.codehaus.jam.JAnnotationValue; import org.codehaus.jam.JClass; import org.codehaus.jam.JPackage; import org.codehaus.jam.JProperty; /** * */ public class JavaMarshallingGenerator extends MultiSourceGenerator { protected List<JClass> concreteClasses = new ArrayList<JClass>(); protected File factoryFile; protected String factoryFileName = "MarshallerFactory"; protected String indent = " "; protected String targetDir = "src/main/java"; public Object run() { if (destDir == null) { destDir = new File(targetDir + "/org/apache/activemq/openwire/v" + getOpenwireVersion()); } Object answer = super.run(); processFactory(); return answer; } protected void generateFile(PrintWriter out) throws Exception { generateLicence(out); out.println(""); out.println("package org.apache.activemq.openwire.v" + getOpenwireVersion() + ";"); out.println(""); out.println("import java.io.DataInput;"); out.println("import java.io.DataOutput;"); out.println("import java.io.IOException;"); out.println(""); out.println("import org.apache.activemq.openwire.*;"); out.println("import org.apache.activemq.command.*;"); out.println(""); out.println(""); for (int i = 0; i < getJclass().getImportedPackages().length; i++) { JPackage pkg = getJclass().getImportedPackages()[i]; for (int j = 0; j < pkg.getClasses().length; j++) { JClass clazz = pkg.getClasses()[j]; out.println("import " + clazz.getQualifiedName() + ";"); } } out.println(""); out.println("/**"); out.println(" * Marshalling code for Open Wire Format for " + getClassName() + ""); out.println(" *"); out.println(" *"); out.println(" * NOTE!: This file is auto generated - do not modify!"); out.println(" * if you need to make a change, please see the modify the groovy scripts in the"); out.println(" * under src/gram/script and then use maven openwire:generate to regenerate "); out.println(" * this file."); out.println(" *"); out.println(" * "); out.println(" */"); out.println("public " + getAbstractClassText() + "class " + getClassName() + " extends " + getBaseClass() + " {"); out.println(""); if (!isAbstractClass()) { out.println(" /**"); out.println(" * Return the type of Data Structure we marshal"); out.println(" * @return short representation of the type data structure"); out.println(" */"); out.println(" public byte getDataStructureType() {"); out.println(" return " + getJclass().getSimpleName() + ".DATA_STRUCTURE_TYPE;"); out.println(" }"); out.println(" "); out.println(" /**"); out.println(" * @return a new object instance"); out.println(" */"); out.println(" public DataStructure createObject() {"); out.println(" return new " + getJclass().getSimpleName() + "();"); out.println(" }"); out.println(""); } out.println(" /**"); out.println(" * Un-marshal an object instance from the data input stream"); out.println(" *"); out.println(" * @param o the object to un-marshal"); out.println(" * @param dataIn the data input stream to build the object from"); out.println(" * @throws IOException"); out.println(" */"); out.println(" public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {"); out.println(" super.tightUnmarshal(wireFormat, o, dataIn, bs);"); if (!getProperties().isEmpty()) { out.println(""); out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().getSimpleName() + ")o;"); } if (isMarshallerAware()) { out.println(""); out.println(" info.beforeUnmarshall(wireFormat);"); out.println(" "); } generateTightUnmarshalBody(out); if (isMarshallerAware()) { out.println(""); out.println(" info.afterUnmarshall(wireFormat);"); } out.println(""); out.println(" }"); out.println(""); out.println(""); out.println(" /**"); out.println(" * Write the booleans that this object uses to a BooleanStream"); out.println(" */"); out.println(" public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {"); if (!getProperties().isEmpty()) { out.println(""); out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().getSimpleName() + ")o;"); } if (isMarshallerAware()) { out.println(""); out.println(" info.beforeMarshall(wireFormat);"); } out.println(""); out.println(" int rc = super.tightMarshal1(wireFormat, o, bs);"); int baseSize = generateTightMarshal1Body(out); out.println(""); out.println(" return rc + " + baseSize + ";"); out.println(" }"); out.println(""); out.println(" /**"); out.println(" * Write a object instance to data output stream"); out.println(" *"); out.println(" * @param o the instance to be marshaled"); out.println(" * @param dataOut the output stream"); out.println(" * @throws IOException thrown if an error occurs"); out.println(" */"); out.println(" public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs) throws IOException {"); out.println(" super.tightMarshal2(wireFormat, o, dataOut, bs);"); if (!getProperties().isEmpty()) { out.println(""); out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().getSimpleName() + ")o;"); } generateTightMarshal2Body(out); if (isMarshallerAware()) { out.println(""); out.println(" info.afterMarshall(wireFormat);"); } out.println(""); out.println(" }"); out.println(""); out.println(" /**"); out.println(" * Un-marshal an object instance from the data input stream"); out.println(" *"); out.println(" * @param o the object to un-marshal"); out.println(" * @param dataIn the data input stream to build the object from"); out.println(" * @throws IOException"); out.println(" */"); out.println(" public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInput dataIn) throws IOException {"); out.println(" super.looseUnmarshal(wireFormat, o, dataIn);"); if (!getProperties().isEmpty()) { out.println(""); out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().getSimpleName() + ")o;"); } if (isMarshallerAware()) { out.println(""); out.println(" info.beforeUnmarshall(wireFormat);"); out.println(" "); } generateLooseUnmarshalBody(out); if (isMarshallerAware()) { out.println(""); out.println(" info.afterUnmarshall(wireFormat);"); } out.println(""); out.println(" }"); out.println(""); out.println(""); out.println(" /**"); out.println(" * Write the booleans that this object uses to a BooleanStream"); out.println(" */"); out.println(" public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut) throws IOException {"); if (!getProperties().isEmpty()) { out.println(""); out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().getSimpleName() + ")o;"); } if (isMarshallerAware()) { out.println(""); out.println(" info.beforeMarshall(wireFormat);"); } out.println(""); out.println(" super.looseMarshal(wireFormat, o, dataOut);"); generateLooseMarshalBody(out); out.println(""); out.println(" }"); out.println("}"); } private void generateLicence(PrintWriter out) { out.println("/**"); out.println(" *"); out.println(" * Licensed to the Apache Software Foundation (ASF) under one or more"); out.println(" * contributor license agreements. See the NOTICE file distributed with"); out.println(" * this work for additional information regarding copyright ownership."); out.println(" * The ASF licenses this file to You under the Apache License, Version 2.0"); out.println(" * (the \"License\"); you may not use this file except in compliance with"); out.println(" * the License. You may obtain a copy of the License at"); out.println(" *"); out.println(" * http://www.apache.org/licenses/LICENSE-2.0"); out.println(" *"); out.println(" * Unless required by applicable law or agreed to in writing, software"); out.println(" * distributed under the License is distributed on an \"AS IS\" BASIS,"); out.println(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."); out.println(" * See the License for the specific language governing permissions and"); out.println(" * limitations under the License."); out.println(" */"); } protected void processFactory() { if (factoryFile == null) { factoryFile = new File(destDir, factoryFileName + filePostFix); } PrintWriter out = null; try { out = new PrintWriter(new FileWriter(factoryFile)); generateFactory(out); } catch (Exception e) { throw new RuntimeException(e); } finally { if (out != null) { out.close(); } } } protected void generateFactory(PrintWriter out) { generateLicence(out); out.println(""); out.println("package org.apache.activemq.openwire.v" + getOpenwireVersion() + ";"); out.println(""); out.println("import org.apache.activemq.openwire.DataStreamMarshaller;"); out.println("import org.apache.activemq.openwire.OpenWireFormat;"); out.println(""); out.println("/**"); out.println(" * MarshallerFactory for Open Wire Format."); out.println(" *"); out.println(" *"); out.println(" * NOTE!: This file is auto generated - do not modify!"); out.println(" * if you need to make a change, please see the modify the groovy scripts in the"); out.println(" * under src/gram/script and then use maven openwire:generate to regenerate "); out.println(" * this file."); out.println(" *"); out.println(" * "); out.println(" */"); out.println("public class MarshallerFactory {"); out.println(""); out.println(" /**"); out.println(" * Creates a Map of command type -> Marshallers"); out.println(" */"); out.println(" static final private DataStreamMarshaller marshaller[] = new DataStreamMarshaller[256];"); out.println(" static {"); out.println(""); List<JClass> list = new ArrayList<JClass>(getConcreteClasses()); Collections.sort(list, new Comparator<JClass>() { public int compare(JClass c1, JClass c2) { return c1.getSimpleName().compareTo(c2.getSimpleName()); } }); for (Iterator<JClass> iter = list.iterator(); iter.hasNext();) { JClass jclass = iter.next(); out.println(" add(new " + jclass.getSimpleName() + "Marshaller());"); } out.println(""); out.println(" }"); out.println(""); out.println(" static private void add(DataStreamMarshaller dsm) {"); out.println(" marshaller[dsm.getDataStructureType()] = dsm;"); out.println(" }"); out.println(" "); out.println(" static public DataStreamMarshaller[] createMarshallerMap(OpenWireFormat wireFormat) {"); out.println(" return marshaller;"); out.println(" }"); out.println("}"); } protected void processClass(JClass jclass) { super.processClass(jclass); if (!jclass.isAbstract()) { concreteClasses.add(jclass); } } protected String getClassName(JClass jclass) { return super.getClassName(jclass) + "Marshaller"; } protected String getBaseClassName(JClass jclass) { String answer = "BaseDataStreamMarshaller"; JClass superclass = jclass.getSuperclass(); if (superclass != null) { String superName = superclass.getSimpleName(); if (!superName.equals("Object") && !superName.equals("JNDIBaseStorable") && !superName.equals("DataStructureSupport")) { answer = superName + "Marshaller"; } } return answer; } protected void initialiseManuallyMaintainedClasses() { } protected void generateTightUnmarshalBody(PrintWriter out) { List properties = getProperties(); for (Iterator iter = properties.iterator(); iter.hasNext();) { JProperty property = (JProperty)iter.next(); JAnnotation annotation = property.getAnnotation("openwire:property"); JAnnotationValue size = annotation.getValue("size"); JClass propertyType = property.getType(); String propertyTypeName = propertyType.getSimpleName(); if (propertyType.isArrayType() && !propertyTypeName.equals("byte[]")) { generateTightUnmarshalBodyForArrayProperty(out, property, size); } else { generateTightUnmarshalBodyForProperty(out, property, size); } } } protected void generateTightUnmarshalBodyForProperty(PrintWriter out, JProperty property, JAnnotationValue size) { String setter = property.getSetter().getSimpleName(); String type = property.getType().getSimpleName(); if (type.equals("boolean")) { out.println(" info." + setter + "(bs.readBoolean());"); } else if (type.equals("byte")) { out.println(" info." + setter + "(dataIn.readByte());"); } else if (type.equals("char")) { out.println(" info." + setter + "(dataIn.readChar());"); } else if (type.equals("short")) { out.println(" info." + setter + "(dataIn.readShort());"); } else if (type.equals("int")) { out.println(" info." + setter + "(dataIn.readInt());"); } else if (type.equals("long")) { out.println(" info." + setter + "(tightUnmarshalLong(wireFormat, dataIn, bs));"); } else if (type.equals("String")) { out.println(" info." + setter + "(tightUnmarshalString(dataIn, bs));"); } else if (type.equals("byte[]")) { if (size != null) { out.println(" info." + setter + "(tightUnmarshalConstByteArray(dataIn, bs, " + size.asInt() + "));"); } else { out.println(" info." + setter + "(tightUnmarshalByteArray(dataIn, bs));"); } } else if (type.equals("ByteSequence")) { out.println(" info." + setter + "(tightUnmarshalByteSequence(dataIn, bs));"); } else if (isThrowable(property.getType())) { out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") tightUnmarsalThrowable(wireFormat, dataIn, bs));"); } else if (isCachedProperty(property)) { out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") tightUnmarsalCachedObject(wireFormat, dataIn, bs));"); } else { out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") tightUnmarsalNestedObject(wireFormat, dataIn, bs));"); } } protected void generateTightUnmarshalBodyForArrayProperty(PrintWriter out, JProperty property, JAnnotationValue size) { JClass propertyType = property.getType(); String arrayType = propertyType.getArrayComponentType().getQualifiedName(); String setter = property.getSetter().getSimpleName(); out.println(); if (size != null) { out.println(" {"); out.println(" " + arrayType + " value[] = new " + arrayType + "[" + size.asInt() + "];"); out.println(" " + "for( int i=0; i < " + size.asInt() + "; i++ ) {"); out.println(" value[i] = (" + arrayType + ") tightUnmarsalNestedObject(wireFormat,dataIn, bs);"); out.println(" }"); out.println(" info." + setter + "(value);"); out.println(" }"); } else { out.println(" if (bs.readBoolean()) {"); out.println(" short size = dataIn.readShort();"); out.println(" " + arrayType + " value[] = new " + arrayType + "[size];"); out.println(" for( int i=0; i < size; i++ ) {"); out.println(" value[i] = (" + arrayType + ") tightUnmarsalNestedObject(wireFormat,dataIn, bs);"); out.println(" }"); out.println(" info." + setter + "(value);"); out.println(" }"); out.println(" else {"); out.println(" info." + setter + "(null);"); out.println(" }"); } } protected int generateTightMarshal1Body(PrintWriter out) { List properties = getProperties(); int baseSize = 0; for (Iterator iter = properties.iterator(); iter.hasNext();) { JProperty property = (JProperty)iter.next(); JAnnotation annotation = property.getAnnotation("openwire:property"); JAnnotationValue size = annotation.getValue("size"); JClass propertyType = property.getType(); String type = propertyType.getSimpleName(); String getter = "info." + property.getGetter().getSimpleName() + "()"; if (type.equals("boolean")) { out.println(" bs.writeBoolean(" + getter + ");"); } else if (type.equals("byte")) { baseSize += 1; } else if (type.equals("char")) { baseSize += 2; } else if (type.equals("short")) { baseSize += 2; } else if (type.equals("int")) { baseSize += 4; } else if (type.equals("long")) { out.println(" rc+=tightMarshalLong1(wireFormat, " + getter + ", bs);"); } else if (type.equals("String")) { out.println(" rc += tightMarshalString1(" + getter + ", bs);"); } else if (type.equals("byte[]")) { if (size == null) { out.println(" rc += tightMarshalByteArray1(" + getter + ", bs);"); } else { out.println(" rc += tightMarshalConstByteArray1(" + getter + ", bs, " + size.asInt() + ");"); } } else if (type.equals("ByteSequence")) { out.println(" rc += tightMarshalByteSequence1(" + getter + ", bs);"); } else if (propertyType.isArrayType()) { if (size != null) { out.println(" rc += tightMarshalObjectArrayConstSize1(wireFormat, " + getter + ", bs, " + size.asInt() + ");"); } else { out.println(" rc += tightMarshalObjectArray1(wireFormat, " + getter + ", bs);"); } } else if (isThrowable(propertyType)) { out.println(" rc += tightMarshalThrowable1(wireFormat, " + getter + ", bs);"); } else { if (isCachedProperty(property)) { out.println(" rc += tightMarshalCachedObject1(wireFormat, (DataStructure)" + getter + ", bs);"); } else { out.println(" rc += tightMarshalNestedObject1(wireFormat, (DataStructure)" + getter + ", bs);"); } } } return baseSize; } protected void generateTightMarshal2Body(PrintWriter out) { List properties = getProperties(); for (Iterator iter = properties.iterator(); iter.hasNext();) { JProperty property = (JProperty)iter.next(); JAnnotation annotation = property.getAnnotation("openwire:property"); JAnnotationValue size = annotation.getValue("size"); JClass propertyType = property.getType(); String type = propertyType.getSimpleName(); String getter = "info." + property.getGetter().getSimpleName() + "()"; if (type.equals("boolean")) { out.println(" bs.readBoolean();"); } else if (type.equals("byte")) { out.println(" dataOut.writeByte(" + getter + ");"); } else if (type.equals("char")) { out.println(" dataOut.writeChar(" + getter + ");"); } else if (type.equals("short")) { out.println(" dataOut.writeShort(" + getter + ");"); } else if (type.equals("int")) { out.println(" dataOut.writeInt(" + getter + ");"); } else if (type.equals("long")) { out.println(" tightMarshalLong2(wireFormat, " + getter + ", dataOut, bs);"); } else if (type.equals("String")) { out.println(" tightMarshalString2(" + getter + ", dataOut, bs);"); } else if (type.equals("byte[]")) { if (size != null) { out.println(" tightMarshalConstByteArray2(" + getter + ", dataOut, bs, " + size.asInt() + ");"); } else { out.println(" tightMarshalByteArray2(" + getter + ", dataOut, bs);"); } } else if (type.equals("ByteSequence")) { out.println(" tightMarshalByteSequence2(" + getter + ", dataOut, bs);"); } else if (propertyType.isArrayType()) { if (size != null) { out.println(" tightMarshalObjectArrayConstSize2(wireFormat, " + getter + ", dataOut, bs, " + size.asInt() + ");"); } else { out.println(" tightMarshalObjectArray2(wireFormat, " + getter + ", dataOut, bs);"); } } else if (isThrowable(propertyType)) { out.println(" tightMarshalThrowable2(wireFormat, " + getter + ", dataOut, bs);"); } else { if (isCachedProperty(property)) { out.println(" tightMarshalCachedObject2(wireFormat, (DataStructure)" + getter + ", dataOut, bs);"); } else { out.println(" tightMarshalNestedObject2(wireFormat, (DataStructure)" + getter + ", dataOut, bs);"); } } } } protected void generateLooseMarshalBody(PrintWriter out) { List properties = getProperties(); for (Iterator iter = properties.iterator(); iter.hasNext();) { JProperty property = (JProperty)iter.next(); JAnnotation annotation = property.getAnnotation("openwire:property"); JAnnotationValue size = annotation.getValue("size"); JClass propertyType = property.getType(); String type = propertyType.getSimpleName(); String getter = "info." + property.getGetter().getSimpleName() + "()"; if (type.equals("boolean")) { out.println(" dataOut.writeBoolean(" + getter + ");"); } else if (type.equals("byte")) { out.println(" dataOut.writeByte(" + getter + ");"); } else if (type.equals("char")) { out.println(" dataOut.writeChar(" + getter + ");"); } else if (type.equals("short")) { out.println(" dataOut.writeShort(" + getter + ");"); } else if (type.equals("int")) { out.println(" dataOut.writeInt(" + getter + ");"); } else if (type.equals("long")) { out.println(" looseMarshalLong(wireFormat, " + getter + ", dataOut);"); } else if (type.equals("String")) { out.println(" looseMarshalString(" + getter + ", dataOut);"); } else if (type.equals("byte[]")) { if (size != null) { out.println(" looseMarshalConstByteArray(wireFormat, " + getter + ", dataOut, " + size.asInt() + ");"); } else { out.println(" looseMarshalByteArray(wireFormat, " + getter + ", dataOut);"); } } else if (type.equals("ByteSequence")) { out.println(" looseMarshalByteSequence(wireFormat, " + getter + ", dataOut);"); } else if (propertyType.isArrayType()) { if (size != null) { out.println(" looseMarshalObjectArrayConstSize(wireFormat, " + getter + ", dataOut, " + size.asInt() + ");"); } else { out.println(" looseMarshalObjectArray(wireFormat, " + getter + ", dataOut);"); } } else if (isThrowable(propertyType)) { out.println(" looseMarshalThrowable(wireFormat, " + getter + ", dataOut);"); } else { if (isCachedProperty(property)) { out.println(" looseMarshalCachedObject(wireFormat, (DataStructure)" + getter + ", dataOut);"); } else { out.println(" looseMarshalNestedObject(wireFormat, (DataStructure)" + getter + ", dataOut);"); } } } } protected void generateLooseUnmarshalBody(PrintWriter out) { List properties = getProperties(); for (Iterator iter = properties.iterator(); iter.hasNext();) { JProperty property = (JProperty)iter.next(); JAnnotation annotation = property.getAnnotation("openwire:property"); JAnnotationValue size = annotation.getValue("size"); JClass propertyType = property.getType(); String propertyTypeName = propertyType.getSimpleName(); if (propertyType.isArrayType() && !propertyTypeName.equals("byte[]")) { generateLooseUnmarshalBodyForArrayProperty(out, property, size); } else { generateLooseUnmarshalBodyForProperty(out, property, size); } } } protected void generateLooseUnmarshalBodyForProperty(PrintWriter out, JProperty property, JAnnotationValue size) { String setter = property.getSetter().getSimpleName(); String type = property.getType().getSimpleName(); if (type.equals("boolean")) { out.println(" info." + setter + "(dataIn.readBoolean());"); } else if (type.equals("byte")) { out.println(" info." + setter + "(dataIn.readByte());"); } else if (type.equals("char")) { out.println(" info." + setter + "(dataIn.readChar());"); } else if (type.equals("short")) { out.println(" info." + setter + "(dataIn.readShort());"); } else if (type.equals("int")) { out.println(" info." + setter + "(dataIn.readInt());"); } else if (type.equals("long")) { out.println(" info." + setter + "(looseUnmarshalLong(wireFormat, dataIn));"); } else if (type.equals("String")) { out.println(" info." + setter + "(looseUnmarshalString(dataIn));"); } else if (type.equals("byte[]")) { if (size != null) { out.println(" info." + setter + "(looseUnmarshalConstByteArray(dataIn, " + size.asInt() + "));"); } else { out.println(" info." + setter + "(looseUnmarshalByteArray(dataIn));"); } } else if (type.equals("ByteSequence")) { out.println(" info." + setter + "(looseUnmarshalByteSequence(dataIn));"); } else if (isThrowable(property.getType())) { out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") looseUnmarsalThrowable(wireFormat, dataIn));"); } else if (isCachedProperty(property)) { out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") looseUnmarsalCachedObject(wireFormat, dataIn));"); } else { out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") looseUnmarsalNestedObject(wireFormat, dataIn));"); } } protected void generateLooseUnmarshalBodyForArrayProperty(PrintWriter out, JProperty property, JAnnotationValue size) { JClass propertyType = property.getType(); String arrayType = propertyType.getArrayComponentType().getQualifiedName(); String setter = property.getSetter().getSimpleName(); out.println(); if (size != null) { out.println(" {"); out.println(" " + arrayType + " value[] = new " + arrayType + "[" + size.asInt() + "];"); out.println(" " + "for( int i=0; i < " + size.asInt() + "; i++ ) {"); out.println(" value[i] = (" + arrayType + ") looseUnmarsalNestedObject(wireFormat,dataIn);"); out.println(" }"); out.println(" info." + setter + "(value);"); out.println(" }"); } else { out.println(" if (dataIn.readBoolean()) {"); out.println(" short size = dataIn.readShort();"); out.println(" " + arrayType + " value[] = new " + arrayType + "[size];"); out.println(" for( int i=0; i < size; i++ ) {"); out.println(" value[i] = (" + arrayType + ") looseUnmarsalNestedObject(wireFormat,dataIn);"); out.println(" }"); out.println(" info." + setter + "(value);"); out.println(" }"); out.println(" else {"); out.println(" info." + setter + "(null);"); out.println(" }"); } } /** * Returns whether or not the given annotation has a mandatory flag on it or * not */ protected String getMandatoryFlag(JAnnotation annotation) { JAnnotationValue value = annotation.getValue("mandatory"); if (value != null) { String text = value.asString(); if (text != null && text.equalsIgnoreCase("true")) { return "true"; } } return "false"; } public List<JClass> getConcreteClasses() { return concreteClasses; } public void setConcreteClasses(List<JClass> concreteClasses) { this.concreteClasses = concreteClasses; } public File getFactoryFile() { return factoryFile; } public void setFactoryFile(File factoryFile) { this.factoryFile = factoryFile; } public String getFactoryFileName() { return factoryFileName; } public void setFactoryFileName(String factoryFileName) { this.factoryFileName = factoryFileName; } public String getIndent() { return indent; } public void setIndent(String indent) { this.indent = indent; } public String getTargetDir() { return targetDir; } public void setTargetDir(String sourceDir) { this.targetDir = sourceDir; } }