From 641dcaeeb1f753d6f20e6115de037196cf917fa7 Mon Sep 17 00:00:00 2001 From: mguessan Date: Tue, 13 Jul 2010 11:27:12 +0000 Subject: [PATCH] Carddav: implement categories support in EWS mode git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1185 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/exchange/ews/EWSMethod.java | 18 ++++++++++- .../exchange/ews/ExtendedFieldURI.java | 32 +++++++++++++++++-- src/java/davmail/exchange/ews/Field.java | 2 +- .../davmail/exchange/ews/FieldUpdate.java | 15 +++++---- .../exchange/TestExchangeSessionContact.java | 2 ++ 5 files changed, 58 insertions(+), 11 deletions(-) diff --git a/src/java/davmail/exchange/ews/EWSMethod.java b/src/java/davmail/exchange/ews/EWSMethod.java index 01f30503..bfb27b0a 100644 --- a/src/java/davmail/exchange/ews/EWSMethod.java +++ b/src/java/davmail/exchange/ews/EWSMethod.java @@ -576,12 +576,28 @@ public abstract class EWSMethod extends PostMethod { String tagLocalName = reader.getLocalName(); if ("ExtendedFieldURI".equals(tagLocalName)) { propertyTag = getAttributeValue(reader, "PropertyTag"); - // property name is in PropertyId with DistinguishedPropertySetId + // property name is in PropertyId or PropertyName with DistinguishedPropertySetId if (propertyTag == null) { propertyTag = getAttributeValue(reader, "PropertyId"); } + if (propertyTag == null) { + propertyTag = getAttributeValue(reader, "PropertyName"); + } } else if ("Value".equals(tagLocalName)) { propertyValue = reader.getElementText(); + } else if ("Values".equals(tagLocalName)) { + StringBuilder buffer = new StringBuilder(); + while (reader.hasNext() && !(isEndTag(reader, "Values"))) { + reader.next(); + if (reader.getEventType() == XMLStreamConstants.START_ELEMENT) { + + if (buffer.length() > 0) { + buffer.append(','); + } + buffer.append(reader.getElementText()); + } + } + propertyValue = buffer.toString(); } } } diff --git a/src/java/davmail/exchange/ews/ExtendedFieldURI.java b/src/java/davmail/exchange/ews/ExtendedFieldURI.java index c7ee2dc2..994d3e5e 100644 --- a/src/java/davmail/exchange/ews/ExtendedFieldURI.java +++ b/src/java/davmail/exchange/ews/ExtendedFieldURI.java @@ -76,6 +76,18 @@ public class ExtendedFieldURI implements FieldURI { this.propertyType = PropertyType.String; } + /** + * Create extended field uri. + * + * @param distinguishedPropertySetId distinguished property set id + * @param propertyName property name + */ + public ExtendedFieldURI(DistinguishedPropertySetType distinguishedPropertySetId, String propertyName, PropertyType propertyType) { + this.distinguishedPropertySetId = distinguishedPropertySetId; + this.propertyName = propertyName; + this.propertyType = propertyType; + } + public void appendTo(StringBuilder buffer) { buffer.append(""); appendTo(buffer); - buffer.append(""); - buffer.append(value); - buffer.append(""); + if (propertyType == PropertyType.StringArray) { + buffer.append(""); + String[] values = value.split("\n"); + for (final String singleValue : values) { + buffer.append(""); + buffer.append(singleValue); + buffer.append(""); + + } + buffer.append(""); + } else { + buffer.append(""); + buffer.append(value); + buffer.append(""); + } buffer.append(""); if (itemType != null) { buffer.append(""); } - StringBuilder buffer = new StringBuilder(); - if (value == null) { - fieldURI.appendTo(buffer); - } else { - fieldURI.appendValue(buffer, itemType, value); + // do not try to set empty value on create + if (itemType != null || value != null) { + StringBuilder buffer = new StringBuilder(); + if (value == null) { + fieldURI.appendTo(buffer); + } else { + fieldURI.appendValue(buffer, itemType, value); + } + writer.write(buffer.toString()); } - writer.write(buffer.toString()); if (itemType != null) { writer.write("