in activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/AltJavaGenerator.java [239:474]
private void generateMessageBean(MessageDescriptor m) {
String className = uCamel(m.getName());
String beanClassName = className+"Bean";
String bufferClassName = className+"Buffer";
p();
String staticOption = "static ";
if( multipleFiles && m.getParent()==null ) {
staticOption="";
}
String extendsClause = " extends org.apache.activemq.protobuf.PBMessage<"+className+"."+beanClassName+", "+className+"."+bufferClassName+">";
for (EnumFieldDescriptor enumFeild : m.getAssociatedEnumFieldDescriptors()) {
String name = uCamel(enumFeild.getParent().getName());
name = name+"."+name+"Creatable";
extendsClause += ", "+name;
}
p(staticOption+"public interface " + className + extendsClause +" {");
p();
indent();
for (EnumDescriptor enumType : m.getEnums().values()) {
generateEnum(enumType);
}
// Generate the Nested Messages.
for (MessageDescriptor subMessage : m.getMessages().values()) {
generateMessageBean(subMessage);
}
// Generate the Group Messages
for (FieldDescriptor field : m.getFields().values()) {
if( field.isGroup() ) {
generateMessageBean(field.getGroup());
}
}
// Generate the field getters
for (FieldDescriptor field : m.getFields().values()) {
generateFieldGetterSignatures(field);
}
p("public "+beanClassName+" copy();");
p("public "+bufferClassName+" freeze();");
p("public java.lang.StringBuilder toString(java.lang.StringBuilder sb, String prefix);");
p();
p("static public final class "+beanClassName+" implements "+className+" {");
p();
indent();
p(""+bufferClassName+" frozen;");
p(""+beanClassName+" bean;");
p();
p("public "+beanClassName+"() {");
indent();
p("this.bean = this;");
unindent();
p("}");
p();
p("public "+beanClassName+"("+beanClassName+" copy) {");
indent();
p("this.bean = copy;");
unindent();
p("}");
p();
p("public "+beanClassName+" copy() {");
indent();
p("return new "+beanClassName+"(bean);");
unindent();
p("}");
p();
generateMethodFreeze(m, bufferClassName);
p("private void copyCheck() {");
indent();
p("assert frozen==null : org.apache.activemq.protobuf.MessageBufferSupport.FORZEN_ERROR_MESSAGE;");
p("if (bean != this) {");
indent();
p("copy(bean);");
unindent();
p("}");
unindent();
p("}");
p();
generateMethodCopyFromBean(m, beanClassName);
// Generate the field accessors..
for (FieldDescriptor field : m.getFields().values()) {
generateFieldAccessor(beanClassName, field);
}
generateMethodToString(m);
generateMethodMergeFromStream(m, beanClassName);
generateBeanEquals(m, beanClassName);
generateMethodMergeFromBean(m, className);
generateMethodClear(m);
generateReadWriteExternal(m);
for (EnumFieldDescriptor enumFeild : m.getAssociatedEnumFieldDescriptors()) {
String enumName = uCamel(enumFeild.getParent().getName());
p("public "+enumName+" to"+enumName+"() {");
indent();
p("return "+enumName+"."+enumFeild.getName()+";");
unindent();
p("}");
p();
}
unindent();
p("}");
p();
p("static public final class "+bufferClassName+" implements org.apache.activemq.protobuf.MessageBuffer<"+className+"."+beanClassName+", "+className+"."+bufferClassName+">, "+className+" {");
p();
indent();
p("private "+beanClassName+" bean;");
p("private org.apache.activemq.protobuf.Buffer buffer;");
p("private int size=-1;");
p("private int hashCode;");
p();
p("private "+bufferClassName+"(org.apache.activemq.protobuf.Buffer buffer) {");
indent();
p("this.buffer = buffer;");
unindent();
p("}");
p();
p("private "+bufferClassName+"("+beanClassName+" bean) {");
indent();
p("this.bean = bean;");
unindent();
p("}");
p();
p("public "+beanClassName+" copy() {");
indent();
p("return bean().copy();");
unindent();
p("}");
p();
p("public "+bufferClassName+" freeze() {");
indent();
p("return this;");
unindent();
p("}");
p();
p("private "+beanClassName+" bean() {");
indent();
p("if (bean == null) {");
indent();
p("try {");
indent();
p("bean = new "+beanClassName+"().mergeUnframed(new org.apache.activemq.protobuf.CodedInputStream(buffer));");
p("bean.frozen=this;");
unindent();
p("} catch (org.apache.activemq.protobuf.InvalidProtocolBufferException e) {");
indent();
p("throw new RuntimeException(e);");
unindent();
p("} catch (java.io.IOException e) {");
indent();
p("throw new RuntimeException(\"An IOException was thrown (should never happen in this method).\", e);");
unindent();
p("}");
unindent();
p("}");
p("return bean;");
unindent();
p("}");
p();
p("public String toString() {");
indent();
p("return bean().toString();");
unindent();
p("}");
p();
p("public java.lang.StringBuilder toString(java.lang.StringBuilder sb, String prefix) {");
indent();
p("return bean().toString(sb, prefix);");
unindent();
p("}");
p();
for (FieldDescriptor field : m.getFields().values()) {
generateBufferGetters(field);
}
generateMethodWrite(m);
generateMethodSerializedSize(m);
generateMethodParseFrom(m, bufferClassName, beanClassName);
generateBufferEquals(m, bufferClassName);
p("public boolean frozen() {");
indent();
p("return true;");
unindent();
p("}");
for (EnumFieldDescriptor enumFeild : m.getAssociatedEnumFieldDescriptors()) {
String enumName = uCamel(enumFeild.getParent().getName());
p("public "+enumName+" to"+enumName+"() {");
indent();
p("return "+enumName+"."+enumFeild.getName()+";");
unindent();
p("}");
p();
}
unindent();
p("}");
p();
// generateMethodVisitor(m);
// generateMethodType(m, className);
unindent();
p("}");
p();
}