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;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import org.argeo.util.http.HttpStatus;
+
/**
* Asynchronously iterate over the response statuses of the response to a
* PROPFIND request.
DavResponse currentResponse = null;
boolean collectiongProperties = false;
+ Set<QName> currentPropertyNames = null;
+ HttpStatus currentStatus = null;
final QName COLLECTION = DavXmlElement.collection.qName(); // optimisation
elements: while (reader.hasNext()) {
// 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()) {
continue elements; // skip mod_dav properties
assert currentResponse != null;
- currentResponse.getPropertyNames().add(name);
+ currentPropertyNames.add(name);
if (value != null)
currentResponse.getProperties().put(name, value);
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())) {