X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fdav%2FMultiStatusReader.java;h=c7b54b0273324aa3cf273025fc9db09d0be03bed;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=4224e488c19830a4455162fa402468d94ebd24dd;hpb=b8f50d6d8e7b9c9215d156ba33f9dedfcee913a7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/dav/MultiStatusReader.java b/org.argeo.cms/src/org/argeo/cms/dav/MultiStatusReader.java index 4224e488c..c7b54b027 100644 --- a/org.argeo.cms/src/org/argeo/cms/dav/MultiStatusReader.java +++ b/org.argeo.cms/src/org/argeo/cms/dav/MultiStatusReader.java @@ -2,7 +2,9 @@ package org.argeo.cms.dav; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.HashSet; import java.util.Iterator; +import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CompletableFuture; @@ -17,6 +19,8 @@ import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; +import org.argeo.cms.http.HttpStatus; + /** * Asynchronously iterate over the response statuses of the response to a * PROPFIND request. @@ -46,6 +50,8 @@ class MultiStatusReader implements Iterator { DavResponse currentResponse = null; boolean collectiongProperties = false; + Set currentPropertyNames = null; + HttpStatus currentStatus = null; final QName COLLECTION = DavXmlElement.collection.qName(); // optimisation elements: while (reader.hasNext()) { @@ -69,8 +75,14 @@ class MultiStatusReader implements Iterator { // case collection: // currentResponse.setCollection(true); // break; + case status: + reader.next(); + String statusLine = reader.getText(); + currentStatus = HttpStatus.parseStatusLine(statusLine); + break; case prop: collectiongProperties = true; + currentPropertyNames = new HashSet<>(); break; case resourcetype: while (reader.hasNext()) { @@ -106,7 +118,7 @@ class MultiStatusReader implements Iterator { continue elements; // skip mod_dav properties assert currentResponse != null; - currentResponse.getPropertyNames().add(name); + currentPropertyNames.add(name); if (value != null) currentResponse.getProperties().put(name, value); @@ -118,6 +130,10 @@ class MultiStatusReader implements Iterator { DavXmlElement davXmlElement = DavXmlElement.toEnum(name); if (davXmlElement != null) switch (davXmlElement) { + case propstat: + currentResponse.getPropertyNames(currentStatus).addAll(currentPropertyNames); + currentPropertyNames = null; + break; case response: assert currentResponse != null; if (ignoredHref == null || !ignoredHref.equals(currentResponse.getHref())) {