diff options
Diffstat (limited to 'src')
5 files changed, 93 insertions, 49 deletions
| diff --git a/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java b/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java index 4b6f483..3d4be31 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/signator/binary/BinarySignator_1_0_0.java @@ -43,6 +43,7 @@ import at.gv.egiz.pdfas.impl.signator.IncrementalUpdateHelper;  import at.gv.egiz.pdfas.utils.OgnlUtil;
  import at.knowcenter.wag.egov.egiz.PdfAS;
  import at.knowcenter.wag.egov.egiz.PdfASID;
 +import at.knowcenter.wag.egov.egiz.cfg.OverridePropertyHolder;
  import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
  import at.knowcenter.wag.egov.egiz.exceptions.NormalizeException;
  import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
 @@ -322,28 +323,35 @@ public class BinarySignator_1_0_0 implements Signator     */
    protected void fillReplacesWithValues(final IncrementalUpdateInformation iui)
    {
 -    Iterator it = iui.replaces.iterator();
 -    HashMap ognlCtx = new HashMap();
 -    ognlCtx.put("iui", iui);
 -    ognlCtx.put("sso", iui.signed_signature_object);
 -    ognlCtx.put("issuer", iui.signed_signature_object.getIssuerDNMap());
 -    ognlCtx.put("subject", iui.signed_signature_object.getSubjectDNMap());
 -    OgnlUtil ognl = new OgnlUtil(ognlCtx);
 -
 -    while (it.hasNext())
 -    {
 -      ReplaceInfo ri = (ReplaceInfo) it.next();
 -      
 -      // dferbas
 -      if (ognl.containsExpression(ri.sfd.value)) {
 -         // evaluate expression
 -         String res = ognl.compileMessage(ri.sfd.value);
 -         
 -         ri.value = this.normalizer.normalize(res, true);                 
 -         
 -      } else {             
 -         ri.value = iui.signed_signature_object.retrieveStringValue(ri.sfd.field_name);
 -      }
 +     try {
 +       Iterator it = iui.replaces.iterator();
 +       HashMap ognlCtx = new HashMap();
 +       ognlCtx.put("iui", iui);
 +       ognlCtx.put("sso", iui.signed_signature_object);
 +       ognlCtx.put("issuer", iui.signed_signature_object.getIssuerDNMap());
 +       ognlCtx.put("subject", iui.signed_signature_object.getSubjectDNMap());
 +       OgnlUtil ognl = new OgnlUtil(ognlCtx);
 +       
 +       OverridePropertyHolder.setOgnlUtil(ognl);
 +   
 +       while (it.hasNext()) {       
 +         ReplaceInfo ri = (ReplaceInfo) it.next();
 +         String overrideVal = OverridePropertyHolder.getProperty(ri.sfd.field_name);
 +         if (overrideVal != null) {
 +            ri.sfd.value = overrideVal;
 +            ri.value = overrideVal;
 +         } else if (ognl.containsExpression(ri.sfd.value)) {       // dferbas
 +            // evaluate expression
 +            String res = ognl.compileMessage(ri.sfd.value);
 +            
 +            ri.value = this.normalizer.normalize(res, true);                 
 +            
 +         } else if (overrideVal == null) {             
 +            ri.value = iui.signed_signature_object.retrieveStringValue(ri.sfd.field_name);
 +         }
 +       }
 +     } finally {
 +       OverridePropertyHolder.removeOgnlUtil();
      }
    }
 diff --git a/src/main/java/at/gv/egiz/pdfas/impl/signator/textual/TextualSignator_1_0_0.java b/src/main/java/at/gv/egiz/pdfas/impl/signator/textual/TextualSignator_1_0_0.java index 942814a..b29f0e6 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/signator/textual/TextualSignator_1_0_0.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/signator/textual/TextualSignator_1_0_0.java @@ -33,6 +33,7 @@ import at.gv.egiz.pdfas.impl.signator.IncrementalUpdateHelper;  import at.gv.egiz.pdfas.utils.OgnlUtil;
  import at.knowcenter.wag.egov.egiz.PdfAS;
  import at.knowcenter.wag.egov.egiz.PdfASID;
 +import at.knowcenter.wag.egov.egiz.cfg.OverridePropertyHolder;
  import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
  import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
  import at.knowcenter.wag.egov.egiz.pdf.IncrementalUpdateInformation;
 @@ -162,6 +163,9 @@ public class TextualSignator_1_0_0 implements Signator      {
        throw new SignatorException(pe);
      }
 +    finally {
 +       OverridePropertyHolder.removeOgnlUtil();
 +    }
  //    catch (IOException e)
  //    {
  //      throw new SignatorException(ErrorCode.DOCUMENT_CANNOT_BE_READ, e);
 @@ -170,27 +174,27 @@ public class TextualSignator_1_0_0 implements Signator     private void evaluteOgnl(SignatureObject so, TextualSignatorInformation tsi) {             
       HashMap ognlCtx = new HashMap();
 -        //ognlCtx.put("iui", tsi.);
 -        ognlCtx.put("sso", tsi.signSignatureObject);
 -        ognlCtx.put("issuer", tsi.signSignatureObject.getIssuerDNMap());
 -        ognlCtx.put("subject", tsi.signSignatureObject.getSubjectDNMap());
 -        OgnlUtil ognl = new OgnlUtil(ognlCtx);
 -
 -        Iterator it = so.getSigEntries().values().iterator();
 -        while (it.hasNext())
 -        {
 -          SignatureEntry se = (SignatureEntry) it.next();
 +     //ognlCtx.put("iui", tsi.);
 +     ognlCtx.put("sso", tsi.signSignatureObject);
 +     ognlCtx.put("issuer", tsi.signSignatureObject.getIssuerDNMap());
 +     ognlCtx.put("subject", tsi.signSignatureObject.getSubjectDNMap());
 +     OgnlUtil ognl = new OgnlUtil(ognlCtx);
 +     OverridePropertyHolder.setOgnlUtil(ognl);
 +
 +     Iterator it = so.getSigEntries().values().iterator();
 +     while (it.hasNext())
 +     {
 +       SignatureEntry se = (SignatureEntry) it.next();
 +       
 +       if (ognl.containsExpression(se.getValue())) {
 +          // evaluate expression
 +          String res = ognl.compileMessage(se.getValue());
 +          se.setValue(res);
 +          //ri.value = this.normalizer.normalize(res, true);                 
 -          if (ognl.containsExpression(se.getValue())) {
 -             // evaluate expression
 -             String res = ognl.compileMessage(se.getValue());
 -             se.setValue(res);
 -             //ri.value = this.normalizer.normalize(res, true);                 
 -             
 -          }
 -        }
 -   
 -}
 +       }
 +     }   
 +   }
     public String getEncoding() {
        // old signatures used this encoding implicit most of the time (windows default)
 diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/cfg/OverridePropertyHolder.java b/src/main/java/at/knowcenter/wag/egov/egiz/cfg/OverridePropertyHolder.java index 33a0e4a..049ce06 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/cfg/OverridePropertyHolder.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/cfg/OverridePropertyHolder.java @@ -3,6 +3,7 @@ package at.knowcenter.wag.egov.egiz.cfg;  import java.util.Properties;
  import at.gv.egiz.pdfas.api.sign.SignParameters;
 +import at.gv.egiz.pdfas.utils.OgnlUtil;
  /**
   * Thread local holder for profile override values. 
 @@ -16,6 +17,7 @@ public class OverridePropertyHolder {     private static ThreadLocal propHolder = new ThreadLocal() {    
        protected Object initialValue() { return new Properties();};
     };
 +   private static ThreadLocal ognlHolder = new ThreadLocal();
     public static Properties getOverrideProps() {
        return (Properties) propHolder.get();
 @@ -30,12 +32,32 @@ public class OverridePropertyHolder {     }
     public static String getProperty(String key) {
 -      return getOverrideProps().getProperty(key);
 +      
 +      String res = getOverrideProps().getProperty(key);
 +      if (res != null) {
 +         OgnlUtil ognl = getOgnl();
 +         if (ognl != null && ognl.containsExpression(res)) {
 +            // evaluate expression
 +            res = ognl.compileMessage(res);                        
 +         }
 +      }
 +      return res;
     }
 -   public static void removeProperties() {
 -      propHolder.remove();
 +   public static void removeProperties() {      
        propHolder.set(new Properties());
     }
 +   
 +   public static void setOgnlUtil(OgnlUtil ognl) {
 +      ognlHolder.set(ognl);      
 +   }
 +   
 +   private static OgnlUtil getOgnl() {
 +      return (OgnlUtil) ognlHolder.get();      
 +   }
 +   
 +   public static void removeOgnlUtil() {
 +      ognlHolder.set(null);
 +   }
  }
 diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureEntry.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureEntry.java index 2782f2b..b62e504 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureEntry.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureEntry.java @@ -53,6 +53,8 @@ public class SignatureEntry implements Serializable {     * The starting index position of the key if it is found in the signature text.
     */
    private int startIndex_ = -1;
 +  
 +  public boolean isPlaceholder = false;
    /**
     * The empty constructor.
 diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java index 44363d7..25e996e 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java @@ -357,7 +357,11 @@ public class SignatureObject implements Serializable     * @return <code>true</code> if a new signature value is created,
     *         <code>false</code> otherwise
     */
 -  public boolean setSigValue(String key, String value)
 +  public boolean setSigValue(String key, String value) {
 +     return setSigValue(key, value, false);
 +  }
 +  
 +  public boolean setSigValue(String key, String value, boolean placeholder)
    {
      SignatureEntry sig_entry = null;
      boolean is_new = false;
 @@ -377,6 +381,7 @@ public class SignatureObject implements Serializable        value = removeAllWhiteSpaces(value);
      }
      sig_entry.setValue(value);
 +    sig_entry.isPlaceholder = placeholder;
      return is_new;
    }
 @@ -428,16 +433,19 @@ public class SignatureObject implements Serializable    {
      String value = null;
 +    SignatureEntry sigEntry = null;
      if (sigEntries_.containsKey(key))
      {
 -      value = ((SignatureEntry) sigEntries_.get(key)).getValue();
 +      sigEntry = (SignatureEntry) sigEntries_.get(key);
 +      value = sigEntry.getValue();
      }
      if (value == null && SignatureTypes.SIG_NORM.equals(key))
      {
        value = normalizer_.getVersion();
      }
 +
      String overrideVal = OverridePropertyHolder.getProperty(key);
 -    if (overrideVal != null) {
 +    if (value != null && sigEntry != null && !sigEntry.isPlaceholder &&  overrideVal != null) { // TODO this!! SignatureEntry.isPlaceholder
         value = overrideVal;
         if (logger_.isDebugEnabled()) {
            logger_.debug("Using override property for key '" + key + "' = " + value);
 @@ -1742,7 +1750,7 @@ public class SignatureObject implements Serializable          variable_fields.add(sfd);
 -        setSigValue(sfd.field_name, value_string);
 +        setSigValue(sfd.field_name, value_string, true);
        }
      }
 | 
