summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SequencesGenerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SequencesGenerator.java')
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SequencesGenerator.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SequencesGenerator.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SequencesGenerator.java
new file mode 100644
index 0000000..07823af
--- /dev/null
+++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SequencesGenerator.java
@@ -0,0 +1,41 @@
+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<String> creates = new ArrayList<>();
+ List<String> 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;
+ }
+}