From 8cca2127e0e11486cc45ae1a8198bd778301f935 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 19 Aug 2013 19:45:28 +0200 Subject: o Dropping the Sequences class. Moving more stuff into SqlUnit to make it easier available in a generic form. o Fixing the complicated cases where the generation got confused with both setter and constructor injection. --- .../generators/SqlSessionFactoryGenerator.java | 38 ++++++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SqlSessionFactoryGenerator.java') diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SqlSessionFactoryGenerator.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SqlSessionFactoryGenerator.java index 7b6f667..697b262 100644 --- a/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SqlSessionFactoryGenerator.java +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/generators/SqlSessionFactoryGenerator.java @@ -9,7 +9,9 @@ import io.trygvis.container.compiler.model.MethodRef; import io.trygvis.container.compiler.model.Parameters; import io.trygvis.container.compiler.model.TypeRef; import io.trygvis.persistence.EntityMirror; +import io.trygvis.persistence.SequenceMirror; import io.trygvis.persistence.sql.SqlEntityMeta; +import io.trygvis.persistence.sql.SqlSequenceMeta; import io.trygvis.persistence.sql.SqlSessionFactory; import io.trygvis.persistence.sql.SqlUnit; @@ -20,6 +22,8 @@ import java.util.ArrayList; import java.util.List; import static io.trygvis.container.compiler.Utils.toClassName; +import static io.trygvis.container.compiler.Utils.toJavaString; +import static java.lang.String.format; import static java.lang.reflect.Modifier.*; import static org.apache.commons.lang.StringUtils.join; @@ -32,30 +36,50 @@ public class SqlSessionFactoryGenerator { ClassG g = new ClassG(PUBLIC, ssfType). extendsType(new TypeRef(SqlSessionFactory.class).args(ssType)); - List s = new ArrayList<>(); + List es = new ArrayList<>(); for (EntityMirror entity : unit.getEntities().values()) { if (!entity.concrete) { continue; } - s.add(entity.daoType.plainName + ".desc"); + es.add(entity.daoType.plainName + ".desc"); } TypeRef sqlEntityMetaArrayType = new TypeRef(SqlEntityMeta[].class); - FieldRef entities = g.addField(PUBLIC | STATIC, sqlEntityMetaArrayType, "entities"). - value("new " + sqlEntityMetaArrayType + "{" + join(s, ", ") + "}"); + FieldRef entities = g.addField(PRIVATE | STATIC, sqlEntityMetaArrayType, "entities"). + value(format("new " + sqlEntityMetaArrayType + "{%n" + join(es, ", %n") + "%n}")); - g.add(constructor(entities, g.imports)); + TypeRef sqlSequenceMetaArrayType = new TypeRef(SqlSequenceMeta[].class); + List ss = generateSequences(unit, g.imports); + FieldRef sequences = g.addField(PRIVATE | STATIC, sqlSequenceMetaArrayType, "sequences"). + value(format("new " + sqlSequenceMetaArrayType + "{%n" + join(ss, ", %n") + "%n}")); + + g.add(constructor(entities, sequences, g.imports)); g.add(newSession(unit, ssType, g.imports)); return g; } - private static Constructor constructor(FieldRef entities, Imports imports) { + public static List generateSequences(SqlUnitModel unit, Imports imports) { + TypeRef sqlSequenceMetaType = imports.add(SqlSequenceMeta.class); + List fields = new ArrayList<>(); + for (SequenceMirror sequence : unit.getSequences().values()) { + String create = "CREATE SEQUENCE " + sequence.sequenceName; + String drop = "DROP SEQUENCE " + sequence.sequenceName; + + fields.add(format("new " + sqlSequenceMetaType.plainName + "(" + toJavaString(sequence.sequenceName) + ",%n" + + toJavaString(create) + ",%n" + + toJavaString(drop) + ")")); + } + + return fields; + } + + private static Constructor constructor(FieldRef entities, FieldRef sequences, Imports imports) { TypeRef dataSourceType = imports.add(DataSource.class); TypeRef sqlUnitType = imports.add(SqlUnit.class); Parameters p = new Parameters(); Parameters.ParameterRef ds = p.addParameter(dataSourceType, "ds"); ArrayList body = new ArrayList<>(); - body.add("super(new " + sqlUnitType.plainName + "(" + entities.name + "), " + ds.name + ");"); + body.add("super(new " + sqlUnitType.plainName + "(" + entities.name + "," + sequences.name + "), " + ds.name + ");"); return new Constructor(p, body); } -- cgit v1.2.3