package io.trygvis.persistence.generators; import io.trygvis.container.compiler.SqlUnitModel; import io.trygvis.container.compiler.model.ClassG; import io.trygvis.container.compiler.model.FieldRef; import io.trygvis.container.compiler.model.TypeRef; import io.trygvis.persistence.SequenceMirror; import java.util.ArrayList; import java.util.List; import static io.trygvis.container.compiler.Utils.toJavaString; import static java.lang.reflect.Modifier.PUBLIC; import static org.apache.commons.lang.StringUtils.capitalize; import static org.apache.commons.lang.StringUtils.join; public class SequencesGenerator { public static ClassG generateSequences(SqlUnitModel unit) { TypeRef sequences = new TypeRef(unit.getPackageName() + ".Sequences"); ClassG g = new ClassG(PUBLIC, sequences); List creates = new ArrayList<>(); List drops = new ArrayList<>(); for (SequenceMirror sequence : unit.getSequences().values()) { TypeRef stringType = g.imports.add(String.class); String value = "CREATE SEQUENCE " + sequence.sequenceName + ";"; FieldRef f = g.addPublicStaticFinalField(stringType, "create" + capitalize(sequence.name)). value(toJavaString(value)); creates.add(f.name); f = g.addPublicStaticFinalField(stringType, "drop" + capitalize(sequence.name)). value(toJavaString("DROP SEQUENCE " + sequence.sequenceName) + ";"); drops.add(f.name); } g.addPublicStaticFinalField(new TypeRef(String[].class), "createSequences"). value("new String[]{" + join(creates, ", ") + "}"); g.addPublicStaticFinalField(new TypeRef(String[].class), "dropSequences"). value("new String[]{" + join(drops, ", ") + "}"); return g; } }