X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fdav%2FDavHttpHandler.java;h=9fd03f25abb5cfd735cc712ea8938864df4d0b93;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=0bd3b398e075e479cfa8252d9bb621e7200be231;hpb=1d6840195189cbdbf632ca2800b6179d3b6349df;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java b/org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java index 0bd3b398e..9fd03f25a 100644 --- a/org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java +++ b/org.argeo.cms/src/org/argeo/cms/dav/DavHttpHandler.java @@ -10,21 +10,20 @@ import java.util.function.Consumer; import javax.xml.namespace.NamespaceContext; import org.argeo.api.acr.ContentNotFoundException; -import org.argeo.util.http.HttpHeader; -import org.argeo.util.http.HttpMethod; -import org.argeo.util.http.HttpResponseStatus; -import org.argeo.util.http.HttpServerUtils; +import org.argeo.cms.http.HttpHeader; +import org.argeo.cms.http.HttpMethod; +import org.argeo.cms.http.HttpServerUtils; +import org.argeo.cms.http.HttpStatus; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; /** * Centralise patterns which are not ACR specific. Not really meant as a - * framework for building WebDav servers, but rather to make uppe-level of + * framework for building WebDav servers, but rather to make upper-level of * ACR-specific code more readable and maintainable. */ public abstract class DavHttpHandler implements HttpHandler { - private NamespaceContext namespaceContext; @Override public void handle(HttpExchange exchange) throws IOException { @@ -35,7 +34,7 @@ public abstract class DavHttpHandler implements HttpHandler { handleGET(exchange, subPath); } else if (HttpMethod.OPTIONS.name().equals(method)) { handleOPTIONS(exchange, subPath); - exchange.sendResponseHeaders(HttpResponseStatus.NO_CONTENT.getCode(), -1); + exchange.sendResponseHeaders(HttpStatus.NO_CONTENT.getCode(), -1); } else if (HttpMethod.PROPFIND.name().equals(method)) { DavDepth depth = DavDepth.fromHttpExchange(exchange); if (depth == null) { @@ -46,9 +45,10 @@ public abstract class DavHttpHandler implements HttpHandler { try (InputStream in = exchange.getRequestBody()) { davPropfind = DavPropfind.load(depth, in); } - MultiStatusWriter multiStatusWriter = new MultiStatusWriter(); + MultiStatusWriter multiStatusWriter = new MultiStatusWriter(exchange.getProtocol()); CompletableFuture published = handlePROPFIND(exchange, subPath, davPropfind, multiStatusWriter); - exchange.sendResponseHeaders(HttpResponseStatus.MULTI_STATUS.getCode(), 0l); + exchange.sendResponseHeaders(HttpStatus.MULTI_STATUS.getCode(), 0l); + NamespaceContext namespaceContext = getNamespaceContext(exchange, subPath); try (OutputStream out = exchange.getResponseBody()) { multiStatusWriter.process(namespaceContext, out, published.minimalCompletionStage(), davPropfind.isPropname()); @@ -57,17 +57,20 @@ public abstract class DavHttpHandler implements HttpHandler { throw new IllegalArgumentException("Unsupported method " + method); } } catch (ContentNotFoundException e) { - exchange.sendResponseHeaders(HttpResponseStatus.NOT_FOUND.getCode(), -1); + exchange.sendResponseHeaders(HttpStatus.NOT_FOUND.getCode(), -1); } // TODO return a structured error message catch (UnsupportedOperationException e) { - exchange.sendResponseHeaders(HttpResponseStatus.NOT_IMPLEMENTED.getCode(), -1); + e.printStackTrace(); + exchange.sendResponseHeaders(HttpStatus.NOT_IMPLEMENTED.getCode(), -1); } catch (Exception e) { - exchange.sendResponseHeaders(HttpResponseStatus.INTERNAL_SERVER_ERROR.getCode(), -1); + exchange.sendResponseHeaders(HttpStatus.INTERNAL_SERVER_ERROR.getCode(), -1); } } + protected abstract NamespaceContext getNamespaceContext(HttpExchange httpExchange, String path); + protected abstract CompletableFuture handlePROPFIND(HttpExchange exchange, String path, DavPropfind davPropfind, Consumer consumer) throws IOException; @@ -92,8 +95,4 @@ public abstract class DavHttpHandler implements HttpHandler { exchange.getResponseHeaders().add(HttpHeader.ALLOW.getHeaderName(), methods.toString()); } - public void setNamespaceContext(NamespaceContext namespaceContext) { - this.namespaceContext = namespaceContext; - } - }