You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by sg...@apache.org on 2021/01/04 23:02:50 UTC
[freemarker-generator] 05/06: FREEMARKER-161 [freemarker-generator]
Allow multiple transformations on the CLI
This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-161
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
commit d7d9639b57399cb841109505a33fba0045bd0b37
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Sat Dec 26 21:57:02 2020 +0100
FREEMARKER-161 [freemarker-generator] Allow multiple transformations on the CLI
---
.../base/template/TemplateSourceFactory.java | 40 ----------
.../template/TemplateTransformationsBuilder.java | 38 +++++++---
.../template/TemplateSourceFactoryTest.java | 88 ----------------------
.../TemplateTransformationsBuilderTest.java | 48 +++++++++++-
4 files changed, 72 insertions(+), 142 deletions(-)
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateSourceFactory.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateSourceFactory.java
deleted file mode 100644
index ab53ee3..0000000
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateSourceFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.freemarker.generator.base.template;
-
-import org.apache.freemarker.generator.base.datasource.DataSource;
-import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
-import org.apache.freemarker.generator.base.util.UriUtils;
-
-import java.io.File;
-
-public abstract class TemplateSourceFactory {
-
- public static TemplateSource create(String str) {
- if (isTemplatePath(str)) {
- return TemplateSource.fromPath(str);
- } else {
- try (DataSource dataSource = DataSourceFactory.create(str)) {
- return TemplateSource.fromCode(dataSource.getName(), dataSource.getText());
- }
- }
- }
-
- private static boolean isTemplatePath(String str) {
- return !UriUtils.isUri(str) && !new File(str).exists();
- }
-}
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
index 261e3f4..e352173 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/template/TemplateTransformationsBuilder.java
@@ -17,6 +17,8 @@
package org.apache.freemarker.generator.base.template;
import org.apache.freemarker.generator.base.FreeMarkerConstants.Location;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
import org.apache.freemarker.generator.base.file.RecursiveFileSupplier;
import org.apache.freemarker.generator.base.util.StringUtils;
import org.apache.freemarker.generator.base.util.Validate;
@@ -154,10 +156,12 @@ public class TemplateTransformationsBuilder {
return resolveTemplateFile(source, output);
} else if (isTemplateDirectoryFound(source)) {
return resolveTemplateDirectory(source, output);
- } else if (isTemplatePath(source)) {
- return resolveTemplatePath(source, output);
+ } else if (isTemplateHttpUrl(source)) {
+ return resolveTemplateHttpUrl(source, output);
+ } else if (isTemplateUri(source)) {
+ return resolveTemplateUri(source, output);
} else {
- return resolveTemplateCode(source, output);
+ return resolveTemplatePath(source, output);
}
}
@@ -184,23 +188,29 @@ public class TemplateTransformationsBuilder {
return templateTransformations;
}
- private List<TemplateTransformation> resolveTemplatePath(String source, File out) {
+ private List<TemplateTransformation> resolveTemplateHttpUrl(String source, File out) {
final TemplateSource templateSource = templateSource(source);
final TemplateOutput templateOutput = templateOutput(out);
return singletonList(new TemplateTransformation(templateSource, templateOutput));
}
- private TemplateTransformation resolveInteractiveTemplate(File out) {
+ private List<TemplateTransformation> resolveTemplateUri(String source, File out) {
+ final TemplateSource templateSource = templateSource(source);
final TemplateOutput templateOutput = templateOutput(out);
- return new TemplateTransformation(interactiveTemplate, templateOutput);
+ return singletonList(new TemplateTransformation(templateSource, templateOutput));
}
- private List<TemplateTransformation> resolveTemplateCode(String source, File out) {
- final TemplateSource templateSource = TemplateSource.fromCode(Location.INTERACTIVE, source);
+ private List<TemplateTransformation> resolveTemplatePath(String source, File out) {
+ final TemplateSource templateSource = TemplateSource.fromPath(source);
final TemplateOutput templateOutput = templateOutput(out);
return singletonList(new TemplateTransformation(templateSource, templateOutput));
}
+ private TemplateTransformation resolveInteractiveTemplate(File out) {
+ final TemplateOutput templateOutput = templateOutput(out);
+ return new TemplateTransformation(interactiveTemplate, templateOutput);
+ }
+
private TemplateOutput templateOutput(File templateOutputFile) {
if (writer == null && templateOutputFile != null) {
return TemplateOutput.fromFile(templateOutputFile);
@@ -210,7 +220,9 @@ public class TemplateTransformationsBuilder {
}
private TemplateSource templateSource(String source) {
- return TemplateSourceFactory.create(source);
+ try (DataSource dataSource = DataSourceFactory.create(source)) {
+ return TemplateSource.fromCode(dataSource.getName(), dataSource.getText());
+ }
}
private String getInclude() {
@@ -251,8 +263,12 @@ public class TemplateTransformationsBuilder {
return file.exists() && file.isDirectory();
}
- private static boolean isTemplatePath(String source) {
- return !isTemplateFileFound(source) && !isTemplateDirectoryFound(source);
+ private static boolean isTemplateHttpUrl(String source) {
+ return source.contains("http://") || source.contains("https://");
+ }
+
+ private static boolean isTemplateUri(String source) {
+ return source.contains("://");
}
private static RecursiveFileSupplier templateFilesSupplier(String source, String include, String exclude) {
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateSourceFactoryTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateSourceFactoryTest.java
deleted file mode 100644
index 2088e4b..0000000
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateSourceFactoryTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.freemarker.generator.template;
-
-import org.apache.freemarker.generator.base.template.TemplateSource;
-import org.apache.freemarker.generator.base.template.TemplateSource.Origin;
-import org.apache.freemarker.generator.base.template.TemplateSourceFactory;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-public class TemplateSourceFactoryTest {
-
- private static final String ANY_TEMPLATE_PATH = "any/template/path.ftl";
- private static final String ANY_FILE_NAME = "pom.xml";
- private static final String ANY_URL = "https://raw.githubusercontent.com/apache/freemarker-generator/master/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl";
- private static final String ANY_ENV_VARIABLE = "JAVA_HOME";
- private static final String ANY_ENV_URI = "env:///" + ANY_ENV_VARIABLE;
-
- @Test
- public void shouldCreateFromTemplatePath() {
- final TemplateSource templateSource = TemplateSourceFactory.create(ANY_TEMPLATE_PATH);
-
- assertEquals(ANY_TEMPLATE_PATH, templateSource.getName());
- assertEquals(Origin.TEMPLATE_LOADER, templateSource.getOrigin());
- assertEquals(ANY_TEMPLATE_PATH, templateSource.getPath());
- assertNull(templateSource.getCode());
- }
-
- @Test
- public void shouldCreateFromFile() {
- final TemplateSource templateSource = TemplateSourceFactory.create(ANY_FILE_NAME);
-
- assertEquals(ANY_FILE_NAME, templateSource.getName());
- assertEquals(Origin.TEMPLATE_CODE, templateSource.getOrigin());
- assertNull(templateSource.getPath());
- assertFalse(templateSource.getCode().isEmpty());
- }
-
- @Test
- public void shouldCreateFromEnvironmentVariable() {
- final TemplateSource templateSource = TemplateSourceFactory.create(ANY_ENV_URI);
-
- assertEquals(ANY_ENV_VARIABLE, templateSource.getName());
- assertEquals(Origin.TEMPLATE_CODE, templateSource.getOrigin());
- assertNull(templateSource.getPath());
- assertFalse(templateSource.getCode().isEmpty());
- }
-
- @Test
- // @Ignore("Requires internet access")
- public void shouldCreateFromUrl() {
- final TemplateSource templateSource = TemplateSourceFactory.create(ANY_URL);
-
- assertNotNull(templateSource.getName());
- assertEquals(Origin.TEMPLATE_CODE, templateSource.getOrigin());
- assertNull(templateSource.getPath());
- assertFalse(templateSource.getCode().isEmpty());
- }
-
- @Test
- // @Ignore("Requires internet access")
- public void shouldCreateFromNamedUri() {
- final TemplateSource templateSource = TemplateSourceFactory.create("info=" + ANY_URL);
-
- assertEquals("info", templateSource.getName());
- assertEquals(Origin.TEMPLATE_CODE, templateSource.getOrigin());
- assertNull(templateSource.getPath());
- assertFalse(templateSource.getCode().isEmpty());
- }
-}
diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateTransformationsBuilderTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateTransformationsBuilderTest.java
index 1d86574..66d3c9a 100644
--- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateTransformationsBuilderTest.java
+++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/template/TemplateTransformationsBuilderTest.java
@@ -34,8 +34,10 @@ import java.util.List;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
public class TemplateTransformationsBuilderTest {
@@ -43,6 +45,8 @@ public class TemplateTransformationsBuilderTest {
private static final String OTHER_TEMPLATE_FILE_NAME = "src/test/template/nginx/nginx.conf.ftl";
private static final String ANY_TEMPLATE_PATH = "template/info.ftl";
private static final String ANY_TEMPLATE_DIRECTORY_NAME = "src/test/template";
+ private static final String ANY_TEMPLATE_URL = "https://raw.githubusercontent.com/apache/freemarker-generator/master/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl";
+ private static final String ANY_ENV_URI = "env:///JAVA_HOME";
// === Interactive Template =============================================
@@ -93,7 +97,7 @@ public class TemplateTransformationsBuilderTest {
assertNotNull(templateSource.getName());
assertEquals(Origin.TEMPLATE_CODE, templateSource.getOrigin());
- assertNotNull(templateSource.getCode());
+ assertTrue(templateSource.getCode().contains("Licensed to the Apache Software Foundation"));
assertNull(templateSource.getPath());
assertEquals(StandardCharsets.UTF_8, templateSource.getEncoding());
@@ -129,10 +133,10 @@ public class TemplateTransformationsBuilderTest {
final TemplateSource templateSource = transformations.get(0).getTemplateSource();
final TemplateOutput templateOutput = transformations.get(0).getTemplateOutput();
- assertNotNull(templateSource.getName());
+ assertEquals(ANY_TEMPLATE_PATH, templateSource.getName());
assertEquals(Origin.TEMPLATE_LOADER, templateSource.getOrigin());
assertNull(templateSource.getCode());
- assertNotNull(templateSource.getPath());
+ assertEquals(ANY_TEMPLATE_PATH, templateSource.getPath());
assertEquals(StandardCharsets.UTF_8, templateSource.getEncoding());
assertNotNull(templateOutput.getWriter());
@@ -189,6 +193,44 @@ public class TemplateTransformationsBuilderTest {
assertEquals("application.properties", transformations.get(0).getTemplateSource().getName());
}
+ // === Template URL ===============================================
+
+ @Test
+ public void shouldCreateFromTemplateUrl() {
+ final List<TemplateTransformation> transformations = builder()
+ .addTemplateSource(ANY_TEMPLATE_URL)
+ .setWriter(stdoutWriter())
+ .build();
+
+ final TemplateSource templateSource = transformations.get(0).getTemplateSource();
+
+ assertEquals(1, transformations.size());
+ assertEquals(ANY_TEMPLATE_URL, templateSource.getName());
+ assertEquals(Origin.TEMPLATE_CODE, templateSource.getOrigin());
+ assertNull(templateSource.getPath());
+ assertEquals(StandardCharsets.UTF_8, templateSource.getEncoding());
+ assertTrue(templateSource.getCode().contains("<#ftl"));
+ }
+
+ // === Template ENV Variable =============================================
+
+ @Test
+ public void shouldCreateFromTemplateEnvironmentVariable() {
+ final List<TemplateTransformation> transformations = builder()
+ .addTemplateSource(ANY_ENV_URI)
+ .setWriter(stdoutWriter())
+ .build();
+
+ final TemplateSource templateSource = transformations.get(0).getTemplateSource();
+
+ assertEquals(1, transformations.size());
+ assertEquals("JAVA_HOME", templateSource.getName());
+ assertEquals(Origin.TEMPLATE_CODE, templateSource.getOrigin());
+ assertNull(templateSource.getPath());
+ assertEquals(StandardCharsets.UTF_8, templateSource.getEncoding());
+ assertFalse(templateSource.getCode().isEmpty());
+ }
+
private TemplateTransformationsBuilder builder() {
return TemplateTransformationsBuilder
.builder();