aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-common
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2014-06-17 13:41:51 +0200
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2014-06-17 13:41:51 +0200
commit0a1f4e4735cd6cbfe1fd0f075b3d6fe2518fa3aa (patch)
tree9f49502186945daf45ad36d97a2072347a0298c2 /pdf-as-common
parent8aaf35c6e1da8d49e1c36d9b691ae00fb3730804 (diff)
downloadpdf-as-4-0a1f4e4735cd6cbfe1fd0f075b3d6fe2518fa3aa.tar.gz
pdf-as-4-0a1f4e4735cd6cbfe1fd0f075b3d6fe2518fa3aa.tar.bz2
pdf-as-4-0a1f4e4735cd6cbfe1fd0f075b3d6fe2518fa3aa.zip
Fixed properties inclusion to support wildcards (issue: #22)
Diffstat (limited to 'pdf-as-common')
-rw-r--r--pdf-as-common/build.gradle1
-rw-r--r--pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/Settings.java296
2 files changed, 191 insertions, 106 deletions
diff --git a/pdf-as-common/build.gradle b/pdf-as-common/build.gradle
index 22c25e14..1ef6b6c8 100644
--- a/pdf-as-common/build.gradle
+++ b/pdf-as-common/build.gradle
@@ -15,6 +15,7 @@ dependencies {
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.5'
compile group: 'org.apache.pdfbox', name: 'pdfbox', version: '1.8.5'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
+ compile group: 'commons-io', name: 'commons-io', version: '2.4'
compile group: 'ognl', name: 'ognl', version: '3.0.6'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/Settings.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/Settings.java
index abeba8b2..4eda8254 100644
--- a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/Settings.java
+++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/settings/Settings.java
@@ -25,123 +25,207 @@ package at.gv.egiz.pdfas.common.settings;
import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsException;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOCase;
+import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
+import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
-public class Settings implements ISettings, IProfileConstants{
-
- private static final Logger logger = LoggerFactory.getLogger(Settings.class);
-
- protected Properties properties = new Properties();
-
- protected File workDirectory;
-
- public Settings(File workDirectory) {
- try {
- this.workDirectory = workDirectory;
- loadSettings(workDirectory);
- } catch (PdfAsSettingsException e) {
- logger.error(e.getMessage(), e);
- }
- }
-
- public void loadSettings(File workDirectory) throws PdfAsSettingsException {
- try {
-
- String configDir = workDirectory.getAbsolutePath() + File.separator + CFG_DIR;
- String configFile = configDir + File.separator + CFG_FILE;
- logger.debug("Loading cfg file: " + configFile);
- properties.load(new FileInputStream(configFile));
-
- Map<String, String> includes = this.getValuesPrefix(INCLUDE);
-
- if(includes != null) {
- Iterator<String> includeIterator = includes.values().iterator();
- while(includeIterator.hasNext()) {
- String includeFile = configDir + File.separator + includeIterator.next();
- logger.debug("Loading included cfg file: " + includeFile);
- try {
- properties.load(new FileInputStream(includeFile));
- } catch(Throwable e) {
- logger.error("Failed to load cfg file " + includeFile, e);
- }
- }
- }
-
- logger.debug("Configured Properties:");
- /*if(logger.isDebugEnabled()) {
- properties.list(System.out);
- }*/
-
- } catch (IOException e) {
- throw new PdfAsSettingsException("Failed to read settings!", e);
- }
- }
-
- public String getValue(String key) {
- return properties.getProperty(key);
- }
-
- public boolean hasValue(String key) {
- return properties.containsKey(key);
- }
-
- public Map<String, String> getValuesPrefix(String prefix) {
- Iterator<Object> keyIterator = properties.keySet().iterator();
- Map<String, String> valueMap = new HashMap<String, String>();
- while(keyIterator.hasNext()) {
- String key = keyIterator.next().toString();
-
- if(key.startsWith(prefix)) {
- valueMap.put(key, properties.getProperty(key));
- }
- }
-
- if(valueMap.isEmpty()) {
- return null;
- }
-
- return valueMap;
- }
-
- public Vector<String> getFirstLevelKeys(String prefix) {
- String mPrefix = prefix.endsWith(".")?prefix:prefix+".";
- Iterator<Object> keyIterator = properties.keySet().iterator();
- Vector<String> valueMap = new Vector<String>();
- while(keyIterator.hasNext()) {
- String key = keyIterator.next().toString();
-
- if(key.startsWith(prefix)) {
- int keyIdx = key.indexOf('.', mPrefix.length()) > 0 ? key.indexOf('.', mPrefix.length()) : key.length();
- String firstLevels = key.substring(0, keyIdx);
- if(!valueMap.contains(firstLevels)) {
- valueMap.add(firstLevels);
- }
- }
- }
-
- if(valueMap.isEmpty()) {
- return null;
- }
-
- return valueMap;
- }
+public class Settings implements ISettings, IProfileConstants {
+
+ private static final Logger logger = LoggerFactory
+ .getLogger(Settings.class);
+
+ protected Properties properties = new Properties();
+
+ protected File workDirectory;
+
+ public Settings(File workDirectory) {
+ try {
+ this.workDirectory = workDirectory;
+ loadSettings(workDirectory);
+ } catch (PdfAsSettingsException e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+
+ private void loadSettingsRecursive(File workDirectory, File file)
+ throws PdfAsSettingsException {
+ try {
+ String configDir = workDirectory.getAbsolutePath() + File.separator
+ + CFG_DIR;
+ Properties tmpProps = new Properties();
+ logger.info("Loading: " + file.getName());
+ tmpProps.load(new FileInputStream(file));
+
+ properties.putAll(tmpProps);
+
+ Map<String, String> includes = this.getValuesPrefix(INCLUDE,
+ tmpProps);
+ File contextFolder = new File(configDir);
+ if (includes != null) {
+ Iterator<String> includeIterator = includes.values().iterator();
+ while (includeIterator.hasNext()) {
+ String includeFileName = includeIterator.next();
+
+ File includeInstruction = new File(contextFolder, includeFileName);
+ contextFolder = includeInstruction.getParentFile();
+ String includeName = includeInstruction.getName();
+
+ WildcardFileFilter fileFilter = new WildcardFileFilter(
+ includeName, IOCase.SENSITIVE);
+ Collection<File> includeFiles = null;
+
+ if (contextFolder != null && contextFolder.exists()
+ && contextFolder.isDirectory()) {
+ includeFiles = FileUtils.listFiles(contextFolder,
+ fileFilter, null);
+ }
+ if (includeFiles != null && !includeFiles.isEmpty()) {
+ logger.info("Including '" + includeFileName + "'.");
+ for (File includeFile : includeFiles) {
+ loadSettingsRecursive(workDirectory, includeFile);
+ }
+ }
+ }
+ }
+
+ } catch (IOException e) {
+ throw new PdfAsSettingsException("Failed to read settings!", e);
+ }
+ }
+
+ public void loadSettings(File workDirectory) throws PdfAsSettingsException {
+ //try {
+ String configDir = workDirectory.getAbsolutePath() + File.separator
+ + CFG_DIR;
+ String configFile = configDir + File.separator + CFG_FILE;
+ loadSettingsRecursive(workDirectory, new File(configFile));
+
+ /*
+ logger.debug("Loading cfg file: " + configFile);
+
+
+ properties.load(new FileInputStream(configFile));
+
+ Map<String, String> includes = this.getValuesPrefix(INCLUDE);
+ File contextFolder = new File(configDir);
+ if (includes != null) {
+ Iterator<String> includeIterator = includes.values().iterator();
+ while (includeIterator.hasNext()) {
+ String includeFileName = includeIterator.next();
+ if (includeFileName.contains("*")) {
+ WildcardFileFilter fileFilter = new WildcardFileFilter(
+ includeFileName, IOCase.SENSITIVE);
+ Collection<File> includeFiles = null;
+
+ if (contextFolder != null && contextFolder.exists()
+ && contextFolder.isDirectory()) {
+ includeFiles = FileUtils.listFiles(contextFolder,
+ fileFilter, null);
+ }
+ if (includeFiles != null && !includeFiles.isEmpty()) {
+ logger.info("Including '" + includeFileName + "'.");
+ for (File includeFile : includeFiles) {
+ properties
+ .load(new FileInputStream(includeFile));
+ }
+ }
+ } else {
+ String includeFile = configDir + File.separator
+ + includeFileName;
+ logger.debug("Loading included cfg file: "
+ + includeFile);
+ try {
+ properties.load(new FileInputStream(includeFile));
+ } catch (Throwable e) {
+ logger.error("Failed to load cfg file "
+ + includeFile, e);
+ }
+ }
+ }
+ }
+ */
+ logger.debug("Configured Properties:");
+ /*
+ * if(logger.isDebugEnabled()) { properties.list(System.out); }
+ */
+
+ //} catch (IOException e) {
+ // throw new PdfAsSettingsException("Failed to read settings!", e);
+ //}
+ }
+
+ public String getValue(String key) {
+ return properties.getProperty(key);
+ }
+
+ public boolean hasValue(String key) {
+ return properties.containsKey(key);
+ }
+
+ private Map<String, String> getValuesPrefix(String prefix, Properties props) {
+ Iterator<Object> keyIterator = props.keySet().iterator();
+ Map<String, String> valueMap = new HashMap<String, String>();
+ while (keyIterator.hasNext()) {
+ String key = keyIterator.next().toString();
+
+ if (key.startsWith(prefix)) {
+ valueMap.put(key, props.getProperty(key));
+ }
+ }
+
+ if (valueMap.isEmpty()) {
+ return null;
+ }
+
+ return valueMap;
+ }
+
+ public Map<String, String> getValuesPrefix(String prefix) {
+ return getValuesPrefix(prefix, properties);
+ }
+
+ public Vector<String> getFirstLevelKeys(String prefix) {
+ String mPrefix = prefix.endsWith(".") ? prefix : prefix + ".";
+ Iterator<Object> keyIterator = properties.keySet().iterator();
+ Vector<String> valueMap = new Vector<String>();
+ while (keyIterator.hasNext()) {
+ String key = keyIterator.next().toString();
+
+ if (key.startsWith(prefix)) {
+ int keyIdx = key.indexOf('.', mPrefix.length()) > 0 ? key
+ .indexOf('.', mPrefix.length()) : key.length();
+ String firstLevels = key.substring(0, keyIdx);
+ if (!valueMap.contains(firstLevels)) {
+ valueMap.add(firstLevels);
+ }
+ }
+ }
+
+ if (valueMap.isEmpty()) {
+ return null;
+ }
+
+ return valueMap;
+ }
public boolean hasPrefix(String prefix) {
Iterator<Object> keyIterator = properties.keySet().iterator();
- while(keyIterator.hasNext()) {
- String key = keyIterator.next().toString();
-
- if(key.startsWith(prefix)) {
- return true;
- }
- }
- return false;
+ while (keyIterator.hasNext()) {
+ String key = keyIterator.next().toString();
+
+ if (key.startsWith(prefix)) {
+ return true;
+ }
+ }
+ return false;
}
public String getWorkingDirectory() {