package im.actor.generator.generators.java; import im.actor.generator.FileGenerator; import im.actor.generator.scheme.SchemeDefinition; import im.actor.generator.scheme.SchemeUpdateBox; import java.io.File; import java.io.IOException; /** * Created by ex3ndr on 15.11.14. */ public class UpdateBoxGenerator { public static void generate(SchemeDefinition definition, String path) throws IOException { String destFolder = path + "/" + JavaConfig.PATH + "/base"; new File(destFolder).mkdirs(); for (SchemeUpdateBox u : definition.getAllUpdateBoxes()) { String javaName = JavaConfig.getUpdateBoxName(u.getName()); FileGenerator generator = new FileGenerator(destFolder + "/" + javaName + ".java"); generator.appendLn("package " + JavaConfig.PACKAGE + ".base;"); generator.appendLn(JavaConfig.NOTICE); generator.appendLn(); for (String im : JavaConfig.IMPORTS) { generator.appendLn("import " + im + ";"); } generator.appendLn("import " + JavaConfig.PACKAGE + ".*;"); generator.appendLn(); generator.appendLn("public class " + javaName + " extends RpcScope {"); generator.increaseDepth(); generator.appendLn(); generator.appendLn("public static final int HEADER = 0x" + Integer.toHexString(u.getHeader()) + ";"); generator.appendLn("public static " + javaName + " fromBytes(byte[] data) throws IOException {"); generator.increaseDepth(); generator.appendLn("return Bser.parse(new " + javaName + "(), data);"); generator.decreaseDepth(); generator.appendLn("}"); generator.appendLn(); ContainerGenerator.generateFields(generator, definition, u); generator.appendLn(); if (u.getAttributes().size() > 0) { ContainerGenerator.generateConstructor(generator, definition, u, javaName); } generator.appendLn("public " + javaName + "() {"); generator.appendLn(); generator.appendLn("}"); generator.appendLn(); ContainerGenerator.generateGetters(generator, definition, u); ContainerGenerator.generateDeserialization(generator, u, definition); ContainerGenerator.generateSerialization(generator, u, definition); ContainerGenerator.generateToString(generator, u, definition); generator.appendLn("@Override"); generator.appendLn("public int getHeaderKey() {"); generator.increaseDepth(); generator.appendLn("return HEADER;"); generator.decreaseDepth(); generator.appendLn("}"); generator.decreaseDepth(); generator.appendLn("}"); generator.close(); } } }