diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/FunctionResolver.java @ 974:30c85cb33a50

meta data service: made artifact optional and allow passing extra parameters. flys-artifacts/trunk@2400 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 25 Jul 2011 11:05:33 +0000
parents a2b20ed3d3b4
children d830c398c8f4
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/FunctionResolver.java	Sat Jul 23 18:47:08 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/meta/FunctionResolver.java	Mon Jul 25 11:05:33 2011 +0000
@@ -1,6 +1,8 @@
 package de.intevation.flys.artifacts.services.meta;
 
 import java.util.List;
+import java.util.Collection;
+import java.util.Map;
 import java.util.ArrayList;
 
 import javax.xml.xpath.XPathFunctionResolver;
@@ -36,14 +38,27 @@
         FUNCTIONS.addFunction("contains", 2, new XPathFunction() {
             @Override
             public Object evaluate(List args) throws XPathFunctionException {
+                Object haystack = args.get(0);
+                Object needle   = args.get(1);
                 try {
-                    Object [] haystack = (Object [])args.get(0);
-                    Object    needle   = args.get(1);
-                    for (Object straw: haystack) {
-                        if (straw.equals(needle)) {
-                            return Boolean.TRUE;
+                    if (haystack instanceof Collection) {
+                        return Boolean.valueOf(
+                            ((Collection)haystack).contains(needle));
+                    }
+
+                    if (haystack instanceof Map) {
+                        return Boolean.valueOf(
+                            ((Map)haystack).containsKey(needle));
+                    }
+
+                    if (haystack instanceof Object []) {
+                        for (Object straw: (Object [])haystack) {
+                            if (straw.equals(needle)) {
+                                return Boolean.TRUE;
+                            }
                         }
                     }
+
                     return Boolean.FALSE;
                 }
                 catch (Exception e) {

http://dive4elements.wald.intevation.org