private void generateMessageBean()

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();

    }