Skip to content

Commit

Permalink
Merge pull request #640 from ancho/update/apache-configurations
Browse files Browse the repository at this point in the history
update to apache configurations2. load properties files with default utf-8 encoding
  • Loading branch information
jonbullock committed Mar 8, 2021
2 parents 24722a6 + 4d32d38 commit 9319c65
Show file tree
Hide file tree
Showing 40 changed files with 290 additions and 105 deletions.
6 changes: 4 additions & 2 deletions appveyor.yml
Expand Up @@ -15,9 +15,11 @@ environment:
install:
- SET PATH=%JAVA_HOME%\bin;%PATH%
- echo %PATH%
- systeminfo
- java -version
- gradlew.bat --version
- file C:\projects\jbake\jbake-core\src\test\resources\fixture\jbake.properties
build_script:
- gradlew.bat -i assemble
- gradlew.bat -Dfile.encoding=UTF-8 -i assemble
test_script:
- gradlew.bat -i -S check
- gradlew.bat -Dfile.encoding=UTF-8 -i -S check
3 changes: 2 additions & 1 deletion gradle.properties
Expand Up @@ -11,7 +11,8 @@ asciidoctorjVersion = 2.2.0
asciidoctorjDiagramVersion = 2.0.1
args4jVersion = 2.33
commonsIoVersion = 2.6
commonsConfigurationVersion = 1.10
commonsConfigurationVersion = 2.7
commonsBeanutilsVersion = 1.9.4
commonsLangVersion = 3.10
commonsVfs2Version = 2.6.0
freemarkerVersion = 2.3.30
Expand Down
3 changes: 2 additions & 1 deletion jbake-core/build.gradle
Expand Up @@ -8,7 +8,8 @@ description = "The core library of JBake"

dependencies {
implementation "commons-io:commons-io:$commonsIoVersion"
implementation "commons-configuration:commons-configuration:$commonsConfigurationVersion"
implementation "org.apache.commons:commons-configuration2:$commonsConfigurationVersion"
implementation "commons-beanutils:commons-beanutils:$commonsBeanutilsVersion"
implementation "org.apache.commons:commons-vfs2:$commonsVfs2Version", optional
implementation "org.apache.commons:commons-lang3:$commonsLangVersion"
implementation("com.googlecode.json-simple:json-simple:$jsonSimpleVersion") {
Expand Down
4 changes: 2 additions & 2 deletions jbake-core/src/main/java/org/jbake/app/Asset.java
@@ -1,6 +1,6 @@
package org.jbake.app;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.apache.commons.io.FileUtils;
import org.jbake.app.configuration.JBakeConfiguration;
import org.jbake.app.configuration.JBakeConfigurationFactory;
Expand All @@ -24,7 +24,7 @@ public class Asset {

private static final Logger LOGGER = LoggerFactory.getLogger(Asset.class);
private final List<Throwable> errors = new LinkedList<>();
private JBakeConfiguration config;
private final JBakeConfiguration config;

/**
* @param source Source file for the asset
Expand Down
8 changes: 4 additions & 4 deletions jbake-core/src/main/java/org/jbake/app/Crawler.java
@@ -1,7 +1,7 @@
package org.jbake.app;

import com.orientechnologies.orient.core.record.impl.ODocument;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.apache.commons.io.FilenameUtils;
import org.jbake.app.Crawler.Attributes.Status;
import org.jbake.app.configuration.JBakeConfiguration;
Expand Down Expand Up @@ -30,8 +30,8 @@ public class Crawler {

private static final Logger LOGGER = LoggerFactory.getLogger(Crawler.class);
private final ContentStore db;
private JBakeConfiguration config;
private Parser parser;
private final JBakeConfiguration config;
private final Parser parser;

/**
* @param db Database instance for content
Expand Down Expand Up @@ -142,7 +142,7 @@ private String buildURI(final File sourceFile) {

// strip off leading / to enable generating non-root based sites
if (uri.startsWith(FileUtil.URI_SEPARATOR_CHAR)) {
uri = uri.substring(1, uri.length());
uri = uri.substring(1);
}

return uri;
Expand Down
6 changes: 3 additions & 3 deletions jbake-core/src/main/java/org/jbake/app/Oven.java
@@ -1,6 +1,6 @@
package org.jbake.app;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.jbake.app.configuration.DefaultJBakeConfiguration;
import org.jbake.app.configuration.JBakeConfiguration;
import org.jbake.app.configuration.JBakeConfigurationFactory;
Expand Down Expand Up @@ -29,8 +29,8 @@ public class Oven {

private static final Logger LOGGER = LoggerFactory.getLogger(Oven.class);

private Utensils utensils;
private List<Throwable> errors = new LinkedList<>();
private final Utensils utensils;
private final List<Throwable> errors = new LinkedList<>();
private int renderedCount = 0;

/**
Expand Down
4 changes: 2 additions & 2 deletions jbake-core/src/main/java/org/jbake/app/Renderer.java
@@ -1,6 +1,6 @@
package org.jbake.app;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.jbake.app.Crawler.Attributes;
import org.jbake.app.configuration.DefaultJBakeConfiguration;
import org.jbake.app.configuration.JBakeConfiguration;
Expand Down Expand Up @@ -276,7 +276,7 @@ public int renderTags(String tagPath) throws Exception {

File path = new File(config.getDestinationFolder() + File.separator + tagPath + File.separator + tag + config.getOutputExtension());
map.put(Attributes.ROOTPATH, FileUtil.getUriPathToDestinationRoot(config, path));

render(new ModelRenderingConfig(path, Attributes.TAG, model, findTemplateName(Attributes.TAG)));

renderedCount++;
Expand Down
@@ -1,17 +1,19 @@
package org.jbake.app.configuration;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.SystemConfiguration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.SystemConfiguration;
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Parameters;
import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.jbake.app.JBakeException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.Charset;

/**
* Provides Configuration related functions.
Expand All @@ -20,10 +22,13 @@
*/
public class ConfigUtil {

public static final char LIST_DELIMITER = ',';
public static final String DEFAULT_ENCODING = "UTF-8";
private static final Logger LOGGER = LoggerFactory.getLogger(ConfigUtil.class);
private static final String LEGACY_CONFIG_FILE = "custom.properties";
private static final String CONFIG_FILE = "jbake.properties";
private static final String DEFAULT_CONFIG_FILE = "default.properties";
private String encoding = DEFAULT_ENCODING;

private CompositeConfiguration load(File source) throws ConfigurationException {

Expand All @@ -34,23 +39,52 @@ private CompositeConfiguration load(File source) throws ConfigurationException {
throw new JBakeException("The given source folder is not a directory.");
}

File legacyConfigFile = new File(source, LEGACY_CONFIG_FILE);
File customConfigFile = new File(source, CONFIG_FILE);

CompositeConfiguration config = new CompositeConfiguration();
config.setListDelimiter(',');
File customConfigFile = new File(source, LEGACY_CONFIG_FILE);
if (customConfigFile.exists()) {
config.setListDelimiterHandler(new DefaultListDelimiterHandler(LIST_DELIMITER));

if (legacyConfigFile.exists()) {
displayLegacyConfigFileWarningIfRequired();
config.addConfiguration(new PropertiesConfiguration(customConfigFile));
config.addConfiguration(getFileBasedPropertiesConfiguration(legacyConfigFile));
}
customConfigFile = new File(source, CONFIG_FILE);
if (customConfigFile.exists()) {
config.addConfiguration(new PropertiesConfiguration(customConfigFile));
config.addConfiguration(getFileBasedPropertiesConfiguration(customConfigFile));
}
URL defaultPropertiesLocation = this.getClass().getClassLoader().getResource(DEFAULT_CONFIG_FILE);
config.addConfiguration(new PropertiesConfiguration(defaultPropertiesLocation));
if (defaultPropertiesLocation != null) {
config.addConfiguration(getFileBasedPropertiesConfiguration(defaultPropertiesLocation));
}

config.addConfiguration(new SystemConfiguration());
return config;
}

private PropertiesConfiguration getFileBasedPropertiesConfiguration(File propertiesFile) throws ConfigurationException {
FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class)
.configure(new Parameters().properties()
.setFile(propertiesFile)
.setEncoding(encoding)
.setThrowExceptionOnMissing(true)
.setListDelimiterHandler(new DefaultListDelimiterHandler(LIST_DELIMITER))
.setIncludesAllowed(false));
return builder.getConfiguration();
}

private PropertiesConfiguration getFileBasedPropertiesConfiguration(URL propertiesFile) throws ConfigurationException {
FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class)
.configure(new Parameters().properties()
.setURL(propertiesFile)
.setEncoding(encoding)
.setThrowExceptionOnMissing(true)
.setListDelimiterHandler(new DefaultListDelimiterHandler(LIST_DELIMITER))
.setIncludesAllowed(false));
return builder.getConfiguration();
}

private void displayLegacyConfigFileWarningIfRequired() {
LOGGER.warn("You have defined a part of your JBake configuration in {}", LEGACY_CONFIG_FILE);
LOGGER.warn("Usage of this file is being deprecated, please rename this file to: {} to remove this warning", CONFIG_FILE);
Expand All @@ -61,4 +95,17 @@ public JBakeConfiguration loadConfig(File source) throws ConfigurationException
return new DefaultJBakeConfiguration(source, configuration);
}

public String getEncoding() {
return this.encoding;
}

public ConfigUtil setEncoding(String encoding) {
if (Charset.isSupported(encoding)) {
this.encoding = encoding;
} else {
this.encoding = DEFAULT_ENCODING;
LOGGER.warn("Unsupported encoding '{}'. Using default encoding '{}'", encoding, this.encoding);
}
return this;
}
}
@@ -1,7 +1,7 @@
package org.jbake.app.configuration;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.apache.commons.configuration2.Configuration;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -10,7 +10,7 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
Expand Down Expand Up @@ -74,7 +74,7 @@ private int getAsInt(String key, int defaultValue) {
}

private List<String> getAsList(String key) {
return Arrays.asList(compositeConfiguration.getStringArray(key));
return compositeConfiguration.getList(String.class, key);
}

private String getAsString(String key) {
Expand All @@ -90,15 +90,15 @@ public List<String> getAsciidoctorAttributes() {
return getAsList(JBakeProperty.ASCIIDOCTOR_ATTRIBUTES);
}

public Object getAsciidoctorOption(String optionKey) {
public List<String> getAsciidoctorOption(String optionKey) {
Configuration subConfig = compositeConfiguration.subset(JBakeProperty.ASCIIDOCTOR_OPTION);
Object value = subConfig.getProperty(optionKey);

if (value == null) {
if (subConfig.containsKey(optionKey)) {
return subConfig.getList(String.class, optionKey);
} else {
logger.warn("Cannot find asciidoctor option '{}.{}'", JBakeProperty.ASCIIDOCTOR_OPTION, optionKey);
return "";
return Collections.emptyList();
}
return value;
}

@Override
Expand Down Expand Up @@ -477,6 +477,7 @@ public void setExampleProject(String type, String fileName) {

@Override
public void setProperty(String key, Object value) {

compositeConfiguration.setProperty(key, value);
}

Expand Down
@@ -1,7 +1,8 @@
package org.jbake.app.configuration;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.ConfigurationException;

import org.apache.commons.configuration2.CompositeConfiguration;
import org.apache.commons.configuration2.ex.ConfigurationException;

import java.io.File;

Expand Down Expand Up @@ -105,4 +106,9 @@ public ConfigUtil getConfigUtil() {
public void setConfigUtil(ConfigUtil configUtil) {
this.configUtil = configUtil;
}

public JBakeConfigurationFactory setEncoding(String charset) {
this.configUtil.setEncoding(charset);
return this;
}
}
4 changes: 2 additions & 2 deletions jbake-core/src/main/java/org/jbake/launcher/BakeWatcher.java
@@ -1,6 +1,6 @@
package org.jbake.launcher;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.apache.commons.vfs2.FileSystemManager;
Expand All @@ -18,7 +18,7 @@
*/
public class BakeWatcher {

private Logger logger = LoggerFactory.getLogger(BakeWatcher.class);
private final Logger logger = LoggerFactory.getLogger(BakeWatcher.class);

/**
* Starts watching the file system for changes to trigger a bake.
Expand Down
2 changes: 1 addition & 1 deletion jbake-core/src/main/java/org/jbake/launcher/Baker.java
@@ -1,6 +1,6 @@
package org.jbake.launcher;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.jbake.app.JBakeException;
import org.jbake.app.Oven;
import org.jbake.app.configuration.JBakeConfiguration;
Expand Down
4 changes: 2 additions & 2 deletions jbake-core/src/main/java/org/jbake/launcher/Init.java
@@ -1,6 +1,6 @@
package org.jbake.launcher;

import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration2.CompositeConfiguration;
import org.jbake.app.ZipUtil;
import org.jbake.app.configuration.DefaultJBakeConfiguration;
import org.jbake.app.configuration.JBakeConfiguration;
Expand All @@ -16,7 +16,7 @@
*/
public class Init {

private JBakeConfiguration config;
private final JBakeConfiguration config;

/**
* @param config The project configuration
Expand Down
Expand Up @@ -30,6 +30,9 @@ public class LaunchOptions {
@Option(name = "--reset", usage = "clears the local cache, enforcing rendering from scratch")
private boolean clearCache;

@Option(name = "--prop-encoding", usage = "use given encoding to load properties file. default: utf-8")
private String propertiesEncoding = "utf-8";

public String getTemplate() {
if (template != null) {
return template;
Expand Down Expand Up @@ -81,4 +84,8 @@ public boolean isClearCache() {
public boolean isBake() {
return bake || (source != null && destination != null);
}

public String getPropertiesEncoding() {
return propertiesEncoding;
}
}
6 changes: 3 additions & 3 deletions jbake-core/src/main/java/org/jbake/launcher/Main.java
@@ -1,6 +1,6 @@
package org.jbake.launcher;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.jbake.app.FileUtil;
import org.jbake.app.JBakeException;
import org.jbake.app.configuration.JBakeConfiguration;
Expand Down Expand Up @@ -77,9 +77,9 @@ protected void run(String[] args) {
try {
LaunchOptions res = parseArguments(args);
if (res.isRunServer()) {
config = getJBakeConfigurationFactory().createJettyJbakeConfiguration(res.getSource(), res.getDestination(), res.isClearCache());
config = getJBakeConfigurationFactory().setEncoding(res.getPropertiesEncoding()).createJettyJbakeConfiguration(res.getSource(), res.getDestination(), res.isClearCache());
} else {
config = getJBakeConfigurationFactory().createDefaultJbakeConfiguration(res.getSource(), res.getDestination(), res.isClearCache());
config = getJBakeConfigurationFactory().setEncoding(res.getPropertiesEncoding()).createDefaultJbakeConfiguration(res.getSource(), res.getDestination(), res.isClearCache());
}
run(res, config);
} catch (final ConfigurationException e) {
Expand Down

0 comments on commit 9319c65

Please sign in to comment.