Author: reto
Date: Tue Feb 2 10:25:53 2010
New Revision: 905565
URL: http://svn.apache.org/viewvc?rev=905565&view=rev
Log:
CLEREZZA-94: applied pacth agron
Added:
incubator/clerezza/issues/CLEREZZA-94/
incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs/
- copied from r905561,
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/
Modified:
incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java
Modified:
incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java?rev=905565&r1=905561&r2=905565&view=diff
==============================================================================
---
incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java
(original)
+++
incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java
Tue Feb 2 10:25:53 2010
@@ -239,46 +239,60 @@
for (Method method : result) {
method2PathParams.put(method,
inheritedPathParams);
}
+
+ if(result.size() == 0){
+ return getSubResourceMethods(request, instance,
remainingPath,
+ method2PathParams,
inheritedPathParams);
+ } else {
+ return new MethodsAndInstance(result, instance);
+ }
+
} else {
- SortedSet<MethodDescriptor> methodDescriptors =
getSubThingMethodDescriptors(instance
- .getClass());
- result = new HashSet<Method>();
- URITemplate uriTemplateOfFirstMatchingRM = null;
- Map<String, String> subPathParam = null;
- for (MethodDescriptor methodDescriptor :
methodDescriptors) {
- final URITemplate currentUriTemplate =
methodDescriptor
- .getUriTemplate();
- if (uriTemplateOfFirstMatchingRM != null) {
- if
(uriTemplateOfFirstMatchingRM.equals(currentUriTemplate)
- &&
!methodDescriptor.isSubResourceLocator()) {
-
result.add(methodDescriptor.getMethod());
-
method2PathParams.put(methodDescriptor.getMethod(),
- subPathParam);
- continue;
- }
- break;
- }
- PathMatching subPathMatching =
currentUriTemplate
- .match(remainingPath);
- if (subPathMatching == null) {
- continue;
- }
- subPathParam = new HashMap<String,
String>(inheritedPathParams);
-
subPathParam.putAll(subPathMatching.getParameters());
- if (methodDescriptor.isSubResourceLocator()) {
- return getCandidateMethods(request,
getSubResource(
- instance,
methodDescriptor.getMethod(), request,
- subPathMatching),
subPathMatching
- .getRemainingURIPath(),
method2PathParams,
+ return getSubResourceMethods(request, instance,
remainingPath,
+ method2PathParams, inheritedPathParams);
+ }
+ }
+
+ private MethodsAndInstance getSubResourceMethods(WebRequest request,
+ Object instance, String remainingPath,
+ Map<Method, Map<String, String>> method2PathParams,
+ Map<String, String> inheritedPathParams) throws
HandlerException,
+ UnsupportedFieldType {
+ SortedSet<MethodDescriptor> methodDescriptors =
getSubThingMethodDescriptors(instance.getClass());
+ Set<Method> result;
+ result = new HashSet<Method>();
+ URITemplate uriTemplateOfFirstMatchingRM = null;
+ Map<String, String> subPathParam = null;
+ for (MethodDescriptor methodDescriptor : methodDescriptors) {
+ final URITemplate currentUriTemplate =
methodDescriptor.getUriTemplate();
+ if (uriTemplateOfFirstMatchingRM != null) {
+ if
(uriTemplateOfFirstMatchingRM.equals(currentUriTemplate)
+ &&
!methodDescriptor.isSubResourceLocator()) {
+
result.add(methodDescriptor.getMethod());
+
method2PathParams.put(methodDescriptor.getMethod(),
subPathParam);
+ continue;
}
- if (subPathMatching.isSlashOrEmpty()) {
- if
(!methodDescriptor.isSubResourceLocator()) {
- Method method =
methodDescriptor.getMethod();
- result.add(method);
- uriTemplateOfFirstMatchingRM =
currentUriTemplate;
- method2PathParams.put(method,
subPathParam);
- }
+ break;
+ }
+ PathMatching subPathMatching =
currentUriTemplate.match(remainingPath);
+ if (subPathMatching == null) {
+ continue;
+ }
+ subPathParam = new HashMap<String,
String>(inheritedPathParams);
+ subPathParam.putAll(subPathMatching.getParameters());
+ if (methodDescriptor.isSubResourceLocator()) {
+ return getCandidateMethods(request,
getSubResource(
+ instance,
methodDescriptor.getMethod(), request,
+ subPathMatching),
subPathMatching.getRemainingURIPath(), method2PathParams,
+ subPathParam);
+ }
+ if (subPathMatching.isSlashOrEmpty()) {
+ if (!methodDescriptor.isSubResourceLocator()) {
+ Method method =
methodDescriptor.getMethod();
+ result.add(method);
+ uriTemplateOfFirstMatchingRM =
currentUriTemplate;
+ method2PathParams.put(method,
subPathParam);
}
}
}