package com.robotoworks.mechanoid.net.generator;
import com.google.inject.Inject;
import com.robotoworks.mechanoid.net.generator.ImportHelper;
import com.robotoworks.mechanoid.net.generator.JsonReaderStatementGenerator;
import com.robotoworks.mechanoid.net.netModel.ComplexTypeDeclaration;
import com.robotoworks.mechanoid.net.netModel.Model;
import org.eclipse.xtend2.lib.StringConcatenation;
@SuppressWarnings("all")
public class EntityReaderGenerator {
@Inject
private ImportHelper imports;
@Inject
private JsonReaderStatementGenerator jsonReaderGenerator;
public CharSequence generate(final ComplexTypeDeclaration decl, final Model model) {
CharSequence _xblockexpression = null;
{
this.jsonReaderGenerator.setImports(this.imports);
this.jsonReaderGenerator.setReaderIdentifier("reader");
this.jsonReaderGenerator.setSubjectIdentifier("entity");
this.jsonReaderGenerator.setProviderIdentifier("getProvider()");
_xblockexpression = this.doGenerate(decl, model);
}
return _xblockexpression;
}
public CharSequence doGenerate(final ComplexTypeDeclaration decl, final Model model) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package ");
String _packageName = model.getPackageName();
_builder.append(_packageName, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.newLine();
CharSequence classDecl = this.generateOutputTransformerGeneratorClass(decl, model);
_builder.newLineIfNotEmpty();
_builder.append("import com.robotoworks.mechanoid.net.JsonEntityReader;");
_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.internal.util.JsonReader;");
_builder.newLine();
StringConcatenation _printAndClear = this.imports.printAndClear();
_builder.append(_printAndClear, "");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append(classDecl, "");
_builder.newLineIfNotEmpty();
return _builder;
}
public CharSequence generateOutputTransformerGeneratorClass(final ComplexTypeDeclaration decl, final Model module) {
StringConcatenation _builder = new StringConcatenation();
this.imports.addImport("java.util.List");
_builder.newLineIfNotEmpty();
_builder.append("public class ");
String _name = decl.getName();
_builder.append(_name, "");
_builder.append("Reader extends JsonEntityReader<");
String _name_1 = decl.getName();
_builder.append(_name_1, "");
_builder.append("> {\t\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public ");
String _name_2 = decl.getName();
_builder.append(_name_2, "\t");
_builder.append("Reader(JsonEntityReaderProvider provider) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("super(provider);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public void read(JsonReader reader, ");
String _name_3 = decl.getName();
_builder.append(_name_3, "\t");
_builder.append(" entity) throws IOException {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
CharSequence _genReadComplexType = this.jsonReaderGenerator.genReadComplexType(decl);
_builder.append(_genReadComplexType, "\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public void readList(JsonReader reader, List<");
String _name_4 = decl.getName();
_builder.append(_name_4, "\t");
_builder.append("> entities) throws IOException {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("reader.beginArray();");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("while(reader.hasNext()) {");
_builder.newLine();
_builder.append("\t\t\t");
String _name_5 = decl.getName();
_builder.append(_name_5, "\t\t\t");
_builder.append(" item = new ");
String _name_6 = decl.getName();
_builder.append(_name_6, "\t\t\t");
_builder.append("();");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("read(reader, item);");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("entities.add(item);");
_builder.newLine();
_builder.append("\t\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("reader.endArray();");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
}