[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