Skip to content

Commit 98ec129

Browse files
authored
Merge pull request #61 from NetoDevel/feature/add-template-openj9-with-docker
Feature/add template openj9 with docker
2 parents bf66658 + c1c3d11 commit 98ec129

File tree

17 files changed

+442
-5
lines changed

17 files changed

+442
-5
lines changed

generator-core/src/main/java/br/com/generator/core/Generator.java

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ public File addDependency(GeneratorOptions generatorOptions) throws IOException
2121
return generator.addDependecies(generatorOptions);
2222
}
2323

24+
public File addMavenPlugin(GeneratorOptions generatorOptions) throws IOException {
25+
return generator.addMavenPlugin(generatorOptions);
26+
}
27+
2428
public File addProperties(GeneratorOptions generatorOptions) throws IOException {
2529
return generator.addProperties(generatorOptions);
2630
}

generator-core/src/main/java/br/com/generator/core/GeneratorExecutor.java

+12
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ public File addDependecies(GeneratorOptions options) throws IOException {
3939
return fileGenerated;
4040
}
4141

42+
public File addMavenPlugin(GeneratorOptions options) throws IOException {
43+
String contentTemplate = loadPom(options.getTemplatePath());
44+
String contentReplaced = templateEngine.replaceValues(contentTemplate, options.getKeyValue());
45+
String addPluginValues = templateEngine.replaceValues(contentReplaced, options.getPluginValues());
46+
47+
File fileGenerated = new File(options.getDestination());
48+
FileUtils.writeStringToFile(fileGenerated, addPluginValues);
49+
50+
System.out.println("Add maven plugin in ".concat(options.getName()));
51+
return fileGenerated;
52+
}
53+
4254
public File addProperties(GeneratorOptions options) throws IOException {
4355
File loadFiled = new File(options.getTemplatePath());
4456

generator-core/src/main/java/br/com/generator/core/GeneratorOptions.java

+9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class GeneratorOptions {
88
private String templatePath;
99
private String name;
1010
private String properties;
11+
private Map<String, String> pluginValues;
1112
private Map<String, String> keyValue;
1213

1314
public String getDestination() {
@@ -49,4 +50,12 @@ public String getProperties() {
4950
public void setProperties(String properties) {
5051
this.properties = properties;
5152
}
53+
54+
public Map<String, String> getPluginValues() {
55+
return pluginValues;
56+
}
57+
58+
public void setPluginValues(Map<String, String> pluginValues) {
59+
this.pluginValues = pluginValues;
60+
}
5261
}

generator-core/src/main/java/br/com/generator/core/TemplateEngine.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ public class TemplateEngine implements EngineContract {
99

1010
public String replaceValues(String contentTemplate, Map<String, String> keyValues) {
1111
if (contentTemplate == null) throw new TemplateEngineException("contentTemplate can not be null");
12+
if (keyValues == null) return contentTemplate;
1213
Iterator it = keyValues.entrySet().iterator();
1314

1415
while (it.hasNext()) {
1516
Map.Entry<String, String> pair = (Map.Entry) it.next();
1617
if (contentTemplate.contains(pair.getKey()))
1718
contentTemplate = contentTemplate.replace(pair.getKey(), pair.getValue());
18-
// it.remove();
1919
}
2020

2121
return contentTemplate;

spring-boot-generate/pom.xml

+7-1
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,11 @@
5656
<artifactId>scala-library</artifactId>
5757
<version>2.11.0</version>
5858
</dependency>
59-
</dependencies>
59+
<dependency>
60+
<groupId>br.com.netodevel</groupId>
61+
<artifactId>generator-core</artifactId>
62+
<version>0.0.2.BUILD-SNAPSHOT</version>
63+
<scope>compile</scope>
64+
</dependency>
65+
</dependencies>
6066
</project>

spring-boot-generate/src/main/java/br/com/generate/helpers/ScaffoldInfoHelper.java

+31
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package br.com.generate.helpers;
22

3+
import br.com.generator.core.GeneratorExecutor;
4+
import br.com.generator.core.TemplateEngine;
35
import org.apache.commons.lang.SystemUtils;
46

57
import java.io.*;
68
import java.net.URISyntaxException;
9+
import java.nio.file.Files;
10+
import java.nio.file.Path;
711
import java.nio.file.Paths;
12+
import java.util.stream.Collectors;
13+
import java.util.stream.Stream;
814

915

1016
/**
@@ -137,4 +143,29 @@ public String getApplicationPropertiesDest() throws URISyntaxException {
137143
return getUserDir().concat("/src/main/resources/application.properties");
138144
}
139145

146+
public String getPathMainClass() {
147+
try (Stream<Path> paths = Files.walk(Paths.get(this.getUserDir()))) {
148+
String mainClass = paths
149+
.filter(Files::isRegularFile)
150+
.map(this::findMainClass).collect(Collectors.joining());
151+
return this.getPackage().concat(".").concat(mainClass).replace(".java", "");
152+
} catch (IOException e) {
153+
System.out.println("ERROR: ".concat(e.getMessage()));
154+
return null;
155+
}
156+
}
157+
158+
private String findMainClass(Path s) {
159+
try {
160+
String x = new GeneratorExecutor(new TemplateEngine()).loadPom(s.toAbsolutePath().toString());
161+
if (x.contains("@SpringBootApplication")) {
162+
File file = new File(s.toAbsolutePath().toString());
163+
return file.getName();
164+
}
165+
} catch (IOException e) {
166+
System.out.println("ERROR: ".concat(e.getMessage()));
167+
}
168+
return "";
169+
}
170+
140171
}

spring-scaffold-cli/src/main/java/br/com/command/template/TemplateHandler.java

+29-2
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,24 @@
44
import br.com.generator.core.GeneratorOptions;
55
import br.com.templates_java.ComposeTemplate;
66
import br.com.templates_java.config.jms_aws_sqs.*;
7+
import br.com.templates_java.config.openj9.OpenJ9DockerfileGenerator;
8+
import br.com.templates_java.config.openj9.OpenJ9MavenPluginGenerator;
79
import joptsimple.OptionSet;
810
import joptsimple.OptionSpec;
911
import org.springframework.boot.cli.command.options.OptionHandler;
1012
import org.springframework.boot.cli.command.status.ExitStatus;
1113

1214
import java.io.IOException;
1315
import java.net.URISyntaxException;
14-
import java.util.Collections;
1516
import java.util.HashMap;
1617
import java.util.List;
18+
import java.util.Map;
1719

1820
import static java.util.Arrays.asList;
1921

2022
public class TemplateHandler extends OptionHandler {
2123

22-
private List<String> templates = Collections.singletonList("jms-aws-sqs");
24+
private List<String> templates = asList("jms-aws-sqs", "openj9");
2325

2426
private OptionSpec<String> template;
2527
private OptionSpec<Void> listTemplates;
@@ -55,6 +57,30 @@ private ExitStatus executeTemplate(String template) {
5557
if (template.equals("jms-aws-sqs")) {
5658
return generateJmsAwsSQS();
5759
}
60+
if (template.equals("openj9")) {
61+
return generateOpenJ9();
62+
}
63+
return ExitStatus.OK;
64+
}
65+
66+
private ExitStatus generateOpenJ9() {
67+
try {
68+
GeneratorOptions generatorOptions = new GeneratorOptions();
69+
generatorOptions.setDestination(scaffoldInfo.getUserDir().concat("/deploy"));
70+
71+
GeneratorOptions pomOptions = new GeneratorOptions();
72+
pomOptions.setTemplatePath(scaffoldInfo.getPomPath());
73+
pomOptions.setDestination(scaffoldInfo.getPomDest());
74+
75+
Map<String, String> keyValue = new HashMap<>();
76+
keyValue.put("${main_class}", scaffoldInfo.getPathMainClass());
77+
pomOptions.setPluginValues(keyValue);
78+
79+
ComposeTemplate.runAll(scaffoldInfo.getPathPackage(), asList(new OpenJ9DockerfileGenerator(generatorOptions), new OpenJ9MavenPluginGenerator(pomOptions)));
80+
} catch (Exception e) {
81+
System.out.println("ERROR: ".concat(e.getMessage()));
82+
return ExitStatus.ERROR;
83+
}
5884
return ExitStatus.OK;
5985
}
6086

@@ -100,6 +126,7 @@ private boolean templateNotExists(String template) {
100126
private void output() {
101127
System.out.println("Templates available");
102128
System.out.println("* jms-aws-sqs");
129+
System.out.println("* openj9");
103130
}
104131

105132
}

spring-scaffold-cli/src/test/java/br/com/command/template/TemplateHandlerTest.java

+31
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.io.IOException;
1313

1414
import static org.junit.Assert.assertEquals;
15+
import static org.junit.Assert.assertTrue;
1516
import static org.mockito.Mockito.mock;
1617

1718
public class TemplateHandlerTest {
@@ -61,4 +62,34 @@ public void givenArgumentList_shoudListTemplates() throws Exception {
6162
templateHandler.run("--list");
6263
}
6364

65+
@Test
66+
public void givenOpenJ9_shouldReturnOk() throws Exception {
67+
ScaffoldInfoHelper scaffoldInfoHelper = mock(ScaffoldInfoHelper.class);
68+
Mockito.when(scaffoldInfoHelper.getUserDir()).thenReturn(temporaryPath.getAbsolutePath());
69+
Mockito.when(scaffoldInfoHelper.getPathPackage()).thenReturn("br.com.example");
70+
Mockito.when(scaffoldInfoHelper.getPathMainClass()).thenReturn("br.com.example.DemoApplication");
71+
Mockito.when(scaffoldInfoHelper.getPomPath()).thenReturn(getClass().getResource("/templates/template-fake-pom.xml").toURI().getPath());
72+
Mockito.when(scaffoldInfoHelper.getPomDest()).thenReturn(temporaryPath.getAbsolutePath().concat("/pom.xml"));
73+
74+
TemplateHandler templateHandler = new TemplateHandler(scaffoldInfoHelper);
75+
ExitStatus exitStatus = templateHandler.run("-t", "openj9");
76+
assertEquals(ExitStatus.OK, exitStatus);
77+
}
78+
79+
@Test
80+
public void givenOpenJ9_shouldCreateDockerfile() throws Exception {
81+
ScaffoldInfoHelper scaffoldInfoHelper = mock(ScaffoldInfoHelper.class);
82+
83+
Mockito.when(scaffoldInfoHelper.getPathMainClass()).thenReturn("br.com.example.DemoApplication");
84+
Mockito.when(scaffoldInfoHelper.getUserDir()).thenReturn(temporaryPath.getAbsolutePath());
85+
Mockito.when(scaffoldInfoHelper.getPomPath()).thenReturn(getClass().getResource("/templates/template-fake-pom.xml").toURI().getPath());
86+
Mockito.when(scaffoldInfoHelper.getPomDest()).thenReturn(temporaryPath.getAbsolutePath().concat("/pom.xml"));
87+
88+
TemplateHandler templateHandler = new TemplateHandler(scaffoldInfoHelper);
89+
templateHandler.run("-t", "openj9");
90+
91+
assertTrue(new File(temporaryPath.getAbsolutePath().concat("/deploy/Dockerfile")).exists());
92+
}
93+
94+
6495
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package br.com.templates_java.config.openj9;
2+
3+
import br.com.generator.core.Generator;
4+
import br.com.generator.core.GeneratorOptions;
5+
6+
import java.io.File;
7+
import java.io.IOException;
8+
9+
public class OpenJ9DockerfileGenerator extends Generator {
10+
11+
private GeneratorOptions generatorOptions;
12+
13+
public OpenJ9DockerfileGenerator(GeneratorOptions generatorOptions) {
14+
this.generatorOptions = generatorOptions;
15+
}
16+
17+
@Override
18+
public File runGenerate() throws IOException {
19+
this.generatorOptions.setTemplatePath("/templates/config/openj9/dockerfile-template.txt");
20+
this.generatorOptions.setName("Dockerfile");
21+
return generate(this.generatorOptions);
22+
}
23+
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package br.com.templates_java.config.openj9;
2+
3+
import br.com.generator.core.Generator;
4+
import br.com.generator.core.GeneratorOptions;
5+
6+
import java.io.File;
7+
import java.io.IOException;
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
11+
public class OpenJ9MavenPluginGenerator extends Generator {
12+
13+
private GeneratorOptions generatorOptions;
14+
15+
public OpenJ9MavenPluginGenerator(GeneratorOptions generatorOptions) {
16+
this.generatorOptions = generatorOptions;
17+
}
18+
19+
@Override
20+
public File runGenerate() throws IOException {
21+
String plugin = "\n" +
22+
"<plugins>\n" +
23+
" <plugin>\n" +
24+
" <groupId>org.apache.maven.plugins</groupId>\n" +
25+
" <artifactId>maven-shade-plugin</artifactId>\n" +
26+
" <version>2.4.3</version>\n" +
27+
" <dependencies>\n" +
28+
" <dependency>\n" +
29+
" <groupId>org.springframework.boot</groupId>\n" +
30+
" <artifactId>spring-boot-maven-plugin</artifactId>\n" +
31+
" <version>2.1.5.RELEASE</version>\n" +
32+
" </dependency>\n" +
33+
" </dependencies>\n" +
34+
" <executions>\n" +
35+
" <execution>\n" +
36+
" <phase>package</phase>\n" +
37+
" <goals>\n" +
38+
" <goal>shade</goal>\n" +
39+
" </goals>\n" +
40+
" <configuration>\n" +
41+
" <transformers>\n" +
42+
" <transformer\n" +
43+
" implementation=\"org.apache.maven.plugins.shade.resource.AppendingTransformer\">\n" +
44+
" <resource>META-INF/spring.handlers</resource>\n" +
45+
" </transformer>\n" +
46+
" <transformer\n" +
47+
" implementation=\"org.springframework.boot.maven.PropertiesMergingResourceTransformer\">\n" +
48+
" <resource>META-INF/spring.factories</resource>\n" +
49+
" </transformer>\n" +
50+
" <transformer\n" +
51+
" implementation=\"org.apache.maven.plugins.shade.resource.AppendingTransformer\">\n" +
52+
" <resource>META-INF/spring.schemas</resource>\n" +
53+
" </transformer>\n" +
54+
" <transformer\n" +
55+
" implementation=\"org.apache.maven.plugins.shade.resource.ServicesResourceTransformer\"/>\n" +
56+
" <transformer\n" +
57+
" implementation=\"org.apache.maven.plugins.shade.resource.ManifestResourceTransformer\">\n" +
58+
" <mainClass>${main_class}</mainClass>\n" +
59+
" </transformer>\n" +
60+
" </transformers>\n" +
61+
" </configuration>\n" +
62+
" </execution>\n" +
63+
" </executions>\n" +
64+
" <configuration>\n" +
65+
" <createDependencyReducedPom>false</createDependencyReducedPom>\n" +
66+
" </configuration>\n" +
67+
" </plugin> \n";
68+
69+
Map<String, String> keyValue = new HashMap<String, String>();
70+
keyValue.put("<plugins>", plugin);
71+
this.generatorOptions.setKeyValue(keyValue);
72+
this.generatorOptions.setName("pom.xml");
73+
74+
return addMavenPlugin(this.generatorOptions);
75+
}
76+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM adoptopenjdk/openjdk8-openj9
2+
3+
RUN mkdir /opt/shareclasses
4+
RUN mkdir /opt/app
5+
6+
ADD ../target/*.jar /opt/app.jar
7+
8+
EXPOSE 8080
9+
10+
CMD ["java", "-Xmx512m", "-XX:+IdleTuningGcOnIdle", "-Xtune:virtualized", "-Xscmx512m", "-Xscmaxaot100m", "-Xshareclasses:cacheDir=/opt/shareclasses", "-jar", "/opt/app.jar"]

0 commit comments

Comments
 (0)