You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/02/02 11:36:08 UTC

svn commit: r905567 - in /incubator/clerezza: issues/CLEREZZA-94/ trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/ trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/t...

Author: reto
Date: Tue Feb  2 10:36:08 2010
New Revision: 905567

URL: http://svn.apache.org/viewvc?rev=905567&view=rev
Log:
CLEREZZA-94: closing 

Added:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/EmptyPathSubResourceLocaterTest.java
      - copied unchanged from r905566, incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/EmptyPathSubResourceLocaterTest.java
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/SubResourceLocatorTest.java
      - copied unchanged from r905566, incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/test/java/org/apache/clerezza/triaxrs/blackbox/SubResourceLocatorTest.java
Removed:
    incubator/clerezza/issues/CLEREZZA-94/
Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/   (props changed)
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java

Propchange: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Feb  2 10:36:08 2010
@@ -1,2 +1,3 @@
 /incubator/clerezza/issues/CLEREZZA-43/org.apache.clerezza.triaxrs:891792-892499
 /incubator/clerezza/issues/CLEREZZA-48/org.apache.clerezza.triaxrs:893435-898896
+/incubator/clerezza/issues/CLEREZZA-94/org.apache.clerezza.triaxrs:905562-905566

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/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/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java?rev=905567&r1=905566&r2=905567&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.triaxrs/org.apache.clerezza.triaxrs/src/main/java/org/apache/clerezza/triaxrs/RootResourceExecutorImpl.java Tue Feb  2 10:36:08 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);
 				}
 			}
 		}