package com.robotoworks.mechanoid.net.generator; import com.google.common.base.Objects; import com.google.inject.Inject; import com.robotoworks.mechanoid.net.generator.ImportHelper; import com.robotoworks.mechanoid.net.generator.JsonReaderStatementGenerator; import com.robotoworks.mechanoid.net.generator.ModelExtensions; import com.robotoworks.mechanoid.net.netModel.BlockType; import com.robotoworks.mechanoid.net.netModel.Client; import com.robotoworks.mechanoid.net.netModel.ComplexTypeDeclaration; import com.robotoworks.mechanoid.net.netModel.ComplexTypeLiteral; import com.robotoworks.mechanoid.net.netModel.EnumTypeDeclaration; import com.robotoworks.mechanoid.net.netModel.GenericListType; import com.robotoworks.mechanoid.net.netModel.HttpMethod; import com.robotoworks.mechanoid.net.netModel.IntrinsicType; import com.robotoworks.mechanoid.net.netModel.Member; import com.robotoworks.mechanoid.net.netModel.Model; import com.robotoworks.mechanoid.net.netModel.ResponseBlock; import com.robotoworks.mechanoid.net.netModel.SkipMember; import com.robotoworks.mechanoid.net.netModel.Type; import com.robotoworks.mechanoid.net.netModel.TypedMember; import com.robotoworks.mechanoid.net.netModel.UserType; import com.robotoworks.mechanoid.net.netModel.UserTypeDeclaration; import com.robotoworks.mechanoid.text.Strings; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; @SuppressWarnings("all") public class ResultGenerator { @Inject private ImportHelper imports; @Inject private JsonReaderStatementGenerator jsonReaderGenerator; public CharSequence generate(final HttpMethod method, final Model model, final Client client) { CharSequence _xblockexpression = null; { this.jsonReaderGenerator.setImports(this.imports); this.jsonReaderGenerator.setReaderIdentifier("reader"); this.jsonReaderGenerator.setSubjectIdentifier("subject"); _xblockexpression = this.doGenerate(method, model, client); } return _xblockexpression; } public CharSequence doGenerate(final HttpMethod method, final Model model, final Client client) { StringConcatenation _builder = new StringConcatenation(); _builder.append("package "); String _packageName = model.getPackageName(); _builder.append(_packageName, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.newLine(); CharSequence classDecl = this.generateResponseClass(method, model, client); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append("import com.robotoworks.mechanoid.net.JsonEntityReaderProvider;"); _builder.newLine(); _builder.append("import java.io.IOException;"); _builder.newLine(); _builder.append("import com.robotoworks.mechanoid.net.ServiceResult;"); _builder.newLine(); _builder.append("import java.io.InputStream;"); _builder.newLine(); _builder.append("import com.robotoworks.mechanoid.util.Closeables;"); _builder.newLine(); StringConcatenation _printAndClear = this.imports.printAndClear(); _builder.append(_printAndClear, ""); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append(classDecl, ""); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateFieldForType(final ComplexTypeLiteral type) { StringConcatenation _builder = new StringConcatenation(); { EList<Member> _members = type.getMembers(); for(final Member member : _members) { CharSequence _generateFieldForMember = this.generateFieldForMember(member); _builder.append(_generateFieldForMember, ""); _builder.newLineIfNotEmpty(); } } return _builder; } public CharSequence generateFieldsForMemberList(final EList<Member> members) { StringConcatenation _builder = new StringConcatenation(); { for(final Member member : members) { CharSequence _generateFieldForMember = this.generateFieldForMember(member); _builder.append(_generateFieldForMember, ""); _builder.newLineIfNotEmpty(); } } return _builder; } protected CharSequence _generateFieldForType(final IntrinsicType type) { StringConcatenation _builder = new StringConcatenation(); _builder.append("private "); String _signature = ModelExtensions.signature(type); _builder.append(_signature, ""); _builder.append(" value;\t"); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateFieldForType(final GenericListType type) { StringConcatenation _builder = new StringConcatenation(); { Type _elementType = type.getElementType(); if ((_elementType instanceof IntrinsicType)) { _builder.append("private "); String _signature = ModelExtensions.signature(type); _builder.append(_signature, ""); _builder.append(" values;"); _builder.newLineIfNotEmpty(); } else { _builder.append("private "); String _signature_1 = ModelExtensions.signature(type); _builder.append(_signature_1, ""); _builder.append(" "); String _innerSignature = ModelExtensions.innerSignature(type); String _camelize = Strings.camelize(_innerSignature); String _pluralize = Strings.pluralize(_camelize); _builder.append(_pluralize, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); } } return _builder; } protected CharSequence _generateFieldForType(final UserType type) { StringConcatenation _builder = new StringConcatenation(); _builder.append("private "); String _signature = ModelExtensions.signature(type); _builder.append(_signature, ""); _builder.append(" "); String _signature_1 = ModelExtensions.signature(type); String _camelize = Strings.camelize(_signature_1); String _escapeReserved = ModelExtensions.escapeReserved(_camelize); _builder.append(_escapeReserved, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateFieldForMember(final TypedMember member) { StringConcatenation _builder = new StringConcatenation(); _builder.append("private "); Type _type = member.getType(); String _signature = ModelExtensions.signature(_type); _builder.append(_signature, ""); _builder.append(" "); String _identifier = ModelExtensions.toIdentifier(member); _builder.append(_identifier, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateFieldForMember(final SkipMember member) { StringConcatenation _builder = new StringConcatenation(); ComplexTypeLiteral _literal = member.getLiteral(); Object _generateFieldForType = this.generateFieldForType(_literal); _builder.append(_generateFieldForType, ""); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateGetterForType(final ComplexTypeLiteral type) { StringConcatenation _builder = new StringConcatenation(); EList<Member> _members = type.getMembers(); CharSequence _generateGettersForMemberList = this.generateGettersForMemberList(_members); _builder.append(_generateGettersForMemberList, ""); _builder.newLineIfNotEmpty(); return _builder; } public CharSequence generateGettersForMemberList(final EList<Member> members) { StringConcatenation _builder = new StringConcatenation(); { for(final Member member : members) { CharSequence _generateGetter = this.generateGetter(member); _builder.append(_generateGetter, ""); _builder.newLineIfNotEmpty(); } } return _builder; } protected CharSequence _generateGetterForType(final IntrinsicType type) { StringConcatenation _builder = new StringConcatenation(); _builder.append("public "); String _signature = ModelExtensions.signature(type); _builder.append(_signature, ""); _builder.append(" getValue(){"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return this.value;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); return _builder; } protected CharSequence _generateGetterForType(final GenericListType type) { StringConcatenation _builder = new StringConcatenation(); { Type _elementType = type.getElementType(); if ((_elementType instanceof IntrinsicType)) { _builder.append("public "); String _signature = ModelExtensions.signature(type); _builder.append(_signature, ""); _builder.append(" getValues(){"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return this.values;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); } else { _builder.append("public "); String _signature_1 = ModelExtensions.signature(type); _builder.append(_signature_1, ""); _builder.append(" get"); String _innerSignature = ModelExtensions.innerSignature(type); String _pascalize = Strings.pascalize(_innerSignature); String _pluralize = Strings.pluralize(_pascalize); _builder.append(_pluralize, ""); _builder.append("(){"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return this."); String _innerSignature_1 = ModelExtensions.innerSignature(type); String _camelize = Strings.camelize(_innerSignature_1); String _pluralize_1 = Strings.pluralize(_camelize); _builder.append(_pluralize_1, "\t"); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.append("}"); _builder.newLine(); } } return _builder; } protected CharSequence _generateGetterForType(final UserType type) { StringConcatenation _builder = new StringConcatenation(); _builder.append("public "); String _signature = ModelExtensions.signature(type); _builder.append(_signature, ""); _builder.append(" get"); String _signature_1 = ModelExtensions.signature(type); String _pascalize = Strings.pascalize(_signature_1); _builder.append(_pascalize, ""); _builder.append("(){"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return this."); String _signature_2 = ModelExtensions.signature(type); String _camelize = Strings.camelize(_signature_2); String _escapeReserved = ModelExtensions.escapeReserved(_camelize); _builder.append(_escapeReserved, "\t"); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.append("}"); _builder.newLine(); return _builder; } protected CharSequence _generateGetter(final TypedMember member) { StringConcatenation _builder = new StringConcatenation(); _builder.append("public "); Type _type = member.getType(); String _signature = ModelExtensions.signature(_type); _builder.append(_signature, ""); _builder.append(" "); String _getMethodName = ModelExtensions.toGetMethodName(member); _builder.append(_getMethodName, ""); _builder.append("(){"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return this."); String _identifier = ModelExtensions.toIdentifier(member); _builder.append(_identifier, "\t"); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.append("}"); _builder.newLine(); _builder.append("public void "); String _setMethodName = ModelExtensions.toSetMethodName(member); _builder.append(_setMethodName, ""); _builder.append("("); Type _type_1 = member.getType(); String _signature_1 = ModelExtensions.signature(_type_1); _builder.append(_signature_1, ""); _builder.append(" value){"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("this."); String _identifier_1 = ModelExtensions.toIdentifier(member); _builder.append(_identifier_1, "\t"); _builder.append(" = value;"); _builder.newLineIfNotEmpty(); _builder.append("}"); _builder.newLine(); return _builder; } protected CharSequence _generateGetter(final SkipMember member) { StringConcatenation _builder = new StringConcatenation(); ComplexTypeLiteral _literal = member.getLiteral(); Object _generateGetterForType = this.generateGetterForType(_literal); _builder.append(_generateGetterForType, ""); _builder.newLineIfNotEmpty(); return _builder; } public CharSequence generateBaseAccessors(final Iterable<Member> members) { StringConcatenation _builder = new StringConcatenation(); { for(final Member member : members) { CharSequence _generateBaseAccessor = this.generateBaseAccessor(member); _builder.append(_generateBaseAccessor, ""); _builder.newLineIfNotEmpty(); } } return _builder; } protected CharSequence _generateBaseAccessor(final SkipMember member) { StringConcatenation _builder = new StringConcatenation(); ComplexTypeLiteral _literal = member.getLiteral(); EList<Member> _members = _literal.getMembers(); Object _generateBaseAccessors = this.generateBaseAccessors(_members); _builder.append(_generateBaseAccessors, ""); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateBaseAccessor(final TypedMember member) { StringConcatenation _builder = new StringConcatenation(); { Type _type = member.getType(); if ((_type instanceof GenericListType)) { this.imports.addImport("java.util.List"); } } _builder.newLineIfNotEmpty(); _builder.append("public "); Type _type_1 = member.getType(); String _signature = ModelExtensions.signature(_type_1); _builder.append(_signature, ""); _builder.append(" "); String _getMethodName = ModelExtensions.toGetMethodName(member); _builder.append(_getMethodName, ""); _builder.append("(){"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return base."); String _getMethodName_1 = ModelExtensions.toGetMethodName(member); _builder.append(_getMethodName_1, "\t"); _builder.append("();"); _builder.newLineIfNotEmpty(); _builder.append("}"); _builder.newLine(); _builder.append("public void "); String _setMethodName = ModelExtensions.toSetMethodName(member); _builder.append(_setMethodName, ""); _builder.append("("); Type _type_2 = member.getType(); String _signature_1 = ModelExtensions.signature(_type_2); _builder.append(_signature_1, ""); _builder.append(" value){"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("base."); String _setMethodName_1 = ModelExtensions.toSetMethodName(member); _builder.append(_setMethodName_1, "\t"); _builder.append("(value);"); _builder.newLineIfNotEmpty(); _builder.append("}"); _builder.newLine(); return _builder; } public CharSequence generateResponseClass(final HttpMethod method, final Model module, final Client client) { StringConcatenation _builder = new StringConcatenation(); final ResponseBlock responseBlock = ModelExtensions.getResponseBlock(method); _builder.newLineIfNotEmpty(); _builder.append("public class "); String _name = method.getName(); String _pascalize = Strings.pascalize(_name); _builder.append(_pascalize, ""); _builder.append("Result extends ServiceResult {"); _builder.newLineIfNotEmpty(); { BlockType _type = null; if (responseBlock!=null) { _type=responseBlock.getType(); } boolean _notEquals = (!Objects.equal(_type, null)); if (_notEquals) { _builder.append("\t"); BlockType _type_1 = responseBlock.getType(); CharSequence _generateFieldForType = this.generateFieldForType(_type_1); _builder.append(_generateFieldForType, "\t"); _builder.append("\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); BlockType _type_2 = responseBlock.getType(); CharSequence _generateGetterForType = this.generateGetterForType(_type_2); _builder.append(_generateGetterForType, "\t"); _builder.append("\t"); _builder.newLineIfNotEmpty(); } } { ComplexTypeDeclaration _superType = null; if (responseBlock!=null) { _superType=responseBlock.getSuperType(); } boolean _notEquals_1 = (!Objects.equal(_superType, null)); if (_notEquals_1) { _builder.append("\t"); _builder.append("private "); ComplexTypeDeclaration _superType_1 = responseBlock.getSuperType(); String _name_1 = _superType_1.getName(); String _pascalize_1 = Strings.pascalize(_name_1); _builder.append(_pascalize_1, "\t"); _builder.append(" base;"); _builder.newLineIfNotEmpty(); _builder.append("\t"); ComplexTypeDeclaration _superType_2 = responseBlock.getSuperType(); ComplexTypeLiteral _literal = _superType_2.getLiteral(); EList<Member> _members = _literal.getMembers(); final Function1<Member, Boolean> _function = new Function1<Member, Boolean>() { public Boolean apply(final Member superMember) { BlockType _type = null; if (responseBlock!=null) { _type=responseBlock.getType(); } if ((_type instanceof ComplexTypeLiteral)) { BlockType _type_1 = responseBlock.getType(); EList<Member> _members = ((ComplexTypeLiteral) _type_1).getMembers(); final Function1<Member, Boolean> _function = new Function1<Member, Boolean>() { public Boolean apply(final Member member) { String _name = superMember.getName(); String _name_1 = member.getName(); return Boolean.valueOf(_name.equals(_name_1)); } }; Member _findFirst = IterableExtensions.<Member>findFirst(_members, _function); return Boolean.valueOf(Objects.equal(_findFirst, null)); } return Boolean.valueOf(true); } }; Iterable<Member> _filter = IterableExtensions.<Member>filter(_members, _function); CharSequence _generateBaseAccessors = this.generateBaseAccessors(_filter); _builder.append(_generateBaseAccessors, "\t"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("public "); String _name_2 = method.getName(); String _pascalize_2 = Strings.pascalize(_name_2); _builder.append(_pascalize_2, "\t"); _builder.append("Result(JsonEntityReaderProvider provider, InputStream inStream) throws IOException {"); _builder.newLineIfNotEmpty(); { boolean _notEquals_2 = (!Objects.equal(responseBlock, null)); if (_notEquals_2) { { boolean _or = false; BlockType _type_3 = responseBlock.getType(); if ((_type_3 instanceof ComplexTypeLiteral)) { _or = true; } else { ComplexTypeDeclaration _superType_3 = responseBlock.getSuperType(); boolean _notEquals_3 = (!Objects.equal(_superType_3, null)); _or = _notEquals_3; } if (_or) { _builder.append("\t"); CharSequence _generateDeserializationStatementHeader = this.generateDeserializationStatementHeader(true); _builder.append(_generateDeserializationStatementHeader, "\t"); _builder.newLineIfNotEmpty(); { ComplexTypeDeclaration _superType_4 = responseBlock.getSuperType(); boolean _notEquals_4 = (!Objects.equal(_superType_4, null)); if (_notEquals_4) { _builder.append("\t"); _builder.append("\t"); _builder.append("this.base = new "); ComplexTypeDeclaration _superType_5 = responseBlock.getSuperType(); String _name_3 = _superType_5.getName(); String _pascalize_3 = Strings.pascalize(_name_3); _builder.append(_pascalize_3, "\t\t"); _builder.append("();"); _builder.newLineIfNotEmpty(); } } { BlockType _type_4 = responseBlock.getType(); if ((_type_4 instanceof ComplexTypeLiteral)) { _builder.append("\t"); _builder.append("\t"); String _name_4 = method.getName(); String _pascalize_4 = Strings.pascalize(_name_4); _builder.append(_pascalize_4, "\t\t"); _builder.append("Result subject = this;"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("\t"); BlockType _type_5 = responseBlock.getType(); ComplexTypeDeclaration _superType_6 = null; if (responseBlock!=null) { _superType_6=responseBlock.getSuperType(); } ComplexTypeLiteral _literal_1 = null; if (_superType_6!=null) { _literal_1=_superType_6.getLiteral(); } EList<Member> _mergeMembers = this.mergeMembers(((ComplexTypeLiteral) _type_5), _literal_1); CharSequence _genReadComplexTypeLiteralForMembers = this.jsonReaderGenerator.genReadComplexTypeLiteralForMembers(_mergeMembers); _builder.append(_genReadComplexTypeLiteralForMembers, "\t\t"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); CharSequence _generateDeserializationStatementFooter = this.generateDeserializationStatementFooter(true); _builder.append(_generateDeserializationStatementFooter, "\t"); _builder.newLineIfNotEmpty(); } else { _builder.append("\t"); BlockType _type_6 = responseBlock.getType(); CharSequence _generateDeserializationStatementForType = this.generateDeserializationStatementForType(responseBlock, ((Type) _type_6)); _builder.append(_generateDeserializationStatementForType, "\t"); _builder.newLineIfNotEmpty(); } } } else { _builder.append("\t"); _builder.append("Closeables.closeSilently(inStream);"); _builder.newLine(); } } _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); return _builder; } public CharSequence generateDeserializationStatementHeader(final boolean withReader) { StringConcatenation _builder = new StringConcatenation(); { if (withReader) { this.imports.addImport("com.robotoworks.mechanoid.internal.util.JsonReader"); _builder.newLineIfNotEmpty(); this.imports.addImport("java.io.InputStreamReader"); _builder.newLineIfNotEmpty(); this.imports.addImport("java.io.BufferedReader"); _builder.newLineIfNotEmpty(); this.imports.addImport("java.nio.charset.Charset"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("JsonReader reader = null;"); _builder.newLine(); } } _builder.append("\t"); _builder.append("try {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("if(inStream != null) {"); _builder.newLine(); { if (withReader) { _builder.append("\t\t\t"); _builder.append("reader = new JsonReader(new BufferedReader(new InputStreamReader(inStream, Charset.defaultCharset())));"); _builder.newLine(); } } return _builder; } public CharSequence generateDeserializationStatementFooter(final boolean withReader) { StringConcatenation _builder = new StringConcatenation(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("} finally {"); _builder.newLine(); { if (withReader) { _builder.append("\t"); _builder.append("Closeables.closeSilently(reader);"); _builder.newLine(); } else { _builder.append("\t"); _builder.append("Closeables.closeSilently(inStream);"); _builder.newLine(); } } _builder.append("}"); _builder.newLine(); return _builder; } public EList<Member> mergeMembers(final ComplexTypeLiteral a, final ComplexTypeLiteral b) { HashMap<String, Member> members = new HashMap<String, Member>(); boolean _notEquals = (!Objects.equal(a, null)); if (_notEquals) { EList<Member> _members = a.getMembers(); for (final Member m : _members) { String _name = m.getName(); members.put(_name, m); } } boolean _notEquals_1 = (!Objects.equal(b, null)); if (_notEquals_1) { EList<Member> _members_1 = b.getMembers(); for (final Member m_1 : _members_1) { String _name_1 = m_1.getName(); boolean _containsKey = members.containsKey(_name_1); boolean _not = (!_containsKey); if (_not) { String _name_2 = m_1.getName(); members.put(_name_2, m_1); } } } Collection<Member> _values = members.values(); return new BasicEList<Member>(_values); } protected CharSequence _generateDeserializationStatementForType(final ResponseBlock response, final IntrinsicType type) { StringConcatenation _builder = new StringConcatenation(); this.imports.addImport("com.robotoworks.mechanoid.util.Streams"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementHeader = this.generateDeserializationStatementHeader(false); _builder.append(_generateDeserializationStatementHeader, ""); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("String source = Streams.readAllText(inStream);"); _builder.newLine(); _builder.append("\t\t"); _builder.newLine(); _builder.append("\t\t"); _builder.append("this.value = "); String _boxedTypeSignature = ModelExtensions.getBoxedTypeSignature(type); _builder.append(_boxedTypeSignature, "\t\t"); _builder.append(".valueOf(source);"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementFooter = this.generateDeserializationStatementFooter(false); _builder.append(_generateDeserializationStatementFooter, ""); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateDeserializationStatementForType(final ResponseBlock response, final UserType type) { UserTypeDeclaration _declaration = type.getDeclaration(); return this.generateDeserializationStatementForUserType(response, type, _declaration); } protected CharSequence _generateDeserializationStatementForUserType(final ResponseBlock response, final UserType type, final ComplexTypeDeclaration declaration) { StringConcatenation _builder = new StringConcatenation(); CharSequence _generateDeserializationStatementHeader = this.generateDeserializationStatementHeader(true); _builder.append(_generateDeserializationStatementHeader, ""); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("this."); String _signature = ModelExtensions.signature(type); String _camelize = Strings.camelize(_signature); _builder.append(_camelize, "\t\t"); _builder.append(" = new "); String _signature_1 = ModelExtensions.signature(type); _builder.append(_signature_1, "\t\t"); _builder.append("();"); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("provider.get("); String _signature_2 = ModelExtensions.signature(type); _builder.append(_signature_2, "\t\t"); _builder.append(".class).read(reader, this."); String _signature_3 = ModelExtensions.signature(type); String _camelize_1 = Strings.camelize(_signature_3); _builder.append(_camelize_1, "\t\t"); _builder.append(");"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementFooter = this.generateDeserializationStatementFooter(true); _builder.append(_generateDeserializationStatementFooter, ""); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateDeserializationStatementForUserType(final ResponseBlock response, final UserType type, final EnumTypeDeclaration declaration) { StringConcatenation _builder = new StringConcatenation(); this.imports.addImport("com.robotoworks.mechanoid.util.Streams"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementHeader = this.generateDeserializationStatementHeader(false); _builder.append(_generateDeserializationStatementHeader, ""); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("String source = Streams.readAllText(inStream);"); _builder.newLine(); _builder.append("\t\t"); _builder.append("this."); String _signature = ModelExtensions.signature(type); String _camelize = Strings.camelize(_signature); _builder.append(_camelize, "\t\t"); _builder.append(" = "); String _signature_1 = ModelExtensions.signature(type); _builder.append(_signature_1, "\t\t"); _builder.append(".fromValue(source);"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementFooter = this.generateDeserializationStatementFooter(false); _builder.append(_generateDeserializationStatementFooter, ""); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateDeserializationStatementForType(final ResponseBlock response, final GenericListType type) { Type _elementType = type.getElementType(); return this.generateDeserializationStatementForGenericListType(response, type, _elementType); } protected CharSequence _generateDeserializationStatementForGenericListType(final ResponseBlock response, final GenericListType type, final IntrinsicType genericType) { StringConcatenation _builder = new StringConcatenation(); this.imports.addImport("com.robotoworks.mechanoid.internal.util.JsonUtil"); _builder.newLineIfNotEmpty(); this.imports.addImport("java.util.List"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementHeader = this.generateDeserializationStatementHeader(true); _builder.append(_generateDeserializationStatementHeader, ""); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("this.values = JsonUtil.read"); String _boxedTypeSignature = ModelExtensions.getBoxedTypeSignature(genericType); _builder.append(_boxedTypeSignature, "\t\t"); _builder.append("List(reader);"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementFooter = this.generateDeserializationStatementFooter(true); _builder.append(_generateDeserializationStatementFooter, ""); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateDeserializationStatementForGenericListType(final ResponseBlock response, final GenericListType type, final UserType genericType) { UserTypeDeclaration _declaration = genericType.getDeclaration(); return this.generateDeserializationStatementForUserTypeGenericList(response, type, genericType, _declaration); } protected CharSequence _generateDeserializationStatementForUserTypeGenericList(final ResponseBlock response, final GenericListType type, final UserType genericType, final ComplexTypeDeclaration declaration) { StringConcatenation _builder = new StringConcatenation(); this.imports.addImport("java.util.List"); _builder.newLineIfNotEmpty(); this.imports.addImport("java.util.ArrayList"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementHeader = this.generateDeserializationStatementHeader(true); _builder.append(_generateDeserializationStatementHeader, ""); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("this."); String _innerSignature = ModelExtensions.innerSignature(type); String _camelize = Strings.camelize(_innerSignature); String _pluralize = Strings.pluralize(_camelize); _builder.append(_pluralize, "\t\t"); _builder.append(" = new ArrayList<"); String _innerSignature_1 = ModelExtensions.innerSignature(type); _builder.append(_innerSignature_1, "\t\t"); _builder.append(">();"); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("provider.get("); String _innerSignature_2 = ModelExtensions.innerSignature(type); _builder.append(_innerSignature_2, "\t\t"); _builder.append(".class).readList(reader, this."); String _innerSignature_3 = ModelExtensions.innerSignature(type); String _camelize_1 = Strings.camelize(_innerSignature_3); String _pluralize_1 = Strings.pluralize(_camelize_1); _builder.append(_pluralize_1, "\t\t"); _builder.append(");"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementFooter = this.generateDeserializationStatementFooter(true); _builder.append(_generateDeserializationStatementFooter, ""); _builder.newLineIfNotEmpty(); return _builder; } protected CharSequence _generateDeserializationStatementForUserTypeGenericList(final ResponseBlock response, final GenericListType type, final UserType genericType, final EnumTypeDeclaration declaration) { StringConcatenation _builder = new StringConcatenation(); this.imports.addImport("com.robotoworks.mechanoid.internal.util.JsonToken"); _builder.newLineIfNotEmpty(); this.imports.addImport("java.util.ArrayList"); _builder.newLineIfNotEmpty(); this.imports.addImport("java.util.List"); _builder.newLineIfNotEmpty(); CharSequence _generateDeserializationStatementHeader = this.generateDeserializationStatementHeader(true); _builder.append(_generateDeserializationStatementHeader, ""); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("this."); String _innerSignature = ModelExtensions.innerSignature(type); String _camelize = Strings.camelize(_innerSignature); String _pluralize = Strings.pluralize(_camelize); _builder.append(_pluralize, "\t\t"); _builder.append(" = new Array"); String _signature = ModelExtensions.signature(type); _builder.append(_signature, "\t\t"); _builder.append("();"); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.newLine(); _builder.append("\t\t"); _builder.append("if(reader.peek() != JsonToken.NULL) {"); _builder.newLine(); _builder.append("\t\t\t"); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("reader.beginArray();"); _builder.newLine(); _builder.append("\t\t\t"); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("while(reader.hasNext()) {"); _builder.newLine(); _builder.append("\t\t\t\t"); String _innerSignature_1 = ModelExtensions.innerSignature(type); _builder.append(_innerSignature_1, "\t\t\t\t"); _builder.append(" element = "); String _innerSignature_2 = ModelExtensions.innerSignature(type); _builder.append(_innerSignature_2, "\t\t\t\t"); _builder.append(".fromValue(reader."); String _resolveJsonReaderMethodName = ModelExtensions.resolveJsonReaderMethodName(declaration); _builder.append(_resolveJsonReaderMethodName, "\t\t\t\t"); _builder.append("());"); _builder.newLineIfNotEmpty(); _builder.append("\t\t\t\t"); _builder.append("this."); String _innerSignature_3 = ModelExtensions.innerSignature(type); String _camelize_1 = Strings.camelize(_innerSignature_3); String _pluralize_1 = Strings.pluralize(_camelize_1); _builder.append(_pluralize_1, "\t\t\t\t"); _builder.append(".add(element);"); _builder.newLineIfNotEmpty(); _builder.append("\t\t\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t\t\t"); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("reader.endArray();"); _builder.newLine(); _builder.append("\t\t"); _builder.append("}"); _builder.newLine(); CharSequence _generateDeserializationStatementFooter = this.generateDeserializationStatementFooter(true); _builder.append(_generateDeserializationStatementFooter, ""); _builder.newLineIfNotEmpty(); return _builder; } public CharSequence generateFieldForType(final BlockType type) { if (type instanceof GenericListType) { return _generateFieldForType((GenericListType)type); } else if (type instanceof IntrinsicType) { return _generateFieldForType((IntrinsicType)type); } else if (type instanceof UserType) { return _generateFieldForType((UserType)type); } else if (type instanceof ComplexTypeLiteral) { return _generateFieldForType((ComplexTypeLiteral)type); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(type).toString()); } } public CharSequence generateFieldForMember(final Member member) { if (member instanceof SkipMember) { return _generateFieldForMember((SkipMember)member); } else if (member instanceof TypedMember) { return _generateFieldForMember((TypedMember)member); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(member).toString()); } } public CharSequence generateGetterForType(final BlockType type) { if (type instanceof GenericListType) { return _generateGetterForType((GenericListType)type); } else if (type instanceof IntrinsicType) { return _generateGetterForType((IntrinsicType)type); } else if (type instanceof UserType) { return _generateGetterForType((UserType)type); } else if (type instanceof ComplexTypeLiteral) { return _generateGetterForType((ComplexTypeLiteral)type); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(type).toString()); } } public CharSequence generateGetter(final Member member) { if (member instanceof SkipMember) { return _generateGetter((SkipMember)member); } else if (member instanceof TypedMember) { return _generateGetter((TypedMember)member); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(member).toString()); } } public CharSequence generateBaseAccessor(final Member member) { if (member instanceof SkipMember) { return _generateBaseAccessor((SkipMember)member); } else if (member instanceof TypedMember) { return _generateBaseAccessor((TypedMember)member); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(member).toString()); } } public CharSequence generateDeserializationStatementForType(final ResponseBlock response, final Type type) { if (type instanceof GenericListType) { return _generateDeserializationStatementForType(response, (GenericListType)type); } else if (type instanceof IntrinsicType) { return _generateDeserializationStatementForType(response, (IntrinsicType)type); } else if (type instanceof UserType) { return _generateDeserializationStatementForType(response, (UserType)type); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(response, type).toString()); } } public CharSequence generateDeserializationStatementForUserType(final ResponseBlock response, final UserType type, final UserTypeDeclaration declaration) { if (declaration instanceof ComplexTypeDeclaration) { return _generateDeserializationStatementForUserType(response, type, (ComplexTypeDeclaration)declaration); } else if (declaration instanceof EnumTypeDeclaration) { return _generateDeserializationStatementForUserType(response, type, (EnumTypeDeclaration)declaration); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(response, type, declaration).toString()); } } public CharSequence generateDeserializationStatementForGenericListType(final ResponseBlock response, final GenericListType type, final Type genericType) { if (genericType instanceof IntrinsicType) { return _generateDeserializationStatementForGenericListType(response, type, (IntrinsicType)genericType); } else if (genericType instanceof UserType) { return _generateDeserializationStatementForGenericListType(response, type, (UserType)genericType); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(response, type, genericType).toString()); } } public CharSequence generateDeserializationStatementForUserTypeGenericList(final ResponseBlock response, final GenericListType type, final UserType genericType, final UserTypeDeclaration declaration) { if (declaration instanceof ComplexTypeDeclaration) { return _generateDeserializationStatementForUserTypeGenericList(response, type, genericType, (ComplexTypeDeclaration)declaration); } else if (declaration instanceof EnumTypeDeclaration) { return _generateDeserializationStatementForUserTypeGenericList(response, type, genericType, (EnumTypeDeclaration)declaration); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(response, type, genericType, declaration).toString()); } } }