1
0
mirror of https://github.com/moparisthebest/davmail synced 2025-01-07 03:38:05 -05:00

Caldav: EWS, rebuild attendee list from properties

git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1468 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
mguessan 2010-09-21 14:02:44 +00:00
parent b418fcbc06
commit 6544a67130
4 changed files with 85 additions and 0 deletions

View File

@ -464,6 +464,9 @@ public class VCalendar extends VObject {
firstVevent.setPropertyValue(propertyName, propertyValue); firstVevent.setPropertyValue(propertyName, propertyValue);
} }
public void addFirstVeventProperty(VProperty vProperty) {
firstVevent.addProperty(vProperty);
}
/** /**
* VCalendar recipients for notifications * VCalendar recipients for notifications

View File

@ -412,6 +412,13 @@ public abstract class EWSMethod extends PostMethod {
this.serverVersion = serverVersion; this.serverVersion = serverVersion;
} }
public static class Attendee {
public String role;
public String email;
public String partstat;
public String name;
}
/** /**
* Item * Item
*/ */
@ -423,6 +430,7 @@ public abstract class EWSMethod extends PostMethod {
protected byte[] mimeContent; protected byte[] mimeContent;
protected List<FieldUpdate> fieldUpdates; protected List<FieldUpdate> fieldUpdates;
protected List<FileAttachment> attachments; protected List<FileAttachment> attachments;
protected List<Attendee> attendees;
protected List<String> fieldNames = new ArrayList<String>(); protected List<String> fieldNames = new ArrayList<String>();
@Override @Override
@ -556,6 +564,17 @@ public abstract class EWSMethod extends PostMethod {
} }
return result; return result;
} }
public List<Attendee> getAttendees() {
return attendees;
}
public void addAttendee(Attendee attendee) {
if (attendees == null) {
attendees = new ArrayList<Attendee>();
}
attendees.add(attendee);
}
} }
/** /**
@ -679,6 +698,8 @@ public abstract class EWSMethod extends PostMethod {
responseItem.attachments = handleAttachments(reader); responseItem.attachments = handleAttachments(reader);
} else if ("EmailAddresses".equals(tagLocalName)) { } else if ("EmailAddresses".equals(tagLocalName)) {
handleEmailAddresses(reader, responseItem); handleEmailAddresses(reader, responseItem);
} else if ("RequiredAttendees".equals(tagLocalName) || "OptionalAttendees".equals(tagLocalName)) {
handleAttendees(reader, responseItem, tagLocalName);
} else { } else {
if (tagLocalName.endsWith("Id")) { if (tagLocalName.endsWith("Id")) {
value = getAttributeValue(reader, "Id"); value = getAttributeValue(reader, "Id");
@ -709,6 +730,50 @@ public abstract class EWSMethod extends PostMethod {
} }
} }
protected void handleAttendees(XMLStreamReader reader, Item item, String attendeeType) throws XMLStreamException {
while (reader.hasNext() && !(XMLStreamUtil.isEndTag(reader, attendeeType))) {
reader.next();
if (XMLStreamUtil.isStartTag(reader)) {
String tagLocalName = reader.getLocalName();
if ("Attendee".equals(tagLocalName)) {
handleAttendee(reader, item, attendeeType);
}
}
}
}
protected void handleAttendee(XMLStreamReader reader, Item item, String attendeeType) throws XMLStreamException {
Attendee attendee = new Attendee();
if ("RequiredAttendees".equals(attendeeType)) {
attendee.role = "REQ-PARTICIPANT";
} else {
attendee.role = "OPT-PARTICIPANT";
}
while (reader.hasNext() && !(XMLStreamUtil.isEndTag(reader, "Attendee"))) {
reader.next();
if (XMLStreamUtil.isStartTag(reader)) {
String tagLocalName = reader.getLocalName();
if ("EmailAddress".equals(tagLocalName)) {
attendee.email = reader.getElementText();
} else if ("Name".equals(tagLocalName)) {
attendee.name = reader.getElementText();
} else if ("ResponseType".equals(tagLocalName)) {
String responseType = reader.getElementText();
if ("Accept".equals(responseType)) {
attendee.partstat = "ACCEPTED";
} else if ("Tentative".equals(responseType)) {
attendee.partstat = "TENTATIVE";
} else if ("Decline".equals(responseType)) {
attendee.partstat = "DECLINED";
} else {
attendee.partstat = "NEEDS-ACTION";
}
}
}
}
item.addAttendee(attendee);
}
protected List<FileAttachment> handleAttachments(XMLStreamReader reader) throws XMLStreamException { protected List<FileAttachment> handleAttachments(XMLStreamReader reader) throws XMLStreamException {
List<FileAttachment> attachments = new ArrayList<FileAttachment>(); List<FileAttachment> attachments = new ArrayList<FileAttachment>();
while (reader.hasNext() && !(XMLStreamUtil.isEndTag(reader, "Attachments"))) { while (reader.hasNext() && !(XMLStreamUtil.isEndTag(reader, "Attachments"))) {

View File

@ -23,6 +23,7 @@ import davmail.exception.DavMailException;
import davmail.exception.HttpNotFoundException; import davmail.exception.HttpNotFoundException;
import davmail.exchange.ExchangeSession; import davmail.exchange.ExchangeSession;
import davmail.exchange.VCalendar; import davmail.exchange.VCalendar;
import davmail.exchange.VProperty;
import davmail.http.DavGatewayHttpClientFacade; import davmail.http.DavGatewayHttpClientFacade;
import davmail.util.IOUtil; import davmail.util.IOUtil;
import davmail.util.StringUtil; import davmail.util.StringUtil;
@ -1181,6 +1182,9 @@ public class EwsExchangeSession extends ExchangeSession {
GetItemMethod getItemMethod = new GetItemMethod(BaseShape.ID_ONLY, itemId, true); GetItemMethod getItemMethod = new GetItemMethod(BaseShape.ID_ONLY, itemId, true);
getItemMethod.addAdditionalProperty(Field.get("reminderset")); getItemMethod.addAdditionalProperty(Field.get("reminderset"));
getItemMethod.addAdditionalProperty(Field.get("calendaruid")); getItemMethod.addAdditionalProperty(Field.get("calendaruid"));
getItemMethod.addAdditionalProperty(Field.get("requiredattendees"));
getItemMethod.addAdditionalProperty(Field.get("optionalattendees"));
executeMethod(getItemMethod); executeMethod(getItemMethod);
content = getItemMethod.getMimeContent(); content = getItemMethod.getMimeContent();
VCalendar localVCalendar = new VCalendar(content, email, getVTimezone()); VCalendar localVCalendar = new VCalendar(content, email, getVTimezone());
@ -1192,6 +1196,16 @@ public class EwsExchangeSession extends ExchangeSession {
if (calendaruid != null) { if (calendaruid != null) {
localVCalendar.setFirstVeventPropertyValue("UID", calendaruid); localVCalendar.setFirstVeventPropertyValue("UID", calendaruid);
} }
List<EWSMethod.Attendee> attendees = getItemMethod.getResponseItem().getAttendees();
if (attendees != null) {
for (EWSMethod.Attendee attendee : attendees) {
VProperty attendeeProperty = new VProperty("ATTENDEE", "mailto:"+attendee.email);
attendeeProperty.addParam("CN", attendee.name);
attendeeProperty.addParam("PARTSTAT", attendee.partstat);
attendeeProperty.addParam("ROLE", attendee.role);
localVCalendar.addFirstVeventProperty(attendeeProperty);
}
}
content = localVCalendar.toString().getBytes("UTF-8"); content = localVCalendar.toString().getBytes("UTF-8");
} catch (IOException e) { } catch (IOException e) {

View File

@ -193,6 +193,9 @@ public class Field {
FIELD_MAP.put("busystatus", new UnindexedFieldURI("calendar:LegacyFreeBusyStatus")); FIELD_MAP.put("busystatus", new UnindexedFieldURI("calendar:LegacyFreeBusyStatus"));
FIELD_MAP.put("requiredattendees", new UnindexedFieldURI("calendar:RequiredAttendees"));
FIELD_MAP.put("optionalattendees", new UnindexedFieldURI("calendar:OptionalAttendees"));
// attachments // attachments
FIELD_MAP.put("attachments", new UnindexedFieldURI("item:Attachments")); FIELD_MAP.put("attachments", new UnindexedFieldURI("item:Attachments"));
} }