Skip to content

Commit 3818e67

Browse files
authored
Merge pull request #14 from ergon/feature/pojo-generation-metamodel
Feature/pojo generation metamodel
2 parents 5a2d564 + 81d1de2 commit 3818e67

File tree

5 files changed

+98
-82
lines changed

5 files changed

+98
-82
lines changed

gradle-plugin/src/main/java/ch/ergon/adam/gradleplugin/util/AdamJooqMetamodelGenerator.java

+51-55
Original file line numberDiff line numberDiff line change
@@ -4,63 +4,59 @@
44
import java.nio.file.Path;
55

66
import org.jooq.codegen.GenerationTool;
7-
import org.jooq.meta.jaxb.Configuration;
8-
import org.jooq.meta.jaxb.Database;
9-
import org.jooq.meta.jaxb.Generate;
10-
import org.jooq.meta.jaxb.Generator;
11-
import org.jooq.meta.jaxb.Property;
12-
import org.jooq.meta.jaxb.Strategy;
13-
import org.jooq.meta.jaxb.Target;
7+
import org.jooq.meta.jaxb.*;
148

159
public class AdamJooqMetamodelGenerator {
1610

17-
private String packageName;
18-
private Path outputPath;
19-
private String source;
20-
private String jooqConfig;
21-
22-
public AdamJooqMetamodelGenerator(String packageName, Path outputPath, String source, String jooqConfig) {
23-
this.packageName = packageName;
24-
this.outputPath = outputPath;
25-
this.source = source;
26-
this.jooqConfig = jooqConfig;
27-
}
28-
29-
public void run() throws Exception {
30-
Configuration configuration;
31-
if (jooqConfig != null) {
32-
configuration = GenerationTool.load(new ByteArrayInputStream(jooqConfig.getBytes("UTF-8")));
33-
} else {
34-
configuration = buildConfiguration();
35-
}
36-
GenerationTool.generate(configuration);
37-
}
38-
39-
private Configuration buildConfiguration() {
40-
Configuration configuration;
41-
configuration = new Configuration();
42-
43-
Generator generator = new Generator();
44-
Database database = new Database();
45-
database.setName(AdamDatabase.class.getName());
46-
database.getProperties().add(new Property().withKey(AdamDatabase.SOURCE_PROPERTY).withValue(source));
47-
generator.setDatabase(database);
48-
49-
Strategy strategy = new Strategy();
50-
strategy.setName(TableSuffixGeneratorStrategy.class.getName());
51-
generator.setStrategy(strategy);
52-
53-
Generate generate = new Generate();
54-
generate.setGlobalObjectReferences(true);
55-
generate.setJavaTimeTypes(true);
56-
generator.setGenerate(generate);
57-
58-
Target target = new Target();
59-
target.setPackageName(packageName);
60-
target.setDirectory(outputPath.toString());
61-
generator.setTarget(target);
62-
configuration.setGenerator(generator);
63-
return configuration;
64-
}
11+
private final String packageName;
12+
private final Path outputPath;
13+
private final String source;
14+
private final String jooqConfig;
15+
16+
public AdamJooqMetamodelGenerator(String packageName, Path outputPath, String source, String jooqConfig) {
17+
this.packageName = packageName;
18+
this.outputPath = outputPath;
19+
this.source = source;
20+
this.jooqConfig = jooqConfig;
21+
}
22+
23+
public void run() throws Exception {
24+
Configuration configuration;
25+
if (jooqConfig != null) {
26+
configuration = GenerationTool.load(new ByteArrayInputStream(jooqConfig.getBytes("UTF-8")));
27+
} else {
28+
configuration = buildConfiguration();
29+
}
30+
GenerationTool.generate(configuration);
31+
}
32+
33+
private Configuration buildConfiguration() {
34+
Configuration configuration;
35+
configuration = new Configuration();
36+
37+
Generator generator = new Generator();
38+
Database database = new Database();
39+
database.setName(AdamDatabase.class.getName());
40+
database.getProperties().add(new Property().withKey(AdamDatabase.SOURCE_PROPERTY).withValue(source));
41+
generator.setDatabase(database);
42+
43+
Strategy strategy = new Strategy();
44+
strategy.setName(TableSuffixGeneratorStrategy.class.getName());
45+
generator.setStrategy(strategy);
46+
47+
Generate generate = new Generate();
48+
generate.setGlobalObjectReferences(true);
49+
generate.setJavaTimeTypes(true);
50+
generate.setPojos(true);
51+
generate.setFluentSetters(true);
52+
generator.setGenerate(generate);
53+
54+
Target target = new Target();
55+
target.setPackageName(packageName);
56+
target.setDirectory(outputPath.toString());
57+
generator.setTarget(target);
58+
configuration.setGenerator(generator);
59+
return configuration;
60+
}
6561

6662
}

gradle-plugin/src/main/java/ch/ergon/adam/gradleplugin/util/AdamTableDefinition.java

+11-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.List;
66

77
import org.jooq.Name;
8+
import org.jooq.impl.DSL;
89
import org.jooq.impl.SQLDataType;
910
import org.jooq.meta.AbstractTableDefinition;
1011
import org.jooq.meta.ColumnDefinition;
@@ -19,7 +20,7 @@
1920

2021
public class AdamTableDefinition extends AbstractTableDefinition {
2122

22-
private Table table;
23+
private final Table table;
2324

2425
public AdamTableDefinition(SchemaDefinition schema, Table table) {
2526
super(schema, table.getName(), null);
@@ -37,11 +38,9 @@ protected List<ColumnDefinition> getElements0() throws SQLException {
3738
}
3839

3940
private DataTypeDefinition dataTypeDefinition(Field field) {
40-
DataTypeDefinition dataType = new DefaultDataTypeDefinition(getDatabase(), getSchema(),
41-
typeName(field.getDataType()), field.getLength(), field.getPrecision(), field.getScale(),
42-
field.isNullable(), field.getDefaultValue(), (Name) null);
43-
44-
return dataType;
41+
return new DefaultDataTypeDefinition(getDatabase(), getSchema(),
42+
typeName(field.getDataType()), field.getLength(), field.getPrecision(), field.getScale(),
43+
field.isNullable(), field.getDefaultValue(), getUserType(field));
4544
}
4645

4746
private String typeName(DataType type) {
@@ -97,4 +96,10 @@ private boolean isIdentity(Field field) {
9796
return field.isSequence();
9897
}
9998

99+
private Name getUserType(Field field) {
100+
if (field.getDbEnum() != null) {
101+
return DSL.name(field.getDbEnum().getName());
102+
}
103+
return null;
104+
}
100105
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
- name: test_status
2+
values:
3+
- CANCELLED
4+
- ORDERED
5+
- SHIPPED

integration-test-db/src/main/resources/adam/schema/test.table.yml

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ fields:
2121
- name: "col5"
2222
dataType: "VARCHAR"
2323
nullable: true
24+
- name: "col6"
25+
dataType: ENUM
26+
enumName: test_status
27+
nullable: true
2428
foreignKeys: []
2529
indexes:
2630
- name: "test_table_col1_key"

integration-test/src/test/java/ch/ergon/adam/integrationtest/plugin/GenerateJooqMetamodelTest.java

+27-21
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,31 @@
1515

1616
public class GenerateJooqMetamodelTest {
1717

18-
private static Path tempFolder;
19-
20-
@BeforeAll
21-
public static void setupTempFolder() throws IOException {
22-
tempFolder = Files.createTempDirectory("MetamodelTest");
23-
tempFolder.toFile().deleteOnExit();
24-
}
25-
26-
@Test
27-
public void testMetamodelGeneration() {
28-
AdamJooqMetamodelGenerator generator = new AdamJooqMetamodelGenerator("test", tempFolder,
29-
"yml-classpath://" + DEFAULT_SCHEMA_PACKAGE, null);
30-
try {
31-
generator.run();
32-
Path generated = tempFolder.resolve("test").resolve("tables").resolve("TestTableTable.java");
33-
assertTrue(generated.toFile().exists(), "Metamodel for test table must be generated");
34-
} catch (Exception e) {
35-
e.printStackTrace();
36-
fail(e.getMessage());
37-
}
38-
}
18+
private static Path tempFolder;
19+
20+
@BeforeAll
21+
public static void setupTempFolder() throws IOException {
22+
tempFolder = Files.createTempDirectory("MetamodelTest");
23+
tempFolder.toFile().deleteOnExit();
24+
}
25+
26+
@Test
27+
public void testMetamodelGeneration() {
28+
AdamJooqMetamodelGenerator generator = new AdamJooqMetamodelGenerator("test", tempFolder,
29+
"yml-classpath://" + DEFAULT_SCHEMA_PACKAGE, null);
30+
try {
31+
generator.run();
32+
Path tableFilePath = tempFolder.resolve("test").resolve("tables").resolve("TestTableTable.java");
33+
assertTrue(tableFilePath.toFile().exists(), "Metamodel for test table must be generated");
34+
35+
Path pojoFilePath = tempFolder.resolve("test").resolve("tables").resolve("pojos").resolve("TestTable.java");
36+
assertTrue(pojoFilePath.toFile().exists(), "Metamodel for test table pojo must be generated");
37+
38+
Path enumFilePath = tempFolder.resolve("test").resolve("enums").resolve("TestStatus.java");
39+
assertTrue(enumFilePath.toFile().exists(), "Metamodel for enums must be generated");
40+
} catch (Exception e) {
41+
e.printStackTrace();
42+
fail(e.getMessage());
43+
}
44+
}
3945
}

0 commit comments

Comments
 (0)