package im.actor.generator.generators.java;
import im.actor.generator.FileGenerator;
import im.actor.generator.scheme.SchemeDefinition;
import im.actor.generator.scheme.SchemeEnum;
import java.io.File;
import java.io.IOException;
/**
* Created by ex3ndr on 15.11.14.
*/
public class EnumGenerator {
public static void generate(SchemeDefinition definition, String path) throws IOException {
generate(definition, path, JavaConfig.PACKAGE);
}
public static void generate(SchemeDefinition definition, String path, String pkg) throws IOException {
String destFolder = path + "/" + StringJoin.join("/", pkg.split("\\."));
new File(destFolder).mkdirs();
for (SchemeEnum e : definition.getAllEnums()) {
String javaName = JavaConfig.getEnumName(e.getName());
FileGenerator generator = new FileGenerator(destFolder + "/" + javaName + ".java");
generator.appendLn("package " + pkg + ";");
generator.appendLn(JavaConfig.NOTICE);
generator.appendLn();
generator.appendLn("import java.io.IOException;");
generator.appendLn();
generator.appendLn("public enum " + javaName + " {");
generator.appendLn();
generator.increaseDepth();
boolean isFirst = true;
for (SchemeEnum.Record r : e.getRecord()) {
if (isFirst) {
isFirst = false;
} else {
generator.appendLn(",");
}
generator.append(JavaConfig.getEnumRecordName(r) + "(" + r.getId() + ")");
}
generator.appendLn(",");
generator.append("UNSUPPORTED_VALUE(-1)");
generator.appendLn(";");
generator.appendLn();
generator.appendLn("private int value;");
generator.appendLn();
generator.appendLn(javaName + "(int value) {");
generator.increaseDepth();
generator.appendLn("this.value = value;");
generator.decreaseDepth();
generator.appendLn("}");
generator.appendLn();
generator.appendLn("public int getValue() {");
generator.increaseDepth();
generator.appendLn("return value;");
generator.decreaseDepth();
generator.appendLn("}");
generator.appendLn();
generator.appendLn("public static " + javaName + " parse(int value) throws IOException {");
generator.increaseDepth();
generator.appendLn("switch(value) {");
generator.increaseDepth();
for (SchemeEnum.Record r : e.getRecord()) {
generator.appendLn("case " + r.getId() + ": return " + javaName + "." + JavaConfig.getEnumRecordName(r) + ";");
}
generator.appendLn("default: return " + javaName + ".UNSUPPORTED_VALUE;");
generator.decreaseDepth();
generator.appendLn("}");
generator.decreaseDepth();
generator.appendLn("}");
generator.decreaseDepth();
generator.appendLn("}");
generator.close();
}
}
}