Skip to content

Commit

Permalink
Merge pull request #40 from alberlau/feature/support-multiple-templat…
Browse files Browse the repository at this point in the history
…e-engines

Feature/support multiple template engines
  • Loading branch information
alberlau committed Apr 20, 2024
2 parents 7136f89 + bb3a9aa commit 30e6ec6
Show file tree
Hide file tree
Showing 19 changed files with 225 additions and 40 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Modify your pom.xml as bellow and adjust necessary parameters:
<plugin>
<groupId>org.db2code</groupId>
<artifactId>java-pojo-generator-mojo</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
<configuration>
<jdbcUrl>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM '${project.basedir}/init.sql'</jdbcUrl>
<jdbcClassName>org.h2.Driver</jdbcClassName>
Expand Down Expand Up @@ -116,6 +116,7 @@ Optionally if you need to attach generated code to your source code add this:
- __doNotGenerateTables__ list of tables to be not generated. Can be regexp.
- __prefix__ prefix to be added to generated classes. For CLASS_PER_TABLE strategy.
- __suffix__ suffix to be added to generated classes. For CLASS_PER_TABLE strategy.
- __templatingProviderClass__ class to be used for templating. Implementation of org.db2code.generator.java.pojo.TemplatingProvider . Default is org.db2code.generator.java.pojo.MustacheTemplatingProvider . org.db2code.generator.freemarker.FreemarkerTemplatingProvider is also available, you'll need to add dependency to it(org.db2code:freemarker-templating-provider).


You can customize generation template, by providing __templates__ list:
Expand Down
2 changes: 1 addition & 1 deletion core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.db2code</groupId>
<artifactId>DB2Code</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</parent>

<artifactId>core</artifactId>
Expand Down
38 changes: 38 additions & 0 deletions freemarker-templating-provider/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.db2code</groupId>
<artifactId>DB2Code</artifactId>
<version>1.3.8</version>
</parent>

<artifactId>freemarker-templating-provider</artifactId>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.db2code</groupId>
<artifactId>java-pojo-generator</artifactId>
<version>1.3.8</version>
</dependency>
<!-- Add the FreeMarker templating engine -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.32</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package org.db2code.generator.freemarker;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.commons.io.FilenameUtils;
import org.db2code.generator.java.pojo.TemplatingProvider;

public class FreemarkerTemplatingProvider implements TemplatingProvider {
@Override
public String merge(Object context, String templateLocation) {
// Instantiating the Freemarker Configuration class
Configuration config = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
// Setting the directory for the template
// Loading the template
StringWriter out;
try {
String fullPath =
FilenameUtils.getFullPathNoEndSeparator(
new File(new URI(templateLocation).getPath()).getAbsolutePath());
config.setDirectoryForTemplateLoading(new File(fullPath));
String name = FilenameUtils.getName(templateLocation);
Template template = config.getTemplate(name);
// Merging the template with the data model
out = new StringWriter();
template.process(context, out);
} catch (IOException | TemplateException e) {
throw new RuntimeException(e);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}

return out.toString();
}
}
4 changes: 2 additions & 2 deletions java-pojo-generator-abstract-tool/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.db2code</groupId>
<artifactId>DB2Code</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</parent>

<properties>
Expand All @@ -22,7 +22,7 @@
<dependency>
<groupId>org.db2code</groupId>
<artifactId>java-pojo-generator</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static org.apache.commons.lang3.StringUtils.isEmpty;

import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -36,7 +37,7 @@ private void _execute() {
metadataExtractor = new MetadataExtractor(connectionProvider);
}
ClassWriter classWriter = new ClassWriter();
Generator generator = new Generator();
Generator generator = createGenerator();
GeneratorExecutor generatorExecutor =
new GeneratorExecutor(metadataExtractor, classWriter, generator);

Expand Down Expand Up @@ -67,6 +68,30 @@ private void _execute() {
}
}

private Generator createGenerator() {
Object o;
try {
String templatingProviderClass = getTemplatingProviderClass();
if (templatingProviderClass == null) {
templatingProviderClass =
"org.db2code.generator.java.pojo.MustacheTemplatingProvider";
}

o = Class.forName(templatingProviderClass).getDeclaredConstructor().newInstance();
} catch (InstantiationException
| IllegalAccessException
| InvocationTargetException
| NoSuchMethodException
| ClassNotFoundException e) {
throw new RuntimeException(e);
}
if (!(o instanceof TemplatingProvider)) {
throw new RuntimeException(
"Templating provider class should implement TemplatingProvider interface!");
}
return new Generator((TemplatingProvider) o);
}

private static void closeConnectionProviderIfNeeded(ConnectionProvider connectionProvider) {
if (connectionProvider != null) {
try {
Expand Down Expand Up @@ -152,4 +177,6 @@ private static boolean isWindows() {
String getPrefix();

String getSuffix();

String getTemplatingProviderClass();
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public class MockedTool implements AbstractTool {
private String typeMapFile;
private String prefix;
private String suffix;
private String templatingProviderClass;

@Override
public List<Item> getExtractionParameters() {
Expand Down Expand Up @@ -114,6 +115,11 @@ public String getSuffix() {
return suffix;
}

@Override
public String getTemplatingProviderClass() {
return templatingProviderClass;
}

public void setExtractionParameters(List<Item> extractionParameters) {
this.extractionParameters = extractionParameters;
}
Expand Down
4 changes: 2 additions & 2 deletions java-pojo-generator-cmd/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.db2code</groupId>
<artifactId>DB2Code</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</parent>

<artifactId>java-pojo-generator-cmd</artifactId>
Expand All @@ -21,7 +21,7 @@
<dependency>
<groupId>org.db2code</groupId>
<artifactId>java-pojo-generator-abstract-tool</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ public class ToolWithSettings implements AbstractTool {
private String typeMapFile;
private String prefix;
private String suffix;
private String templatingProviderClass;
}
20 changes: 20 additions & 0 deletions java-pojo-generator-mojo-example/pojo.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package ${package};

@SuppressWarnings({"PMD.DataClass"})
public class ${className} {

<#list properties as property>
private ${property.propertyType} ${property.propertyName};
</#list>

<#list properties as property>
public ${property.propertyType} get${property.methodName}() {
return this.${property.propertyName};
}

public void set${property.methodName}(${property.propertyType} ${property.propertyName}) {
this.${property.propertyName} = ${property.propertyName};
}
</#list>

}
34 changes: 32 additions & 2 deletions java-pojo-generator-mojo-example/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.db2code</groupId>
<artifactId>DB2Code</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</parent>

<artifactId>java-pojo-generator-mojo-example</artifactId>
Expand Down Expand Up @@ -66,7 +66,7 @@
<plugin>
<groupId>org.db2code</groupId>
<artifactId>java-pojo-generator-mojo</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
<executions>
<execution>
<id>exportMetadata</id>
Expand Down Expand Up @@ -290,13 +290,43 @@
</templates>
</configuration>
</execution>
<execution>
<id>constantsExecutionFreemarker</id>
<goals>
<goal>generatePojo</goal>
</goals>
<configuration>
<jdbcUrl>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM '${project.basedir}/init.sql'</jdbcUrl>
<jdbcClassName>org.h2.Driver</jdbcClassName>
<extractionParameters>
<item>
<schemaPattern>TEST_SCHEMA</schemaPattern>
<catalog>TEST</catalog>
<tableNamePattern>%</tableNamePattern>
</item>
</extractionParameters>
<baseDir>${project.basedir}</baseDir>
<targetFolder>target/generated-sources</targetFolder>
<targetPackage>test.constants</targetPackage>
<suffix>Freemarker</suffix>
<templatingProviderClass>org.db2code.generator.freemarker.FreemarkerTemplatingProvider</templatingProviderClass>
<templates>
<template>${project.baseUri}pojo.ftl</template>
</templates>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
</dependency>
<dependency>
<groupId>org.db2code</groupId>
<artifactId>freemarker-templating-provider</artifactId>
<version>1.3.8</version>
</dependency>
</dependencies>
</plugin>
<plugin>
Expand Down
6 changes: 3 additions & 3 deletions java-pojo-generator-mojo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.db2code</groupId>
<artifactId>DB2Code</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</parent>

<properties>
Expand All @@ -22,7 +22,7 @@
<dependency>
<groupId>org.db2code</groupId>
<artifactId>java-pojo-generator</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
Expand All @@ -48,7 +48,7 @@
<dependency>
<groupId>org.db2code</groupId>
<artifactId>java-pojo-generator-abstract-tool</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
<scope>compile</scope>
</dependency>
</dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public class PojoMojo extends AbstractMojo implements AbstractTool {

@Parameter private String prefix;
@Parameter private String suffix;
@Parameter private String templatingProviderClass;

@Override
public void execute() {
Expand Down Expand Up @@ -138,4 +139,9 @@ public String getPrefix() {
public String getSuffix() {
return suffix;
}

@Override
public String getTemplatingProviderClass() {
return templatingProviderClass;
}
}
4 changes: 2 additions & 2 deletions java-pojo-generator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.db2code</groupId>
<artifactId>DB2Code</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
</parent>

<artifactId>java-pojo-generator</artifactId>
Expand Down Expand Up @@ -37,7 +37,7 @@
<dependency>
<groupId>org.db2code</groupId>
<artifactId>core</artifactId>
<version>1.3.7</version>
<version>1.3.8</version>
<scope>compile</scope>
</dependency>
<dependency>
Expand Down

0 comments on commit 30e6ec6

Please sign in to comment.