annotate artifacts/src/main/java/org/dive4elements/river/artifacts/datacage/templating/FunctionResolver.java @ 9726:0a5239a1e46e 3.2.x

Upgrade to Log4j 2
author Tom Gottfried <tom@intevation.de>
date Wed, 02 Mar 2022 10:26:50 +0100
parents 5e38e2924c07
children
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
9726
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
32 import org.apache.logging.log4j.Logger;
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
33 import org.apache.logging.log4j.LogManager;
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
34 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
35 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
36 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
37 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
38
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
39
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
40 /** 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
41 public class FunctionResolver
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 implements XPathFunctionResolver
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7969
diff changeset
44 /** Home log. */
9726
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
45 private static Logger log = LogManager.getLogger(FunctionResolver.class);
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 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
48
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
49 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
50
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
51 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
52
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
53 Entry next;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 XPathFunction function;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 int arity;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56
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
57 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
58 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
59 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
60 this.arity = arity;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62
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
63 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
64 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
65 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
66 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
67 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
68 }
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 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
70 }
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
71 return null;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 } // class Entry
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
75 /** 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
76 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
77
5432
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
78 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
79
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
80
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 public FunctionResolver() {
5432
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
82 this(null);
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
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
85 public FunctionResolver(Builder.BuildHelper buildHelper) {
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
86 this.buildHelper = buildHelper;
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
87
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
88 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
89
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
90 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
91 @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
92 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
93 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
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 });
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
96
7967
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
97 addFunction("lowercase", 1, new XPathFunction() {
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
98 @Override
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
99 public Object evaluate(List args) throws XPathFunctionException {
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
100 return args.get(0).toString().toLowerCase();
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
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
104 addFunction("uppercase", 1, new XPathFunction() {
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
105 @Override
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
106 public Object evaluate(List args) throws XPathFunctionException {
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
107 return args.get(0).toString().toUpperCase();
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 });
6d5cbd69511a Added dc:lowercase() dc:uppercase()
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7508
diff changeset
110
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
111 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
112 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
113 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
114 return contains(args);
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
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
118 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
119 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
120 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
121 return fromValue(args);
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
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
125 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
126 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
127 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
128 return toValue(args);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
129 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
130 });
5433
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
131
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
132 addFunction("replace", 3, new XPathFunction() {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
133 @Override
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
134 public Object evaluate(List args) throws XPathFunctionException {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
135 return replace(args);
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 });
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
138
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
139 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
140 @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
141 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
142 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
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 });
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
145
5433
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
146 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
147 @Override
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
148 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
149 return FunctionResolver.this.buildHelper.hasResult();
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
150 }
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
151 });
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
152
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
153 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
154 @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
155 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
156 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
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 });
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
159
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
160 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
161 @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
162 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
163 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
164 }
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
165 });
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
166
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 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
168 @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
169 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
170 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
171 }
4bd8bbbcdf68 Datacage: Introduced dc:dump-variables() and modified dc:message to use XPath expansion.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
172 });
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
173
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 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
175 @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
176 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
177 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
178 if (o instanceof String) {
6181
65f278bd4ef5 Let get return a value
Andre Heinecke <aheinecke@intevation.de>
parents: 6180
diff changeset
179 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
180 (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
181 }
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 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
183 }
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
184 });
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
185
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 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
187 @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
188 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
189 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
190 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
191
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
192 return artifactName instanceof String
7248
1dff8e71c4d6 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6933
diff changeset
193 && 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
194 ? 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
195 : 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
196 }
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
197 });
7382
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
198
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
199 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
200 @Override
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
201 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
202 Object needle = args.get(0);
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
203 Object haystack = args.get(1);
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
204 return haystack instanceof String
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
205 && needle instanceof String
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
206 ? findAll((String)needle, (String)haystack)
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
207 : Collections.<String>emptyList();
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
208 }
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
209 });
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
210
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 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
212 @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
213 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
214 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
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
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 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
219 @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
220 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
221 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
222 }
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
223 });
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
224
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
225 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
226
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
227 /**
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
228 * Create a new function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
229 * @param name Name of the function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
230 * @param arity Number of arguments for function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
231 * @param function the function itself.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
232 */
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
233 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
234 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
235 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
236 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
237 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
238 }
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 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
240 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
241 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
242 }
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
244
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
245 @Override
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
246 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
247
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
248 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
249 return null;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
250 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
251
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
252 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
253 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
254 ? 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
255 : null;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
256 }
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
257
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
258 /** 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
259 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
260 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
261 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
262
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
263 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
264 needle = ((String)needle).toUpperCase();
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
265 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
266
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
267 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
268 if (haystack instanceof Collection) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
269 return Boolean.valueOf(
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
270 ((Collection)haystack).contains(needle));
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
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
273 if (haystack instanceof Map) {
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 ((Map)haystack).containsKey(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 Object []) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
279 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
280 if (straw.equals(needle)) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
281 return Boolean.TRUE;
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 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
284 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
285
5629
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
286 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
287 String h = (String)haystack;
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
288 String n = (String)needle;
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
289 return h.contains(n);
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
290 }
ce982943ab46 Datacage: dc:contains() is now able to process strings
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5608
diff changeset
291
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
292 return Boolean.FALSE;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
293 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
294 catch (Exception e) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
295 log.error(e);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
296 throw new XPathFunctionException(e);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
297 }
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
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
300 /** 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
301 * dc:fromValue.
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
302 */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
303 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
304 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
305 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
306 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
307
7248
1dff8e71c4d6 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6933
diff changeset
308 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
309 (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
310 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
311 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
312 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
313 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
314 String[] split = loc.split(",");
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
315 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
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 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
319 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
320 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
321 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
322 if (v < min) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
323 min = v;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
324 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
325 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
326 return min;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
327 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
328 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
329 return -FAR_AWAY;
5430
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 }
6176
4edad3e414cb Fix km filtering in Datacage, we default to mode distance now
Andre Heinecke <aheinecke@intevation.de>
parents: 6126
diff changeset
332 else {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
333 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
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 String f = (String)from;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
337 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
338 return Double.parseDouble(f);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
339 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
340 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
341 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
342 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
343 }
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
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
346 /** 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
347 * dc:toValue.
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
348 */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
349 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
350 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
351 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
352 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
353
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
354 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
355 (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
356 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
357 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
358 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
359 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
360 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
361 String[] split = loc.split(",");
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
362 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
363 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
364 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
365 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
366 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
367 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
368 if (v > max) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
369 max = v;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
370 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
371 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
372 return max;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
373 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
374 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
375 return FAR_AWAY;
5430
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 }
6176
4edad3e414cb Fix km filtering in Datacage, we default to mode distance now
Andre Heinecke <aheinecke@intevation.de>
parents: 6126
diff changeset
378 else {
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
379 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
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 else {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
383 String t = (String)to;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
384 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
385 return Double.parseDouble(t);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
386 }
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
387 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
388 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
389 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
390 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
391 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
392 }
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
393
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
394 /** Implementation for doing a string replace
7508
02841af5feff cosmetics - full stop.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7403
diff changeset
395 * dc:replace .
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
396 */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
397 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
398 Object haystack = args.get(0);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
399 Object needle = args.get(1);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
400 Object replacement = args.get(2);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
401
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
402 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
403 && 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
404 && replacement instanceof String) {
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
405 return ((String)haystack).replace(
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
406 (String)needle, (String)replacement);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
407 }
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
408 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
409 }
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
410
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
411 /** 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
412 * 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
413 */
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
414 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
415 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
416 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
417 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
418
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
419 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
420 && 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
421 && 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
422 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
423 (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
424 }
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 return haystack;
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
426 }
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
427
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
428 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
429 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
430 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
431
efbbfe32e9fe Fix dateFormat for Oracle by invoking dateValue on demand
Andre Heinecke <aheinecke@intevation.de>
parents: 5630
diff changeset
432 try {
8460
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
433 // TODO: Take locale into account.
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
434 SimpleDateFormat format = new SimpleDateFormat((String)pattern);
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
435
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
436 if (date instanceof Number) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
437 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
438 }
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
439
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
440 try {
8460
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
441 /* 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
442 an oracle.sql.TIMESTAMP */
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
443 Method meth = date.getClass()
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
444 .getMethod("dateValue", new Class[] {});
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
445 date = meth.invoke(date, new Object[] {});
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
446 } catch (IllegalArgumentException e) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
447 } catch (IllegalAccessException e) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
448 } catch (InvocationTargetException e) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
449 } 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
450 }
8460
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
451
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
452 if (date instanceof Date) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
453 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
454 }
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 catch (IllegalArgumentException iae) {
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
457 log.error(iae.getMessage());
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
458 }
081a57c80540 Accept number as argument in dc:date-format().
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
459
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
460 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
461 }
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
462
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8460
diff changeset
463 public static Set<String> allStateSuccessors(
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8460
diff changeset
464 String artifactName,
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8460
diff changeset
465 String stateId
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8460
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 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
468 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
469 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
470 }
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
471 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
472 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
473 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
474 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
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 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
477 }
7382
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
478
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
479 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
480
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
481 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
482
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
483 Pattern pattern = Pattern.compile(needle);
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
484 Matcher matcher = pattern.matcher(haystack);
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
485 while (matcher.find()) {
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
486 result.add(matcher.group());
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 return result;
420eb5a5fde4 Datacage: Add function dc:find-all(needle, haystack).
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7248
diff changeset
489 }
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
490
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
491 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
492 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
493 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
494 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
495 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
496 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
497 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
498 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
499 }
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 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
501 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
502 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
503 }
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 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
505 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
506 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
507 }
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 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
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 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
515
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 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
517 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
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 }
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 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
522 ? 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
523 : 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
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 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
527 ? (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
528 : 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
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
7969
912cf4ec09d1 Datacage function resolver: Declare static functions static.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7968
diff changeset
531 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
532 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
533 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
534 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
535 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
536 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
537 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
538 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
539 }
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 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
541 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
542 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
543 }
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 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
545 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
546 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
547 }
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 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
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 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
555
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 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
557 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
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 }
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 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
562 ? -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
563 : 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
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 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
567 ? (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
568 : 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
569 }
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
570
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
571 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
572 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
573 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
574 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
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 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
577 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
578 }
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 }
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 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
581 }
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
582 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
583 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org