package com.robotoworks.mechanoid.net.generator;
import com.robotoworks.mechanoid.net.generator.ImportHelper;
import com.robotoworks.mechanoid.net.generator.ModelExtensions;
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.IntrinsicType;
import com.robotoworks.mechanoid.net.netModel.Member;
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 java.util.Arrays;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend.lib.Property;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Pure;
@SuppressWarnings("all")
public class JsonWriterStatementGenerator {
@Property
private ImportHelper _imports;
@Property
private String _writerIdentifier = "target";
@Property
private String _subjectIdentifier = "subject";
@Property
private String _providerIdentifier = "provider";
public CharSequence genWriteComplexType(final ComplexTypeDeclaration decl) {
ComplexTypeLiteral _literal = decl.getLiteral();
return this.genWriteComplexTypeLiteral(_literal);
}
public CharSequence genWriteComplexTypeLiteral(final ComplexTypeLiteral literal) {
StringConcatenation _builder = new StringConcatenation();
EList<Member> _members = literal.getMembers();
CharSequence _genWriteComplexTypeLiteralForMembers = this.genWriteComplexTypeLiteralForMembers(_members);
_builder.append(_genWriteComplexTypeLiteralForMembers, "");
_builder.newLineIfNotEmpty();
return _builder;
}
public CharSequence genWriteComplexTypeLiteralForMembers(final EList<Member> members) {
StringConcatenation _builder = new StringConcatenation();
String _writerIdentifier = this.getWriterIdentifier();
_builder.append(_writerIdentifier, "");
_builder.append(".beginObject();");
_builder.newLineIfNotEmpty();
_builder.newLine();
{
for(final Member member : members) {
CharSequence _genStatement = this.genStatement(member);
_builder.append(_genStatement, "");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
String _writerIdentifier_1 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_1, "");
_builder.append(".endObject();");
_builder.newLineIfNotEmpty();
return _builder;
}
protected CharSequence _genStatement(final TypedMember member) {
Type _type = member.getType();
return this.genStatementForType(member, _type);
}
protected CharSequence _genStatement(final SkipMember skipMember) {
StringConcatenation _builder = new StringConcatenation();
_builder.newLine();
_builder.append("\t");
String _writerIdentifier = this.getWriterIdentifier();
_builder.append(_writerIdentifier, "\t");
_builder.append(".name(\"");
String _name = skipMember.getName();
_builder.append(_name, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
ComplexTypeLiteral _literal = skipMember.getLiteral();
EList<Member> _members = _literal.getMembers();
Object _genWriteComplexTypeLiteralForMembers = this.genWriteComplexTypeLiteralForMembers(_members);
_builder.append(_genWriteComplexTypeLiteralForMembers, "\t");
_builder.newLineIfNotEmpty();
return _builder;
}
protected CharSequence _genStatementForType(final TypedMember member, final IntrinsicType type) {
StringConcatenation _builder = new StringConcatenation();
String _writerIdentifier = this.getWriterIdentifier();
_builder.append(_writerIdentifier, "");
_builder.append(".name(\"");
String _name = member.getName();
_builder.append(_name, "");
_builder.append("\");");
_builder.newLineIfNotEmpty();
String _writerIdentifier_1 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_1, "");
_builder.append(".value(");
String _getMethodName = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier = this.getSubjectIdentifier();
String _memberize = ModelExtensions.memberize(_getMethodName, _subjectIdentifier);
_builder.append(_memberize, "");
_builder.append("());");
_builder.newLineIfNotEmpty();
return _builder;
}
protected CharSequence _genStatementForType(final TypedMember member, final UserType type) {
UserTypeDeclaration _declaration = type.getDeclaration();
return this.genStatementForType(member, type, _declaration);
}
protected CharSequence _genStatementForType(final TypedMember member, final UserType type, final ComplexTypeDeclaration decl) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("if(");
String _getMethodName = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier = this.getSubjectIdentifier();
String _memberize = ModelExtensions.memberize(_getMethodName, _subjectIdentifier);
_builder.append(_memberize, "");
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _writerIdentifier = this.getWriterIdentifier();
_builder.append(_writerIdentifier, "\t");
_builder.append(".name(\"");
String _name = member.getName();
_builder.append(_name, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _providerIdentifier = this.getProviderIdentifier();
_builder.append(_providerIdentifier, "\t");
_builder.append(".get(");
String _innerSignature = ModelExtensions.innerSignature(type);
_builder.append(_innerSignature, "\t");
_builder.append(".class).write(");
String _writerIdentifier_1 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_1, "\t");
_builder.append(", ");
String _getMethodName_1 = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier_1 = this.getSubjectIdentifier();
String _memberize_1 = ModelExtensions.memberize(_getMethodName_1, _subjectIdentifier_1);
_builder.append(_memberize_1, "\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
return _builder;
}
protected CharSequence _genStatementForType(final TypedMember member, final UserType type, final EnumTypeDeclaration decl) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("if(");
String _getMethodName = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier = this.getSubjectIdentifier();
String _memberize = ModelExtensions.memberize(_getMethodName, _subjectIdentifier);
_builder.append(_memberize, "");
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _writerIdentifier = this.getWriterIdentifier();
_builder.append(_writerIdentifier, "\t");
_builder.append(".name(\"");
String _name = member.getName();
_builder.append(_name, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _writerIdentifier_1 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_1, "\t");
_builder.append(".value(");
String _getMethodName_1 = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier_1 = this.getSubjectIdentifier();
String _memberize_1 = ModelExtensions.memberize(_getMethodName_1, _subjectIdentifier_1);
_builder.append(_memberize_1, "\t");
_builder.append("().toString());");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
return _builder;
}
protected CharSequence _genStatementForType(final TypedMember member, final GenericListType type) {
Type _elementType = type.getElementType();
return this.genStatementForGenericListType(member, type, _elementType);
}
protected CharSequence _genStatementForGenericListType(final TypedMember member, final GenericListType type, final IntrinsicType itemType) {
StringConcatenation _builder = new StringConcatenation();
ImportHelper _imports = this.getImports();
_imports.addImport("com.robotoworks.mechanoid.internal.util.JsonUtil");
_builder.newLineIfNotEmpty();
ImportHelper _imports_1 = this.getImports();
_imports_1.addImport("java.util.List");
_builder.newLineIfNotEmpty();
_builder.append("if(");
String _getMethodName = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier = this.getSubjectIdentifier();
String _memberize = ModelExtensions.memberize(_getMethodName, _subjectIdentifier);
_builder.append(_memberize, "");
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _writerIdentifier = this.getWriterIdentifier();
_builder.append(_writerIdentifier, "\t");
_builder.append(".name(\"");
String _name = member.getName();
_builder.append(_name, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("JsonUtil.write");
String _boxedTypeSignature = ModelExtensions.getBoxedTypeSignature(itemType);
_builder.append(_boxedTypeSignature, "\t");
_builder.append("List(");
String _writerIdentifier_1 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_1, "\t");
_builder.append(", ");
String _getMethodName_1 = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier_1 = this.getSubjectIdentifier();
String _memberize_1 = ModelExtensions.memberize(_getMethodName_1, _subjectIdentifier_1);
_builder.append(_memberize_1, "\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
return _builder;
}
protected CharSequence _genStatementForGenericListType(final TypedMember member, final GenericListType type, final UserType itemType) {
UserTypeDeclaration _declaration = itemType.getDeclaration();
return this.genStatementForUserTypeGenericList(member, type, itemType, _declaration);
}
protected CharSequence _genStatementForUserTypeGenericList(final TypedMember member, final GenericListType type, final UserType itemType, final ComplexTypeDeclaration decl) {
StringConcatenation _builder = new StringConcatenation();
ImportHelper _imports = this.getImports();
_imports.addImport("java.util.List");
_builder.newLineIfNotEmpty();
_builder.append("if(");
String _getMethodName = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier = this.getSubjectIdentifier();
String _memberize = ModelExtensions.memberize(_getMethodName, _subjectIdentifier);
_builder.append(_memberize, "");
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _writerIdentifier = this.getWriterIdentifier();
_builder.append(_writerIdentifier, "\t");
_builder.append(".name(\"");
String _name = member.getName();
_builder.append(_name, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _providerIdentifier = this.getProviderIdentifier();
_builder.append(_providerIdentifier, "\t");
_builder.append(".get(");
String _innerSignature = ModelExtensions.innerSignature(type);
_builder.append(_innerSignature, "\t");
_builder.append(".class).writeList(");
String _writerIdentifier_1 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_1, "\t");
_builder.append(", ");
String _getMethodName_1 = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier_1 = this.getSubjectIdentifier();
String _memberize_1 = ModelExtensions.memberize(_getMethodName_1, _subjectIdentifier_1);
_builder.append(_memberize_1, "\t");
_builder.append("());");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
return _builder;
}
protected CharSequence _genStatementForUserTypeGenericList(final TypedMember member, final GenericListType type, final UserType itemType, final EnumTypeDeclaration decl) {
StringConcatenation _builder = new StringConcatenation();
ImportHelper _imports = this.getImports();
_imports.addImport("java.util.List");
_builder.newLineIfNotEmpty();
ImportHelper _imports_1 = this.getImports();
_imports_1.addImport("java.util.ArrayList");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("if(");
String _getMethodName = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier = this.getSubjectIdentifier();
String _memberize = ModelExtensions.memberize(_getMethodName, _subjectIdentifier);
_builder.append(_memberize, "");
_builder.append("() != null) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
String _writerIdentifier = this.getWriterIdentifier();
_builder.append(_writerIdentifier, "\t");
_builder.append(".name(\"");
String _name = member.getName();
_builder.append(_name, "\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
String _writerIdentifier_1 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_1, "\t");
_builder.append(".beginArray();");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("for(");
Type _type = member.getType();
String _innerSignature = ModelExtensions.innerSignature(_type);
_builder.append(_innerSignature, "\t");
_builder.append(" element : ");
String _getMethodName_1 = ModelExtensions.toGetMethodName(member);
String _subjectIdentifier_1 = this.getSubjectIdentifier();
String _memberize_1 = ModelExtensions.memberize(_getMethodName_1, _subjectIdentifier_1);
_builder.append(_memberize_1, "\t");
_builder.append("()) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
String _writerIdentifier_2 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_2, "\t\t");
_builder.append(".value(element.toString());");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
String _writerIdentifier_3 = this.getWriterIdentifier();
_builder.append(_writerIdentifier_3, "\t");
_builder.append(".endArray();");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
return _builder;
}
public CharSequence genStatement(final Member skipMember) {
if (skipMember instanceof SkipMember) {
return _genStatement((SkipMember)skipMember);
} else if (skipMember instanceof TypedMember) {
return _genStatement((TypedMember)skipMember);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(skipMember).toString());
}
}
public CharSequence genStatementForType(final TypedMember member, final Type type) {
if (type instanceof GenericListType) {
return _genStatementForType(member, (GenericListType)type);
} else if (type instanceof IntrinsicType) {
return _genStatementForType(member, (IntrinsicType)type);
} else if (type instanceof UserType) {
return _genStatementForType(member, (UserType)type);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(member, type).toString());
}
}
public CharSequence genStatementForType(final TypedMember member, final UserType type, final UserTypeDeclaration decl) {
if (decl instanceof ComplexTypeDeclaration) {
return _genStatementForType(member, type, (ComplexTypeDeclaration)decl);
} else if (decl instanceof EnumTypeDeclaration) {
return _genStatementForType(member, type, (EnumTypeDeclaration)decl);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(member, type, decl).toString());
}
}
public CharSequence genStatementForGenericListType(final TypedMember member, final GenericListType type, final Type itemType) {
if (itemType instanceof IntrinsicType) {
return _genStatementForGenericListType(member, type, (IntrinsicType)itemType);
} else if (itemType instanceof UserType) {
return _genStatementForGenericListType(member, type, (UserType)itemType);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(member, type, itemType).toString());
}
}
public CharSequence genStatementForUserTypeGenericList(final TypedMember member, final GenericListType type, final UserType itemType, final UserTypeDeclaration decl) {
if (decl instanceof ComplexTypeDeclaration) {
return _genStatementForUserTypeGenericList(member, type, itemType, (ComplexTypeDeclaration)decl);
} else if (decl instanceof EnumTypeDeclaration) {
return _genStatementForUserTypeGenericList(member, type, itemType, (EnumTypeDeclaration)decl);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(member, type, itemType, decl).toString());
}
}
@Pure
public ImportHelper getImports() {
return this._imports;
}
public void setImports(final ImportHelper imports) {
this._imports = imports;
}
@Pure
public String getWriterIdentifier() {
return this._writerIdentifier;
}
public void setWriterIdentifier(final String writerIdentifier) {
this._writerIdentifier = writerIdentifier;
}
@Pure
public String getSubjectIdentifier() {
return this._subjectIdentifier;
}
public void setSubjectIdentifier(final String subjectIdentifier) {
this._subjectIdentifier = subjectIdentifier;
}
@Pure
public String getProviderIdentifier() {
return this._providerIdentifier;
}
public void setProviderIdentifier(final String providerIdentifier) {
this._providerIdentifier = providerIdentifier;
}
}