コード例 #1
0
ファイル: Resources.java プロジェクト: bytesparadise/ride
 /**
  * @param progressMonitor
  * @param uriMappings
  * @param resource
  * @param methodsStack
  * @throws CoreException
  */
 private void resolveResourcesUriMappings(
     final Resource resource,
     final String uriTemplateFragment,
     final Map<ResolvedUriMapping, Stack<ResourceMethod>> uriMappings,
     final Stack<ResourceMethod> methodsStack,
     final IProgressMonitor progressMonitor)
     throws CoreException {
   // resource resourceMethods and subresources resourceMethods are treated the same way
   for (ResourceMethod resourceMethod : resource.getAllMethods()) {
     String uriPathTemplate =
         resolveURIPathTemplate(uriTemplateFragment, resource, resourceMethod);
     MediaTypeCapabilities mediaTypeCapabilities =
         resolveMediaTypeCapabilities(resource, resourceMethod);
     UriMapping resourceUriMapping = resourceMethod.getUriMapping();
     ResolvedUriMapping uriMapping =
         new ResolvedUriMapping(
             resourceUriMapping.getHTTPMethod(),
             uriPathTemplate,
             resourceUriMapping.getQueryParams(),
             mediaTypeCapabilities);
     @SuppressWarnings("unchecked")
     Stack<ResourceMethod> stack = (Stack<ResourceMethod>) methodsStack.clone();
     stack.add(resourceMethod);
     uriMappings.put(uriMapping, stack);
   }
   // TODO : verify support chain of subresource locators
   // TODO : stack resourceMethods and detect+prevent cycles
   for (ResourceMethod resourceMethod : resource.getSubresourceLocators()) {
     String uriPathTemplate =
         resolveURIPathTemplate(uriTemplateFragment, resource, resourceMethod);
     IType returnType = resourceMethod.getReturnType();
     if (returnType == null) {
       continue;
     }
     ITypeHierarchy subresourceTypeHierarchy =
         JdtUtils.resolveTypeHierarchy(returnType, false, progressMonitor);
     for (IType subresourceType : subresourceTypeHierarchy.getSubtypes(returnType)) {
       Resource subresource = getByType(subresourceType);
       if (subresource != null && !subresource.isRootResource()) {
         @SuppressWarnings("unchecked")
         Stack<ResourceMethod> stack = (Stack<ResourceMethod>) methodsStack.clone();
         stack.add(resourceMethod);
         resolveResourcesUriMappings(
             subresource, uriPathTemplate, uriMappings, stack, progressMonitor);
       }
     }
   }
 }