]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/dav/DavPropfind.java
FS utils throws IOException
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / dav / DavPropfind.java
1 package org.argeo.cms.dav;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import javax.xml.namespace.QName;
9 import javax.xml.stream.FactoryConfigurationError;
10 import javax.xml.stream.XMLInputFactory;
11 import javax.xml.stream.XMLStreamException;
12 import javax.xml.stream.XMLStreamReader;
13
14 public class DavPropfind {
15 private DavDepth depth;
16 private boolean propname = false;
17 private boolean allprop = false;
18 private List<QName> props = new ArrayList<>();
19
20 public DavPropfind(DavDepth depth) {
21 this.depth = depth;
22 }
23
24 public boolean isPropname() {
25 return propname;
26 }
27
28 public void setPropname(boolean propname) {
29 this.propname = propname;
30 }
31
32 public boolean isAllprop() {
33 return allprop;
34 }
35
36 public void setAllprop(boolean allprop) {
37 this.allprop = allprop;
38 }
39
40 public List<QName> getProps() {
41 return props;
42 }
43
44 public DavDepth getDepth() {
45 return depth;
46 }
47
48 public static DavPropfind load(DavDepth depth, InputStream in) throws IOException {
49 try {
50 DavPropfind res = null;
51 XMLInputFactory inputFactory = XMLInputFactory.newFactory();
52 XMLStreamReader reader = inputFactory.createXMLStreamReader(in);
53 while (reader.hasNext()) {
54 reader.next();
55 if (reader.isStartElement()) {
56 QName name = reader.getName();
57 // System.out.println(name);
58 DavXmlElement davXmlElement = DavXmlElement.toEnum(name);
59 if (davXmlElement != null) {
60 switch (davXmlElement) {
61 case propfind:
62 res = new DavPropfind(depth);
63 break;
64 case allprop:
65 res.setAllprop(true);
66 break;
67 case propname:
68 res.setPropname(true);
69 case prop:
70 // ignore
71 case include:
72 // ignore
73 break;
74 default:
75 // TODO check that the format is really respected
76 res.getProps().add(reader.getName());
77 }
78 }
79 }
80 }
81
82 // checks
83 if (res.isPropname()) {
84 if (!res.getProps().isEmpty() || res.isAllprop())
85 throw new IllegalArgumentException("Cannot set other values if propname is set");
86 }
87 return res;
88 } catch (FactoryConfigurationError | XMLStreamException e) {
89 throw new RuntimeException("Cannot load propfind", e);
90 }
91 }
92 }