p("public String toString() {"); indent(); p("return toString(new java.lang.StringBuilder(), \"\").toString();"); unindent(); p("}"); p(); p("public java.lang.StringBuilder toString(java.lang.StringBuilder sb, String prefix) {"); indent(); p("load();"); p("if( has" + uname + "() ) {"); indent(); if( field.isRepeated() ) { String type = javaCollectionType(field); p("java.util.List<"+type+"> l = get" + uname + "List();"); p("for( int i=0; i < l.size(); i++ ) {"); indent(); if( field.getTypeDescriptor()!=null && !field.getTypeDescriptor().isEnum()) { p("sb.append(prefix+\""+field.getName()+"[\"+i+\"] {\\n\");"); p("l.get(i).toString(sb, prefix+\" \");"); p("sb.append(prefix+\"}\\n\");"); } else { p("sb.append(prefix+\""+field.getName()+"[\"+i+\"]: \");"); p("sb.append(l.get(i));"); p("sb.append(\"\\n\");"); p("}");
p("public String toString() {"); indent(); p("return toString(new java.lang.StringBuilder(), \"\").toString();"); unindent(); p("}"); p(); p("public java.lang.StringBuilder toString(java.lang.StringBuilder sb, String prefix) {"); indent(); p("load();"); p("if( has" + uname + "() ) {"); indent(); if( field.isRepeated() ) { String type = javaCollectionType(field); p("java.util.List<"+type+"> l = get" + uname + "List();"); p("for( int i=0; i < l.size(); i++ ) {"); indent(); if( field.getTypeDescriptor()!=null && !field.getTypeDescriptor().isEnum()) { p("sb.append(prefix+\""+field.getName()+"[\"+i+\"] {\\n\");"); p("l.get(i).toString(sb, prefix+\" \");"); p("sb.append(prefix+\"}\\n\");"); } else { p("sb.append(prefix+\""+field.getName()+"[\"+i+\"]: \");"); p("sb.append(l.get(i));"); p("sb.append(\"\\n\");"); p("}");
p("public "+className+" mergeFrom("+className+" other) {"); indent(); for (FieldDescriptor field : m.getFields().values()) { String uname = uCamel(field.getName()); p("if (other.has"+uname+"()) {"); indent(); p("get"+uname+"List().addAll(other.get"+uname+"List());"); } else { p("set"+uname+"(other.get"+uname+"());"); p("for("+type+" element: other.get"+uname+"List() ) {"); indent(); p("get"+uname+"List().add(element.clone());"); unindent(); p("}"); } else { p("if (has"+uname+"()) {"); indent(); p("get"+uname+"().mergeFrom(other.get"+uname+"());"); unindent(); p("} else {"); indent(); p("set"+uname+"(other.get"+uname+"().clone());"); unindent(); p("}"); p("}");
p("public "+className+" mergeFrom("+className+" other) {"); indent(); for (FieldDescriptor field : m.getFields().values()) { String uname = uCamel(field.getName()); p("if (other.has"+uname+"()) {"); indent(); p("get"+uname+"List().addAll(other.get"+uname+"List());"); } else { p("set"+uname+"(other.get"+uname+"());"); p("for("+type+" element: other.get"+uname+"List() ) {"); indent(); p("get"+uname+"List().add(element.clone());"); unindent(); p("}"); } else { p("if (has"+uname+"()) {"); indent(); p("get"+uname+"().mergeFrom(other.get"+uname+"());"); unindent(); p("} else {"); indent(); p("set"+uname+"(other.get"+uname+"().clone());"); unindent(); p("}"); p("}");
p("public "+className+" mergeFrom("+className+" other) {"); indent(); for (FieldDescriptor field : m.getFields().values()) { String uname = uCamel(field.getName()); p("if (other.has"+uname+"()) {"); indent(); p("get"+uname+"List().addAll(other.get"+uname+"List());"); } else { p("set"+uname+"(other.get"+uname+"());"); p("for("+type+" element: other.get"+uname+"List() ) {"); indent(); p("get"+uname+"List().add(element.clone());"); unindent(); p("}"); } else { p("if (has"+uname+"()) {"); indent(); p("get"+uname+"().mergeFrom(other.get"+uname+"());"); unindent(); p("} else {"); indent(); p("set"+uname+"(other.get"+uname+"().clone());"); unindent(); p("}"); p("}");
p("public java.util.ArrayList<String> missingFields() {"); indent(); p("java.util.ArrayList<String> missingFields = super.missingFields();"); p("if( !has" + uname + "() ) {"); indent(); p("missingFields.add(\""+field.getName()+"\");"); unindent(); p("}"); if( field.getTypeDescriptor()!=null && !field.getTypeDescriptor().isEnum()) { String uname = uCamel(field.getName()); p("if( has" + uname + "() ) {"); indent(); if( !field.isRepeated() ) { p("try {"); indent(); p("get" + uname + "().assertInitialized();"); unindent(); p("} catch (org.apache.activemq.protobuf.UninitializedMessageException e){"); indent(); p("missingFields.addAll(prefix(e.getMissingFields(),\""+field.getName()+".\"));"); unindent(); p("}"); } else { String type = javaCollectionType(field); p("java.util.List<"+type+"> l = get" + uname + "List();"); p("for( int i=0; i < l.size(); i++ ) {"); indent();