aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java
diff options
context:
space:
mode:
authorferbas <ferbas@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2009-11-13 12:53:00 +0000
committerferbas <ferbas@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2009-11-13 12:53:00 +0000
commit5b0038e90c291b67e5e9aad3d9e12d8a57c9f60b (patch)
treeafeb4be6ccb5b5c05dfaedf0d2f58e2cd3233adf /src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java
parent246bbec57dc4544600bc8e11ea5619700ff26fc4 (diff)
downloadpdf-as-3-5b0038e90c291b67e5e9aad3d9e12d8a57c9f60b.tar.gz
pdf-as-3-5b0038e90c291b67e5e9aad3d9e12d8a57c9f60b.tar.bz2
pdf-as-3-5b0038e90c291b67e5e9aad3d9e12d8a57c9f60b.zip
baik: ognl and pdfa utils
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@401 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
Diffstat (limited to 'src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java')
-rw-r--r--src/main/java/at/gv/egiz/pdfas/utils/OgnlUtil.java185
1 files changed, 185 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());
+ }
+}