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);
                                }
                        }
                }


Reply via email to