1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package davmail.exchange.ews;
21
22 import davmail.exchange.XMLStreamUtil;
23
24 import javax.xml.stream.XMLStreamException;
25 import javax.xml.stream.XMLStreamReader;
26
27
28
29
30 public class ExpandDLMethod extends EWSMethod {
31
32
33
34
35
36 public ExpandDLMethod(String value) {
37 super("Mailbox", "ExpandDL", "ExpandDLResponseMessage");
38 unresolvedEntry = new ElementOption("m:Mailbox", new ElementOption("t:EmailAddress", value));
39 }
40
41 @Override
42 protected EWSMethod.Item handleItem(XMLStreamReader reader) throws XMLStreamException {
43 EWSMethod.Item responseItem = new EWSMethod.Item();
44 responseItem.type = "Contact";
45
46 while (reader.hasNext() && !XMLStreamUtil.isStartTag(reader, "Resolution")) {
47 reader.next();
48 }
49 while (reader.hasNext() && !XMLStreamUtil.isEndTag(reader, "Resolution")) {
50 reader.next();
51 if (XMLStreamUtil.isStartTag(reader)) {
52 String tagLocalName = reader.getLocalName();
53 if ("Mailbox".equals(tagLocalName)) {
54 handleMailbox(reader, responseItem);
55 } else if ("Contact".equals(tagLocalName)) {
56 handleContact(reader, responseItem);
57 }
58 }
59 }
60 return responseItem;
61 }
62
63 protected void handleMailbox(XMLStreamReader reader, EWSMethod.Item responseItem) throws XMLStreamException {
64 while (reader.hasNext() && !XMLStreamUtil.isEndTag(reader, "Mailbox")) {
65 reader.next();
66 if (XMLStreamUtil.isStartTag(reader)) {
67 String tagLocalName = reader.getLocalName();
68 if ("Name".equals(tagLocalName)) {
69 responseItem.put(tagLocalName, XMLStreamUtil.getElementText(reader));
70 } else if ("EmailAddress".equals(tagLocalName)) {
71 responseItem.put(tagLocalName, XMLStreamUtil.getElementText(reader));
72 }
73 }
74 }
75 }
76
77 protected void handleContact(XMLStreamReader reader, EWSMethod.Item responseItem) throws XMLStreamException {
78 while (reader.hasNext() && !XMLStreamUtil.isEndTag(reader, "Contact")) {
79 reader.next();
80 if (XMLStreamUtil.isStartTag(reader)) {
81 String tagLocalName = reader.getLocalName();
82 if ("EmailAddresses".equals(tagLocalName)) {
83 handleEmailAddresses(reader, responseItem);
84 } else if ("PhysicalAddresses".equals(tagLocalName)) {
85 handlePhysicalAddresses(reader, responseItem);
86 } else if ("PhoneNumbers".equals(tagLocalName)) {
87 handlePhoneNumbers(reader, responseItem);
88 } else {
89 responseItem.put(tagLocalName, XMLStreamUtil.getElementText(reader));
90 }
91 }
92 }
93 }
94
95 protected void handlePhysicalAddress(XMLStreamReader reader, EWSMethod.Item responseItem, String addressType) throws XMLStreamException {
96 while (reader.hasNext() && !XMLStreamUtil.isEndTag(reader, "Entry")) {
97 reader.next();
98 if (XMLStreamUtil.isStartTag(reader)) {
99 String tagLocalName = reader.getLocalName();
100 String value = XMLStreamUtil.getElementText(reader);
101 responseItem.put(addressType + tagLocalName, value);
102 }
103 }
104 }
105
106 protected void handlePhysicalAddresses(XMLStreamReader reader, EWSMethod.Item responseItem) throws XMLStreamException {
107 while (reader.hasNext() && !XMLStreamUtil.isEndTag(reader, "PhysicalAddresses")) {
108 reader.next();
109 if (XMLStreamUtil.isStartTag(reader)) {
110 String tagLocalName = reader.getLocalName();
111 if ("Entry".equals(tagLocalName)) {
112 String key = getAttributeValue(reader, "Key");
113 handlePhysicalAddress(reader, responseItem, key);
114 }
115 }
116 }
117 }
118
119 protected void handlePhoneNumbers(XMLStreamReader reader, EWSMethod.Item responseItem) throws XMLStreamException {
120 while (reader.hasNext() && !XMLStreamUtil.isEndTag(reader, "PhoneNumbers")) {
121 reader.next();
122 if (XMLStreamUtil.isStartTag(reader)) {
123 String tagLocalName = reader.getLocalName();
124 if ("Entry".equals(tagLocalName)) {
125 String key = getAttributeValue(reader, "Key");
126 String value = XMLStreamUtil.getElementText(reader);
127 responseItem.put(key, value);
128 }
129 }
130 }
131 }
132
133 @Override
134 protected void handleEmailAddresses(XMLStreamReader reader, EWSMethod.Item responseItem) throws XMLStreamException {
135 while (reader.hasNext() && !XMLStreamUtil.isEndTag(reader, "EmailAddresses")) {
136 reader.next();
137 if (XMLStreamUtil.isStartTag(reader)) {
138 String tagLocalName = reader.getLocalName();
139 if ("Entry".equals(tagLocalName)) {
140 String value = XMLStreamUtil.getElementText(reader);
141 if (value != null) {
142 if (value.startsWith("smtp:") || value.startsWith("SMTP:")) {
143 value = value.substring(5);
144
145 responseItem.putIfAbsent("EmailAddress", value);
146 }
147 }
148 }
149 }
150 }
151 }
152
153 }