aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-lib
diff options
context:
space:
mode:
authorThomas <>2023-06-26 21:11:26 +0200
committerThomas <>2023-06-26 21:11:26 +0200
commit8e0ccca7cfd1680e33737e0db8d6e1091661568c (patch)
tree33ae7a462976eecbda355921706412a1ff60131a /pdf-as-lib
parent203eaa42d83da699ed9cc6c7e286906b5aeb6d44 (diff)
downloadpdf-as-4-8e0ccca7cfd1680e33737e0db8d6e1091661568c.tar.gz
pdf-as-4-8e0ccca7cfd1680e33737e0db8d6e1091661568c.tar.bz2
pdf-as-4-8e0ccca7cfd1680e33737e0db8d6e1091661568c.zip
refact(placeholder): clean-up, bugfix and optimize QR-Code placeholder detection
Major re-factoring of QR-Code detection with huge clean-up of code.
Diffstat (limited to 'pdf-as-lib')
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java1
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignParameter.java16
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignParameterImpl.java9
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/ConfigurationImpl.java265
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderConfiguration.java103
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderWebConfiguration.java24
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderExtractor.java7
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderFilter.java176
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/SignaturePlaceholderContext.java95
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/settings/Settings.java684
10 files changed, 562 insertions, 818 deletions
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java
index 21a8e3b9..8314eef6 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/IConfigurationConstants.java
@@ -45,7 +45,6 @@ public interface IConfigurationConstants {
public static final String LEGACY_40_POSITIONING = ".legacy40.pos";
public static final String MIN_WIDTH = "minWidth";
- public static final String PLACEHOLDER_WEB_ID = "placeholder_web_id";
public static final String PLACEHOLDER_ID = "placeholder_id";
public static final String PLACEHOLDER_MODE = "placeholder_mode";
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignParameter.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignParameter.java
index 6a7ccf24..3485c9ea 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignParameter.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/api/sign/SignParameter.java
@@ -54,6 +54,22 @@ public interface SignParameter extends PdfAsParameter {
*/
public void setSignaturePosition(String signaturePosition);
+
+ /**
+ * Get Id of a placeholder that should be used for positioning.
+ *
+ * @return Id of a placeholder
+ */
+ String getPlaceHolderId();
+
+
+ /**
+ * Set Id of a placeholder that should be used for positioning.
+ *
+ * @param id Id of a placeholder
+ */
+ void setPlaceHolderId(String id);
+
/**
* Sets the signer to use
*
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignParameterImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignParameterImpl.java
index d2786f53..2dc047f1 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignParameterImpl.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/SignParameterImpl.java
@@ -25,9 +25,7 @@ package at.gv.egiz.pdfas.lib.impl;
import java.io.OutputStream;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import javax.activation.DataSource;
@@ -35,10 +33,17 @@ import at.gv.egiz.pdfas.lib.api.Configuration;
import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner;
import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
import at.gv.egiz.sl.util.BKUHeader;
+import lombok.Getter;
+import lombok.Setter;
public class SignParameterImpl extends PdfAsParameterImpl implements SignParameter, BKUHeaderHolder {
protected String signatureProfileId = null;
protected String signaturePosition = null;
+
+ @Getter
+ @Setter
+ protected String placeHolderId;
+
protected DataSource output = null;
protected IPlainSigner signer = null;
protected OutputStream outputStream = null;
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/ConfigurationImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/ConfigurationImpl.java
index bfc05c85..fd47bac5 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/ConfigurationImpl.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/ConfigurationImpl.java
@@ -3,19 +3,19 @@
* PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
* joint initiative of the Federal Chancellery Austria and Graz University of
* Technology.
- *
+ *
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
- *
+ *
* This product combines work with different licenses. See the "NOTICE" text
* file for details on the various modules and licenses.
* The "NOTICE" text file is part of the distribution. Any derivative works
@@ -23,7 +23,6 @@
******************************************************************************/
package at.gv.egiz.pdfas.lib.impl.configuration;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
@@ -35,135 +34,135 @@ import at.gv.egiz.pdfas.lib.settings.Settings;
public class ConfigurationImpl implements ISettings, Configuration {
- protected Properties overwrittenProperties = new Properties();
-
- protected ISettings settings;
-
- public ConfigurationImpl(ISettings settings) {
- this.settings = settings;
- }
-
- public void setValue(String key, String value) {
- overwrittenProperties.setProperty(key, value);
- }
-
- public String getValue(String key) {
- if(overwrittenProperties.containsKey(key)) {
- return overwrittenProperties.getProperty(key);
- } else {
- return this.settings.getValue(key);
- }
- }
-
- public boolean hasValue(String key) {
- if(overwrittenProperties.containsKey(key)) {
- return true;
- } else {
- return this.settings.hasValue(key);
- }
- }
-
- public Map<String, String> getValuesPrefix(String prefix) {
-
- Map<String, String> valueMap = null;
- valueMap = this.settings.getValuesPrefix(prefix);
- if(valueMap == null) {
- valueMap = new HashMap<String, String>();
- }
-
- Iterator<Object> keyIterator = overwrittenProperties.keySet().iterator();
-
- while(keyIterator.hasNext()) {
- String key = keyIterator.next().toString();
-
- if(key.startsWith(prefix)) {
- valueMap.put(key, overwrittenProperties.getProperty(key));
- }
+ protected Properties overwrittenProperties = new Properties();
+
+ protected ISettings settings;
+
+ public ConfigurationImpl(ISettings settings) {
+ this.settings = settings;
+ }
+
+ @Override
+ public void setValue(String key, String value) {
+ overwrittenProperties.setProperty(key, value);
+ }
+
+ @Override
+ public String getValue(String key) {
+ if (overwrittenProperties.containsKey(key)) {
+ return overwrittenProperties.getProperty(key);
+ } else {
+ return this.settings.getValue(key);
+ }
+ }
+
+ @Override
+ public boolean hasValue(String key) {
+ if (overwrittenProperties.containsKey(key)) {
+ return true;
+ } else {
+ return this.settings.hasValue(key);
+ }
+ }
+
+ @Override
+ public Map<String, String> getValuesPrefix(String prefix) {
+ final Map<String, String> valueMap = this.settings.getValuesPrefix(prefix);
+ final Iterator<Object> keyIterator = overwrittenProperties.keySet().iterator();
+
+ while (keyIterator.hasNext()) {
+ final String key = keyIterator.next().toString();
+
+ if (key.startsWith(prefix)) {
+ valueMap.put(key, overwrittenProperties.getProperty(key));
+ }
+ }
+
+ if (valueMap.isEmpty()) {
+ return null;
+ }
+
+ return valueMap;
+ }
+
+ @Override
+ public Vector<String> getFirstLevelKeys(String prefix) {
+
+ Vector<String> valueMap = this.settings.getFirstLevelKeys(prefix);
+ if (valueMap == null) {
+ valueMap = new Vector<>();
+ }
+
+ final String mPrefix = prefix.endsWith(".") ? prefix : prefix + ".";
+ final Iterator<Object> keyIterator = overwrittenProperties.keySet().iterator();
+
+ while (keyIterator.hasNext()) {
+ final String key = keyIterator.next().toString();
+
+ if (key.startsWith(prefix)) {
+ final int keyIdx = key.indexOf('.', mPrefix.length()) > 0 ? key.indexOf('.', mPrefix.length())
+ : key.length();
+ final String firstLevels = key.substring(0, keyIdx);
+ if (!valueMap.contains(firstLevels)) {
+ valueMap.add(firstLevels);
}
+ }
+ }
+
+ if (valueMap.isEmpty()) {
+ return null;
+ }
+
+ return valueMap;
+ }
+
+ @Override
+ public boolean hasPrefix(String prefix) {
+
+ if (this.settings.hasPrefix(prefix)) {
+ return true;
+ }
+
+ final Iterator<Object> keyIterator = overwrittenProperties.keySet().iterator();
+ while (keyIterator.hasNext()) {
+ final String key = keyIterator.next().toString();
+
+ if (key.startsWith(prefix)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public String getWorkingDirectory() {
+ return this.settings.getWorkingDirectory();
+ }
+
+ @Override
+ public void cloneProfile(String originalPrefix, String clonedPrefix) {
+ final Map<String, String> source = getValuesPrefix(originalPrefix);
+
+ for (final String origKey : source.keySet()) {
+ final String cloneKey = origKey.replace(originalPrefix, clonedPrefix);
+ this.overwrittenProperties.setProperty(cloneKey, source.get(origKey));
+ }
+ }
+
+ @Override
+ public void removeProfile(String configurationPrefix) {
+ final Iterator<Object> keyIterator = overwrittenProperties.keySet().iterator();
+ while (keyIterator.hasNext()) {
+ final String key = keyIterator.next().toString();
+
+ if (key.startsWith(configurationPrefix)) {
+ overwrittenProperties.remove(key);
+ }
+ }
+ }
+
+ public void debugDumpProfileSettings(String profileName) {
+ ((Settings) settings).debugDumpProfileSettings(profileName);
+ }
- if(valueMap.isEmpty()) {
- return null;
- }
-
- return valueMap;
- }
-
- public Vector<String> getFirstLevelKeys(String prefix) {
-
- Vector<String> valueMap = this.settings.getFirstLevelKeys(prefix);
- if(valueMap == null) {
- valueMap = new Vector<String>();
- }
-
-
- String mPrefix = prefix.endsWith(".")?prefix:prefix+".";
- Iterator<Object> keyIterator = overwrittenProperties.keySet().iterator();
-
- 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) {
-
- if(this.settings.hasPrefix(prefix)) {
- return true;
- }
-
- Iterator<Object> keyIterator = overwrittenProperties.keySet().iterator();
- while(keyIterator.hasNext()) {
- String key = keyIterator.next().toString();
-
- if(key.startsWith(prefix)) {
- return true;
- }
- }
- return false;
- }
-
- public String getWorkingDirectory() {
- return this.settings.getWorkingDirectory();
- }
-
- public void cloneProfile(String originalPrefix, String clonedPrefix) {
- Map<String, String> source = getValuesPrefix(originalPrefix);
-
- Iterator<String> keyIt = source.keySet().iterator();
-
- while(keyIt.hasNext()) {
- String origKey = keyIt.next();
- String cloneKey = origKey.replace(originalPrefix, clonedPrefix);
- this.overwrittenProperties.setProperty(cloneKey, source.get(origKey));
- }
- }
-
- public void removeProfile(String configurationPrefix) {
- Iterator<Object> keyIterator = overwrittenProperties.keySet().iterator();
- while(keyIterator.hasNext()) {
- String key = keyIterator.next().toString();
-
- if(key.startsWith(configurationPrefix)) {
- overwrittenProperties.remove(key);
- }
- }
- }
-
- public void debugDumpProfileSettings(String profileName) {
- ((Settings)settings).debugDumpProfileSettings(profileName);
- }
-
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderConfiguration.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderConfiguration.java
index 326ed142..a3719168 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderConfiguration.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderConfiguration.java
@@ -3,19 +3,19 @@
* PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
* joint initiative of the Federal Chancellery Austria and Graz University of
* Technology.
- *
+ *
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
- *
+ *
* This product combines work with different licenses. See the "NOTICE" text
* file for details on the various modules and licenses.
* The "NOTICE" text file is part of the distribution. Any derivative works
@@ -25,60 +25,57 @@ package at.gv.egiz.pdfas.lib.impl.configuration;
import at.gv.egiz.pdfas.common.settings.ISettings;
import at.gv.egiz.pdfas.lib.api.IConfigurationConstants;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import lombok.extern.slf4j.Slf4j;
-import java.util.Map;
+@Slf4j
+public class PlaceholderConfiguration extends SpecificBaseConfiguration
+ implements IConfigurationConstants {
+ public PlaceholderConfiguration(ISettings configuration) {
+ super(configuration);
+ }
-public class PlaceholderConfiguration extends SpecificBaseConfiguration
- implements IConfigurationConstants {
+ public boolean isGlobalPlaceholderEnabled() {
+ if (configuration.hasValue(PLACEHOLDER_SEARCH_ENABLED)) {
+ final String value = configuration.getValue(PLACEHOLDER_SEARCH_ENABLED);
+ if (value.equalsIgnoreCase(TRUE)) {
+ return true;
+ }
+ }
+ return false;
+ }
- private static final Logger logger = LoggerFactory.getLogger(PlaceholderConfiguration.class);
+ /**
+ * Match selected Profile for Placeholder Enables to activate placeholder
+ * search/match for different profiles
+ *
+ * @return
+ */
+ public boolean isProfileConfigurationEnabled(String profileID) {
+ log.trace("Check if placeHolders are enabled for profile: {}", profileID);
+
+ final String profileMatch = SIG_OBJECT + SEPERATOR + profileID + SEPERATOR
+ + PLACEHOLDER_SEARCH_ENABLED;
+ final String value = configuration.getValue(profileMatch);
+ if (TRUE.equalsIgnoreCase(value)) {
+ log.debug("Placeholders enabled for profile: {} ", profileID);
+ return true;
+
+ }
+ return false;
+
+ }
- public PlaceholderConfiguration(ISettings configuration) {
- super(configuration);
- }
+ /**
+ * Get placeholderId for a specific profile.
+ *
+ * @param selectedProfileID ProfileName
+ * @return Placeholder Id
+ */
+ public String getProfilePlaceholderID(String selectedProfileID) {
+ log.info("SelectedProfileID in ProfileConfEnabled: " + selectedProfileID);
+ final String profileMatch = SIG_OBJECT + SEPERATOR + selectedProfileID + SEPERATOR + PLACEHOLDER_ID;
+ return configuration.getValue(profileMatch);
- public boolean isGlobalPlaceholderEnabled() {
- if (configuration.hasValue(PLACEHOLDER_SEARCH_ENABLED)) {
- String value = configuration.getValue(PLACEHOLDER_SEARCH_ENABLED);
- if (value.equalsIgnoreCase(TRUE)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Match selected Profile for Placeholder
- * Enables to activate placeholder search/match for different profiles
- * @return
- */
- public boolean isProfileConfigurationEnabled(String selectedProfileID)
- {
- logger.info("SelectedProfileID in ProfileConfEnabled: "+selectedProfileID);
- String profileMatch = SIG_OBJECT+SEPERATOR+selectedProfileID+SEPERATOR+PLACEHOLDER_SEARCH_ENABLED;
- if (configuration.getValuesPrefix(profileMatch)!=null) {
- Map<String, String> map = configuration.getValuesPrefix(profileMatch);
- String value = map.get(profileMatch);
- if (value.equalsIgnoreCase(TRUE)) {
- logger.info("Configuration has Value: "+value);
- return true;
- }
- }
- return false;
- }
-
- public String getProfilePlaceholderID(String selectedProfileID)
- {
- logger.info("SelectedProfileID in ProfileConfEnabled: "+selectedProfileID);
- String profileMatch = SIG_OBJECT+SEPERATOR+selectedProfileID+SEPERATOR+PLACEHOLDER_ID;
- if (configuration.getValuesPrefix(profileMatch)!=null) {
- Map<String, String> map = configuration.getValuesPrefix(profileMatch);
- return map.get(profileMatch);
- }
- return null;
- }
+ }
}
-
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderWebConfiguration.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderWebConfiguration.java
deleted file mode 100644
index 3a78f24f..00000000
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/configuration/PlaceholderWebConfiguration.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package at.gv.egiz.pdfas.lib.impl.configuration;
-
-import java.util.Properties;
-
-public class PlaceholderWebConfiguration {
-
- protected static Properties properties = new Properties();
-
- //todo properties not cleaned
- public static void setValue(String key, String value)
- {
- properties.clear();
- properties.setProperty(key,value);
- }
- public static String getValue(String key)
- {
- return properties.getProperty(key);
- }
-
- public static void clear () {
- properties.clear();
- }
-
-}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderExtractor.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderExtractor.java
index 0a55b834..436024cd 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderExtractor.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderExtractor.java
@@ -3,10 +3,7 @@ package at.gv.egiz.pdfas.lib.impl.placeholder;
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
import at.gv.egiz.pdfas.lib.impl.status.PDFObject;
-import java.util.List;
-
public interface PlaceholderExtractor {
- SignaturePlaceholderData extract(PDFObject doc, String placeholderId, int matchMode) throws PdfAsException;
-
- List<SignaturePlaceholderData> extractList(PDFObject pdfObject, String placeholderID, int placeholderMode) throws PdfAsException;
+ SignaturePlaceholderData extract(PDFObject pdfObject, String placeholderID, int placeholderMode) throws PdfAsException;
+
}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderFilter.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderFilter.java
index 99c09295..0d652b76 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderFilter.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/PlaceholderFilter.java
@@ -24,145 +24,69 @@
package at.gv.egiz.pdfas.lib.impl.placeholder;
import java.io.IOException;
-import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
import at.gv.egiz.pdfas.common.exceptions.PDFASError;
import at.gv.egiz.pdfas.common.exceptions.PdfAsErrorCarrier;
import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
import at.gv.egiz.pdfas.common.settings.ISettings;
import at.gv.egiz.pdfas.lib.api.IConfigurationConstants;
-import at.gv.egiz.pdfas.lib.impl.configuration.PlaceholderWebConfiguration;
import at.gv.egiz.pdfas.lib.impl.status.OperationStatus;
-import org.apache.commons.lang3.StringUtils;
public class PlaceholderFilter implements IConfigurationConstants,
PlaceholderExtractorConstants {
-
+
public static SignaturePlaceholderData checkPlaceholderSignatureLocation(
- OperationStatus status, ISettings settings, String signatureLocation) throws PdfAsException,
- IOException {
-
- String placeholderID;
-
- if (status.getPlaceholderConfiguration().isGlobalPlaceholderEnabled()) {
- PlaceholderExtractor extractor = status.getBackend().getPlaceholderExtractor();
-
- if(StringUtils.isNotEmpty(signatureLocation)) {
- placeholderID = signatureLocation;
- } else {
- placeholderID = PlaceholderWebConfiguration.getValue(PLACEHOLDER_WEB_ID);
- if(StringUtils.isEmpty(placeholderID)) {
- placeholderID = settings.getValue(PLACEHOLDER_ID);
- }
- }
-
- String placeholderModeString = settings.getValue(PLACEHOLDER_MODE);
- int placeholderMode = PLACEHOLDER_MATCH_MODE_MODERATE;
- if (StringUtils.isNotEmpty(placeholderModeString)) {
- try {
- placeholderMode = Integer.parseInt(placeholderModeString);
- if (placeholderMode < PLACEHOLDER_MODE_MIN
- || placeholderMode > PLACEHOLDER_MODE_MAX) {
- throw new PdfAsErrorCarrier(new PDFASError(
- PDFASError.ERROR_INVALID_PLACEHOLDER_MODE));
- }
- } catch (NumberFormatException e) {
- throw new PdfAsErrorCarrier(new PDFASError(
- PDFASError.ERROR_INVALID_PLACEHOLDER_MODE, e));
- }
- }
- SignaturePlaceholderData signaturePlaceholderData = extractor.extract(status.getPdfObject(), placeholderID, placeholderMode);
- return signaturePlaceholderData;
-
- } else if (status.getPlaceholderConfiguration().isProfileConfigurationEnabled(status.getRequestedSignature().getSignatureProfileID())) {
- //filter for local placeholder in selected profiles
- PlaceholderExtractor extractor = status.getBackend().getPlaceholderExtractor();
- int placeholderMode = PLACEHOLDER_MATCH_MODE_SORTED;
-
- placeholderID = status.getPlaceholderConfiguration().getProfilePlaceholderID(status.getRequestedSignature().getSignatureProfileID());
- if(StringUtils.isNotEmpty(placeholderID)) {
- placeholderMode = PLACEHOLDER_MATCH_MODE_MODERATE;
- }
- String placeholderModeString = settings.getValue(PLACEHOLDER_MODE);
- if (StringUtils.isNotEmpty(placeholderModeString)) {
- try {
- placeholderMode = Integer.parseInt(placeholderModeString);
- if (placeholderMode < PLACEHOLDER_MODE_MIN
- || placeholderMode > PLACEHOLDER_MODE_MAX) {
- throw new PdfAsErrorCarrier(new PDFASError(
- PDFASError.ERROR_INVALID_PLACEHOLDER_MODE));
- }
- } catch (NumberFormatException e) {
- throw new PdfAsErrorCarrier(new PDFASError(
- PDFASError.ERROR_INVALID_PLACEHOLDER_MODE, e));
- }
- }
- SignaturePlaceholderData signaturePlaceholderData = extractor.extract(status.getPdfObject(), placeholderID, placeholderMode);
- return signaturePlaceholderData;
+ OperationStatus status, ISettings settings, String placeholderId) throws PdfAsException, IOException {
+
+ String signingProfile = status.getRequestedSignature().getSignatureProfileID();
+
+ if (status.getPlaceholderConfiguration().isGlobalPlaceholderEnabled()) {
+ String defaultPlaceHolderId = settings.getValue(PLACEHOLDER_ID);
+ return status.getBackend().getPlaceholderExtractor().extract(
+ status.getPdfObject(), getPlaceHolderId(placeholderId, defaultPlaceHolderId) ,
+ getPlaceHolderMode(settings, PLACEHOLDER_MATCH_MODE_SORTED));
+
+ } else if (status.getPlaceholderConfiguration().isProfileConfigurationEnabled(signingProfile)) {
+ String defaultPlaceHolderId = status.getPlaceholderConfiguration().getProfilePlaceholderID(signingProfile);
+ return status.getBackend().getPlaceholderExtractor().extract(
+ status.getPdfObject(), getPlaceHolderId(placeholderId, defaultPlaceHolderId),
+ getPlaceHolderMode(settings,
+ StringUtils.isNotEmpty(defaultPlaceHolderId) ? PLACEHOLDER_MATCH_MODE_MODERATE : PLACEHOLDER_MATCH_MODE_SORTED));
}
return null;
}
-
- public static List<SignaturePlaceholderData> checkPlaceholderSignatureLocationList(OperationStatus status, ISettings settings, String signatureLocation) throws PdfAsException,
- IOException {
- String placeholderID;
-
- if (status.getPlaceholderConfiguration().isGlobalPlaceholderEnabled()) {
- PlaceholderExtractor extractor = status.getBackend().getPlaceholderExtractor();
-
- if(StringUtils.isNotEmpty(signatureLocation)) {
- placeholderID = signatureLocation;
- } else {
- placeholderID = PlaceholderWebConfiguration.getValue(PLACEHOLDER_WEB_ID);
- if(StringUtils.isEmpty(placeholderID)) {
- placeholderID = settings.getValue(PLACEHOLDER_ID);
- }
- }
-
- String placeholderModeString = settings.getValue(PLACEHOLDER_MODE);
- int placeholderMode = PLACEHOLDER_MATCH_MODE_MODERATE;
- if (StringUtils.isNotEmpty(placeholderModeString)) {
- try {
- placeholderMode = Integer.parseInt(placeholderModeString);
- if (placeholderMode < PLACEHOLDER_MODE_MIN
- || placeholderMode > PLACEHOLDER_MODE_MAX) {
- throw new PdfAsErrorCarrier(new PDFASError(
- PDFASError.ERROR_INVALID_PLACEHOLDER_MODE));
- }
- } catch (NumberFormatException e) {
- throw new PdfAsErrorCarrier(new PDFASError(
- PDFASError.ERROR_INVALID_PLACEHOLDER_MODE, e));
- }
- }
- return extractor.extractList(status.getPdfObject(), placeholderID,
- placeholderMode);
-
- } else if (status.getPlaceholderConfiguration().isProfileConfigurationEnabled(status.getRequestedSignature().getSignatureProfileID())) {
- //filter for local placeholder in selected profiles
- PlaceholderExtractor extractor = status.getBackend().getPlaceholderExtractor();
- int placeholderMode = PLACEHOLDER_MATCH_MODE_SORTED;
-
- placeholderID = status.getPlaceholderConfiguration().getProfilePlaceholderID(status.getRequestedSignature().getSignatureProfileID());
- if(StringUtils.isNotEmpty(placeholderID)) {
- placeholderMode = PLACEHOLDER_MATCH_MODE_MODERATE;
- }
- String placeholderModeString = settings.getValue(PLACEHOLDER_MODE);
- if (StringUtils.isNotEmpty(placeholderModeString)) {
- try {
- placeholderMode = Integer.parseInt(placeholderModeString);
- if (placeholderMode < PLACEHOLDER_MODE_MIN
- || placeholderMode > PLACEHOLDER_MODE_MAX) {
- throw new PdfAsErrorCarrier(new PDFASError(
- PDFASError.ERROR_INVALID_PLACEHOLDER_MODE));
- }
- } catch (NumberFormatException e) {
- throw new PdfAsErrorCarrier(new PDFASError(
- PDFASError.ERROR_INVALID_PLACEHOLDER_MODE, e));
- }
- }
- return extractor.extractList(status.getPdfObject(), placeholderID,
- placeholderMode);
- }
- return null;
+
+ private static int getPlaceHolderMode(ISettings settings, int defaultValue) throws PdfAsErrorCarrier {
+ String placeholderModeString = settings.getValue(PLACEHOLDER_MODE);
+ if (StringUtils.isNotEmpty(placeholderModeString)) {
+ try {
+ int placeholderMode = Integer.parseInt(placeholderModeString);
+ if (placeholderMode < PLACEHOLDER_MODE_MIN || placeholderMode > PLACEHOLDER_MODE_MAX) {
+ throw new PdfAsErrorCarrier(new PDFASError(PDFASError.ERROR_INVALID_PLACEHOLDER_MODE));
+
+ }
+ return placeholderMode;
+
+ } catch (NumberFormatException e) {
+ throw new PdfAsErrorCarrier(new PDFASError(
+ PDFASError.ERROR_INVALID_PLACEHOLDER_MODE, e));
+ }
+
+ } else {
+ return defaultValue;
+
+ }
}
+
+ private static String getPlaceHolderId(String requestId, String defaultValue) {
+ if (StringUtils.isEmpty(requestId)) {
+ return defaultValue;
+
+ } else {
+ return requestId;
+
+ }
+ }
} \ No newline at end of file
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/SignaturePlaceholderContext.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/SignaturePlaceholderContext.java
deleted file mode 100644
index 3c8a6d76..00000000
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/placeholder/SignaturePlaceholderContext.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * <copyright> Copyright 2014 by E-Government Innovation Center EGIZ, Graz, Austria </copyright>
- * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
- * joint initiative of the Federal Chancellery Austria and Graz University of
- * Technology.
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://www.osor.eu/eupl/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
- ******************************************************************************/
-/**
- * <copyright> Copyright 2006 by Know-Center, Graz, Austria </copyright>
- * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
- * joint initiative of the Federal Chancellery Austria and Graz University of
- * Technology.
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
- * the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- * You may obtain a copy of the Licence at:
- * http://www.osor.eu/eupl/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and
- * limitations under the Licence.
- *
- * This product combines work with different licenses. See the "NOTICE" text
- * file for details on the various modules and licenses.
- * The "NOTICE" text file is part of the distribution. Any derivative works
- * that you distribute must include a readable copy of the "NOTICE" text file.
- */
-package at.gv.egiz.pdfas.lib.impl.placeholder;
-
-/**
- * Store and retrieve {@link SignaturePlaceholderData} in/from a thread local context.
- *
- * @author exthex
- *
- */
-public class SignaturePlaceholderContext {
-
- private ThreadLocal<SignaturePlaceholderData> sigHolder = new ThreadLocal<SignaturePlaceholderData>();
-
- private static SignaturePlaceholderContext instance = new SignaturePlaceholderContext();
-
- /**
- * Constructor. Private because this is a singleton.
- */
- private SignaturePlaceholderContext() {
-
- }
-
- /**
- * Get the {@link SignaturePlaceholderData} which is currently bound to this thread.
- * Might be null.
- *
- * @return
- */
- public static SignaturePlaceholderData getSignaturePlaceholderData(){
- return instance.sigHolder.get();
- }
-
- /**
- *
- * @return true if there is currently a {@link SignaturePlaceholderData} bound to this thread, false otherwise.
- */
- public static boolean isSignaturePlaceholderDataSet() {
- return instance.sigHolder.get() != null;
- }
-
- /**
- * Bind a {@link SignaturePlaceholderData} to this thread.
- * If the given data is null, the context will be cleared.
- *
- * @param data if null, clears the ThreadLocal, else binds the data to the current thread.
- */
- public static void setSignaturePlaceholderData(SignaturePlaceholderData data) {
- instance.sigHolder.set(data);
- }
-}
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/settings/Settings.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/settings/Settings.java
index c5b6dc57..0b376455 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/settings/Settings.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/settings/Settings.java
@@ -35,438 +35,364 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Vector;
+import java.util.stream.Collectors;
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 at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsException;
import at.gv.egiz.pdfas.common.settings.IProfileConstants;
import at.gv.egiz.pdfas.common.settings.ISettings;
import at.gv.egiz.pdfas.common.settings.Profiles;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class Settings implements ISettings, IProfileConstants {
+ protected Properties properties = new Properties();
+ protected File workDirectory;
+
+ public Settings(File workDirectory) {
+ try {
+ this.workDirectory = workDirectory;
+ loadSettings(workDirectory);
+ } catch (final PdfAsSettingsException e) {
+ log.error(e.getMessage(), e);
+ }
+ }
-public class Settings implements ISettings, IProfileConstants {
+ private void loadSettingsRecursive(File workDirectory, File file)
+ throws RuntimeException {
+ try {
+ final String configDir = workDirectory.getAbsolutePath() + File.separator
+ + CFG_DIR;
+ final Properties tmpProps = new Properties();
+ log.debug("Loading: " + file.getName());
+ tmpProps.load(new FileInputStream(file));
- private static final Logger logger = LoggerFactory
- .getLogger(Settings.class);
+ properties.putAll(tmpProps);
- protected Properties properties = new Properties();
+ this.getValuesPrefix(INCLUDE, tmpProps).values()
+ .forEach(el -> loadAdditionConfigFile(el, configDir));
- protected File workDirectory;
+ } catch (final IOException e) {
+ throw new RuntimeException(e);
- 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.debug("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()) {
- contextFolder = new File(configDir);
- 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.debug("Including '" + includeFileName + "'.");
- for (File includeFile : includeFiles) {
- loadSettingsRecursive(workDirectory, includeFile);
- }
- }
- }
- }
-
- } catch (IOException e) {
- throw new PdfAsSettingsException("Failed to read settings!", e);
- }
- }
+ private void loadAdditionConfigFile(String includeFileName, String configDir) {
+ File contextFolder = new File(configDir);
- private void showAugments(Profiles profiles) {
- if (!profiles.getAugments().isEmpty()) {
- logger.debug("\tAugments for {}", profiles.getName());
- for (int i = 0; i < profiles.getAugments().size(); i++) {
- logger.debug("\t\t{}", profiles.getAugments().get(i).getName());
- }
- }
+ final File includeInstruction = new File(contextFolder, includeFileName);
+ contextFolder = includeInstruction.getParentFile();
+ final String includeName = includeInstruction.getName();
+
+ final 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()) {
+ log.debug("Including '" + includeFileName + "'.");
+ for (final File includeFile : includeFiles) {
+ loadSettingsRecursive(workDirectory, includeFile);
+ }
}
- private boolean isAugmentsReady(Profiles profiles) {
- Iterator<Profiles> augmentingProfiles = profiles.getAugments().iterator();
- boolean allInitialized = true;
- while (augmentingProfiles.hasNext()) {
- if (!augmentingProfiles.next().isInitialized()) {
- allInitialized = false;
- }
+ }
+
+ private void showAugments(Profiles profiles) {
+ if (!profiles.getAugments().isEmpty()) {
+ log.debug("\tAugments for {}", profiles.getName());
+ for (final Profiles element : profiles.getAugments()) {
+ log.debug("\t\t{}", element.getName());
+ }
+ }
+ }
+
+ private boolean isAugmentsReady(Profiles profiles) {
+ boolean allInitialized = true;
+ for (final Profiles element : profiles.getAugments()) {
+ if (!element.isInitialized()) {
+ allInitialized = false;
+ }
+ }
+ return allInitialized;
+ }
+
+ private boolean isParentReady(Profiles profiles) {
+ if (profiles.getParent() != null) {
+ return profiles.getParent().isInitialized();
+ } else {
+ return false;
+ }
+ }
+
+ private void performAugmentConfiguration(Profiles profiles) {
+ final String childBase = "sig_obj."
+ + profiles.getName();
+
+ for (final Profiles augmentingProfile : profiles.getAugments()) {
+ final String augmentingBase = "sig_obj." + augmentingProfile.getName();
+
+ for (final String key : this.getKeys(
+ augmentingBase + ".")) {
+ final String keyToCopy = key.substring(augmentingBase
+ .length());
+ // log.debug("Profile: {} => {}",
+ // key, childBase+keyToCopy);
+ final String sourceKey = augmentingBase + keyToCopy;
+ final String targetKey = childBase + keyToCopy;
+
+ if (!this.hasValue(targetKey)) {
+ properties.setProperty(targetKey,
+ this.getValue(sourceKey));
+ // log.debug("Replaced: {} with Value from {}",
+ // childBase+keyToCopy, parentBase+keyToCopy);
+ } else {
+ // log.debug("NOT Replaced: {} with Value from {}",
+ // childBase+keyToCopy, parentBase+keyToCopy);
}
- return allInitialized;
+ }
}
-
- private boolean isParentReady(Profiles profiles) {
- if (profiles.getParent() != null) {
- return profiles.getParent().isInitialized();
+ }
+
+ private void performParentConfiguration(Profiles profiles) {
+ if (profiles.getParent() != null) {
+ // If Parent is initialized Copy Properties from Parent
+ // to this profile
+ final String parentBase = "sig_obj." + profiles.getParent().getName();
+ final String childBase = "sig_obj."
+ + profiles.getName();
+
+ for (final String key : this.getKeys(
+ parentBase + ".")) {
+ final String keyToCopy = key.substring(parentBase
+ .length());
+ // log.debug("Profile: {} => {}",
+ // key, childBase+keyToCopy);
+ final String sourceKey = parentBase + keyToCopy;
+ final String targetKey = childBase + keyToCopy;
+
+ if (!this.hasValue(targetKey)) {
+ properties.setProperty(targetKey,
+ this.getValue(sourceKey));
+ // log.debug("Replaced: {} with Value from {}",
+ // childBase+keyToCopy, parentBase+keyToCopy);
} else {
- return false;
+ // log.debug("NOT Replaced: {} with Value from {}",
+ // childBase+keyToCopy, parentBase+keyToCopy);
}
+ }
+ }
+ }
+
+ private void buildProfiles() {
+ final Map<String, Profiles> profiles = new HashMap<>();
+
+ for (final String key : this.getFirstLevelKeys("sig_obj.types.")) {
+ final String profile = key.substring("sig_obj.types.".length());
+ // System.out.println("[" + profile + "]: " + this.getValue(key));
+ if (this.getValue(key).equals("on")) {
+ final Profiles prof = new Profiles(profile);
+ profiles.put(profile, prof);
+ }
}
- private void performAugmentConfiguration(Profiles profiles) {
- Iterator<Profiles> augmentingProfiles = profiles.getAugments().iterator();
-
- String childBase = "sig_obj."
- + profiles.getName();
-
- while (augmentingProfiles.hasNext()) {
- Profiles augmentingProfile = augmentingProfiles.next();
- String augmentingBase = "sig_obj." + augmentingProfile.getName();
-
- Iterator<String> augmentingKeyIt = this.getKeys(
- augmentingBase + ".").iterator();
-
- while (augmentingKeyIt.hasNext()) {
- String key = augmentingKeyIt.next();
- String keyToCopy = key.substring(augmentingBase
- .length());
- //logger.debug("Profile: {} => {}",
- // key, childBase+keyToCopy);
- String sourceKey = augmentingBase + keyToCopy;
- String targetKey = childBase + keyToCopy;
-
- if (!this.hasValue(targetKey)) {
- properties.setProperty(targetKey,
- this.getValue(sourceKey));
- //logger.debug("Replaced: {} with Value from {}",
- // childBase+keyToCopy, parentBase+keyToCopy);
- } else {
- //logger.debug("NOT Replaced: {} with Value from {}",
- // childBase+keyToCopy, parentBase+keyToCopy);
- }
- }
- }
+ for (final Entry<String, Profiles> entry : profiles.entrySet()) {
+ entry.getValue().findParent(properties, profiles);
}
- private void performParentConfiguration(Profiles profiles) {
- if (profiles.getParent() != null) {
- // If Parent is initialized Copy Properties from Parent
- // to this profile
- String parentBase = "sig_obj." + profiles.getParent().getName();
- String childBase = "sig_obj."
- + profiles.getName();
-
- Iterator<String> parentKeyIt = this.getKeys(
- parentBase + ".").iterator();
- while (parentKeyIt.hasNext()) {
- String key = parentKeyIt.next();
- String keyToCopy = key.substring(parentBase
- .length());
- //logger.debug("Profile: {} => {}",
- // key, childBase+keyToCopy);
- String sourceKey = parentBase + keyToCopy;
- String targetKey = childBase + keyToCopy;
-
- if (!this.hasValue(targetKey)) {
- properties.setProperty(targetKey,
- this.getValue(sourceKey));
- //logger.debug("Replaced: {} with Value from {}",
- // childBase+keyToCopy, parentBase+keyToCopy);
- } else {
- //logger.debug("NOT Replaced: {} with Value from {}",
- // childBase+keyToCopy, parentBase+keyToCopy);
- }
- }
- }
+ for (final Entry<String, Profiles> entry : profiles.entrySet()) {
+ if (entry.getValue().getParent() == null) {
+ log.debug("Got Profile: [{}] : {}", entry.getKey(), entry.getValue().getName());
+ showAugments(entry.getValue());
+ } else {
+ log.debug("Got Profile: [{}] : {} (Parent {})", entry.getKey(),
+ entry.getValue().getName(), entry.getValue().getParent().getName());
+ showAugments(entry.getValue());
+ }
}
- private void buildProfiles() {
- Map<String, Profiles> profiles = new HashMap<String, Profiles>();
-
- Iterator<String> itKeys = this.getFirstLevelKeys("sig_obj.types.")
- .iterator();
- while (itKeys.hasNext()) {
- String key = itKeys.next();
- String profile = key.substring("sig_obj.types.".length());
- //System.out.println("[" + profile + "]: " + this.getValue(key));
- if (this.getValue(key).equals("on")) {
- Profiles prof = new Profiles(profile);
- profiles.put(profile, prof);
- }
- }
+ log.debug("Configured Settings: {}",
+ properties.size());
+
+ // Resolve Parent Structures ...
+ while (!profiles.isEmpty()) {
+ final List<String> removes = new ArrayList<>();
+ for (final Entry<String, Profiles> entry : profiles.entrySet()) {
+ // Remove all base Profiles ...
+ if (entry.getValue().getParent() == null && entry.getValue().getAugments().isEmpty()) {
+ // Has neither parent or augmenting profiles
+
+ entry.getValue().setInitialized(true);
+ removes.add(entry.getKey());
+ } else if (entry.getValue().getParent() == null) {
+ // Has augmenting profiles but no parent
+
+ // check if all augmenting profiles are initialized if so
+ // add them
+
+ final Profiles profile = entry.getValue();
+ if (this.isAugmentsReady(profile)) {
+ this.performAugmentConfiguration(profile);
+ // Copy done
+ entry.getValue().setInitialized(true);
+ removes.add(entry.getKey());
+ } else {
+ log.debug("Not all augmenting profiles are ready yet for {}", entry.getValue().getName());
+ }
+ } else if (entry.getValue().getAugments().isEmpty()) {
+
+ // Has parent but no augmenting profiles
+ final Profiles profile = entry.getValue();
+
+ if (this.isParentReady(profile)) {
+ this.performParentConfiguration(profile);
+ // Copy done
+ entry.getValue().setInitialized(true);
+ removes.add(entry.getKey());
+ }
+ } else {
- // Initialize Parent Structure ...
- Iterator<Entry<String, Profiles>> profileIterator = profiles.entrySet()
- .iterator();
- while (profileIterator.hasNext()) {
- Entry<String, Profiles> entry = profileIterator.next();
- entry.getValue().findParent(properties, profiles);
- }
+ // Has parent and augmenting profiles
- // Debug Output
- Iterator<Entry<String, Profiles>> profileIteratorDbg = profiles.entrySet()
- .iterator();
- while (profileIteratorDbg.hasNext()) {
- Entry<String, Profiles> entry = profileIteratorDbg.next();
- if (entry.getValue().getParent() == null) {
- logger.debug("Got Profile: [{}] : {}", entry.getKey(), entry.getValue().getName());
- showAugments(entry.getValue());
- } else {
- logger.debug("Got Profile: [{}] : {} (Parent {})", entry.getKey(),
- entry.getValue().getName(), entry.getValue().getParent().getName());
- showAugments(entry.getValue());
- }
- }
+ final Profiles profile = entry.getValue();
+ if (this.isAugmentsReady(profile) && this.isParentReady(profile)) {
+ // order is curcial, augments preceed over parent configuration
+ this.performAugmentConfiguration(profile);
+ this.performParentConfiguration(profile);
- logger.debug("Configured Settings: {}",
- properties.size());
-
- // Resolve Parent Structures ...
- while (!profiles.isEmpty()) {
- List<String> removes = new ArrayList<String>();
- Iterator<Entry<String, Profiles>> profileIt = profiles.entrySet()
- .iterator();
- while (profileIt.hasNext()) {
- Entry<String, Profiles> entry = profileIt.next();
-
- // Remove all base Profiles ...
- if (entry.getValue().getParent() == null && entry.getValue().getAugments().isEmpty()) {
- // Has neither parent or augmenting profiles
-
- entry.getValue().setInitialized(true);
- removes.add(entry.getKey());
- } else if (entry.getValue().getParent() == null) {
- // Has augmenting profiles but no parent
-
- // check if all augmenting profiles are initialized if so
- // add them
-
- Profiles profile = entry.getValue();
- if (this.isAugmentsReady(profile)) {
- this.performAugmentConfiguration(profile);
- // Copy done
- entry.getValue().setInitialized(true);
- removes.add(entry.getKey());
- } else {
- logger.debug("Not all augmenting profiles are ready yet for {}", entry.getValue().getName());
- }
- } else if (entry.getValue().getAugments().isEmpty()) {
-
- // Has parent but no augmenting profiles
- Profiles profile = entry.getValue();
-
- if (this.isParentReady(profile)) {
- this.performParentConfiguration(profile);
- // Copy done
- entry.getValue().setInitialized(true);
- removes.add(entry.getKey());
- }
- } else {
-
- // Has parent and augmenting profiles
-
- Profiles profile = entry.getValue();
- if (this.isAugmentsReady(profile) && this.isParentReady(profile)) {
- // order is curcial, augments preceed over parent configuration
- this.performAugmentConfiguration(profile);
- this.performParentConfiguration(profile);
-
- // Copy done
- entry.getValue().setInitialized(true);
- removes.add(entry.getKey());
- }
- }
- }
-
- // Remove all Profiles from Remove List
-
- if (removes.isEmpty() && !profiles.isEmpty()) {
- logger.error("Failed to build inheritant Profiles, running in infinite loop! (aborting ...)");
- logger.error("Profiles that cannot be resolved completly:");
- Iterator<Entry<String, Profiles>> failedProfiles = profiles.entrySet().iterator();
- while (failedProfiles.hasNext()) {
- Entry<String, Profiles> entry = failedProfiles.next();
- logger.error("Problem Profile: [{}] : {}", entry.getKey(), entry.getValue().getName());
- }
- return;
- }
-
- Iterator<String> removeIt = removes.iterator();
- while (removeIt.hasNext()) {
- profiles.remove(removeIt.next());
- }
+ // Copy done
+ entry.getValue().setInitialized(true);
+ removes.add(entry.getKey());
+ }
}
+ }
- logger.debug("Derived Settings: {}",
- properties.size());
+ // Remove all Profiles from Remove List
- }
-
- public void debugDumpProfileSettings(String profileName) {
- Iterator<String> keysIterator = this.getKeys("sig_obj." + profileName + ".").iterator();
-
- logger.debug("Configuration for {}", profileName);
- while(keysIterator.hasNext()) {
- String key = keysIterator.next();
- logger.debug(" {}: {}", key, this.getValue(key));
+ if (removes.isEmpty() && !profiles.isEmpty()) {
+ log.error("Failed to build inheritant Profiles, running in infinite loop! (aborting ...)");
+ log.error("Profiles that cannot be resolved completly:");
+ for (final Entry<String, Profiles> entry : profiles.entrySet()) {
+ log.error("Problem Profile: [{}] : {}", entry.getKey(), entry.getValue().getName());
}
- }
-
- 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));
- buildProfiles();
- /*
- * 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);
- // }
- }
+ return;
+ }
- public String getValue(String key) {
- return properties.getProperty(key);
+ for (final String element : removes) {
+ profiles.remove(element);
+ }
}
- public boolean hasValue(String key) {
- return properties.containsKey(key);
- }
+ log.debug("Derived Settings: {}",
+ properties.size());
- 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();
+ }
+ public void debugDumpProfileSettings(String profileName) {
+ log.debug("Configuration for {}", profileName);
+ for (final String key : this.getKeys("sig_obj." + profileName + ".")) {
+ log.debug(" {}: {}", key, this.getValue(key));
+ }
+ }
- if (key.startsWith(prefix)) {
- valueMap.put(key, props.getProperty(key));
- }
- }
+ public void loadSettings(File workDirectory) throws PdfAsSettingsException {
+ try {
+ final String configDir = workDirectory.getAbsolutePath() + File.separator
+ + CFG_DIR;
+ final String configFile = configDir + File.separator + CFG_FILE;
+ loadSettingsRecursive(workDirectory, new File(configFile));
+ buildProfiles();
- if (valueMap.isEmpty()) {
- return null;
- }
+ } catch (final RuntimeException e) {
+ throw new PdfAsSettingsException("Failed to read settings!", e);
- return valueMap;
}
-
- public Map<String, String> getValuesPrefix(String prefix) {
- return getValuesPrefix(prefix, properties);
+ }
+
+ @Override
+ public String getValue(String key) {
+ return properties.getProperty(key);
+ }
+
+ @Override
+ public boolean hasValue(String key) {
+ return properties.containsKey(key);
+ }
+
+ private Map<String, String> getValuesPrefix(String prefix, Properties props) {
+ return props.entrySet().stream()
+ .filter(el -> el.getKey().toString().startsWith(prefix))
+ .collect(Collectors.toMap(key -> key.getKey().toString(), value -> value.getValue().toString()));
+
+ }
+
+ @Override
+ public Map<String, String> getValuesPrefix(String prefix) {
+ return getValuesPrefix(prefix, properties);
+ }
+
+ public Vector<String> getKeys(String prefix) {
+ final Iterator<Object> keyIterator = properties.keySet().iterator();
+ final Vector<String> valueMap = new Vector<>();
+ while (keyIterator.hasNext()) {
+ final String key = keyIterator.next().toString();
+
+ if (key.startsWith(prefix)) {
+ valueMap.add(key);
+ }
}
-
- public Vector<String> getKeys(String 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)) {
- valueMap.add(key);
- }
+ return valueMap;
+ }
+
+ @Override
+ public Vector<String> getFirstLevelKeys(String prefix) {
+ final String mPrefix = prefix.endsWith(".") ? prefix : prefix + ".";
+ final Iterator<Object> keyIterator = properties.keySet().iterator();
+ final Vector<String> valueMap = new Vector<>();
+ while (keyIterator.hasNext()) {
+ final String key = keyIterator.next().toString();
+
+ if (key.startsWith(prefix)) {
+ final int keyIdx = key.indexOf('.', mPrefix.length()) > 0 ? key
+ .indexOf('.', mPrefix.length()) : key.length();
+ final String firstLevels = key.substring(0, keyIdx);
+ if (!valueMap.contains(firstLevels)) {
+ valueMap.add(firstLevels);
}
- 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;
+ if (valueMap.isEmpty()) {
+ return null;
}
- public boolean hasPrefix(String prefix) {
- Iterator<Object> keyIterator = properties.keySet().iterator();
- while (keyIterator.hasNext()) {
- String key = keyIterator.next().toString();
+ return valueMap;
+ }
- if (key.startsWith(prefix)) {
- return true;
- }
- }
- return false;
- }
+ @Override
+ public boolean hasPrefix(String prefix) {
+ final Iterator<Object> keyIterator = properties.keySet().iterator();
+ while (keyIterator.hasNext()) {
+ final String key = keyIterator.next().toString();
- public String getWorkingDirectory() {
- return this.workDirectory.getAbsolutePath();
+ if (key.startsWith(prefix)) {
+ return true;
+ }
}
+ return false;
+ }
+
+ @Override
+ public String getWorkingDirectory() {
+ return this.workDirectory.getAbsolutePath();
+ }
}