annotate artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/FunctionResolver.java @ 8960:66ce19d2c5f1

Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
author gernotbelger
date Wed, 28 Mar 2018 14:34:55 +0200
parents 5e38e2924c07
children 5030c46d8cb4
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5890
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5890
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5784
diff changeset
9 package org.dive4elements.river.artifacts.datacage.templating;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
11 import java.text.SimpleDateFormat;
7382
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
12 import java.util.ArrayList;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 import java.util.Collection;
6933
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
14 import java.util.Collections;
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
15 import java.util.Date;
4949
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
16 import java.util.List;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 import java.util.Map;
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
18 import java.util.HashMap;
6933
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
19 import java.util.Set;
7382
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
20 import java.util.regex.Matcher;
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
21 import java.util.regex.Pattern;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22
5784
efbbfe32e9fe Fix dateFormat for Oracle by invoking dateValue on demand
Andre Heinecke <aheinecke@intevation.de>
parents: 5630
diff changeset
23 import java.lang.reflect.InvocationTargetException;
efbbfe32e9fe Fix dateFormat for Oracle by invoking dateValue on demand
Andre Heinecke <aheinecke@intevation.de>
parents: 5630
diff changeset
24 import java.lang.reflect.Method;
efbbfe32e9fe Fix dateFormat for Oracle by invoking dateValue on demand
Andre Heinecke <aheinecke@intevation.de>
parents: 5630
diff changeset
25
4949
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
26 import javax.xml.namespace.QName;
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
27
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 import javax.xml.xpath.XPathFunction;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 import javax.xml.xpath.XPathFunctionException;
4949
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
30 import javax.xml.xpath.XPathFunctionResolver;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 import org.apache.log4j.Logger;
6933
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
33 import org.dive4elements.artifactdatabase.transition.TransitionEngine;
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
34 import org.dive4elements.artifacts.GlobalContext;
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
35 import org.dive4elements.river.artifacts.context.RiverContext;
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
36 import org.dive4elements.river.artifacts.context.RiverContextFactory;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
38
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
39 /** Resolves functions (e.g. dc:contains) in Datacage/Meta-Data system. */
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 public class FunctionResolver
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 implements XPathFunctionResolver
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7969
diff changeset
43 /** Home log. */
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 private static Logger log = Logger.getLogger(FunctionResolver.class);
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 public static final String FUNCTION_NAMESPACE_URI = "dc";
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
48 public static final double FAR_AWAY = 99999d;
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
49
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
50 protected static final class Entry {
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
52 Entry next;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 XPathFunction function;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 int arity;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
56 public Entry(Entry next, XPathFunction function, int arity) {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
57 this.next = next;
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
58 this.function = function;
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
59 this.arity = arity;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
62 XPathFunction find(int arity) {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
63 Entry current = this;
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
64 while (current != null) {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
65 if (current.arity == arity) {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
66 return current.function;
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
67 }
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
68 current = current.next;
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
69 }
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
70 return null;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 } // class Entry
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
74 /** List of functions. */
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
75 protected Map<String, Entry> functions;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76
5432
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
77 protected Builder.BuildHelper buildHelper;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
78
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
79
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 public FunctionResolver() {
5432
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
81 this(null);
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
82 }
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
83
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
84 public FunctionResolver(Builder.BuildHelper buildHelper) {
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
85 this.buildHelper = buildHelper;
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
86
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
87 functions = new HashMap<String, Entry>();
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
88
7968
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
89 addFunction("coalesce", 2, new XPathFunction() {
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
90 @Override
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
91 public Object evaluate(List args) throws XPathFunctionException {
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
92 return coalesce(args);
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
93 }
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
94 });
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
95
7967
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
96 addFunction("lowercase", 1, new XPathFunction() {
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
97 @Override
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
98 public Object evaluate(List args) throws XPathFunctionException {
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
99 return args.get(0).toString().toLowerCase();
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
100 }
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
101 });
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
102
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
103 addFunction("uppercase", 1, new XPathFunction() {
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
104 @Override
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
105 public Object evaluate(List args) throws XPathFunctionException {
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
106 return args.get(0).toString().toUpperCase();
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
107 }
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
108 });
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
109
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
110 addFunction("contains", 2, new XPathFunction() {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
111 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
112 public Object evaluate(List args) throws XPathFunctionException {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
113 return contains(args);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
114 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
115 });
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
116
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
117 addFunction("fromValue", 3, new XPathFunction() {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
118 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
119 public Object evaluate(List args) throws XPathFunctionException {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
120 return fromValue(args);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
121 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
122 });
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
123
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
124 addFunction("toValue", 3, new XPathFunction() {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
125 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
126 public Object evaluate(List args) throws XPathFunctionException {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
127 return toValue(args);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
128 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
129 });
5433
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
130
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
131 addFunction("replace", 3, new XPathFunction() {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
132 @Override
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
133 public Object evaluate(List args) throws XPathFunctionException {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
134 return replace(args);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
135 }
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
136 });
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
137
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
138 addFunction("replace-all", 3, new XPathFunction() {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
139 @Override
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
140 public Object evaluate(List args) throws XPathFunctionException {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
141 return replaceAll(args);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
142 }
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
143 });
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
144
5433
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
145 addFunction("has-result", 0, new XPathFunction() {
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
146 @Override
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
147 public Object evaluate(List args) throws XPathFunctionException {
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
148 return FunctionResolver.this.buildHelper.hasResult();
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
149 }
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
150 });
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
151
5890
6ea004d51203 Datacage: Introduced <dc:group epxr="xpath" type="type"> ... </dc:group> and XPath function dc:group-key().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
152 addFunction("group-key", 0, new XPathFunction() {
6ea004d51203 Datacage: Introduced <dc:group epxr="xpath" type="type"> ... </dc:group> and XPath function dc:group-key().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
153 @Override
6ea004d51203 Datacage: Introduced <dc:group epxr="xpath" type="type"> ... </dc:group> and XPath function dc:group-key().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
154 public Object evaluate(List args) throws XPathFunctionException {
6ea004d51203 Datacage: Introduced <dc:group epxr="xpath" type="type"> ... </dc:group> and XPath function dc:group-key().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
155 return FunctionResolver.this.buildHelper.getGroupKey();
6ea004d51203 Datacage: Introduced <dc:group epxr="xpath" type="type"> ... </dc:group> and XPath function dc:group-key().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
156 }
6ea004d51203 Datacage: Introduced <dc:group epxr="xpath" type="type"> ... </dc:group> and XPath function dc:group-key().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
157 });
6ea004d51203 Datacage: Introduced <dc:group epxr="xpath" type="type"> ... </dc:group> and XPath function dc:group-key().
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
158
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
159 addFunction("date-format", 2, new XPathFunction() {
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
160 @Override
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
161 public Object evaluate(List args) throws XPathFunctionException {
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
162 return dateFormat(args);
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
163 }
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
164 });
6080
4bd8bbbcdf68 Datacage: Introduced dc:dump-variables() and modified dc:message to use XPath expansion.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
165
4bd8bbbcdf68 Datacage: Introduced dc:dump-variables() and modified dc:message to use XPath expansion.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
166 addFunction("dump-variables", 0, new XPathFunction() {
4bd8bbbcdf68 Datacage: Introduced dc:dump-variables() and modified dc:message to use XPath expansion.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
167 @Override
4bd8bbbcdf68 Datacage: Introduced dc:dump-variables() and modified dc:message to use XPath expansion.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
168 public Object evaluate(List args) throws XPathFunctionException {
4bd8bbbcdf68 Datacage: Introduced dc:dump-variables() and modified dc:message to use XPath expansion.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
169 return FunctionResolver.this.buildHelper.frames.dump();
4bd8bbbcdf68 Datacage: Introduced dc:dump-variables() and modified dc:message to use XPath expansion.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
170 }
4bd8bbbcdf68 Datacage: Introduced dc:dump-variables() and modified dc:message to use XPath expansion.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
171 });
6180
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
172
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
173 addFunction("get", 1, new XPathFunction() {
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
174 @Override
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
175 public Object evaluate(List args) throws XPathFunctionException {
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
176 Object o = args.get(0);
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
177 if (o instanceof String) {
6181
65f278bd4ef5 Let get return a value
Andre Heinecke <aheinecke@intevation.de>
parents: 6180
diff changeset
178 return FunctionResolver.this.buildHelper.frames.getNull(
6180
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
179 (String)o, StackFrames.NULL);
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
180 }
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
181 return StackFrames.NULL;
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
182 }
e30d396defa5 Datacage: Added function dc:get('var-name'). Returns content of variable var-name or NULL if not
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6176
diff changeset
183 });
6933
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
184
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
185 addFunction("all-state-successors", 2, new XPathFunction() {
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
186 @Override
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
187 public Object evaluate(List args) throws XPathFunctionException {
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
188 Object artifactName = args.get(0);
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
189 Object stateId = args.get(1);
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
190
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
191 return artifactName instanceof String
7248
1dff8e71c4d6 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6933
diff changeset
192 && stateId instanceof String
6933
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
193 ? allStateSuccessors((String)artifactName, (String)stateId)
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
194 : Collections.<String>emptySet();
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
195 }
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
196 });
7382
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
197
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
198 addFunction("find-all", 2, new XPathFunction() {
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
199 @Override
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
200 public Object evaluate(List args) throws XPathFunctionException {
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
201 Object needle = args.get(0);
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
202 Object haystack = args.get(1);
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
203 return haystack instanceof String
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
204 && needle instanceof String
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
205 ? findAll((String)needle, (String)haystack)
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
206 : Collections.<String>emptyList();
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
207 }
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
208 });
7383
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
209
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
210 addFunction("max-number", 1, new XPathFunction() {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
211 @Override
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
212 public Object evaluate(List args) throws XPathFunctionException {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
213 return maxNumber(args.get(0));
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
214 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
215 });
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
216
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
217 addFunction("min-number", 1, new XPathFunction() {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
218 @Override
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
219 public Object evaluate(List args) throws XPathFunctionException {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
220 return minNumber(args.get(0));
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
221 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
222 });
7384
ef310e272fb5 Datacage: Add function dc:to-date(number) which converts a epoch base number to a date object.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7383
diff changeset
223
8960
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
224 addFunction("column", 1, new XPathFunction() {
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
225 @Override
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
226 public Object evaluate(List args) throws XPathFunctionException {
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
227 return column(args.get(0));
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
228 }
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
229 });
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
232 /**
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
233 * Create a new function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
234 * @param name Name of the function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
235 * @param arity Number of arguments for function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
236 * @param function the function itself.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
237 */
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
238 public void addFunction(String name, int arity, XPathFunction function) {
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
239 Entry entry = functions.get(name);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
240 if (entry == null) {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
241 entry = new Entry(null, function, arity);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
242 functions.put(name, entry);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
243 }
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
244 else {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
245 Entry newEntry = new Entry(entry.next, function, arity);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
246 entry.next = newEntry;
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
247 }
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
248 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
249
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250 @Override
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251 public XPathFunction resolveFunction(QName functionName, int arity) {
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
252
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
253 if (!functionName.getNamespaceURI().equals(FUNCTION_NAMESPACE_URI)) {
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254 return null;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
255 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
257 Entry entry = functions.get(functionName.getLocalPart());
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
258 return entry != null
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
259 ? entry.find(arity)
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
260 : null;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
261 }
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
262
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
263 /** Implementation of case-ignoring dc:contains. */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
264 public static Object contains(List args) throws XPathFunctionException {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
265 Object haystack = args.get(0);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
266 Object needle = args.get(1);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
267
5630
619da3fa7a8b Datacage: fix dc:contains() Do not uppercase needle if its not a container search.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5629
diff changeset
268 if (needle instanceof String && !(haystack instanceof String)) {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
269 needle = ((String)needle).toUpperCase();
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
270 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
271
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
272 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
273 if (haystack instanceof Collection) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
274 return Boolean.valueOf(
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
275 ((Collection)haystack).contains(needle));
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
276 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
277
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
278 if (haystack instanceof Map) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
279 return Boolean.valueOf(
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
280 ((Map)haystack).containsKey(needle));
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
281 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
282
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
283 if (haystack instanceof Object []) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
284 for (Object straw: (Object [])haystack) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
285 if (straw.equals(needle)) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
286 return Boolean.TRUE;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
287 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
288 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
289 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
290
5629
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
291 if (haystack instanceof String && needle instanceof String) {
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
292 String h = (String)haystack;
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
293 String n = (String)needle;
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
294 return h.contains(n);
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
295 }
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
296
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
297 return Boolean.FALSE;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
298 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
299 catch (Exception e) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
300 log.error(e);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
301 throw new XPathFunctionException(e);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
302 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
303 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
304
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
305 /** Implementation for getting the minimum value of location or distance
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
306 * dc:fromValue.
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
307 */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
308 public static Object fromValue(List args) throws XPathFunctionException {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
309 Object mode = args.get(0);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
310 Object locations = args.get(1);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
311 Object from = args.get(2);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
312
7248
1dff8e71c4d6 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6933
diff changeset
313 if ((mode instanceof String && mode.equals("location")) ||
6448
00aa1bc72a65 Set tokm and fromkm to location if we are at a location to apply km-filtering correctly
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6323
diff changeset
314 (locations instanceof String && !((String)locations).isEmpty())) {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
315 if (!(locations instanceof String)) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
316 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
317 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
318 String loc = ((String)locations).replace(" ", "");
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
319 String[] split = loc.split(",");
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
320 if (split.length < 1) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
321 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
322 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
323 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
324 double min = Double.parseDouble(split[0]);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
325 for (int i = 1; i < split.length; ++i) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
326 double v = Double.parseDouble(split[i]);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
327 if (v < min) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
328 min = v;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
329 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
330 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
331 return min;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
332 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
333 catch (NumberFormatException nfe) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
334 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
335 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
336 }
6176
4edad3e414cb Fix km filtering in Datacage, we default to mode distance now
Andre Heinecke <aheinecke@intevation.de>
parents: 6126
diff changeset
337 else {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
338 if (!(from instanceof String)) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
339 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
340 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
341 String f = (String)from;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
342 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
343 return Double.parseDouble(f);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
344 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
345 catch(NumberFormatException nfe) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
346 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
347 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
348 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
349 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
350
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
351 /** Implementation for getting the maximum value of location or distance
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
352 * dc:toValue.
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
353 */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
354 public static Object toValue(List args) throws XPathFunctionException {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
355 Object mode = args.get(0);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
356 Object locations = args.get(1);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
357 Object to = args.get(2);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
358
6448
00aa1bc72a65 Set tokm and fromkm to location if we are at a location to apply km-filtering correctly
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6323
diff changeset
359 if ((mode instanceof String && mode.equals("location")) ||
00aa1bc72a65 Set tokm and fromkm to location if we are at a location to apply km-filtering correctly
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6323
diff changeset
360 (locations instanceof String && !((String)locations).isEmpty())) {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
361 if (!(locations instanceof String)) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
362 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
363 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
364 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
365 String loc = ((String)locations).replace(" ", "");
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
366 String[] split = loc.split(",");
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
367 if (split.length < 1) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
368 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
369 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
370 double max = Double.parseDouble(split[0]);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
371 for (int i = 1; i < split.length; ++i) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
372 double v = Double.parseDouble(split[i]);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
373 if (v > max) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
374 max = v;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
375 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
376 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
377 return max;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
378 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
379 catch (NumberFormatException nfe) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
380 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
381 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
382 }
6176
4edad3e414cb Fix km filtering in Datacage, we default to mode distance now
Andre Heinecke <aheinecke@intevation.de>
parents: 6126
diff changeset
383 else {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
384 if (!(to instanceof String)) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
385 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
386 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
387 else {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
388 String t = (String)to;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
389 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
390 return Double.parseDouble(t);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
391 }
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
392 catch (NumberFormatException nfe) {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
393 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
394 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
395 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
396 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
397 }
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
398
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
399 /** Implementation for doing a string replace
7508
02841af5feff cosmetics - full stop.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7403
diff changeset
400 * dc:replace .
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
401 */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
402 public static Object replace(List args) throws XPathFunctionException {
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
403 Object haystack = args.get(0);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
404 Object needle = args.get(1);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
405 Object replacement = args.get(2);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
406
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
407 if (needle instanceof String
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
408 && haystack instanceof String
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
409 && replacement instanceof String) {
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
410 return ((String)haystack).replace(
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
411 (String)needle, (String)replacement);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
412 }
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
413 return haystack;
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
414 }
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
415
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
416 /** Implementation for doing a string replace
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
417 * dc:replace-all
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
418 */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
419 public static Object replaceAll(List args) throws XPathFunctionException {
6126
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
420 Object haystack = args.get(0);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
421 Object needle = args.get(1);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
422 Object replacement = args.get(2);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
423
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
424 if (needle instanceof String
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
425 && haystack instanceof String
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
426 && replacement instanceof String) {
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
427 return ((String)haystack).replaceAll(
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
428 (String)needle, (String)replacement);
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
429 }
57fb50f8c9fc Datacage: Added function dc:replace-all(haystack, needle, replacement) to do regular expression replacements. Mapped to Java's String haystack.replaceAll(needle, replacement).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6080
diff changeset
430 return haystack;
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
431 }
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
432
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
433 public static Object dateFormat(List args) throws XPathFunctionException {
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
434 Object pattern = args.get(0);
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
435 Object date = args.get(1);
5784
efbbfe32e9fe Fix dateFormat for Oracle by invoking dateValue on demand
Andre Heinecke <aheinecke@intevation.de>
parents: 5630
diff changeset
436
efbbfe32e9fe Fix dateFormat for Oracle by invoking dateValue on demand
Andre Heinecke <aheinecke@intevation.de>
parents: 5630
diff changeset
437 try {
8460
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
438 // TODO: Take locale into account.
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
439 SimpleDateFormat format = new SimpleDateFormat((String)pattern);
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
440
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
441 if (date instanceof Number) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
442 return format.format(new Date(((Number)date).longValue()));
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
443 }
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
444
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
445 try {
8460
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
446 /* Oracle does not return a date object but
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
447 an oracle.sql.TIMESTAMP */
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
448 Method meth = date.getClass()
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
449 .getMethod("dateValue", new Class[] {});
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
450 date = meth.invoke(date, new Object[] {});
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
451 } catch (IllegalArgumentException e) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
452 } catch (IllegalAccessException e) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
453 } catch (InvocationTargetException e) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
454 } catch (NoSuchMethodException e) {
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
455 }
8460
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
456
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
457 if (date instanceof Date) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
458 return format.format((Date)date);
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
459 }
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
460 }
8460
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
461 catch (IllegalArgumentException iae) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
462 log.error(iae.getMessage());
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
463 }
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
464
5608
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
465 return "";
62513c9183ba Datacage: Added dc:date-format to function resolver. Args: dc:date-format(pattern, date)
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5604
diff changeset
466 }
6933
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
467
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8460
diff changeset
468 public static Set<String> allStateSuccessors(
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8460
diff changeset
469 String artifactName,
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8460
diff changeset
470 String stateId
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8460
diff changeset
471 ) {
6933
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
472 GlobalContext gc = RiverContextFactory.getGlobalContext();
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
473 if (gc == null) {
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
474 return Collections.<String>emptySet();
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
475 }
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
476 Object o = gc.get(RiverContext.TRANSITION_ENGINE_KEY);
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
477 if (o instanceof TransitionEngine) {
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
478 TransitionEngine te = (TransitionEngine)o;
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
479 return te.allRecursiveSuccessorStateIds(artifactName, stateId);
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
480 }
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
481 return Collections.<String>emptySet();
468d9ebda4ce Datacage: Add dc:all-state-successors() to enable predicates like dc:contains(dc:all-state-successors($artifact-name, $current-state-id), 'state.winfo.calculation_mode') which recursively collects all successor state ids an check for containment.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6448
diff changeset
482 }
7382
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
483
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
484 public static Collection<String> findAll(String needle, String haystack) {
7382
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
485
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
486 ArrayList<String> result = new ArrayList<String>();
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
487
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
488 Pattern pattern = Pattern.compile(needle);
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
489 Matcher matcher = pattern.matcher(haystack);
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
490 while (matcher.find()) {
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
491 result.add(matcher.group());
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
492 }
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
493 return result;
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
494 }
7383
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
495
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
496 public static Number maxNumber(Object list) {
7383
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
497 if (list instanceof Collection) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
498 Collection collection = (Collection)list;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
499 double max = -Double.MAX_VALUE;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
500 for (Object x: collection) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
501 Number n;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
502 if (x instanceof Number) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
503 n = (Number)x;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
504 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
505 else if (x instanceof String) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
506 try {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
507 n = Double.valueOf((String)x);
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
508 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
509 catch (NumberFormatException nfe) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
510 log.warn("'" + x + "' is not a number.");
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
511 continue;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
512 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
513 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
514 else {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
515 log.warn("'" + x + "' is not a number.");
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
516 continue;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
517 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
518
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
519 double v = n.doubleValue();
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
520
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
521 if (v > max) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
522 max = v;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
523 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
524 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
525
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
526 return Double.valueOf(max == -Double.MAX_VALUE
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
527 ? Double.MAX_VALUE
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
528 : max);
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
529 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
530
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
531 return list instanceof Number
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
532 ? (Number)list
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
533 : Double.valueOf(Double.MAX_VALUE);
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
534 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
535
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
536 public static Number minNumber(Object list) {
7383
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
537 if (list instanceof Collection) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
538 Collection collection = (Collection)list;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
539 double min = Double.MAX_VALUE;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
540 for (Object x: collection) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
541 Number n;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
542 if (x instanceof Number) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
543 n = (Number)x;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
544 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
545 else if (x instanceof String) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
546 try {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
547 n = Double.valueOf((String)x);
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
548 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
549 catch (NumberFormatException nfe) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
550 log.warn("'" + x + "' is not a number.");
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
551 continue;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
552 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
553 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
554 else {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
555 log.warn("'" + x + "' is not a number.");
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
556 continue;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
557 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
558
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
559 double v = n.doubleValue();
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
560
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
561 if (v < min) {
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
562 min = v;
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
563 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
564 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
565
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
566 return Double.valueOf(min == Double.MAX_VALUE
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
567 ? -Double.MAX_VALUE
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
568 : min);
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
569 }
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
570
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
571 return list instanceof Number
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
572 ? (Number)list
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
573 : Double.valueOf(-Double.MAX_VALUE);
36a194156f15 Datacage: Added dc:min-number(list) and dc:max-number(list) to extract the numerical
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7382
diff changeset
574 }
7968
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
575
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
576 public static Object coalesce(List list) {
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
577 for (Object x: list) {
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
578 if (x instanceof String && ((String)x).length() != 0) {
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
579 return x;
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
580 }
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
581 if (x instanceof Number && ((Number)x).doubleValue() != 0.0) {
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
582 return x;
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
583 }
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
584 }
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
585 return StackFrames.NULL;
09c9920e6f24 Added dc:coalesce(a, b). Returns first element which is not empty or not zero.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7967
diff changeset
586 }
8960
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
587
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
588 private Object column(Object argument) {
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
589
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
590 if( !(argument instanceof String) )
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
591 throw new IllegalArgumentException("Argument of 'column' function must be a string");
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
592
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
593 String columnName = (String) argument;
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
594
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
595 StackFrames frms = buildHelper.frames;
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
596
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
597 return frms.getNull(columnName);
66ce19d2c5f1 Added new 'column' xpath function that allows to access a data-column via a name using variable replacement.
gernotbelger
parents: 8856
diff changeset
598 }
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
599 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
600 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org