package com.robotoworks.mechanoid.net.generator;
import com.robotoworks.mechanoid.net.generator.ModelExtensions;
import com.robotoworks.mechanoid.net.netModel.EnumTypeDeclaration;
import com.robotoworks.mechanoid.net.netModel.Model;
import org.eclipse.xtend2.lib.StringConcatenation;
@SuppressWarnings("all")
public class IntegerEnumTypeGenerator {
public CharSequence generate(final EnumTypeDeclaration type, final Model module) {
StringConcatenation _builder = new StringConcatenation();
_builder.append("package ");
String _packageName = module.getPackageName();
_builder.append(_packageName, "");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("public enum ");
String _name = type.getName();
_builder.append(_name, "");
_builder.append(" {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
String _generateEnumMembers = ModelExtensions.generateEnumMembers(type);
_builder.append(_generateEnumMembers, "\t");
_builder.append(";");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("private int value;");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public int getValue() {");
_builder.newLine();
_builder.append("\t\t");
_builder.append("return value;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
String _name_1 = type.getName();
_builder.append(_name_1, "\t");
_builder.append("(int value){");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.append("this.value = value;");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.newLine();
_builder.append("\t");
_builder.append("public static ");
String _name_2 = type.getName();
_builder.append(_name_2, "\t");
_builder.append(" fromValue(int value) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("for (");
String _name_3 = type.getName();
_builder.append(_name_3, "\t\t");
_builder.append(" member : ");
String _name_4 = type.getName();
_builder.append(_name_4, "\t\t");
_builder.append(".values()) {");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("if (value == member.value) {");
_builder.newLine();
_builder.append("\t\t\t\t");
_builder.append("return member;");
_builder.newLine();
_builder.append("\t\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t\t");
_builder.newLine();
_builder.append("\t\t");
_builder.append("throw new RuntimeException(\"No constant with value \" + value + \" found\");");
_builder.newLine();
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("}");
_builder.newLine();
return _builder;
}
}