in activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/AltJavaGenerator.java [1341:1582]
private void generateReadWriteExternal(MessageDescriptor m) {
p("public void readExternal(java.io.DataInput in) throws java.io.IOException {");
indent();
p("assert frozen==null : org.apache.activemq.protobuf.MessageBufferSupport.FORZEN_ERROR_MESSAGE;");
p("bean = this;");
p("frozen = null;");
for (FieldDescriptor field : m.getFields().values()) {
String lname = lCamel(field.getName());
String type = javaType(field);
boolean repeated = field.getRule()==FieldDescriptor.REPEATED_RULE;
// Create the fields..
if( repeated ) {
p("{");
indent();
p("int size = in.readShort();");
p("if( size>=0 ) {");
indent();
p("f_"+lname+" = new java.util.ArrayList<" + javaCollectionType(field) + ">(size);");
p("for(int i=0; i<size; i++) {");
indent();
if( field.isInteger32Type() ) {
p("f_"+lname+".add(in.readInt());");
} else if( field.isInteger64Type() ) {
p("f_"+lname+".add(in.readLong());");
} else if( field.getType() == FieldDescriptor.DOUBLE_TYPE ) {
p("f_"+lname+".add(in.readDouble());");
} else if( field.getType() == FieldDescriptor.FLOAT_TYPE ) {
p("f_"+lname+".add(in.readFloat());");
} else if( field.getType() == FieldDescriptor.BOOL_TYPE ) {
p("f_"+lname+".add(in.readBoolean());");
} else if( field.getType() == FieldDescriptor.STRING_TYPE ) {
p("f_"+lname+".add(in.readUTF());");
} else if( field.getType() == FieldDescriptor.BYTES_TYPE ) {
p("byte b[] = new byte[in.readInt()];");
p("in.readFully(b);");
p("f_"+lname+".add(new "+type+"(b));");
} else if (field.getTypeDescriptor().isEnum() ) {
p("f_"+lname+".add(" + type + ".valueOf(in.readShort()));");
} else {
p(""+javaRelatedType(type, "Bean")+" o = new "+javaRelatedType(type, "Bean")+"();");
p("o.readExternal(in);");
p("f_"+lname+".add(o);");
}
unindent();
p("}");
unindent();
p("} else {");
indent();
p("f_"+lname+" = null;");
unindent();
p("}");
unindent();
p("}");
} else {
if( field.isInteger32Type() ) {
p("f_"+lname+" = in.readInt();");
p("b_"+lname+" = true;");
} else if( field.isInteger64Type() ) {
p("f_"+lname+" = in.readLong();");
p("b_"+lname+" = true;");
} else if( field.getType() == FieldDescriptor.DOUBLE_TYPE ) {
p("f_"+lname+" = in.readDouble();");
p("b_"+lname+" = true;");
} else if( field.getType() == FieldDescriptor.FLOAT_TYPE ) {
p("f_"+lname+" = in.readFloat();");
p("b_"+lname+" = true;");
} else if( field.getType() == FieldDescriptor.BOOL_TYPE ) {
p("f_"+lname+" = in.readBoolean();");
p("b_"+lname+" = true;");
} else if( field.getType() == FieldDescriptor.STRING_TYPE ) {
p("if( in.readBoolean() ) {");
indent();
p("f_"+lname+" = in.readUTF();");
p("b_"+lname+" = true;");
unindent();
p("} else {");
indent();
p("f_"+lname+" = null;");
p("b_"+lname+" = false;");
unindent();
p("}");
} else if( field.getType() == FieldDescriptor.BYTES_TYPE ) {
p("{");
indent();
p("int size = in.readInt();");
p("if( size>=0 ) {");
indent();
p("byte b[] = new byte[size];");
p("in.readFully(b);");
p("f_"+lname+" = new "+type+"(b);");
p("b_"+lname+" = true;");
unindent();
p("} else {");
indent();
p("f_"+lname+" = null;");
p("b_"+lname+" = false;");
unindent();
p("}");
unindent();
p("}");
} else if (field.getTypeDescriptor().isEnum() ) {
p("if( in.readBoolean() ) {");
indent();
p("f_"+lname+" = " + type + ".valueOf(in.readShort());");
p("b_"+lname+" = true;");
unindent();
p("} else {");
indent();
p("f_"+lname+" = null;");
p("b_"+lname+" = false;");
unindent();
p("}");
} else {
p("if( in.readBoolean() ) {");
indent();
p(""+javaRelatedType(type, "Bean")+" o = new "+javaRelatedType(type, "Bean")+"();");
p("o.readExternal(in);");
p("f_"+lname+" = o;");
unindent();
p("} else {");
indent();
p("f_"+lname+" = null;");
unindent();
p("}");
}
}
}
unindent();
p("}");
p();
p("public void writeExternal(java.io.DataOutput out) throws java.io.IOException {");
indent();
for (FieldDescriptor field : m.getFields().values()) {
String lname = lCamel(field.getName());
boolean repeated = field.getRule()==FieldDescriptor.REPEATED_RULE;
// Create the fields..
if( repeated ) {
p("if( bean.f_"+lname+"!=null ) {");
indent();
p("out.writeShort(bean.f_"+lname+".size());");
p("for(" + javaCollectionType(field) + " o : bean.f_"+lname+") {");
indent();
if( field.isInteger32Type() ) {
p("out.writeInt(o);");
} else if( field.isInteger64Type() ) {
p("out.writeLong(o);");
} else if( field.getType() == FieldDescriptor.DOUBLE_TYPE ) {
p("out.writeDouble(o);");
} else if( field.getType() == FieldDescriptor.FLOAT_TYPE ) {
p("out.writeFloat(o);");
} else if( field.getType() == FieldDescriptor.BOOL_TYPE ) {
p("out.writeBoolean(o);");
} else if( field.getType() == FieldDescriptor.STRING_TYPE ) {
p("out.writeUTF(o);");
} else if( field.getType() == FieldDescriptor.BYTES_TYPE ) {
p("out.writeInt(o.getLength());");
p("out.write(o.getData(), o.getOffset(), o.getLength());");
} else if (field.getTypeDescriptor().isEnum() ) {
p("out.writeShort(o.getNumber());");
} else {
p("o.copy().writeExternal(out);");
}
unindent();
p("}");
unindent();
p("} else {");
indent();
p("out.writeShort(-1);");
unindent();
p("}");
} else {
if( field.isInteger32Type() ) {
p("out.writeInt(bean.f_"+lname+");");
} else if( field.isInteger64Type() ) {
p("out.writeLong(bean.f_"+lname+");");
} else if( field.getType() == FieldDescriptor.DOUBLE_TYPE ) {
p("out.writeDouble(bean.f_"+lname+");");
} else if( field.getType() == FieldDescriptor.FLOAT_TYPE ) {
p("out.writeFloat(bean.f_"+lname+");");
} else if( field.getType() == FieldDescriptor.BOOL_TYPE ) {
p("out.writeBoolean(bean.f_"+lname+");");
} else if( field.getType() == FieldDescriptor.STRING_TYPE ) {
p("if( bean.f_"+lname+"!=null ) {");
indent();
p("out.writeBoolean(true);");
p("out.writeUTF(bean.f_"+lname+");");
unindent();
p("} else {");
indent();
p("out.writeBoolean(false);");
unindent();
p("}");
} else if( field.getType() == FieldDescriptor.BYTES_TYPE ) {
p("if( bean.f_"+lname+"!=null ) {");
indent();
p("out.writeInt(bean.f_"+lname+".getLength());");
p("out.write(bean.f_"+lname+".getData(), bean.f_"+lname+".getOffset(), bean.f_"+lname+".getLength());");
unindent();
p("} else {");
indent();
p("out.writeInt(-1);");
unindent();
p("}");
} else if (field.getTypeDescriptor().isEnum() ) {
p("if( bean.f_"+lname+"!=null ) {");
indent();
p("out.writeBoolean(true);");
p("out.writeShort(bean.f_"+lname+".getNumber());");
unindent();
p("} else {");
indent();
p("out.writeBoolean(false);");
unindent();
p("}");
} else {
p("if( bean.f_"+lname+"!=null ) {");
indent();
p("out.writeBoolean(true);");
p("bean.f_"+lname+".copy().writeExternal(out);");
unindent();
p("} else {");
indent();
p("out.writeBoolean(false);");
unindent();
p("}");
}
}
}
unindent();
p("}");
p();
}