Massive package refactoring
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / runtime / CmsAcrHttpHandler.java
index 5a42a3e383ec2d9435af424f7276f394e3f18623..c80933a559753203cac8e50ebc95b98afd79fd42 100644 (file)
@@ -10,12 +10,14 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ForkJoinPool;
 import java.util.function.Consumer;
 
+import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentNotFoundException;
 import org.argeo.api.acr.ContentSession;
 import org.argeo.api.acr.DName;
+import org.argeo.api.acr.RuntimeNamespaceContext;
 import org.argeo.api.acr.spi.ProvidedRepository;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.cms.auth.RemoteAuthUtils;
@@ -23,9 +25,9 @@ import org.argeo.cms.dav.DavDepth;
 import org.argeo.cms.dav.DavHttpHandler;
 import org.argeo.cms.dav.DavPropfind;
 import org.argeo.cms.dav.DavResponse;
+import org.argeo.cms.http.HttpStatus;
 import org.argeo.cms.internal.http.RemoteAuthHttpExchange;
-import org.argeo.util.StreamUtils;
-import org.argeo.util.http.HttpResponseStatus;
+import org.argeo.cms.util.StreamUtils;
 
 import com.sun.net.httpserver.HttpExchange;
 
@@ -33,6 +35,12 @@ import com.sun.net.httpserver.HttpExchange;
 public class CmsAcrHttpHandler extends DavHttpHandler {
        private ProvidedRepository contentRepository;
 
+       @Override
+       protected NamespaceContext getNamespaceContext(HttpExchange httpExchange, String path) {
+               // TODO be smarter?
+               return RuntimeNamespaceContext.getNamespaceContext();
+       }
+
        @Override
        protected void handleGET(HttpExchange exchange, String path) throws IOException {
                ContentSession session = RemoteAuthUtils.doAs(() -> contentRepository.get(),
@@ -42,7 +50,7 @@ public class CmsAcrHttpHandler extends DavHttpHandler {
                Content content = session.get(path);
                Optional<Long> size = content.get(DName.getcontentlength, Long.class);
                try (InputStream in = content.open(InputStream.class)) {
-                       exchange.sendResponseHeaders(HttpResponseStatus.OK.getCode(), size.orElse(0l));
+                       exchange.sendResponseHeaders(HttpStatus.OK.getCode(), size.orElse(0l));
                        StreamUtils.copy(in, exchange.getResponseBody());
                } catch (IOException e) {
                        throw new RuntimeException("Cannot process " + path, e);
@@ -79,20 +87,22 @@ public class CmsAcrHttpHandler extends DavHttpHandler {
                        davResponse.setCollection(true);
                if (davPropfind.isAllprop()) {
                        for (Map.Entry<QName, Object> entry : content.entrySet()) {
-                               davResponse.getPropertyNames().add(entry.getKey());
+                               davResponse.getPropertyNames(HttpStatus.OK).add(entry.getKey());
                                processMapEntry(davResponse, entry.getKey(), entry.getValue());
                        }
                        davResponse.getResourceTypes().addAll(content.getContentClasses());
                } else if (davPropfind.isPropname()) {
                        for (QName key : content.keySet()) {
-                               davResponse.getPropertyNames().add(key);
+                               davResponse.getPropertyNames(HttpStatus.OK).add(key);
                        }
                } else {
                        for (QName key : davPropfind.getProps()) {
                                if (content.containsKey(key)) {
-                                       davResponse.getPropertyNames().add(key);
+                                       davResponse.getPropertyNames(HttpStatus.OK).add(key);
                                        Object value = content.get(key);
                                        processMapEntry(davResponse, key, value);
+                               } else {
+                                       davResponse.getPropertyNames(HttpStatus.NOT_FOUND).add(key);
                                }
                                if (DName.resourcetype.qName().equals(key)) {
                                        davResponse.getResourceTypes().addAll(content.getContentClasses());