@Override public Resource getResource(String host, String sPath) throws NotAuthorizedException, BadRequestException { LogUtils.trace(log, "getResource", host, sPath); Path path = Path.path(sPath); Path parent = path.getParent(); Request request = HttpManager.request(); String encodedPath = request.getAbsolutePath(); // This is to support a use case where a developer wants their resources to // be accessible through milton-json, but don't want to use DAV urls. Instead // they use a parameter and DO NOT implement PostableResource. if (request.getMethod().equals(Method.POST)) { Resource wrappedResource = wrapped.getResource(host, sPath); if (wrappedResource != null && !(wrappedResource instanceof PostableResource)) { LogUtils.trace(log, "getResource: is post, and got a: ", wrappedResource.getClass()); return new PostJsonResource(host, encodedPath, wrappedResource, methodParamName, this); } } if (request.getMethod().equals(Method.GET) && isMatchingContentType(request.getAcceptHeader())) { Resource wrappedResource = wrapped.getResource(host, sPath); if (wrappedResource != null) { log.trace("getResource: matches content type, and found wrapped resource"); return wrapResource(host, wrappedResource, Method.PROPFIND.code, encodedPath); } else { LogUtils.trace( log, "getResource: is GET and matched type, but found no actual resource on", sPath); } } if (isMatchingPath(parent)) { log.trace("getResource: is matching path"); Path resourcePath = parent.getParent(); if (resourcePath != null) { String method = path.getName(); Resource wrappedResource = wrapped.getResource(host, resourcePath.toString()); if (wrappedResource != null) { Resource r = wrapResource(host, wrappedResource, method, encodedPath); LogUtils.trace(log, "returning a", r.getClass()); return r; } } } else { log.trace("getResource: not matching path"); return wrapped.getResource(host, sPath); } return null; }
@Override public String process(String host, String path, Resource calendar, Document doc) throws NotAuthorizedException, BadRequestException { log.debug("process"); // The requested properties Set<QName> props = getProps(doc); // The requested resources List<String> hrefs = getHrefs(doc); PropertiesRequest parseResult = PropertiesRequest.toProperties(props); // Generate the response List<PropFindResponse> respProps = new ArrayList<PropFindResponse>(); for (String href : hrefs) { Resource r = resourceFactory.getResource(host, href); if (r != null) { if (r instanceof PropFindableResource) { PropFindableResource pfr = (PropFindableResource) r; try { respProps.addAll(propertyBuilder.buildProperties(pfr, 0, parseResult, href)); } catch (URISyntaxException ex) { throw new RuntimeException("There was an unencoded url requested: " + href, ex); } } else { // todo } } else { // todo } } String xml = xmlGenerator.generate(respProps); return xml; }