[Dive4elements-commits] [PATCH 2 of 2] Added new functions to datacage templating language
Wald Commits
scm-commit at wald.intevation.org
Tue Jan 29 17:11:57 CET 2013
# HG changeset patch
# User Raimund Renkert <rrenkert at intevation.de>
# Date 1359475886 -3600
# Node ID e1566938d04cc39b1faef0444d87f2fb24760860
# Parent 1071aacd042c6034a3343a86389bb91379ef7a11
Added new functions to datacage templating language.
* get minimum of location/distance:
dc:fromValue($ld_mode, $ld_locations, $ld_from)
- returns -Double.MAX_VALUE if no min exists.
* get maximum of location/distance:
dc:toValue($ld_mode, $ld_locations, $ld_to)
- returns Double.MAX_VALUE if no max exists.
diff -r 1071aacd042c -r e1566938d04c flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/FunctionResolver.java
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/FunctionResolver.java Tue Jan 29 17:06:50 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/FunctionResolver.java Tue Jan 29 17:11:26 2013 +0100
@@ -82,6 +82,94 @@
});
}
+ static {
+ /** Implementation for getting the minimum value of location or distance
+ * dc:fromValue. */
+ FUNCTIONS.addFunction("fromValue", 3, new XPathFunction() {
+ @Override
+ public Object evaluate(List args) throws XPathFunctionException {
+ Object mode = args.get(0);
+ Object locations = args.get(1);
+ Object from = args.get(2);
+
+ if (!(mode instanceof String)){
+ return -Double.MAX_VALUE;
+ }
+
+ if (mode.equals("locations")) {
+ if (!(locations instanceof String)) {
+ return -Double.MAX_VALUE;
+ }
+ else {
+ String loc = ((String)locations).replace(" ", "");
+ String[] split = loc.split(",");
+ return split[0];
+ }
+ }
+ else if (mode.equals("distance")) {
+ if (!(from instanceof String)) {
+ return -Double.MAX_VALUE;
+ }
+ String f = (String)from;
+ try {
+ return Double.parseDouble(f);
+ }
+ catch(NumberFormatException nfe) {
+ return -Double.MAX_VALUE;
+ }
+ }
+ else {
+ return -Double.MAX_VALUE;
+ }
+ }
+ });
+ }
+
+ static {
+ /** Implementation for getting the maximum value of location or distance
+ * dc:toValue. */
+ FUNCTIONS.addFunction("toValue", 3, new XPathFunction() {
+ @Override
+ public Object evaluate(List args) throws XPathFunctionException {
+ Object mode = args.get(0);
+ Object locations = args.get(1);
+ Object to = args.get(2);
+
+ if (!(mode instanceof String)){
+ return Double.MAX_VALUE;
+ }
+
+ if (mode.equals("locations")) {
+ if (!(locations instanceof String)) {
+ return Double.MAX_VALUE;
+ }
+ else {
+ String loc = ((String)locations).replace(" ", "");
+ String[] split = loc.split(",");
+ return split[split.length - 1];
+ }
+ }
+ else if (mode.equals("distance")) {
+ if (!(to instanceof String)) {
+ return Double.MAX_VALUE;
+ }
+ else {
+ String t = (String)to;
+ try {
+ return Double.parseDouble(t);
+ }
+ catch(NumberFormatException nfe) {
+ return Double.MAX_VALUE;
+ }
+ }
+ }
+ else {
+ return Double.MAX_VALUE;
+ }
+ }
+ });
+ }
+
/** List of functions. */
protected List<Entry> functions;
More information about the Dive4elements-commits
mailing list