package com.robotoworks.mechanoid.net.generator;
import com.google.inject.Inject;
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.GenericListType;
import com.robotoworks.mechanoid.net.netModel.Member;
import com.robotoworks.mechanoid.net.netModel.Model;
import com.robotoworks.mechanoid.net.netModel.SkipMember;
import com.robotoworks.mechanoid.net.netModel.Type;
import com.robotoworks.mechanoid.net.netModel.TypedMember;
import java.util.Arrays;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend2.lib.StringConcatenation;
@SuppressWarnings("all")
public class EntityGenerator {
@Inject
private ImportHelper imports;
public CharSequence generate(final ComplexTypeDeclaration type, final Model module) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package ");
String _packageName = module.getPackageName();
_builder.append(_packageName, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("import android.content.ContentValues;");
_builder.newLine();
_builder.append("import com.robotoworks.mechanoid.db.ContentValuesUtil;");
_builder.newLine();
_builder.append("import java.util.Map;");
_builder.newLine();
_builder.newLine();
CharSequence classDecl = this.generateType(type, module);
_builder.newLineIfNotEmpty();
StringConcatenation _printAndClear = this.imports.printAndClear();
_builder.append(_printAndClear, "");
_builder.newLineIfNotEmpty();
_builder.append(classDecl, "");
_builder.newLineIfNotEmpty();
return _builder;
}
public CharSequence generateType(final ComplexTypeDeclaration type, final Model module) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("public class ");
String _name = type.getName();
_builder.append(_name, "");
_builder.append(" {");
_builder.newLineIfNotEmpty();
_builder.append(" ");
_builder.newLine();
{
ComplexTypeLiteral _literal = type.getLiteral();
EList<Member> _members = _literal.getMembers();
for(final Member member : _members) {
_builder.append(" ");
CharSequence _generateKeyConstant = this.generateKeyConstant(member);
_builder.append(_generateKeyConstant, " ");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
{
ComplexTypeLiteral _literal_1 = type.getLiteral();
EList<Member> _members_1 = _literal_1.getMembers();
for(final Member member_1 : _members_1) {
_builder.append("\t");
CharSequence _generateField = this.generateField(member_1);
_builder.append(_generateField, "\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.newLine();
{
ComplexTypeLiteral _literal_2 = type.getLiteral();
EList<Member> _members_2 = _literal_2.getMembers();
for(final Member member_2 : _members_2) {
_builder.append("\t");
CharSequence _generateGetterAndSetter = this.generateGetterAndSetter(member_2);
_builder.append(_generateGetterAndSetter, "\t");
_builder.newLineIfNotEmpty();
}
}
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public ContentValues toContentValues() {");
_builder.newLine();
_builder.append("\t ");
_builder.append("return toContentValues(null);");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public ContentValues toContentValues(Map<String, String> map) {");
_builder.newLine();
_builder.append("\t ");
_builder.append("ContentValues values = new ContentValues();");
_builder.newLine();
_builder.append("\t ");
_builder.newLine();
{
ComplexTypeLiteral _literal_3 = type.getLiteral();
EList<Member> _members_3 = _literal_3.getMembers();
for(final Member member_3 : _members_3) {
_builder.append(" ");
CharSequence _generatePutValuesStatement = this.generatePutValuesStatement(member_3);
_builder.append(_generatePutValuesStatement, " ");
_builder.newLineIfNotEmpty();
}
}
_builder.newLine();
_builder.append(" ");
_builder.append("return values;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
protected CharSequence _generateField(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();
{
Type _type_1 = member.getType();
if ((_type_1 instanceof GenericListType)) {
this.imports.addImport("java.util.List");
}
}
_builder.append("\t");
_builder.newLineIfNotEmpty();
return _builder;
}
protected CharSequence _generateField(final SkipMember skipper) {
StringConcatenation _builder = new StringConcatenation();
{
ComplexTypeLiteral _literal = skipper.getLiteral();
EList<Member> _members = _literal.getMembers();
for(final Member member : _members) {
Object _generateField = this.generateField(member);
_builder.append(_generateField, "");
_builder.newLineIfNotEmpty();
}
}
return _builder;
}
protected CharSequence _generatePutValuesStatement(final TypedMember member) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("ContentValuesUtil.putMapped(KEY_");
String _name = member.getName();
String _upperCase = _name.toUpperCase();
_builder.append(_upperCase, "");
_builder.append(", map, values, ");
String _identifier = ModelExtensions.toIdentifier(member);
_builder.append(_identifier, "");
_builder.append(");");
_builder.newLineIfNotEmpty();
return _builder;
}
protected CharSequence _generatePutValuesStatement(final SkipMember skipper) {
StringConcatenation _builder = new StringConcatenation();
{
ComplexTypeLiteral _literal = skipper.getLiteral();
EList<Member> _members = _literal.getMembers();
for(final Member member : _members) {
CharSequence _generateField = this.generateField(member);
_builder.append(_generateField, "");
_builder.newLineIfNotEmpty();
}
}
return _builder;
}
protected CharSequence _generateGetterAndSetter(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 ");
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 _generateGetterAndSetter(final SkipMember skipper) {
StringConcatenation _builder = new StringConcatenation();
{
ComplexTypeLiteral _literal = skipper.getLiteral();
EList<Member> _members = _literal.getMembers();
for(final Member member : _members) {
Object _generateGetterAndSetter = this.generateGetterAndSetter(member);
_builder.append(_generateGetterAndSetter, "");
_builder.newLineIfNotEmpty();
}
}
return _builder;
}
protected CharSequence _generateKeyConstant(final TypedMember member) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("public static final String KEY_");
String _name = member.getName();
String _upperCase = _name.toUpperCase();
_builder.append(_upperCase, "");
_builder.append(" = \"");
String _name_1 = member.getName();
_builder.append(_name_1, "");
_builder.append("\";");
_builder.newLineIfNotEmpty();
return _builder;
}
protected CharSequence _generateKeyConstant(final SkipMember skipper) {
StringConcatenation _builder = new StringConcatenation();
{
ComplexTypeLiteral _literal = skipper.getLiteral();
EList<Member> _members = _literal.getMembers();
for(final Member member : _members) {
CharSequence _generateField = this.generateField(member);
_builder.append(_generateField, "");
_builder.newLineIfNotEmpty();
}
}
return _builder;
}
public CharSequence generateField(final Member skipper) {
if (skipper instanceof SkipMember) {
return _generateField((SkipMember)skipper);
} else if (skipper instanceof TypedMember) {
return _generateField((TypedMember)skipper);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(skipper).toString());
}
}
public CharSequence generatePutValuesStatement(final Member skipper) {
if (skipper instanceof SkipMember) {
return _generatePutValuesStatement((SkipMember)skipper);
} else if (skipper instanceof TypedMember) {
return _generatePutValuesStatement((TypedMember)skipper);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(skipper).toString());
}
}
public CharSequence generateGetterAndSetter(final Member skipper) {
if (skipper instanceof SkipMember) {
return _generateGetterAndSetter((SkipMember)skipper);
} else if (skipper instanceof TypedMember) {
return _generateGetterAndSetter((TypedMember)skipper);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(skipper).toString());
}
}
public CharSequence generateKeyConstant(final Member skipper) {
if (skipper instanceof SkipMember) {
return _generateKeyConstant((SkipMember)skipper);
} else if (skipper instanceof TypedMember) {
return _generateKeyConstant((TypedMember)skipper);
} else {
throw new IllegalArgumentException("Unhandled parameter types: " +
Arrays.<Object>asList(skipper).toString());
}
}
}