annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/templating/FunctionResolver.java @ 5604:7e837c5c377b

Datacage: toValue/fromValue: Use constant instead of hard coded number.
author Sascha L. Teichmann <teichmann@intevation.de>
date Tue, 09 Apr 2013 08:28:07 +0200
parents f8a4ee86d276
children 62513c9183ba
rev   line source
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts.datacage.templating;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
4949
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
3 import java.util.ArrayList;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 import java.util.Collection;
4949
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
5 import java.util.List;
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 import java.util.Map;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7
4949
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
8 import javax.xml.namespace.QName;
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
9
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 import javax.xml.xpath.XPathFunction;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 import javax.xml.xpath.XPathFunctionException;
4949
53be73133104 Removed obsolete imports.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4926
diff changeset
12 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
13
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 import org.apache.log4j.Logger;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
16
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
17 /** 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
18 public class FunctionResolver
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 implements XPathFunctionResolver
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 {
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
21 /** Home logger. */
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 private static Logger log = Logger.getLogger(FunctionResolver.class);
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 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
25
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
26 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
27
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 public static final class Entry {
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 String name;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 XPathFunction function;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 int arity;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 public Entry() {
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 public Entry(String name, XPathFunction function, int arity) {
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 this.name = name;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 this.function = function;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 this.arity = arity;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 } // class Entry
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
44 /** List of functions. */
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 protected List<Entry> functions;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46
5432
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
47 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
48
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
49
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 public FunctionResolver() {
5432
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
51 this(null);
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
52 }
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
53
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
54 public FunctionResolver(Builder.BuildHelper buildHelper) {
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
55 this.buildHelper = buildHelper;
d0f5bc8064f1 pass BuildHelper to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5430
diff changeset
56
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 functions = new ArrayList<Entry>();
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
58
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
59 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
60 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
61 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
62 return contains(args);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
63 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
64 });
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
65
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
66 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
67 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
68 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
69 return fromValue(args);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
70 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
71 });
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
72
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
73 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
74 @Override
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
75 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
76 return toValue(args);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
77 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
78 });
5433
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
79
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
80 addFunction("replace", 3, new XPathFunction() {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
81 @Override
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
82 public Object evaluate(List args) throws XPathFunctionException {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
83 return replace(args);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
84 }
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
85 });
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
86
5433
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
87 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
88 @Override
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
89 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
90 return FunctionResolver.this.buildHelper.hasResult();
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
91 }
df32d7518f55 Expose function dc:has-result to Function Resolver.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5432
diff changeset
92 });
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94
4594
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
95 /**
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
96 * Create a new function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
97 * @param name Name of the function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
98 * @param arity Number of arguments for function.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
99 * @param function the function itself.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1930
diff changeset
100 */
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 public void addFunction(String name, int arity, XPathFunction function) {
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
102 functions.add(new Entry(name, function, arity));
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
103 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
104
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
105 @Override
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
106 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
107
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
108 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
109 return null;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
110 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
111
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
112 String name = functionName.getLocalPart();
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
113 for (Entry entry: functions) {
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
114 if (entry.arity == arity && entry.name.equals(name)) {
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 return entry.function;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
116 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
117 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
119 return null;
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120 }
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
121
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
122 /** Implementation of case-ignoring dc:contains. */
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
123 public Object contains(List args) throws XPathFunctionException {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
124 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
125 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
126
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
127 if (needle instanceof String) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
128 needle = ((String)needle).toUpperCase();
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
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
131 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
132 if (haystack instanceof Collection) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
133 return Boolean.valueOf(
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
134 ((Collection)haystack).contains(needle));
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
135 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
136
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
137 if (haystack instanceof Map) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
138 return Boolean.valueOf(
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
139 ((Map)haystack).containsKey(needle));
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
140 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
141
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
142 if (haystack instanceof Object []) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
143 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
144 if (straw.equals(needle)) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
145 return Boolean.TRUE;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
146 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
147 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
148 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
149
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
150 return Boolean.FALSE;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
151 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
152 catch (Exception e) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
153 log.error(e);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
154 throw new XPathFunctionException(e);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
155 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
156 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
157
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
158 /** 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
159 * dc:fromValue.
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
160 */
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
161 public Object fromValue(List args) throws XPathFunctionException {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
162 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
163 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
164 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
165
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
166 if (!(mode instanceof String)){
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
167 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
168 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
169
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
170 if (mode.equals("locations")) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
171 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
172 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
173 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
174 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
175 String[] split = loc.split(",");
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
176 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
177 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
178 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
179 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
180 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
181 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
182 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
183 if (v < min) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
184 min = v;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
185 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
186 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
187 return min;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
188 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
189 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
190 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
191 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
192 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
193 else if (mode.equals("distance")) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
194 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
195 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
196 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
197 String f = (String)from;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
198 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
199 return Double.parseDouble(f);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
200 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
201 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
202 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
203 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
204 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
205 else {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
206 return -FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
207 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
208 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
209
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
210 /** 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
211 * dc:toValue.
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
212 */
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
213 public Object toValue(List args) throws XPathFunctionException {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
214 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
215 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
216 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
217
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
218 if (!(mode instanceof String)){
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
219 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
220 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
221
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
222 if (mode.equals("locations")) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
223 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
224 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
225 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
226 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
227 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
228 String[] split = loc.split(",");
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
229 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
230 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
231 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
232 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
233 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
234 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
235 if (v > max) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
236 max = v;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
237 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
238 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
239 return max;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
240 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
241 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
242 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
243 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
244 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
245 else if (mode.equals("distance")) {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
246 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
247 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
248 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
249 else {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
250 String t = (String)to;
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
251 try {
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
252 return Double.parseDouble(t);
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
253 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
254 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
255 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
256 }
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 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
259 else {
5604
7e837c5c377b Datacage: toValue/fromValue: Use constant instead of hard coded number.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5561
diff changeset
260 return FAR_AWAY;
5430
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
261 }
ba489a16f4d8 Datacage Function Resolver: Lift from static to object space.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5164
diff changeset
262 }
5561
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
263
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
264 /** Implementation for doing a string replace
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
265 * dc:replace
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
266 */
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
267 public Object replace(List args) throws XPathFunctionException {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
268 Object haystack = args.get(0);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
269 Object needle = args.get(1);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
270 Object replacement = args.get(2);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
271
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
272 if (needle instanceof String &&
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
273 haystack instanceof String &&
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
274 replacement instanceof String) {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
275 return ((String)haystack).replace(
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
276 (String)needle, (String)replacement);
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
277 } else {
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
278 return haystack;
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
279 }
f8a4ee86d276 Add dc:replace function for datacage
Andre Heinecke <aheinecke@intevation.de>
parents: 5433
diff changeset
280 }
998
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
281 }
b81626b10cb7 Datacage: Moved templating in a better suited package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
282 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org