[Yanel-commits] rev 60293 - public/yanel/trunk/src/core/java/org/wyona/yanel/core

michi at wyona.com michi at wyona.com
Mon Aug 29 14:37:38 CEST 2011


Author: michi
Date: 2011-08-29 14:37:37 +0200 (Mon, 29 Aug 2011)
New Revision: 60293

Modified:
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceConfigurationMapV2.java
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceTypeMatcherV1ImplV2.java
Log:
load custom matcher class if available

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceConfigurationMapV2.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceConfigurationMapV2.java	2011-08-29 12:36:53 UTC (rev 60292)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceConfigurationMapV2.java	2011-08-29 12:37:37 UTC (rev 60293)
@@ -43,13 +43,18 @@
 
     private static Logger log = Logger.getLogger(ResourceConfigurationMapV2.class);
 
+    private static final String MATCHER_TAG_NAME = "matcher";
+    private static final String PATTERN_ATTR_NAME = "pattern";
+    private static final String CLASS_ATTR_NAME = "class";
+
     /**
      * Get path of resource configuration which matched the path pattern within the resource configuration map
      * @param realm Realm
      * @param path Path of request
      * @return String which contains the path of a rc file
      */
-    public static String getRCPath(Realm realm, String path, String queryString) {
+    public static String getRCPath(Realm realm, String path, javax.servlet.http.HttpServletRequest request) {
+        String queryString = request.getQueryString();
         //log.debug("Try to get resource configuration for request: " + path + ", " + queryString);
 
         InputStream rcMapIS = getRCMap(realm);
@@ -68,28 +73,40 @@
                     break;
                 }
                 if (event == XMLStreamConstants.START_ELEMENT) {
-                    if (parser.getLocalName().equals("matcher")) {
-                        String pattern = parser.getAttributeValue("", "pattern");
-         
-                        String pathToMatch = path;
-                        if (queryString != null && pattern.indexOf("?") >= 0) {
-                            //log.debug("Also check/match query string: " + pattern + ", " + queryString);
-                            pathToMatch = path + "?" + queryString;
-                        }
-                        if (WildcardMatcherHelper.match(pattern, pathToMatch) != null) {
-                            if (log.isDebugEnabled()) {
-                                log.debug("CoR pattern: '" + pattern + "' matched with path: '" + pathToMatch + "'. will use following path in the RTIRepository to reach the rc: " + parser.getAttributeValue("", "rcpath"));
+                    if (parser.getLocalName().equals(MATCHER_TAG_NAME)) {
+                        String pattern = parser.getAttributeValue("", PATTERN_ATTR_NAME);
+                        String clazz = parser.getAttributeValue("", CLASS_ATTR_NAME);
+                        if (pattern != null) {
+                            String pathToMatch = path;
+                            if (queryString != null && pattern.indexOf("?") >= 0) {
+                                //log.debug("Also check/match query string: " + pattern + ", " + queryString);
+                                pathToMatch = path + "?" + queryString;
                             }
-                            return parser.getAttributeValue("", "rcpath");
+                            if (WildcardMatcherHelper.match(pattern, pathToMatch) != null) {
+                                if (log.isDebugEnabled()) {
+                                    log.debug("CoR pattern: '" + pattern + "' matched with path: '" + pathToMatch + "'. will use following path in the RTIRepository to reach the rc: " + parser.getAttributeValue("", "rcpath"));
+                                }
+                                return parser.getAttributeValue("", "rcpath");
+                            }
+                        } else if (clazz != null) {
+                            MatcherV1 customMatcher = (MatcherV1) Class.forName(clazz).newInstance();
+                            if (customMatcher.match(realm, path, request)) {
+                                return parser.getAttributeValue("", "rcpath");
+                            }
+                        } else {
+                            log.warn("There is a matcher element inside resource configuration map of realm '" + realm.getName() + "' which has no pattern attribute, hence ignore!");
                         }
                     } else {
                         //log.debug("No matcher element '" + parser.getLocalName() + "', hence ignore.");
                     }
                 }
             }
-        } catch (XMLStreamException e) {
+        } catch(XMLStreamException e) {
             log.error("error while reading the rc map", e);
             return null;
+        } catch(Exception e) {
+            log.error(e, e);
+            return null;
         }
         return null;
     }

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceTypeMatcherV1ImplV2.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceTypeMatcherV1ImplV2.java	2011-08-29 12:36:53 UTC (rev 60292)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceTypeMatcherV1ImplV2.java	2011-08-29 12:37:37 UTC (rev 60293)
@@ -59,7 +59,7 @@
         } 
 
         // Check on resource configuration map
-        String rcPath = ResourceConfigurationMapV2.getRCPath(realm, path, environment.getRequest().getQueryString());
+        String rcPath = ResourceConfigurationMapV2.getRCPath(realm, path, environment.getRequest());
         if (rcPath != null) {
             if (realm.getRTIRepository().existsNode(rcPath)) {
                 ResourceConfiguration rc = new ResourceConfiguration(realm.getRTIRepository().getNode(rcPath));



More information about the Yanel-commits mailing list