From 5b0038e90c291b67e5e9aad3d9e12d8a57c9f60b Mon Sep 17 00:00:00 2001 From: ferbas Date: Fri, 13 Nov 2009 12:53:00 +0000 Subject: baik: ognl and pdfa utils git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@401 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java | 185 +++++++++++++++++++++ src/main/java/at/gv/egiz/pdfas/utils/PdfAUtil.java | 40 +++++ 2 files changed, 225 insertions(+) create mode 100644 src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java create mode 100644 src/main/java/at/gv/egiz/pdfas/utils/PdfAUtil.java (limited to 'src/main/java') 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. + * ognl website + * @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 ${expression} + * + * @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 = ""; + String confMark = ""; + 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; + + } + } + +} -- cgit v1.2.3