package com.robotoworks.mechanoid.net.generator; import com.robotoworks.mechanoid.net.netModel.EnumMember; import com.robotoworks.mechanoid.net.netModel.EnumTypeDeclaration; import com.robotoworks.mechanoid.net.netModel.EnumTypeLiteral; import com.robotoworks.mechanoid.net.netModel.Model; import com.robotoworks.mechanoid.text.Strings; import org.eclipse.emf.common.util.EList; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; @SuppressWarnings("all") public class StringEnumTypeGenerator { 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"); EnumTypeLiteral _literal = type.getLiteral(); EList<EnumMember> _members = _literal.getMembers(); final Function1<EnumMember, CharSequence> _function = new Function1<EnumMember, CharSequence>() { public CharSequence apply(final EnumMember member) { String _name = member.getName(); String _underscore = Strings.underscore(_name); String _upperCase = _underscore.toUpperCase(); String _plus = (_upperCase + "(\""); String _name_1 = member.getName(); String _plus_1 = (_plus + _name_1); return (_plus_1 + "\")"); } }; String _join = IterableExtensions.<EnumMember>join(_members, ",\n", _function); _builder.append(_join, "\t"); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("private String value;"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("public String 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("(String 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(String value) {"); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("if (value == null) {"); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("throw new IllegalArgumentException(\"value cannot be null\");"); _builder.newLine(); _builder.append("\t\t"); _builder.append("}"); _builder.newLine(); _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.equalsIgnoreCase(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; } }