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 2020/08/23 18:15:40 UTC
[freemarker-generator] branch FREEMARKER-153 updated:
FREEMARKER-153 Bootstrap configuration files from system property
"app.home"
This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-153
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-153 by this push:
new 7bfd310 FREEMARKER-153 Bootstrap configuration files from system property "app.home"
7bfd310 is described below
commit 7bfd310275998af47d36c2276246f50035a02c60
Author: Siegfried Goeschl <si...@gmail.com>
AuthorDate: Sun Aug 23 20:15:26 2020 +0200
FREEMARKER-153 Bootstrap configuration files from system property "app.home"
---
.../generator/base/FreeMarkerConstants.java | 19 +++++++++-
.../template/TemplateTransformationsBuilder.java | 1 -
.../org/apache/freemarker/generator/cli/Main.java | 26 +++++++++++---
.../cli/config/TemplateDirectorySupplier.java | 42 +++++++++++-----------
.../freemarker/generator/cli/AbstractMainTest.java | 7 +++-
5 files changed, 68 insertions(+), 27 deletions(-)
diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
index 779cf8b..86a69ab 100644
--- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
+++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
@@ -47,6 +47,12 @@ public class FreeMarkerConstants {
private Configuration() {
}
+ // The default config file for freemarker generator
+ public static final String CONFIG_FILE_NAME = "config/freemarker-generator.properties";
+
+ /** The user's optional ".freemarker-generator" directory in the user's home directory */
+ public static final String USER_CONFIGURATION_DIR_NAME = ".freemarker-generator";
+
/** Prefix to extract tools from 'freemarker-generator.properties' */
public static final String TOOLS_PREFIX = "freemarker.tools.";
@@ -69,7 +75,6 @@ public class FreeMarkerConstants {
public static final String STDIN = "stdin";
public static final String SYSTEM = "system";
public static final String STRING = "string";
- public static final String URL = "url";
}
public static class Model {
@@ -87,4 +92,16 @@ public class FreeMarkerConstants {
public static final String FREEMARKER_USER_SYSTEM_PROPERTIES = "freemarker.user.system.properties";
public static final String FREEMARKER_USER_PARAMETERS = "freemarker.user.parameters";
}
+
+ public static class SystemProperties {
+
+ private SystemProperties() {
+ }
+
+ /** Installation directory of "freemarker-generator" when invoked with shell wrapper */
+ public static final String APP_HOME = "app.home";
+
+ /** Home directory of the user */
+ public static final String USER_HOME = "user.home";
+ }
}
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 5411152..bdef609 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
@@ -16,7 +16,6 @@
*/
package org.apache.freemarker.generator.base.template;
-import org.apache.freemarker.generator.base.FreeMarkerConstants;
import org.apache.freemarker.generator.base.FreeMarkerConstants.Location;
import org.apache.freemarker.generator.base.file.RecursiveFileSupplier;
import org.apache.freemarker.generator.base.util.NonClosableWriterWrapper;
diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
index f87cd35..4869909 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/Main.java
@@ -16,6 +16,8 @@
*/
package org.apache.freemarker.generator.cli;
+import org.apache.freemarker.generator.base.FreeMarkerConstants.Configuration;
+import org.apache.freemarker.generator.base.FreeMarkerConstants.SystemProperties;
import org.apache.freemarker.generator.base.parameter.ParameterModelSupplier;
import org.apache.freemarker.generator.base.util.ClosableUtils;
import org.apache.freemarker.generator.base.util.ListUtils;
@@ -47,14 +49,14 @@ import java.util.stream.IntStream;
import java.util.stream.Stream;
import static java.util.Objects.requireNonNull;
+import static org.apache.freemarker.generator.base.util.StringUtils.isEmpty;
+import static org.apache.freemarker.generator.base.util.StringUtils.isNotEmpty;
import static org.apache.freemarker.generator.cli.config.Suppliers.propertiesSupplier;
import static org.apache.freemarker.generator.cli.config.Suppliers.templateDirectorySupplier;
@Command(description = "Apache FreeMarker Generator", name = "freemarker-generator", mixinStandardHelpOptions = true, versionProvider = GitVersionProvider.class)
public class Main implements Callable<Integer> {
- private static final String FREEMARKER_GENERATOR_PROPERTY_FILE = "freemarker-generator.properties";
-
@ArgGroup(multiplicity = "1")
TemplateSourceOptions templateSourceOptions;
@@ -87,7 +89,7 @@ public class Main implements Callable<Integer> {
@Option(names = { "-s", "--data-source" }, description = "data source used for rendering")
List<String> dataSources;
- @Option(names = { "--config" }, defaultValue = FREEMARKER_GENERATOR_PROPERTY_FILE, description = "FreeMarker Generator configuration file")
+ @Option(names = { "--config" }, description = "FreeMarker Generator configuration file")
String configFile;
@Option(names = { "--data-source-include" }, description = "file include pattern for data sources")
@@ -166,7 +168,8 @@ public class Main implements Callable<Integer> {
private Integer onCall() {
updateSystemProperties();
- final Properties configuration = loadFreeMarkerCliConfiguration(configFile);
+ final String currentConfigFile = isNotEmpty(configFile) ? configFile : getDefaultConfigFileName();
+ final Properties configuration = loadFreeMarkerCliConfiguration(currentConfigFile);
final List<File> templateDirectories = getTemplateDirectories(templateDir);
final Settings settings = settings(configuration, templateDirectories);
@@ -262,7 +265,22 @@ public class Main implements Callable<Integer> {
return templateDirectorySupplier(additionalTemplateDir).get();
}
+ /**
+ * Get the default configuration file based on the "app.home" system property
+ * provided by the shell wrapper.
+ *
+ * @return default configuration file name or null
+ */
+ private static String getDefaultConfigFileName() {
+ final String appHome = System.getProperty(SystemProperties.APP_HOME);
+ return isNotEmpty(appHome) ? new File(appHome, Configuration.CONFIG_FILE_NAME).getAbsolutePath() : null;
+ }
+
private static Properties loadFreeMarkerCliConfiguration(String fileName) {
+ if (isEmpty(fileName)) {
+ return new Properties();
+ }
+
final Properties properties = propertiesSupplier(fileName).get();
if (properties != null) {
return properties;
diff --git a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/TemplateDirectorySupplier.java b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/TemplateDirectorySupplier.java
index 8e644a9..c92c680 100644
--- a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/TemplateDirectorySupplier.java
+++ b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/TemplateDirectorySupplier.java
@@ -17,36 +17,29 @@
package org.apache.freemarker.generator.cli.config;
import org.apache.commons.io.FilenameUtils;
+import org.apache.freemarker.generator.base.FreeMarkerConstants.Configuration;
+import org.apache.freemarker.generator.base.FreeMarkerConstants.SystemProperties;
+import org.apache.freemarker.generator.base.util.StringUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
import java.util.function.Supplier;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;
+import static org.apache.freemarker.generator.base.util.StringUtils.isNotEmpty;
/**
* Determine a list of directories to load a relative template file in the following order
* <ol>
* <li>User-defined template directory</li>
- * <li>Current working directory</li>
* <li>~/.freemarker-generator</li>
* <li>Application installation directory</li>
* </ol>
*/
public class TemplateDirectorySupplier implements Supplier<List<File>> {
- /** Installation directory of "freemarker-generator" when invoked with shell wrapper */
- private static final String APP_HOME = "app.home";
-
- /** Home directory of the user */
- private static final String USER_HOME = "user.home";
-
- /** The user's optional "freemarker-generator" directory */
- private static final String USER_CONFIGURATION_DIR_NAME = ".freemarker-generator";
-
/** Additional template directory, e.g. provided as command line parameter */
private final String additionalTemplateDirName;
@@ -57,7 +50,7 @@ public class TemplateDirectorySupplier implements Supplier<List<File>> {
@Override
public List<File> get() {
return templateLoaderDirectories().stream()
- .filter(Objects::nonNull)
+ .filter(StringUtils::isNotEmpty)
.map(FilenameUtils::normalize)
.map(File::new)
.distinct()
@@ -74,24 +67,33 @@ public class TemplateDirectorySupplier implements Supplier<List<File>> {
}
private String additionalTemplatesDirectory() {
- return additionalTemplateDirName != null ? new File(additionalTemplateDirName).getAbsolutePath() : null;
+ return isNotEmpty(additionalTemplateDirName) ? new File(additionalTemplateDirName).getAbsolutePath() : null;
}
private String userConfigDirectory() {
- final String userHomeDir = System.getProperty(USER_HOME);
- return new File(userHomeDir, USER_CONFIGURATION_DIR_NAME).getAbsolutePath();
+ final String userHomeDir = System.getProperty(SystemProperties.USER_HOME);
+ if (isNotEmpty(userHomeDir)) {
+ return new File(userHomeDir, Configuration.USER_CONFIGURATION_DIR_NAME).getAbsolutePath();
+ } else {
+ return null;
+ }
}
private String userConfigTemplatesDirectory() {
- return userConfigDirectory() + "/templates";
+ return templatesDirectory(userConfigDirectory());
}
- private static String applicationDirectory() {
- return System.getProperty(APP_HOME);
+ private static String applicationTemplatesDirectory() {
+ final String appHomeDir = System.getProperty(SystemProperties.APP_HOME);
+ return templatesDirectory(appHomeDir);
}
- private static String applicationTemplatesDirectory() {
- return applicationDirectory() + "/templates";
+ private static String templatesDirectory(String baseDirName) {
+ if (isNotEmpty(baseDirName)) {
+ return new File(baseDirName, "templates").getAbsolutePath();
+ } else {
+ return null;
+ }
}
private static boolean isDirectory(File directory) {
diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/AbstractMainTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/AbstractMainTest.java
index 94b8a00..640535c 100644
--- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/AbstractMainTest.java
+++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/AbstractMainTest.java
@@ -26,6 +26,7 @@ import java.util.Arrays;
*/
abstract class AbstractMainTest {
+ protected static final boolean WRITE_TO_STDOUT = false;
protected static final String TEST_TEMPLATES_DIRECTORY = "./src/app/templates";
protected static final String TEST_CONFIG_FILE = "./src/app/config/freemarker-generator.properties";
@@ -35,7 +36,11 @@ abstract class AbstractMainTest {
try (Writer writer = new StringWriter()) {
final String[] args = buildFinalCommandLine(commandLine).split(SPACE);
if (Main.execute(args, writer) == 0) {
- return writer.toString();
+ final String output = writer.toString();
+ if (WRITE_TO_STDOUT) {
+ System.out.println(output);
+ }
+ return output;
} else {
throw new RuntimeException("Executing freemarker-cli failed: " + Arrays.toString(args));
}