diff options
Diffstat (limited to 'src/main/java/at/gv/egiz')
| -rw-r--r-- | src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java | 185 | ||||
| -rw-r--r-- | src/main/java/at/gv/egiz/pdfas/utils/PdfAUtil.java | 40 | 
2 files changed, 225 insertions, 0 deletions
| diff --git a/src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java b/src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java new file mode 100644 index 0000000..32c9e0d --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java @@ -0,0 +1,185 @@ +package at.gv.egiz.pdfas.utils;
 +
 +import java.util.ArrayList;
 +import java.util.HashMap;
 +import java.util.Iterator;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Map.Entry;
 +
 +import ognl.Ognl;
 +import ognl.OgnlException;
 +
 +import org.apache.log4j.Logger;
 +
 +/**
 + * Utility class for ognl evaluation.
 + * <a href="http://www.opensymphony.com/ognl/">ognl website</a>
 + * @author dferbas
 + * @author mhiess
 + *
 + */
 +public class OgnlUtil {
 +
 +	private static final String EXP_END = "}";
 +
 +   private static final String EXP_START = "${";
 +
 +   private static final Logger log = Logger.getLogger(OgnlUtil.class);
 +
 +	private Map context = new HashMap();
 +	private Object root = null;
 +
 +	public OgnlUtil() {
 +		this.init(null);
 +	}
 +
 +	public OgnlUtil(Map context) {
 +		this.init(context);
 +	}
 +	
 +	public OgnlUtil(Object root) {
 +	   this.root = root;
 +	   this.init(null);
 +	}
 +
 +	/**
 +	 * Adds the default utils to the context
 +	 * 
 +	 * @param context1
 +	 */
 +	private void init(Map context1) {
 +		if (context1 != null) {
 +			this.context = context1;
 +		}		
 +	}
 +
 +	private List extractExpressions(String text) {
 +
 +		List expressions = new ArrayList();
 +
 +		int indexStart = 0;
 +		int indexEnd = 0;
 +		String exp;
 +
 +		while (indexStart != -1) {
 +			indexStart = text.indexOf(EXP_START, indexStart);
 +			indexEnd = text.indexOf(EXP_END, indexStart);
 +
 +			if (indexStart != -1 && indexEnd != -1) {
 +
 +				exp = text.substring(indexStart + 2, indexEnd);
 +				log.debug("Found expression in template: " + exp);
 +				if (!exp.equals("") && exp != null) {
 +					if (!expressions.contains(exp)) {
 +						expressions.add(exp);
 +					} else {
 +						log.debug("Duplicated expression '" + exp + "' found");
 +					}
 +				}
 +
 +				indexStart = indexEnd;
 +			}
 +		}
 +
 +		return expressions;
 +	}
 +	
 +	public boolean containsExpression(String template) {
 +	   return template != null && template.contains("${") && template.contains("}");
 +	}
 +
 +	/**
 +	 * Compile/evaluate a message with ognl expressions marked with <tt>${expression}</tt> 
 +	 * 
 +	 * @param template
 +	 * @return
 +	 */
 +	public String compileMessage(String template) {
 +
 +		if (this.context != null) {
 +			String compiledMsg = template;
 +			List expressions = this.extractExpressions(template);
 +
 +			String value;
 +			for (Iterator it = expressions.iterator(); it.hasNext();) {
 +            String expr = (String) it.next();
 +
 +				try {
 +				   if (this.root != null) {
 +				      value = String.valueOf(Ognl.getValue(expr, this.root));
 +				   } else {
 +				      value = String.valueOf(Ognl.getValue(expr, this.context));
 +				   }
 +					log.debug("Found value: '" + value + "' for expression: '" + expr + "'");
 +
 +					if (value == null) {
 +						value = "";
 +						log.debug("Set value for expression to: empty string");
 +					}
 +
 +					compiledMsg = compiledMsg.replace(EXP_START + expr + EXP_END, value);
 +				} catch (OgnlException e) {
 +					log.error(e.getMessage(), e);
 +				}
 +			}
 +			log.debug("Returning compiled message: " + compiledMsg);
 +			return compiledMsg;
 +		}
 +		return null;
 +	}
 +
 +	/**
 +	 * Evaluate an expression as ognl, returning result as object. No placeholders ${ } allowed.
 +	 * @param ognlExp
 +	 * @return
 +	 */
 +	public Object evaluate(String ognlExp) {
 +
 +		if (this.context != null) {
 +
 +			Object value = null;
 +			try {
 +				value = Ognl.getValue(ognlExp, this.context);
 +				log.debug("Found value: '" + value + "' for expression: '" + ognlExp + "'");
 +
 +			} catch (OgnlException e) {
 +				log.error(e.getMessage(), e);				
 +			}
 +			return value;
 +		} else return null;		
 +	}
 +
 +	/**
 +	 * This method compiles a map of ognl expression to a map with entries
 +	 * 
 +	 * @param toCompile
 +	 * @return
 +	 */
 +	public Map compileExpressions(Map toCompile) {
 +		if (this.context != null) {
 +			Map result = new HashMap();
 +
 +			for (Iterator it = result.entrySet().iterator(); it.hasNext();) {
 +            Entry entry = (Entry) it.next();            
 +				try {
 +					result.put(entry.getKey(), Ognl.getValue(entry.getValue(), this.context));
 +				} catch (OgnlException e) {
 +					result.put(entry.getKey(), null);
 +					log.warn(e.getMessage(), e);
 +				}
 +			}
 +			return result;
 +
 +		}
 +		return null;
 +	}
 +
 +	public Map getContext() {
 +		return this.context;
 +	}
 +
 +	public void mergeOgnlContext(OgnlUtil ognlUtil) {
 +		this.context.putAll(ognlUtil.getContext());
 +	}
 +}
 diff --git a/src/main/java/at/gv/egiz/pdfas/utils/PdfAUtil.java b/src/main/java/at/gv/egiz/pdfas/utils/PdfAUtil.java new file mode 100644 index 0000000..dd0560d --- /dev/null +++ b/src/main/java/at/gv/egiz/pdfas/utils/PdfAUtil.java @@ -0,0 +1,40 @@ +package at.gv.egiz.pdfas.utils;
 +
 +/**
 + * PDF/A utility class
 + * @author dferbas
 + *
 + */
 +public class PdfAUtil {
 +   
 +   /**
 +    * Extract pdfa version from pdf metadata
 +    * @param pdfMetadata
 +    * @return
 +    */
 +   public static String findPdfAVersion(String pdfMetadata) {
 +
 +      String inf = pdfMetadata;
 +      String pdfaNsMark = "http://www.aiim.org/pdfa/ns/id/";
 +      String partMark = "<pdfaid:part>";
 +      String confMark = "<pdfaid:conformance>";
 +      int pdfaI = inf.indexOf(pdfaNsMark);
 +
 +      if (pdfaI > -1) {
 +         int part = inf.indexOf(partMark);
 +         StringBuffer version = new StringBuffer("PDF/A-");
 +         part = part + partMark.length();
 +         version.append(inf.substring(part, part + 1));
 +         int conf = inf.indexOf(confMark);
 +
 +         conf = conf + confMark.length();
 +         version.append(inf.substring(conf, conf + 1));
 +
 +         return version.toString();
 +      } else {
 +         return null;
 +
 +      }
 +   }
 +
 +}
 | 
