package com.robotoworks.mechanoid.net.generator;
import com.google.inject.Inject;
import com.robotoworks.mechanoid.net.generator.ImportHelper;
import com.robotoworks.mechanoid.net.generator.JsonWriterStatementGenerator;
import com.robotoworks.mechanoid.net.netModel.ComplexTypeDeclaration;
import com.robotoworks.mechanoid.net.netModel.Model;
import org.eclipse.xtend2.lib.StringConcatenation;
@SuppressWarnings("all")
public class EntityWriterGenerator {
@Inject
private ImportHelper imports;
@Inject
private JsonWriterStatementGenerator jsonWriterGenerator;
public CharSequence generate(final ComplexTypeDeclaration decl, final Model model) {
CharSequence _xblockexpression = null;
{
this.jsonWriterGenerator.setImports(this.imports);
this.jsonWriterGenerator.setWriterIdentifier("writer");
this.jsonWriterGenerator.setSubjectIdentifier("entity");
this.jsonWriterGenerator.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.JsonEntityWriter;");
_builder.newLine();
_builder.append("import com.robotoworks.mechanoid.net.JsonEntityWriterProvider;");
_builder.newLine();
_builder.append("import java.io.IOException;");
_builder.newLine();
_builder.append("import com.robotoworks.mechanoid.internal.util.JsonWriter;");
_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.newLine();
_builder.append("public class ");
String _name = decl.getName();
_builder.append(_name, "");
_builder.append("Writer extends JsonEntityWriter<");
String _name_1 = decl.getName();
_builder.append(_name_1, "");
_builder.append("> {");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("\t");
_builder.append("public ");
String _name_2 = decl.getName();
_builder.append(_name_2, "\t");
_builder.append("Writer(JsonEntityWriterProvider 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 write(JsonWriter writer, ");
String _name_3 = decl.getName();
_builder.append(_name_3, "\t");
_builder.append(" entity) throws IOException {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
CharSequence _genWriteComplexType = this.jsonWriterGenerator.genWriteComplexType(decl);
_builder.append(_genWriteComplexType, "\t\t");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public void writeList(JsonWriter writer, List<");
String _name_4 = decl.getName();
_builder.append(_name_4, "\t");
_builder.append("> entities) throws IOException {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("writer.beginArray();");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("for(");
String _name_5 = decl.getName();
_builder.append(_name_5, "\t\t");
_builder.append(" item:entities) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("write(writer, item);");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("writer.endArray();");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
}