From ef48c975cfc1cae393acd8f4b92cfe090e2eaa37 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 5 Nov 2018 12:37:51 +0000
Subject: [PATCH 01/70] Minimal changes to get compiling under JDK 11
---
pom.xml | 63 +++++++++++--------
.../ExecuteDiagnosticMethodResponse.java | 30 +++++----
.../property/complex/OlsonTimeZoneTest.java | 15 +++--
3 files changed, 60 insertions(+), 48 deletions(-)
diff --git a/pom.xml b/pom.xml
index e303359bc..d5da22f51 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.microsoft.ews-java-api
+ com.surevine.ews-java-apiews-java-api2.1-SNAPSHOT
@@ -49,8 +49,8 @@
- Microsoft
- http://www.microsoft.com/
+ Surevine
+ http://www.surevine.com/
@@ -76,32 +76,35 @@
UTF-8
- 1.6
+ 11
+ 11
+ 11
- 2.16
+ 3.0.01.6
- 2.10.3
- 3.3
- 1.6.5
- 2.4
- 1.14
+ 3.0.1
+ 3.8.0
+ 1.6.8
+ 3.0.1
+ 1.171.1
- 3.4
- 2.8
- 2.2
- 2.5
- 2.18.1
- 0.7.5.201505241946
+ 3.7.1
+ 3.0.0
+ 2.7
+ 3.0.0
+ 2.22.1
+ 0.8.2
- 4.4.1
- 4.4.1
+ 4.5.6
+ 4.4.101.2
- 2.8
- 3.4
- 2.4
+ 2.10.1
+ 3.8.1
+ 2.5
+ 2.3.14.121.3
@@ -249,6 +252,12 @@
${joda-time.version}
+
+ javax.xml.ws
+ jaxws-api
+ ${jaxws-api.version}
+
+
junitjunit
@@ -318,7 +327,7 @@
${javaLanguage.version}
-
+
org.apache.maven.pluginsmaven-source-plugin
@@ -348,7 +357,7 @@
-
+
org.jacoco
@@ -433,7 +442,7 @@
-
+
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/response/ExecuteDiagnosticMethodResponse.java b/src/main/java/microsoft/exchange/webservices/data/core/response/ExecuteDiagnosticMethodResponse.java
index f67322ab0..8d4136fa5 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/response/ExecuteDiagnosticMethodResponse.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/response/ExecuteDiagnosticMethodResponse.java
@@ -23,15 +23,7 @@
package microsoft.exchange.webservices.data.core.response;
-import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
-import microsoft.exchange.webservices.data.core.EwsUtilities;
-import microsoft.exchange.webservices.data.core.ExchangeService;
-import microsoft.exchange.webservices.data.core.XmlElementNames;
-import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
-import microsoft.exchange.webservices.data.security.XmlNodeType;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
+import java.util.Iterator;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -42,7 +34,16 @@
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
-import java.util.Iterator;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
+import microsoft.exchange.webservices.data.core.EwsUtilities;
+import microsoft.exchange.webservices.data.core.ExchangeService;
+import microsoft.exchange.webservices.data.core.XmlElementNames;
+import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
+import microsoft.exchange.webservices.data.security.XmlNodeType;
/**
@@ -116,18 +117,15 @@ public Document retriveDocument(XMLEventReader xmlEventReader)
element = document.createElementNS(ele.getName()
.getNamespaceURI(), ele.getName().getLocalPart());
- Iterator ite = ele.getAttributes();
-
- while (ite.hasNext()) {
+ for (Iterator ite = ele.getAttributes(); ite.hasNext();) {
Attribute attr = ite.next();
element.setAttribute(attr.getName().getLocalPart(),
attr.getValue());
}
String xmlns = EwsUtilities.WSTrustFebruary2005Namespace;//"http://schemas.xmlsoap.org/wsdl/";
- ite = ele.getNamespaces();
- while (ite.hasNext()) {
- Namespace ns = (Namespace) ite.next();
+ for (Iterator ite = ele.getNamespaces(); ite.hasNext();) {
+ Namespace ns = ite.next();
String name = ns.getPrefix();
if (!name.isEmpty()) {
element.setAttributeNS(xmlns, name,
diff --git a/src/test/java/microsoft/exchange/webservices/data/property/complex/OlsonTimeZoneTest.java b/src/test/java/microsoft/exchange/webservices/data/property/complex/OlsonTimeZoneTest.java
index 3278e4b7a..9440e6d4b 100644
--- a/src/test/java/microsoft/exchange/webservices/data/property/complex/OlsonTimeZoneTest.java
+++ b/src/test/java/microsoft/exchange/webservices/data/property/complex/OlsonTimeZoneTest.java
@@ -23,19 +23,23 @@
package microsoft.exchange.webservices.data.property.complex;
-import microsoft.exchange.webservices.data.property.complex.time.OlsonTimeZoneDefinition;
-import microsoft.exchange.webservices.data.util.TimeZoneUtils;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+
import org.apache.commons.lang3.StringUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import java.util.Map;
-import java.util.TimeZone;
+import microsoft.exchange.webservices.data.property.complex.time.OlsonTimeZoneDefinition;
+import microsoft.exchange.webservices.data.util.TimeZoneUtils;
@RunWith(JUnit4.class)
public class OlsonTimeZoneTest {
+
+ private final static Set BROKEN_TZ = Set.of("America/Punta_Arenas", "Europe/Astrakhan", "Europe/Kirov", "Europe/Saratov", "Europe/Ulyanovsk");
@Test
public void testOlsonTimeZoneConversion() {
@@ -46,8 +50,9 @@ public void testOlsonTimeZoneConversion() {
final boolean america = timeZoneId.startsWith("America");
final boolean europe = timeZoneId.startsWith("Europe");
final boolean africa = timeZoneId.startsWith("Africa");
+ final boolean knownBroken = BROKEN_TZ.contains(timeZoneId);
- if (america || europe || africa) {
+ if ((america || europe || africa) && !knownBroken) {
// There are a few timezones that are out of date or don't have direct microsoft mappings
// according to the Unicode source we use so we will only test Americas, Europe and Africa.
final TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);
From 629eaf89dbf912bbea5ffa9c7e603f1734095a6b Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 5 Nov 2018 12:42:09 +0000
Subject: [PATCH 02/70] Try some CI
---
.circleci/config.yml | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
create mode 100644 .circleci/config.yml
diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 000000000..0e7ff502b
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,32 @@
+version: 2
+jobs:
+ build:
+ docker:
+ # specify the version you desire here
+ - image: circleci/openjdk:11-jdk
+
+ working_directory: ~/repo
+
+ environment:
+ # Customize the JVM maximum heap limit
+ MAVEN_OPTS: -Xmx3200m
+
+ steps:
+ - checkout
+
+ # Download and cache dependencies
+ - restore_cache:
+ keys:
+ - v1-dependencies-{{ checksum "pom.xml" }}
+ # fallback to using the latest cache if no exact match is found
+ - v1-dependencies-
+
+ - run: mvn dependency:go-offline
+
+ - save_cache:
+ paths:
+ - ~/.m2
+ key: v1-dependencies-{{ checksum "pom.xml" }}
+
+ # run tests!
+ - run: mvn test
From b877f1281f73fc9b6be48d9761209281e9f270d3 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 5 Nov 2018 13:01:06 +0000
Subject: [PATCH 03/70] Update group ID
---
pom.xml | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index d5da22f51..abc498955 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.surevine.ews-java-api
+ com.surevineews-java-api2.1-SNAPSHOT
@@ -76,8 +76,6 @@
UTF-8
- 11
- 1111
From ad6d4911d8a0177471659360d8e339ce9d034ca9 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 5 Nov 2018 13:37:25 +0000
Subject: [PATCH 04/70] Will it build?
---
.circleci/config.yml | 8 ++++++--
.circleci/settings.xml | 14 ++++++++++++++
2 files changed, 20 insertions(+), 2 deletions(-)
create mode 100644 .circleci/settings.xml
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 0e7ff502b..dcd8e1e84 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -28,5 +28,9 @@ jobs:
- ~/.m2
key: v1-dependencies-{{ checksum "pom.xml" }}
- # run tests!
- - run: mvn test
+ # build
+ - run: mvn package
+
+ # deploy
+ - run: mvn deploy -s .circleci/settings.xml -DskipTests=true -Dcheckstyle.skip=true
+
diff --git a/.circleci/settings.xml b/.circleci/settings.xml
new file mode 100644
index 000000000..d6ee1cc5b
--- /dev/null
+++ b/.circleci/settings.xml
@@ -0,0 +1,14 @@
+
+
+
+ ossrh-snapshot
+ surevine
+ ${env.MAVEN_CENTRAL_PASSWORD}
+
+
+ ossrh
+ surevine
+ ${env.MAVEN_CENTRAL_PASSWORD}
+
+
+
From 96a090da2c59e28b612eacded5c80bae727daae2 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 10:31:21 +0000
Subject: [PATCH 05/70] Revert back to Java 1.8
---
pom.xml | 2 +-
.../data/property/complex/OlsonTimeZoneTest.java | 11 ++++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index abc498955..8eb1c1331 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,7 +76,7 @@
UTF-8
- 11
+ 1.8
diff --git a/src/test/java/microsoft/exchange/webservices/data/property/complex/OlsonTimeZoneTest.java b/src/test/java/microsoft/exchange/webservices/data/property/complex/OlsonTimeZoneTest.java
index 9440e6d4b..8e86cd0bc 100644
--- a/src/test/java/microsoft/exchange/webservices/data/property/complex/OlsonTimeZoneTest.java
+++ b/src/test/java/microsoft/exchange/webservices/data/property/complex/OlsonTimeZoneTest.java
@@ -23,6 +23,7 @@
package microsoft.exchange.webservices.data.property.complex;
+import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
@@ -39,7 +40,15 @@
@RunWith(JUnit4.class)
public class OlsonTimeZoneTest {
- private final static Set BROKEN_TZ = Set.of("America/Punta_Arenas", "Europe/Astrakhan", "Europe/Kirov", "Europe/Saratov", "Europe/Ulyanovsk");
+ private final static Set BROKEN_TZ = new HashSet<>();
+
+ static {
+ BROKEN_TZ.add("America/Punta_Arenas");
+ BROKEN_TZ.add("Europe/Astrakhan");
+ BROKEN_TZ.add("Europe/Kirov");
+ BROKEN_TZ.add("Europe/Saratov");
+ BROKEN_TZ.add("Europe/Ulyanovsk");
+ }
@Test
public void testOlsonTimeZoneConversion() {
From 2ebe74e20f5d5d6813c0f2c0ff24ec96a5611bf1 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 10:31:54 +0000
Subject: [PATCH 06/70] Support reading well known folder name
- Requires Exchange 2013 enum version
---
.../core/enumeration/misc/ExchangeVersion.java | 6 ++++++
.../data/core/service/folder/Folder.java | 17 +++++++++++++++++
.../data/core/service/schema/FolderSchema.java | 10 ++++++++++
3 files changed, 33 insertions(+)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/enumeration/misc/ExchangeVersion.java b/src/main/java/microsoft/exchange/webservices/data/core/enumeration/misc/ExchangeVersion.java
index d58db3dda..e3e50d66a 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/enumeration/misc/ExchangeVersion.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/enumeration/misc/ExchangeVersion.java
@@ -50,4 +50,10 @@ public enum ExchangeVersion {
* Exchange2010_SP2.
*/
Exchange2010_SP2,
+
+ // Microsoft Exchange 2013
+ /**
+ * Exchange2013.
+ */
+ Exchange2013,
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/folder/Folder.java b/src/main/java/microsoft/exchange/webservices/data/core/service/folder/Folder.java
index 77849c1f2..2cc33c40c 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/folder/Folder.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/folder/Folder.java
@@ -62,6 +62,10 @@
import java.util.ArrayList;
import java.util.EnumSet;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* Represents a generic folder.
@@ -70,6 +74,9 @@
public class Folder extends ServiceObject {
private static final Log LOG = LogFactory.getLog(Folder.class);
+
+ private static final Map WELL_KNOWN_FOLDER_MAP = Stream.of(WellKnownFolderName.values())
+ .collect(Collectors.toMap(k -> k.toString().toLowerCase(), Function.identity()));
/**
* Initializes an unsaved local instance of {@link Folder}.
@@ -668,6 +675,16 @@ public String getDisplayName() throws ServiceLocalException {
FolderSchema.DisplayName);
}
+ /**
+ * Gets the well known folder name.
+ *
+ * @return the WellKnownFolderName
+ * @throws ServiceLocalException the service local exception
+ */
+ public WellKnownFolderName getWellKnownFolderName() throws ServiceLocalException {
+ return WELL_KNOWN_FOLDER_MAP.get(getPropertyBag().getObjectFromPropertyDefinition(FolderSchema.WellKnownFolderName));
+ }
+
/**
* Sets the display name of the folder.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/FolderSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/FolderSchema.java
index 0388baad6..dfcd4438f 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/FolderSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/FolderSchema.java
@@ -100,6 +100,11 @@ private static class FieldUris {
* The Constant PermissionSet.
*/
public final static String PermissionSet = "folder:PermissionSet";
+
+ /**
+ * The Constant DistinguishedFolderId.
+ */
+ public final static String DistinguishedFolderId = "folder:DistinguishedFolderId";
}
@@ -119,6 +124,10 @@ public FolderId createComplexProperty() {
}
);
+
+ public static final PropertyDefinition WellKnownFolderName = new StringPropertyDefinition(
+ XmlElementNames.DistinguishedFolderId, FieldUris.DistinguishedFolderId,
+ EnumSet.of(PropertyDefinitionFlags.CanSet, PropertyDefinitionFlags.CanFind), ExchangeVersion.Exchange2013);
/**
* Defines the FolderClass property.
@@ -247,5 +256,6 @@ protected void registerProperties() {
this.registerProperty(EffectiveRights);
this.registerProperty(Permissions);
this.registerProperty(UnreadCount);
+ this.registerProperty(WellKnownFolderName);
}
}
From bd74b65634815f32c02852ae371838db7261813c Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 10:33:34 +0000
Subject: [PATCH 07/70] Fix XML reading bug for Folder old IDs
---
.../exchange/webservices/data/notification/FolderEvent.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java b/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
index 93ff8fe32..66efc9509 100644
--- a/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
+++ b/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
@@ -91,8 +91,8 @@ protected void internalLoadFromXml(EwsServiceXmlReader reader)
reader.read();
- setParentFolderId(new FolderId());
- getParentFolderId().loadFromXml(reader, reader.getLocalName());
+ setOldParentFolderId(new FolderId());
+ getOldParentFolderId().loadFromXml(reader, reader.getLocalName());
break;
case Modified:
From acb5432de47a096380a9c82de5ee78e984ea891a Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 10:33:58 +0000
Subject: [PATCH 08/70] More friendly event constructors for testing
---
.../webservices/data/notification/FolderEvent.java | 13 +++++++++++++
.../webservices/data/notification/ItemEvent.java | 13 +++++++++++++
2 files changed, 26 insertions(+)
diff --git a/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java b/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
index 66efc9509..4ce18d41c 100644
--- a/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
+++ b/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
@@ -62,6 +62,19 @@ public class FolderEvent extends NotificationEvent {
protected FolderEvent(EventType eventType, Date timestamp) {
super(eventType, timestamp);
}
+
+ /**
+ * Initializes a new instance.
+ *
+ * @param eventType the event type
+ * @param the folderId of the folder that this event refers to
+ * @param the parent folder of the folder this event refers to
+ */
+ public FolderEvent(EventType eventType, FolderId folderId, FolderId parentFolderId) {
+ super(eventType, null);
+ this.folderId = folderId;
+ setParentFolderId(parentFolderId);
+ }
/**
* Load from XML.
diff --git a/src/main/java/microsoft/exchange/webservices/data/notification/ItemEvent.java b/src/main/java/microsoft/exchange/webservices/data/notification/ItemEvent.java
index 02ff5b122..53b4a4b63 100644
--- a/src/main/java/microsoft/exchange/webservices/data/notification/ItemEvent.java
+++ b/src/main/java/microsoft/exchange/webservices/data/notification/ItemEvent.java
@@ -58,6 +58,19 @@ protected ItemEvent(EventType eventType, Date timestamp) {
super(eventType, timestamp);
}
+ /**
+ * Initializes a new instance.
+ *
+ * @param eventType the event type
+ * @param the itemId of the item that this event refers to
+ * @param the parent folder of the item this event refers to
+ */
+ public ItemEvent(EventType eventType, ItemId itemId, FolderId parentFolderId) {
+ super(eventType, null);
+ this.itemId = itemId;
+ setParentFolderId(parentFolderId);
+ }
+
/**
* Load from XML.
*
From 85d917ebec6fbd66cf9f61f03530d515654643e9 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 10:34:16 +0000
Subject: [PATCH 09/70] Support injecting an external http client
---
.../data/core/ExchangeService.java | 19 ++++++++++
.../data/core/ExchangeServiceBase.java | 35 ++++++++++++++++---
2 files changed, 50 insertions(+), 4 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
index 529637769..7e4e3b3ea 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
@@ -198,6 +198,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@@ -3730,6 +3731,24 @@ public ExchangeService(ExchangeVersion requestedServerVersion) {
super(requestedServerVersion);
}
+ /**
+ * Initializes a new instance of the class,
+ * targeting the specified version of EWS and scoped to the system's current
+ * time zone.
+ *
+ * Additionally specifies an external HttpClient to use, e.g. one wired up
+ * with a thread-safe pooling http connection factory. It is perfectly
+ * acceptable for both arguments to use the same HttpClient.
+ *
+ * @param requestedServerVersion the requested server version
+ * @param httpClient external HttpClient instance to use
+ * @param httpPoolingClient external HttpClient instance to use for pooling
+ */
+ public ExchangeService(ExchangeVersion requestedServerVersion, CloseableHttpClient httpClient,
+ CloseableHttpClient httpPoolingClient) {
+ super(requestedServerVersion, httpClient, httpPoolingClient);
+ }
+
// Utilities
/**
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
index 9e383c582..036e80936 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
@@ -148,9 +148,13 @@ public abstract class ExchangeServiceBase implements Closeable {
protected CloseableHttpClient httpClient;
+ protected boolean externalHttpClient = false;
+
protected HttpClientContext httpContext;
protected CloseableHttpClient httpPoolingClient;
+
+ protected boolean externalHttpPoolingClient = false;
private int maximumPoolingConnections = 10;
@@ -176,11 +180,30 @@ protected ExchangeServiceBase() {
initializeHttpContext();
}
+ protected ExchangeServiceBase(CloseableHttpClient httpClient, CloseableHttpClient httpPoolingClient) {
+ setUseDefaultCredentials(true);
+ if (httpClient != null) {
+ externalHttpClient = true;
+ this.httpClient = httpClient;
+ }
+ if (httpPoolingClient != null) {
+ externalHttpPoolingClient = true;
+ this.httpPoolingClient = httpPoolingClient;
+ }
+ initializeHttpContext();
+ }
+
protected ExchangeServiceBase(ExchangeVersion requestedServerVersion) {
this();
this.requestedServerVersion = requestedServerVersion;
}
+ protected ExchangeServiceBase(ExchangeVersion requestedServerVersion, CloseableHttpClient httpClient,
+ CloseableHttpClient httpPoolingClient) {
+ this(httpClient, httpPoolingClient);
+ this.requestedServerVersion = requestedServerVersion;
+ }
+
protected ExchangeServiceBase(ExchangeServiceBase service, ExchangeVersion requestedServerVersion) {
this(requestedServerVersion);
this.useDefaultCredentials = service.getUseDefaultCredentials();
@@ -195,7 +218,7 @@ protected ExchangeServiceBase(ExchangeServiceBase service, ExchangeVersion reque
this.httpHeaders = service.getHttpHeaders();
}
- private void initializeHttpClient() {
+ protected void initializeHttpClient() {
Registry registry = createConnectionSocketFactoryRegistry();
HttpClientConnectionManager httpConnectionManager = new BasicHttpClientConnectionManager(registry);
AuthenticationStrategy authStrategy = new CookieProcessingTargetAuthenticationStrategy();
@@ -206,7 +229,7 @@ private void initializeHttpClient() {
.build();
}
- private void initializeHttpPoolingClient() {
+ protected void initializeHttpPoolingClient() {
Registry registry = createConnectionSocketFactoryRegistry();
PoolingHttpClientConnectionManager httpConnectionManager = new PoolingHttpClientConnectionManager(registry);
httpConnectionManager.setMaxTotal(maximumPoolingConnections);
@@ -265,8 +288,12 @@ private void initializeHttpContext() {
@Override
public void close() {
- IOUtils.closeQuietly(httpClient);
- IOUtils.closeQuietly(httpPoolingClient);
+ if (!externalHttpClient) {
+ IOUtils.closeQuietly(httpClient);
+ }
+ if (!externalHttpPoolingClient) {
+ IOUtils.closeQuietly(httpPoolingClient);
+ }
}
// Event handlers
From 7309f55a21888119ea824f8070d4788f32271e5a Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 10:44:56 +0000
Subject: [PATCH 10/70] Release version 2.1
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 8eb1c1331..39a93bfeb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.1-SNAPSHOT
+ 2.1Exchange Web Services Java APIExchange Web Services (EWS) Java API
@@ -50,7 +50,7 @@
Surevine
- http://www.surevine.com/
+ https://www.surevine.com/
From 11ddd6d8c08ebd7e64b389d41091c5262f7ef70b Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 13:49:25 +0000
Subject: [PATCH 11/70] Resume building JavaDoc
---
pom.xml | 4 +--
.../data/autodiscover/AlternateMailbox.java | 2 +-
.../core/EwsSSLProtocolSocketFactory.java | 9 ++++---
.../data/core/ExchangeService.java | 12 ++++-----
.../data/core/SimplePropertyBag.java | 6 ++---
.../exception/misc/ArgumentException.java | 2 +-
.../exception/misc/ArgumentNullException.java | 2 +-
.../data/core/request/AddDelegateRequest.java | 5 ++--
.../data/core/request/CreateRequest.java | 2 +-
.../CreateUserConfigurationRequest.java | 4 +--
.../DelegateManagementRequestBase.java | 2 +-
.../data/core/request/EmptyFolderRequest.java | 4 +--
.../data/core/request/GetDelegateRequest.java | 2 +-
.../request/GetUserConfigurationRequest.java | 7 +++--
.../core/request/ResolveNamesRequest.java | 2 +-
.../data/core/request/SendItemRequest.java | 2 +-
.../request/SyncFolderHierarchyRequest.java | 7 +++--
.../core/request/SyncFolderItemsRequest.java | 12 ++++-----
.../core/request/UpdateInboxRulesRequest.java | 2 +-
.../data/core/service/item/Conversation.java | 2 +-
.../data/core/service/item/Item.java | 4 +--
.../data/core/service/item/Task.java | 3 +--
.../core/service/schema/ContactSchema.java | 4 +--
.../service/schema/MeetingMessageSchema.java | 2 +-
.../service/schema/MeetingRequestSchema.java | 2 +-
.../core/service/schema/PostItemSchema.java | 2 +-
.../core/service/schema/PostReplySchema.java | 2 +-
.../data/credential/ExchangeCredentials.java | 4 +--
.../data/misc/CalendarActionResults.java | 3 ++-
.../data/misc/FolderIdWrapperList.java | 3 +--
.../data/misc/MapiTypeConverterMapEntry.java | 6 ++---
.../webservices/data/misc/MobilePhone.java | 2 +-
.../data/misc/NameResolutionCollection.java | 2 +-
.../data/misc/UserConfiguration.java | 4 +--
.../data/notification/FolderEvent.java | 4 +--
.../GetStreamingEventsResults.java | 6 ++---
.../data/notification/ItemEvent.java | 4 +--
.../data/property/complex/Attachment.java | 2 +-
.../property/complex/CreateRuleOperation.java | 6 ++---
.../data/property/complex/DelegateUser.java | 6 ++---
.../property/complex/DeleteRuleOperation.java | 4 +--
.../complex/DictionaryEntryProperty.java | 2 +-
.../property/complex/EmailAddressEntry.java | 4 +--
.../property/complex/ExtendedProperty.java | 7 +++--
.../property/complex/FolderIdCollection.java | 2 +-
.../data/property/complex/ItemAttachment.java | 2 +-
.../property/complex/ItemIdCollection.java | 2 +-
.../complex/OccurrenceInfoCollection.java | 2 +-
.../property/complex/PhoneNumberEntry.java | 4 +--
.../data/property/complex/RuleOperation.java | 2 +-
.../complex/RuleOperationErrorCollection.java | 2 +-
.../data/property/complex/StringList.java | 16 ++++++------
.../data/property/complex/TimeChange.java | 4 +--
.../recurrence/pattern/Recurrence.java | 26 +++++++------------
.../complex/time/TimeZoneTransitionGroup.java | 8 +++---
.../StartTimeZonePropertyDefinition.java | 4 +--
.../search/ConversationIndexedItemView.java | 8 +++---
.../data/search/FindFoldersResults.java | 2 +-
.../data/search/filter/SearchFilter.java | 14 +++++-----
.../data/security/XmlNameTable.java | 8 ------
.../data/security/XmlNodeType.java | 16 ++++++------
61 files changed, 138 insertions(+), 162 deletions(-)
diff --git a/pom.xml b/pom.xml
index 39a93bfeb..b02862ed4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -325,7 +325,7 @@
${javaLanguage.version}
-
+ org.apache.maven.pluginsmaven-source-plugin
diff --git a/src/main/java/microsoft/exchange/webservices/data/autodiscover/AlternateMailbox.java b/src/main/java/microsoft/exchange/webservices/data/autodiscover/AlternateMailbox.java
index d85adf965..36911d77a 100644
--- a/src/main/java/microsoft/exchange/webservices/data/autodiscover/AlternateMailbox.java
+++ b/src/main/java/microsoft/exchange/webservices/data/autodiscover/AlternateMailbox.java
@@ -213,7 +213,7 @@ public String getOwnerSmtpAddress() {
/**
* Sets the owner SMTP address.
*
- * @param ownerSmtpAdress the new owner SMTP address
+ * @param ownerSmtpAddress the new owner SMTP address
*/
protected void setOwnerSmtpAddress(final String ownerSmtpAddress) {
this.ownerSmtpAddress = ownerSmtpAddress;
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/EwsSSLProtocolSocketFactory.java b/src/main/java/microsoft/exchange/webservices/data/core/EwsSSLProtocolSocketFactory.java
index d4d2fefec..341276f45 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/EwsSSLProtocolSocketFactory.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/EwsSSLProtocolSocketFactory.java
@@ -44,7 +44,9 @@
* you are perfectly aware of security implications of accepting
* self-signed certificates
*
+ *
* Example of using custom protocol socket factory for a specific host:
+ *
*
* Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
*
@@ -55,10 +57,10 @@
* hc.setHost(uri.getHost(), uri.getPort(), easyhttps);
* HttpClient client = new HttpClient();
* client.executeMethod(hc, httpget);
- *
- *
+ *
*
* Example of using custom protocol socket factory per default instead of the standard one:
+ *
*
* Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
* Protocol.registerProtocol("https", easyhttps);
@@ -66,8 +68,7 @@
* HttpClient client = new HttpClient();
* GetMethod httpget = new GetMethod("https://localhost/");
* client.executeMethod(httpget);
- *
- *
+ *
*
*
* DISCLAIMER: HttpClient developers DO NOT actively support this component.
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
index 7e4e3b3ea..f4def5386 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
@@ -3056,7 +3056,7 @@ public ServiceResponseCollection deleteItemsInConversations(
* deleted). conversation was last synced (Items received after
* that dateTime will not be copied).
* @param contextFolderId The Id of the folder that contains the conversation.
- * @param isRead if set to true, conversation item are marked as read;
+ * @param isRead if set to true, conversation item are marked as read;
* otherwise they are marked as unread.
* @throws Exception
*/
@@ -3712,7 +3712,7 @@ protected Document executeDiagnosticMethod(String verb, Node parameter)
// region Constructors
/**
- * Initializes a new instance of the class,
+ * Initializes a new instance of the {@link ExchangeService} class,
* targeting the specified version of EWS and scoped to the to the system's
* current time zone.
*/
@@ -3721,7 +3721,7 @@ public ExchangeService() {
}
/**
- * Initializes a new instance of the class,
+ * Initializes a new instance of the {@link ExchangeService} class,
* targeting the specified version of EWS and scoped to the system's current
* time zone.
*
@@ -3732,7 +3732,7 @@ public ExchangeService(ExchangeVersion requestedServerVersion) {
}
/**
- * Initializes a new instance of the class,
+ * Initializes a new instance of the {@link ExchangeService} class,
* targeting the specified version of EWS and scoped to the system's current
* time zone.
*
@@ -3941,11 +3941,11 @@ public boolean getExchange2007CompatibilityMode() {
/**
* Set the flag indicating if the Exchange2007 compatibility mode is enabled.
*
- *
+ *
* In order to support E12 servers, the exchange2007CompatibilityMode property,
* set to true, can be used to indicate that we should use "Exchange2007" as the server version String
* rather than Exchange2007_SP1.
- *
+ *
*
* @param value true if the Exchange2007 compatibility mode is enabled.
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/SimplePropertyBag.java b/src/main/java/microsoft/exchange/webservices/data/core/SimplePropertyBag.java
index b6f4d2f2a..1da2269de 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/SimplePropertyBag.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/SimplePropertyBag.java
@@ -98,7 +98,7 @@ private void internalRemoveItem(TKey key) {
/**
- * Gets the added item. The added item.
+ * Gets the added item.
*
* @return the added item
*/
@@ -107,7 +107,7 @@ public Iterable getAddedItems() {
}
/**
- * Gets the removed item. The removed item.
+ * Gets the removed item.
*
* @return the removed item
*/
@@ -116,7 +116,7 @@ public Iterable getRemovedItems() {
}
/**
- * Gets the modified item. The modified item.
+ * Gets the modified item.
*
* @return the modified item
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentException.java b/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentException.java
index f2b278c31..a2211a421 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentException.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentException.java
@@ -69,7 +69,7 @@ public ArgumentException(String s, String paramName) {
/**
* Constructs a new exception with the specified detail message and cause.
- *
+ *
*
Note that the detail message associated with cause is not automatically
* incorporated in this exception's detail message.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentNullException.java b/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentNullException.java
index 1bc9c18bd..68d046ca2 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentNullException.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentNullException.java
@@ -46,7 +46,7 @@ public ArgumentNullException(String s, String paramName) {
/**
* Constructs a new exception with the specified detail message and cause.
- *
+ *
*
Note that the detail message associated with cause is not automatically
* incorporated in this exception's detail message.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/AddDelegateRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/AddDelegateRequest.java
index fac5d8f3f..fb0f73cec 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/AddDelegateRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/AddDelegateRequest.java
@@ -150,8 +150,7 @@ protected ExchangeVersion getMinimumRequiredServerVersion() {
}
/**
- * Gets the meeting request delivery scope. The meeting
- * request delivery scope.
+ * Gets the meeting request delivery scope.
*
* @return the meeting request delivery scope
*/
@@ -170,7 +169,7 @@ public void setMeetingRequestsDeliveryScope(
}
/**
- * Gets the delegate users. The delegate users.
+ * Gets the delegate users.
*
* @return the delegate users
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/CreateRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/CreateRequest.java
index a3601f1f3..bc5447a96 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/CreateRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/CreateRequest.java
@@ -145,7 +145,7 @@ protected Iterable getObjects() {
/**
* Sets the service objects.
*
- * @param value Iterator
+ * @param value
*/
protected void setObjects(Collection value) {
this.objects = value;
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/CreateUserConfigurationRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/CreateUserConfigurationRequest.java
index 7db2fcfaa..214cd70d0 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/CreateUserConfigurationRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/CreateUserConfigurationRequest.java
@@ -132,8 +132,8 @@ protected void writeElementsToXml(EwsServiceXmlWriter writer)
}
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link CreateUserConfigurationRequest}
+ * class.
*
* @param service The service.
* @throws Exception
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/DelegateManagementRequestBase.java b/src/main/java/microsoft/exchange/webservices/data/core/request/DelegateManagementRequestBase.java
index 257493fa4..802aade69 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/DelegateManagementRequestBase.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/DelegateManagementRequestBase.java
@@ -113,7 +113,7 @@ public TResponse execute() throws Exception {
}
/**
- * Gets the mailbox. The mailbox.
+ * Gets the mailbox.
*
* @return the mailbox
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/EmptyFolderRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/EmptyFolderRequest.java
index 064107ea2..b64110bf9 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/EmptyFolderRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/EmptyFolderRequest.java
@@ -171,7 +171,7 @@ public FolderIdWrapperList getFolderIds() {
/**
* Gets a value indicating whether empty folder should also delete sub folder.
*
- * @value true if empty folder should also delete sub folder, otherwise false.
+ * @return true if empty folder should also delete sub folder, otherwise false.
*/
protected boolean getDeleteSubFolders() {
return deleteSubFolders;
@@ -179,8 +179,6 @@ protected boolean getDeleteSubFolders() {
/**
* Sets a value indicating whether empty folder should also delete sub folder.
- *
- * @value true if empty folder should also delete sub folder, otherwise false.
*/
public void setDeleteSubFolders(boolean value) {
this.deleteSubFolders = value;
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/GetDelegateRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/GetDelegateRequest.java
index 8d1079147..cd0ce26e4 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/GetDelegateRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/GetDelegateRequest.java
@@ -140,7 +140,7 @@ protected ExchangeVersion getMinimumRequiredServerVersion() {
}
/**
- * Gets the user ids. The user ids.
+ * Gets the user ids.
*
* @return the user ids
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/GetUserConfigurationRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/GetUserConfigurationRequest.java
index cc983b332..a810a693c 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/GetUserConfigurationRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/GetUserConfigurationRequest.java
@@ -186,7 +186,7 @@ public GetUserConfigurationRequest(ExchangeService service)
}
/**
- * Gets the name. The name.
+ * Gets the name.
*
* @return the name
*/
@@ -204,7 +204,7 @@ public void setName(String name) {
}
/**
- * Gets the parent folder Id. The parent folder Id.
+ * Gets the parent folder Id.
*
* @return the parent folder id
*/
@@ -222,8 +222,7 @@ public void setParentFolderId(FolderId parentFolderId) {
}
/**
- * Gets the user configuration. The user
- * configuration.
+ * Gets the user configuration.
*
* @return the user configuration
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/ResolveNamesRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/ResolveNamesRequest.java
index 7b1fd1060..4b2f035fe 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/ResolveNamesRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/ResolveNamesRequest.java
@@ -311,7 +311,7 @@ public FolderIdWrapperList getParentFolderIds() {
/**
* Gets or sets the PropertySet for Contact Data
- *
+ *
* The PropertySet
*/
public void setContactDataPropertySet(PropertySet propertySet) {
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/SendItemRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/SendItemRequest.java
index 7a7291efa..848910b15 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/SendItemRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/SendItemRequest.java
@@ -184,7 +184,7 @@ public SendItemRequest(ExchangeService service, ServiceErrorHandling errorHandli
}
/**
- * Gets the item. The item.
+ * Gets the item.
*
* @return the item
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/SyncFolderHierarchyRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/SyncFolderHierarchyRequest.java
index dbd5e6ebf..a4e5494a1 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/SyncFolderHierarchyRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/SyncFolderHierarchyRequest.java
@@ -170,7 +170,7 @@ protected ExchangeVersion getMinimumRequiredServerVersion() {
}
/**
- * Gets or sets the property set. The property set.
+ * Gets or sets the property set.
*
* @return the property set
*/
@@ -188,7 +188,7 @@ public void setPropertySet(PropertySet value) {
}
/**
- * Gets or sets the property set. The property set.
+ * Gets or sets the property set.
*
* @return the sync folder id
*/
@@ -206,8 +206,7 @@ public void setSyncFolderId(FolderId value) {
}
/**
- * Gets or sets the state of the sync. The state of the
- * sync.
+ * Gets or sets the state of the sync.
*
* @return the sync state
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/SyncFolderItemsRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/SyncFolderItemsRequest.java
index 42814b384..88b8c697c 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/SyncFolderItemsRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/SyncFolderItemsRequest.java
@@ -211,7 +211,7 @@ protected ExchangeVersion getMinimumRequiredServerVersion() {
}
/**
- * Gets or sets the property set. The property set.
+ * Gets or sets the property set.
*
* @return the property set
*/
@@ -229,7 +229,7 @@ public void setPropertySet(PropertySet propertySet) {
}
/**
- * Gets the sync folder id. The sync folder id.
+ * Gets the sync folder id.
*
* @return the sync folder id
*/
@@ -247,8 +247,7 @@ public void setSyncFolderId(FolderId syncFolderId) {
}
/**
- * Gets the scope of the sync. The scope of the
- * sync.
+ * Gets the scope of the sync.
*
* @return the sync scope
*/
@@ -266,8 +265,7 @@ public void setSyncScope(SyncFolderItemsScope syncScope) {
}
/**
- * Gets the state of the sync. The state of the
- * sync.
+ * Gets the state of the sync.
*
* @return the sync state
*/
@@ -285,7 +283,7 @@ public void setSyncState(String syncState) {
}
/**
- * Gets the list of ignored item ids. The ignored item ids.
+ * Gets the list of ignored item ids.
*
* @return the ignored item ids
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/UpdateInboxRulesRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/UpdateInboxRulesRequest.java
index bba576eb2..91c234077 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/UpdateInboxRulesRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/UpdateInboxRulesRequest.java
@@ -56,7 +56,7 @@ public final class UpdateInboxRulesRequest extends SimpleServiceRequestBase class.
+ * {@link UpdateInboxRulesRequest} class.
*
* @param service The service.
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Conversation.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Conversation.java
index eb70e10f7..d3f30aa0f 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Conversation.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Conversation.java
@@ -416,7 +416,7 @@ public void copyItemsInConversation(
* belong to in order for their read state to
* be set. If contextFolderId is null, the read states of
* item across the entire mailbox are set.
- * @param isRead if set to true, conversation item are marked as read;
+ * @param isRead if set to true, conversation item are marked as read;
* otherwise they are marked as unread.
* @throws Exception
* @throws IndexOutOfBoundsException
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Item.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Item.java
index bf23473cf..4cdab42e6 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Item.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Item.java
@@ -83,8 +83,8 @@ public class Item extends ServiceObject {
private ItemAttachment parentAttachment;
/**
- * Initializes an unsaved local instance of . To bind to
- * an existing item, use Item.Bind() instead.
+ * Initializes an unsaved local instance of {@link Item}. To bind to
+ * an existing item, use {@link Item#bind(ExchangeService, ItemId)} instead.
*
* @param service the service
* @throws Exception the exception
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Task.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Task.java
index 9183ded03..9c0f4ab08 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Task.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Task.java
@@ -582,8 +582,7 @@ public void setTotalWork(Integer value) throws Exception {
/**
* Gets the default setting for how to treat affected task occurrences on
- * Delete. AffectedTaskOccurrence.AllOccurrences: All affected Task
- * occurrences will be deleted.
+ * Delete.
*
* @return the default affected task occurrences
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/ContactSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/ContactSchema.java
index da6ba708d..be727592b 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/ContactSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/ContactSchema.java
@@ -527,7 +527,7 @@ public PhoneNumberDictionary createComplexProperty() {
/**
* Defines the BusinessHomePage property.
- *
+ *
* Defined as anyURI in the EWS schema. String is fine here.
*/
public static final PropertyDefinition BusinessHomePage =
@@ -1193,7 +1193,7 @@ public EmailAddressCollection createComplexProperty()
/**
* Registers property.
- *
+ *
* IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN SCHEMA ORDER (i.e. the
* same order as they are defined in types.xsd)
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingMessageSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingMessageSchema.java
index 21b927459..eca224b8d 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingMessageSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingMessageSchema.java
@@ -161,7 +161,7 @@ public static MeetingMessageSchema getInstance() {
/**
* Registers property.
- *
+ *
* IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN SCHEMA ORDER (i.e. the
* same order as they are defined in types.xsd)
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingRequestSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingRequestSchema.java
index bca9b18b6..9052c8486 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingRequestSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingRequestSchema.java
@@ -315,7 +315,7 @@ private static interface FieldUris {
/**
* Registers property.
- *
+ *
* IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN SCHEMA ORDER (i.e. the
* same order as they are defined in types.xsd)
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/PostItemSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/PostItemSchema.java
index 4a31ac7e4..d157cd62c 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/PostItemSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/PostItemSchema.java
@@ -106,7 +106,7 @@ private static interface FieldUris {
/**
* Registers property.
- *
+ *
* IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN SCHEMA ORDER (i.e. the
* same order as they are defined in types.xsd)
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/PostReplySchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/PostReplySchema.java
index 97c82498e..8e2bb6130 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/PostReplySchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/PostReplySchema.java
@@ -36,7 +36,7 @@ public final class PostReplySchema extends ServiceObjectSchema {
/**
* Registers property.
- *
+ *
* IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN SCHEMA ORDER (i.e. the
* same order as they are defined in types.xsd)
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/credential/ExchangeCredentials.java b/src/main/java/microsoft/exchange/webservices/data/credential/ExchangeCredentials.java
index 8c052645c..60af44fef 100644
--- a/src/main/java/microsoft/exchange/webservices/data/credential/ExchangeCredentials.java
+++ b/src/main/java/microsoft/exchange/webservices/data/credential/ExchangeCredentials.java
@@ -39,9 +39,7 @@
public abstract class ExchangeCredentials {
/**
- * Performs an implicit conversion from to . This
+ * Performs an implicit conversion to {@link ExchangeCredentials}. This
* allows a NetworkCredential object to be implictly converted to an
* ExchangeCredential which is useful when setting credential on an
* ExchangeService.
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/CalendarActionResults.java b/src/main/java/microsoft/exchange/webservices/data/misc/CalendarActionResults.java
index c1afe48a0..3b02f86a0 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/CalendarActionResults.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/CalendarActionResults.java
@@ -74,7 +74,7 @@ public CalendarActionResults(Iterable items) {
/**
* Gets the meeting that was accepted, tentatively accepted or declined.
- *
+ *
* When a meeting is accepted or tentatively accepted via an Appointment
* object, EWS recreates the meeting, and Appointment represents that new
* version. When a meeting is accepted or tentatively accepted via a
@@ -87,6 +87,7 @@ public CalendarActionResults(Iterable items) {
* Appointment represents that meeting. When a meeting is declined via
* either an Appointment or a MeetingRequest object from the Deleted Items
* folder, Appointment is null.
+ *
*
* @return appointment
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapperList.java b/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapperList.java
index 5496fa522..45c844a06 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapperList.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapperList.java
@@ -123,8 +123,7 @@ public int getCount() {
}
/**
- * Gets the at
+ * Gets the {@link AbstractFolderIdWrapper} at
* the specified index.
*
* @param i the i
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/MapiTypeConverterMapEntry.java b/src/main/java/microsoft/exchange/webservices/data/misc/MapiTypeConverterMapEntry.java
index 6ca1f0228..ab6c32c82 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/MapiTypeConverterMapEntry.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/MapiTypeConverterMapEntry.java
@@ -104,7 +104,7 @@ public Map, Object> createInstance() {
*
* @param type The type. y default, converting a type to string is done by
* calling value.ToString. Instances can override this behavior.
- *
+ *
* By default, converting a string to the appropriate value type
* is done by calling Convert.ChangeType Instances may override
* this behavior.
@@ -120,7 +120,7 @@ public MapiTypeConverterMapEntry(Class> type) {
/**
* Change value to a value of compatible type.
- *
+ *
* The type of a simple value should match exactly or be convertible to the
* appropriate type. An array value has to be a single dimension (rank),
* contain at least one value and contain elements that exactly match the
@@ -166,7 +166,7 @@ public Object changeType(Object value) throws Exception {
/**
* Converts a string to value consistent with type.
- *
+ *
* For array types, this method is called for each array element.
*
* @param stringValue String to convert to a value.
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/MobilePhone.java b/src/main/java/microsoft/exchange/webservices/data/misc/MobilePhone.java
index 6ec0b2d6d..cb425b02a 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/MobilePhone.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/MobilePhone.java
@@ -42,7 +42,7 @@ public final class MobilePhone implements ISelfValidate {
private String phoneNumber;
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link MobilePhone} class.
*/
public MobilePhone() {
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/NameResolutionCollection.java b/src/main/java/microsoft/exchange/webservices/data/misc/NameResolutionCollection.java
index bc62daf3d..d9db598f6 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/NameResolutionCollection.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/NameResolutionCollection.java
@@ -91,7 +91,7 @@ public void loadFromXml(EwsServiceXmlReader reader) throws Exception {
}
/**
- * Gets the session. The session.
+ * Gets the session.
*
* @return the session
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/UserConfiguration.java b/src/main/java/microsoft/exchange/webservices/data/misc/UserConfiguration.java
index 24cc11512..b8c488ae0 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/UserConfiguration.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/UserConfiguration.java
@@ -132,7 +132,7 @@ public class UserConfiguration {
private boolean isNew = false;
/**
- * Initializes a new instance of class.
+ * Initializes a new instance of {@link UserConfiguration} class.
*
* @param service The service to which the user configuration is bound.
* @throws Exception the exception
@@ -194,7 +194,7 @@ public static void writeUserConfigurationNameToXml(EwsServiceXmlWriter writer, X
}
/**
- * Initializes a new instance of class.
+ * Initializes a new instance of {@link UserConfiguration} class.
*
* @param service The service to which the user configuration is bound.
* @param requestedProperties The property requested for this user configuration.
diff --git a/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java b/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
index 4ce18d41c..6eed6ae79 100644
--- a/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
+++ b/src/main/java/microsoft/exchange/webservices/data/notification/FolderEvent.java
@@ -67,8 +67,8 @@ protected FolderEvent(EventType eventType, Date timestamp) {
* Initializes a new instance.
*
* @param eventType the event type
- * @param the folderId of the folder that this event refers to
- * @param the parent folder of the folder this event refers to
+ * @param folderId of the folder that this event refers to
+ * @param parentFolderId of the folder this event refers to
*/
public FolderEvent(EventType eventType, FolderId folderId, FolderId parentFolderId) {
super(eventType, null);
diff --git a/src/main/java/microsoft/exchange/webservices/data/notification/GetStreamingEventsResults.java b/src/main/java/microsoft/exchange/webservices/data/notification/GetStreamingEventsResults.java
index 8cf433fb3..bafb82462 100644
--- a/src/main/java/microsoft/exchange/webservices/data/notification/GetStreamingEventsResults.java
+++ b/src/main/java/microsoft/exchange/webservices/data/notification/GetStreamingEventsResults.java
@@ -60,8 +60,8 @@ protected static class NotificationGroup {
new ArrayList();
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link GetStreamingEventsResults}
+ * class.
*/
public GetStreamingEventsResults() {
}
@@ -155,7 +155,7 @@ private void loadNotificationEventFromXml(
/**
* Gets the notification collection.
*
- * @value The notification collection.
+ * @return The notification collection.
*/
protected Collection getNotifications() {
return this.events;
diff --git a/src/main/java/microsoft/exchange/webservices/data/notification/ItemEvent.java b/src/main/java/microsoft/exchange/webservices/data/notification/ItemEvent.java
index 53b4a4b63..77c8e5a34 100644
--- a/src/main/java/microsoft/exchange/webservices/data/notification/ItemEvent.java
+++ b/src/main/java/microsoft/exchange/webservices/data/notification/ItemEvent.java
@@ -62,8 +62,8 @@ protected ItemEvent(EventType eventType, Date timestamp) {
* Initializes a new instance.
*
* @param eventType the event type
- * @param the itemId of the item that this event refers to
- * @param the parent folder of the item this event refers to
+ * @param itemId of the item that this event refers to
+ * @param parentFolderId of the item this event refers to
*/
public ItemEvent(EventType eventType, ItemId itemId, FolderId parentFolderId) {
super(eventType, null);
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/Attachment.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/Attachment.java
index 493b60b2b..1f234cb34 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/Attachment.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/Attachment.java
@@ -112,7 +112,7 @@ protected void throwIfThisIsNotNew() {
/**
* Sets value of field.
- *
+ *
* We override the base implementation. Attachments cannot be modified so
* any attempts the change a property on an existing attachment is an error.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/CreateRuleOperation.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/CreateRuleOperation.java
index c47c9823a..f0dd0211f 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/CreateRuleOperation.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/CreateRuleOperation.java
@@ -39,8 +39,8 @@ public final class CreateRuleOperation extends RuleOperation {
private Rule rule;
/**
- * Initializes a new instance of the
- * class.
+ * Initializes a new instance of the {@link CreateRuleOperation}
+ * class.
*/
public CreateRuleOperation() {
super();
@@ -48,7 +48,7 @@ public CreateRuleOperation() {
/**
* Initializes a new instance of the
- * class.
+ * {@link CreateRuleOperation} class.
*
* @param rule The inbox rule to create.
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/DelegateUser.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/DelegateUser.java
index 1f283cde0..3679bab35 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/DelegateUser.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/DelegateUser.java
@@ -56,7 +56,7 @@ public final class DelegateUser extends ComplexProperty {
private boolean viewPrivateItems;
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link DelegateUser} class.
*/
public DelegateUser() {
super();
@@ -65,7 +65,7 @@ public DelegateUser() {
}
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link DelegateUser} class.
*
* @param primarySmtpAddress the primary smtp address
*/
@@ -75,7 +75,7 @@ public DelegateUser(String primarySmtpAddress) {
}
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link DelegateUser} class.
*
* @param standardUser the standard user
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/DeleteRuleOperation.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/DeleteRuleOperation.java
index 800c1427d..9fdce4192 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/DeleteRuleOperation.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/DeleteRuleOperation.java
@@ -42,7 +42,7 @@ public final class DeleteRuleOperation extends RuleOperation {
/**
* Initializes a new instance of the
- * class.
+ * {@link DeleteRuleOperation} class.
*/
public DeleteRuleOperation() {
super();
@@ -50,7 +50,7 @@ public DeleteRuleOperation() {
/**
* Initializes a new instance of the
- * class.
+ * {@link DeleteRuleOperation} class.
*
* @param ruleId The Id of the inbox rule to delete.
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/DictionaryEntryProperty.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/DictionaryEntryProperty.java
index 008e5c334..49b8e6224 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/DictionaryEntryProperty.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/DictionaryEntryProperty.java
@@ -35,7 +35,7 @@
/**
* Represents an entry of a DictionaryProperty object.
- *
+ *
* All descendants of DictionaryEntryProperty must implement a parameterless
* constructor. That constructor does not have to be public. That constructor
* does not have to be public.
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/EmailAddressEntry.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/EmailAddressEntry.java
index c91b581dd..ac1b3ba36 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/EmailAddressEntry.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/EmailAddressEntry.java
@@ -48,7 +48,7 @@ public final class EmailAddressEntry extends DictionaryEntryProperty class.
+ * Initializes a new instance of the {@link EmailAddressEntry} class.
*/
protected EmailAddressEntry() {
super(EmailAddressKey.class);
@@ -57,7 +57,7 @@ protected EmailAddressEntry() {
}
/**
- * Initializes a new instance of the "EmailAddressEntry" class.
+ * Initializes a new instance of the {@link EmailAddressEntry} class.
*
* @param key The key.
* @param emailAddress The email address.
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/ExtendedProperty.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/ExtendedProperty.java
index 14ec132a3..c3d181cd8 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/ExtendedProperty.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/ExtendedProperty.java
@@ -205,10 +205,9 @@ private String getStringValue() {
}
/**
- * Determines whether the specified is equal
- * to the current true if the specified is equal to the current
+ * Determines whether the specified {@link Object} is equal
+ * to the current {@link Object}. true if the specified
+ * {@link Object} is equal to the current {@link Object}
*
* @param obj the obj
* @return boolean
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/FolderIdCollection.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/FolderIdCollection.java
index f9fc4c0e3..fccfa771e 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/FolderIdCollection.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/FolderIdCollection.java
@@ -35,7 +35,7 @@
public final class FolderIdCollection extends ComplexPropertyCollection {
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link FolderIdCollection} class.
*/
protected FolderIdCollection() {
super();
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemAttachment.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemAttachment.java
index e8f0040ee..201f93c80 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemAttachment.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemAttachment.java
@@ -137,7 +137,7 @@ public boolean tryReadElementFromXml(EwsServiceXmlReader reader)
* For ItemAttachment, AttachmentId and Item should be patched.
*
* @param reader The reader.
- *
+ *
* True if element was read.
*/
public boolean tryReadElementFromXmlToPatch(EwsServiceXmlReader reader) throws Exception {
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemIdCollection.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemIdCollection.java
index c23e5c04e..d123a68ea 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemIdCollection.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemIdCollection.java
@@ -28,7 +28,7 @@
*/
public final class ItemIdCollection extends ComplexPropertyCollection {
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link ItemIdCollection} class.
*/
public ItemIdCollection() {
super();
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/OccurrenceInfoCollection.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/OccurrenceInfoCollection.java
index 03f417055..e436219ef 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/OccurrenceInfoCollection.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/OccurrenceInfoCollection.java
@@ -34,7 +34,7 @@
public final class OccurrenceInfoCollection extends ComplexPropertyCollection {
/**
- * Initializes a new instance of the
+ * Initializes a new instance of the {@link OccurrenceInfoCollection}
* class.
*/
public OccurrenceInfoCollection() {
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/PhoneNumberEntry.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/PhoneNumberEntry.java
index ae4736684..2c30d2b43 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/PhoneNumberEntry.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/PhoneNumberEntry.java
@@ -43,14 +43,14 @@ public final class PhoneNumberEntry extends DictionaryEntryProperty class.
+ * Initializes a new instance of the {@link PhoneNumberEntry} class.
*
* @param key The key.
* @param phoneNumber The phone number.
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/RuleOperation.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/RuleOperation.java
index c8ee0167a..030751b08 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/RuleOperation.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/RuleOperation.java
@@ -30,7 +30,7 @@ public abstract class RuleOperation extends ComplexProperty {
protected String xmlElementName;
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link RuleOperation} class.
*/
protected RuleOperation() {
super();
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/RuleOperationErrorCollection.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/RuleOperationErrorCollection.java
index e7a04ece1..5b27694e7 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/RuleOperationErrorCollection.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/RuleOperationErrorCollection.java
@@ -32,7 +32,7 @@ public final class RuleOperationErrorCollection extends ComplexPropertyCollectio
/**
* Initializes a new instance of the
- * class.
+ * {@link RuleOperationErrorCollection} class.
*/
public RuleOperationErrorCollection() {
super();
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/StringList.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/StringList.java
index 6268d3fab..e0d762057 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/StringList.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/StringList.java
@@ -52,13 +52,13 @@ public class StringList extends ComplexProperty implements Iterable {
private String itemXmlElementName = XmlElementNames.String;
/**
- * Initializes a new instance of the "StringList" class.
+ * Initializes a new instance of the {@link StringList} class.
*/
public StringList() {
}
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link StringList} class.
*
* @param strings The strings.
*/
@@ -199,17 +199,17 @@ public void clearList() {
* this object. The result should be a concise but informative
* representation that is easy for a person to read. It is recommended that
* all subclasses override this method.
- *
+ *
* The toString method for class Object returns a
* string consisting of the name of the class of which the object is an
* instance, the at-sign character `@', and the unsigned
* hexadecimal representation of the hash code of the object. In other
* words, this method returns a string equal to the value of:
*
* @return a string representation of the object.
@@ -274,7 +274,7 @@ public Iterator getIterator() {
/**
* Indicates whether some other object is "equal to" this one.
- *
+ *
* The equals method implements an equivalence relation on
* non-null object references:
*
@@ -297,14 +297,14 @@ public Iterator getIterator() {
*
For any non-null reference value x,
* x.equals(null) should return false.
*
- *
+ *
* The equals method for class Object implements the
* most discriminating possible equivalence relation on objects; that is,
* for any non-null reference values x and y, this
* method returns true if and only if x and
* y refer to the same object (x == y has the
* value true).
- *
+ *
* Note that it is generally necessary to override the hashCode
* method whenever this method is overridden, so as to maintain the general
* contract for the hashCode method, which states that equal
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/TimeChange.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/TimeChange.java
index b1186cf73..9e3ab173b 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/TimeChange.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/TimeChange.java
@@ -75,14 +75,14 @@ public final class TimeChange extends ComplexProperty {
private TimeChangeRecurrence recurrence;
/**
- * Initializes a new instance of the "TimeChange" class.
+ * Initializes a new instance of the {@link TimeChange} class.
*/
public TimeChange() {
super();
}
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link TimeChange} class.
*
* @param offset The offset since the beginning of the year when the change
* occurs.
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/recurrence/pattern/Recurrence.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/recurrence/pattern/Recurrence.java
index 0eec2d065..a7d8f9a0d 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/recurrence/pattern/Recurrence.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/recurrence/pattern/Recurrence.java
@@ -638,8 +638,7 @@ public MonthlyRegenerationPattern(Date startDate, int interval)
}
/**
- * Gets the name of the XML element. The name of the XML
- * element.
+ * Gets the name of the XML element.
*
* @return the xml element name
*/
@@ -650,8 +649,8 @@ public String getXmlElementName() {
/**
* Gets a value indicating whether this instance is regeneration
- * pattern. true if this instance is regeneration
- * pattern; otherwise, false.
+ * pattern. true if this instance is regeneration
+ * pattern; otherwise, false.
*
* @return true, if is regeneration pattern
*/
@@ -860,8 +859,7 @@ public final static class RelativeYearlyPattern extends Recurrence {
private Month month;
/**
- * Gets the name of the XML element. The name of the XML
- * element.
+ * Gets the name of the XML element.
*
* @return the xml element name
*/
@@ -1111,8 +1109,7 @@ private void daysOfTheWeekChanged(ComplexProperty complexProperty) {
}
/**
- * Gets the name of the XML element. The name of the XML
- * element.
+ * Gets the name of the XML element.
*
* @return the xml element name
*/
@@ -1262,8 +1259,7 @@ public WeeklyRegenerationPattern(Date startDate, int interval)
}
/**
- * Gets the name of the XML element. The name of the XML
- * element.
+ * Gets the name of the XML element.
*
* @return the xml element name
*/
@@ -1274,8 +1270,8 @@ public String getXmlElementName() {
/**
* Gets a value indicating whether this instance is regeneration
- * pattern. true if this instance is regeneration
- * pattern; otherwise, false.
+ * pattern. true if this instance is regeneration
+ * pattern; otherwise, false.
*
* @return true, if is regeneration pattern
*/
@@ -1324,8 +1320,7 @@ public YearlyPattern(Date startDate, Month month, int dayOfMonth) {
}
/**
- * Gets the name of the XML element. The name of the XML
- * element.
+ * Gets the name of the XML element.
*
* @return the xml element name
*/
@@ -1468,8 +1463,7 @@ public final static class YearlyRegenerationPattern extends
IntervalPattern {
/**
- * Gets the name of the XML element. The name of the XML
- * element.
+ * Gets the name of the XML element.
*
* @return the xml element name
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/time/TimeZoneTransitionGroup.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/time/TimeZoneTransitionGroup.java
index e918486cd..db2593ab1 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/time/TimeZoneTransitionGroup.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/time/TimeZoneTransitionGroup.java
@@ -282,8 +282,8 @@ protected void setDaylightDisplayName(String daylightDisplayName) {
/**
* Gets a value indicating whether the custom time zone should have a
- * daylight period. true if the custom time zone should
- * have a daylight period; otherwise, false.
+ * daylight period. true if the custom time zone should
+ * have a daylight period; otherwise, false.
*
* @return the checks for daylight period
*/
@@ -295,8 +295,8 @@ protected boolean getHasDaylightPeriod() {
/**
* Gets a value indicating whether this group contains a transition to the
- * Daylight period. true if this group contains a transition
- * to daylight; otherwise, false.
+ * Daylight period. true if this group contains a transition
+ * to daylight; otherwise, false.
*
* @return the supports daylight
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/definition/StartTimeZonePropertyDefinition.java b/src/main/java/microsoft/exchange/webservices/data/property/definition/StartTimeZonePropertyDefinition.java
index ed0d37c85..5ce302402 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/definition/StartTimeZonePropertyDefinition.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/definition/StartTimeZonePropertyDefinition.java
@@ -117,8 +117,8 @@ public void writeToXml(EwsServiceXmlWriter writer)
*
* @param flag The flag.
* @param version Requested version.
- * @return true if the specified
- * flag is set; otherwise, false.
+ * @return true if the specified
+ * flag is set; otherwise, false.
*/
@Override public boolean hasFlag(PropertyDefinitionFlags flag, ExchangeVersion version) {
if (version != null && (version == ExchangeVersion.Exchange2007_SP1)) {
diff --git a/src/main/java/microsoft/exchange/webservices/data/search/ConversationIndexedItemView.java b/src/main/java/microsoft/exchange/webservices/data/search/ConversationIndexedItemView.java
index 1c14b8e7a..bf6319ff3 100644
--- a/src/main/java/microsoft/exchange/webservices/data/search/ConversationIndexedItemView.java
+++ b/src/main/java/microsoft/exchange/webservices/data/search/ConversationIndexedItemView.java
@@ -46,7 +46,7 @@ public final class ConversationIndexedItemView extends PagedView {
/**
* Gets the type of service object this view applies to.
*
- * @return A ServiceObjectType value.
+ * @return A {@link ServiceObjectType} value.
*/
@Override
protected ServiceObjectType getServiceObjectType() {
@@ -120,7 +120,7 @@ public void writeToXml(EwsServiceXmlWriter writer) throws Exception {
}
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link ItemView} class.
*
* @param pageSize The maximum number of elements the search operation should return.
*/
@@ -129,7 +129,7 @@ public ConversationIndexedItemView(int pageSize) {
}
/**
- * Initializes a new instance of the ItemView class.
+ * Initializes a new instance of the {@link ItemView} class.
*
* @param pageSize The maximum number of elements the search operation should return.
* @param offset The offset of the view from the base point.
@@ -140,7 +140,7 @@ public ConversationIndexedItemView(int pageSize, int offset) {
}
/**
- * Initializes a new instance of the ItemView class.
+ * Initializes a new instance of the {@link ItemView} class.
*
* @param pageSize The maximum number of elements the search operation should return.
* @param offset The offset of the view from the base point.
diff --git a/src/main/java/microsoft/exchange/webservices/data/search/FindFoldersResults.java b/src/main/java/microsoft/exchange/webservices/data/search/FindFoldersResults.java
index 463112713..0227a1cc3 100644
--- a/src/main/java/microsoft/exchange/webservices/data/search/FindFoldersResults.java
+++ b/src/main/java/microsoft/exchange/webservices/data/search/FindFoldersResults.java
@@ -54,7 +54,7 @@ public final class FindFoldersResults implements Iterable {
private ArrayList folders = new ArrayList();
/**
- * Initializes a new instance of the class.
+ * Initializes a new instance of the {@link FindFoldersResults} class.
*/
public FindFoldersResults() {
diff --git a/src/main/java/microsoft/exchange/webservices/data/search/filter/SearchFilter.java b/src/main/java/microsoft/exchange/webservices/data/search/filter/SearchFilter.java
index 2bd0d0f26..2ac813340 100644
--- a/src/main/java/microsoft/exchange/webservices/data/search/filter/SearchFilter.java
+++ b/src/main/java/microsoft/exchange/webservices/data/search/filter/SearchFilter.java
@@ -1363,10 +1363,10 @@ public void writeElementsToXml(EwsServiceXmlWriter writer)
/**
* Adds a search filter of any type to the collection.
*
- * @param searchFilter >The search filter to add. Available search filter classes
- * include SearchFilter.IsEqualTo,
- * SearchFilter.ContainsSubstring and
- * SearchFilter.SearchFilterCollection.
+ * @param searchFilter The search filter to add. Available search filter classes
+ * include {@link IsEqualTo},
+ * {@link ContainsSubstring} and
+ * {@link SearchFilterCollection}
*/
public void add(SearchFilter searchFilter) {
if (searchFilter == null) {
@@ -1381,9 +1381,9 @@ public void add(SearchFilter searchFilter) {
* Adds multiple search filter to the collection.
*
* @param searchFilters The search filter to add. Available search filter classes
- * include SearchFilter.IsEqualTo,
- * SearchFilter.ContainsSubstring and
- * SearchFilter.SearchFilterCollection
+ * include {@link IsEqualTo},
+ * {@link ContainsSubstring} and
+ * {@link SearchFilterCollection}
*/
public void addRange(Iterable searchFilters) {
if (searchFilters == null) {
diff --git a/src/main/java/microsoft/exchange/webservices/data/security/XmlNameTable.java b/src/main/java/microsoft/exchange/webservices/data/security/XmlNameTable.java
index f4ee0d988..10223c13c 100644
--- a/src/main/java/microsoft/exchange/webservices/data/security/XmlNameTable.java
+++ b/src/main/java/microsoft/exchange/webservices/data/security/XmlNameTable.java
@@ -56,10 +56,6 @@ protected XmlNameTable() {
* @param length The number of characters in the name.
* @return The new atomized String or the existing one if it already exists.
* If length is zero, String.Empty is returned
- * @throws ArgumentOutOfRangeException 0 > offset -or- offset >= array.Length -or- length >
- * array.Length The above conditions do not cause an exception
- * to be thrown if length =0.
- * @throws ArgumentOutOfRangeException length < 0.
*/
public abstract String Add(char[] array, int offset, int length);
@@ -85,10 +81,6 @@ protected XmlNameTable() {
* @param length The number of characters in the name.
* @return The atomized String or null if the String has not already been
* atomized. If length is zero, String.Empty is returned
- * @throws ArgumentOutOfRangeException 0 > offset -or- offset >= array.Length -or- length >
- * array.Length The above conditions do not cause an exception
- * to be thrown if length =0.
- * @throws ArgumentOutOfRangeException length < 0.
*/
public abstract String Get(char[] array, int offset, int length);
diff --git a/src/main/java/microsoft/exchange/webservices/data/security/XmlNodeType.java b/src/main/java/microsoft/exchange/webservices/data/security/XmlNodeType.java
index 83b6179ee..799bb71d2 100644
--- a/src/main/java/microsoft/exchange/webservices/data/security/XmlNodeType.java
+++ b/src/main/java/microsoft/exchange/webservices/data/security/XmlNodeType.java
@@ -50,17 +50,17 @@ public XmlNodeType(int nodeType) {
* this object. The result should be a concise but informative
* representation that is easy for a person to read. It is recommended that
* all subclasses override this method.
- *
+ *
* The toString method for class Object returns a
* string consisting of the name of the class of which the object is an
* instance, the at-sign character `@', and the unsigned
* hexadecimal representation of the hash code of the object. In other
* words, this method returns a string equal to the value of:
*
* @return a string representation of the object.
@@ -135,7 +135,7 @@ public static String getString(int nodeType) {
/**
* Indicates whether some other object is "equal to" this one.
- *
+ *
* The equals method implements an equivalence relation on
* non-null object references:
*
For any non-null reference value x,
* x.equals(null) should return false.
*
- *
+ *
* The equals method for class Object implements the
* most discriminating possible equivalence relation on objects; that is,
* for any non-null reference values x and y, this
* method returns true if and only if x and
* y refer to the same object (x == y has the
* value true).
- *
+ *
* Note that it is generally necessary to override the hashCode
* method whenever this method is overridden, so as to maintain the general
* contract for the hashCode method, which states that equal
@@ -194,7 +194,7 @@ public boolean equals(Object obj) {
* Returns a hash code value for the object. This method is supported for
* the benefit of hashtables such as those provided by
* java.util.Hashtable.
- *
+ *
* The general contract of hashCode is:
*
*
Whenever it is invoked on the same object more than once during an
@@ -213,7 +213,7 @@ public boolean equals(Object obj) {
* that producing distinct integer results for unequal objects may improve
* the performance of hashtables.
*
- *
+ *
* As much as is reasonably practical, the hashCode method defined by class
* Object does return distinct integers for distinct objects. (This
* is typically implemented by converting the internal address of the object
From 5093d5555e5b3b178a80d103bfbe5a19b89c6986 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 14:15:34 +0000
Subject: [PATCH 12/70] GPG sign builds
---
.circleci/config.yml | 11 +++++++----
pom.xml | 6 ++++++
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index dcd8e1e84..436b16399 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -28,9 +28,12 @@ jobs:
- ~/.m2
key: v1-dependencies-{{ checksum "pom.xml" }}
- # build
- - run: mvn package
-
# deploy
- - run: mvn deploy -s .circleci/settings.xml -DskipTests=true -Dcheckstyle.skip=true
+ - run: >
+ if [ "${CIRCLE_BRANCH}" = 'master' ] ; then
+ echo "${MAVEN_CENTRAL_GPG_KEY}" | base64 --decode | gpg --import --no-tty --batch --yes
+ mvn deploy -s .circleci/settings.xml -Dgpg.passphrase="${MAVEN_CENTRAL_GPG_PASSPHRASE}"
+ else
+ mvn package
+ fi
diff --git a/pom.xml b/pom.xml
index b02862ed4..e17c9f8c4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -172,6 +172,12 @@
+
+
+ --pinentry-mode
+ loopback
+
+
From 1429e03657e766b003adfd149517e370336c0086 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 9 Jan 2019 15:42:10 +0000
Subject: [PATCH 13/70] Update version for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index e17c9f8c4..d6b052e2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.1
+ 2.2-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 80291947b7b8155f4bf079ee19fb4ef78c9c64d1 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 16 Jan 2019 11:05:55 +0000
Subject: [PATCH 14/70] Fix HttpClient init bugs
---
.../webservices/data/core/ExchangeServiceBase.java | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
index 036e80936..497bd7879 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
@@ -175,9 +175,7 @@ public abstract class ExchangeServiceBase implements Closeable {
* every other constructor.
*/
protected ExchangeServiceBase() {
- setUseDefaultCredentials(true);
- initializeHttpClient();
- initializeHttpContext();
+ this((CloseableHttpClient) null, null);
}
protected ExchangeServiceBase(CloseableHttpClient httpClient, CloseableHttpClient httpPoolingClient) {
@@ -185,6 +183,8 @@ protected ExchangeServiceBase(CloseableHttpClient httpClient, CloseableHttpClien
if (httpClient != null) {
externalHttpClient = true;
this.httpClient = httpClient;
+ } else {
+ initializeHttpClient();
}
if (httpPoolingClient != null) {
externalHttpPoolingClient = true;
@@ -205,7 +205,9 @@ protected ExchangeServiceBase(ExchangeVersion requestedServerVersion, CloseableH
}
protected ExchangeServiceBase(ExchangeServiceBase service, ExchangeVersion requestedServerVersion) {
- this(requestedServerVersion);
+ this(requestedServerVersion, service.httpClient, service.httpPoolingClient);
+ this.externalHttpClient = service.externalHttpClient;
+ this.externalHttpPoolingClient = service.externalHttpPoolingClient;
this.useDefaultCredentials = service.getUseDefaultCredentials();
this.credentials = service.getCredentials();
this.traceEnabled = service.isTraceEnabled();
From 2ff0f38981f6506fc5e6ea2f036fe1bb1b064a5e Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 16 Jan 2019 11:06:11 +0000
Subject: [PATCH 15/70] Make GetEventsResults getters public
---
.../webservices/data/notification/GetEventsResults.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/notification/GetEventsResults.java b/src/main/java/microsoft/exchange/webservices/data/notification/GetEventsResults.java
index 7a1c8910c..aa706343f 100644
--- a/src/main/java/microsoft/exchange/webservices/data/notification/GetEventsResults.java
+++ b/src/main/java/microsoft/exchange/webservices/data/notification/GetEventsResults.java
@@ -187,7 +187,7 @@ private void loadNotificationEventFromXml(EwsServiceXmlReader reader,
*
* @return the subscription id
*/
- protected String getSubscriptionId() {
+ public String getSubscriptionId() {
return subscriptionId;
}
@@ -196,7 +196,7 @@ protected String getSubscriptionId() {
*
* @return the previous watermark
*/
- protected String getPreviousWatermark() {
+ public String getPreviousWatermark() {
return previousWatermark;
}
@@ -205,7 +205,7 @@ protected String getPreviousWatermark() {
*
* @return the new watermark
*/
- protected String getNewWatermark() {
+ public String getNewWatermark() {
return newWatermark;
}
@@ -215,7 +215,7 @@ protected String getNewWatermark() {
*
* @return true, if is more events available
*/
- protected boolean isMoreEventsAvailable() {
+ public boolean isMoreEventsAvailable() {
return moreEventsAvailable;
}
From 7dd9eff5c4b3b022fe1d1afd035f96243e4fec69 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 16 Jan 2019 11:10:52 +0000
Subject: [PATCH 16/70] Release version 2.2
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index d6b052e2c..34342081b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.2-SNAPSHOT
+ 2.2Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 4a162b36babf9a3f98691378541b26b29e61b4cf Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 18 Jan 2019 15:24:50 +0000
Subject: [PATCH 17/70] Bump version for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 34342081b..db1211464 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.2
+ 2.3-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 904cbc634c258a78ceac3bdd1688192307cb78c0 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 18 Jan 2019 15:25:00 +0000
Subject: [PATCH 18/70] iCalUID is in-fact settable
---
.../data/core/service/schema/AppointmentSchema.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
index 36514a67c..7cebee593 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
@@ -800,7 +800,8 @@ public DeletedOccurrenceInfoCollection createComplexProperty() {
public static final PropertyDefinition ICalUid =
new StringPropertyDefinition(
XmlElementNames.Uid, FieldUris.Uid, EnumSet
- .of(PropertyDefinitionFlags.CanFind),
+ .of(PropertyDefinitionFlags.CanSet,
+ PropertyDefinitionFlags.CanFind),
ExchangeVersion.Exchange2007_SP1);
// Defines the iCalendar RecurrenceId property.
From a7731559d88d960877c812da8a7c22d94754797c Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 21 Jan 2019 10:14:13 +0000
Subject: [PATCH 19/70] Setter for MyResponseType
---
.../data/core/service/item/Appointment.java | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Appointment.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Appointment.java
index 74a40149b..457557e1b 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Appointment.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Appointment.java
@@ -820,6 +820,19 @@ public AppointmentType getAppointmentType() throws ServiceLocalException {
AppointmentSchema.AppointmentType);
}
+ /**
+ * Gets a value indicating what was the last response of the user that
+ * loaded this meeting.
+ *
+ * @param value the my response type
+ * @throws Exception
+ */
+ public void setMyResponseType(MeetingResponseType value)
+ throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ AppointmentSchema.MyResponseType, value);
+ }
+
/**
* Gets a value indicating what was the last response of the user that
* loaded this meeting.
From d9dbde6ba2056742b10bb6090e2d00c38a53d1a9 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 21 Jan 2019 15:41:34 +0000
Subject: [PATCH 20/70] Add IsOrganizer property
---
.../webservices/data/core/XmlElementNames.java | 5 +++++
.../data/core/service/item/Appointment.java | 11 +++++++++++
.../core/service/schema/AppointmentSchema.java | 16 ++++++++++++++++
3 files changed, 32 insertions(+)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java b/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
index 8fca4f048..25f9eee26 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
@@ -666,6 +666,11 @@ public class XmlElementNames {
*/
public static final String IsRecurring = "IsRecurring";
+ /**
+ * The Constant IsRecurring.
+ */
+ public static final String IsOrganizer = "IsOrganizer";
+
/**
* The Constant MeetingRequestWasSent.
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Appointment.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Appointment.java
index 457557e1b..cc717e01b 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Appointment.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Appointment.java
@@ -774,6 +774,17 @@ public Boolean getIsRecurring() throws ServiceLocalException {
AppointmentSchema.IsRecurring);
}
+ /**
+ * Gets a value indicating whether the appointment is recurring.
+ *
+ * @return the checks if is recurring
+ * @throws ServiceLocalException the service local exception
+ */
+ public Boolean getIsOrganizer() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ AppointmentSchema.IsOrganizer);
+ }
+
/**
* Gets a value indicating whether the meeting request has already been
* sent.
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
index 7cebee593..77f88f1f6 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
@@ -135,6 +135,11 @@ private static interface FieldUris {
*/
String MyResponseType = "calendar:MyResponseType";
+ /**
+ * Are we the organiser
+ */
+ String IsOrganizer = "calendar:IsOrganizer";
+
/**
* The Organizer.
*/
@@ -418,6 +423,16 @@ private static interface FieldUris {
.of(PropertyDefinitionFlags.CanFind),
ExchangeVersion.Exchange2007_SP1);
+ // Defines the IsOrganizer property.
+ /**
+ * The Constant IsOrganizer.
+ */
+ public static final PropertyDefinition IsOrganizer =
+ new BoolPropertyDefinition(
+ XmlElementNames.IsOrganizer, FieldUris.IsOrganizer, EnumSet
+ .of(PropertyDefinitionFlags.CanFind),
+ ExchangeVersion.Exchange2007_SP1);
+
// Defines the MeetingRequestWasSent property.
/**
* The Constant MeetingRequestWasSent.
@@ -884,6 +899,7 @@ protected void registerProperties() {
this.registerProperty(ICalUid);
this.registerProperty(ICalRecurrenceId);
this.registerProperty(ICalDateTimeStamp);
+ this.registerProperty(IsOrganizer);
}
/**
From fc48e0f57268ed412d3b497a68b5c4f8bf0be866 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 22 Jan 2019 13:28:35 +0000
Subject: [PATCH 21/70] Release 2.3
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index db1211464..42b2acd4e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.3-SNAPSHOT
+ 2.3Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 3c76eb428c47ada263f0268fe3c6f3d06c92643b Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 31 Jan 2019 11:58:28 +0000
Subject: [PATCH 22/70] Bump version for next set of development
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 42b2acd4e..4d1acd6ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.3
+ 2.4-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 4798fb9b67b0aab81da9a33b6d0cdba5cbcb723a Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 31 Jan 2019 11:59:34 +0000
Subject: [PATCH 23/70] Read MeetingResponse properties
---
.../data/core/XmlElementNames.java | 10 ++
.../core/service/item/MeetingResponse.java | 102 +++++++++++-
.../service/schema/MeetingResponseSchema.java | 142 ++++++++++++++++
.../service/item/MeetingResponseTest.java | 81 +++++++++
.../test-data/GetMeetingResponse.xml | 156 ++++++++++++++++++
5 files changed, 489 insertions(+), 2 deletions(-)
create mode 100644 src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingResponseSchema.java
create mode 100644 src/test/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponseTest.java
create mode 100644 src/test/resources/test-data/GetMeetingResponse.xml
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java b/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
index 25f9eee26..cdd0d23fb 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
@@ -626,6 +626,16 @@ public class XmlElementNames {
*/
public static final String End = "End";
+ /**
+ * The Constant ProposedStart.
+ */
+ public static final String ProposedStart = "ProposedStart";
+
+ /**
+ * The Constant End.
+ */
+ public static final String ProposedEnd = "ProposedEnd";
+
/**
* The Constant OriginalStart.
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponse.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponse.java
index 72823478b..63e5ad0a8 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponse.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponse.java
@@ -23,15 +23,23 @@
package microsoft.exchange.webservices.data.core.service.item;
+import java.util.Date;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
import microsoft.exchange.webservices.data.attribute.ServiceObjectDefinition;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.PropertySet;
import microsoft.exchange.webservices.data.core.XmlElementNames;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
+import microsoft.exchange.webservices.data.core.enumeration.service.calendar.AppointmentType;
+import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
+import microsoft.exchange.webservices.data.core.service.schema.MeetingResponseSchema;
+import microsoft.exchange.webservices.data.core.service.schema.ServiceObjectSchema;
import microsoft.exchange.webservices.data.property.complex.ItemAttachment;
import microsoft.exchange.webservices.data.property.complex.ItemId;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import microsoft.exchange.webservices.data.property.complex.recurrence.pattern.Recurrence;
/**
* Represents a response to a meeting request. Properties available on meeting
@@ -97,6 +105,15 @@ public static MeetingResponse bind(ExchangeService service, ItemId id) {
.getFirstClassProperties());
}
+ /**
+ * Internal method to return the schema associated with this type of object.
+ *
+ * @return The schema associated with this type of object.
+ */
+ @Override public ServiceObjectSchema getSchema() {
+ return MeetingResponseSchema.Instance;
+ }
+
/**
* Gets the minimum required server version.
*
@@ -106,4 +123,85 @@ public static MeetingResponse bind(ExchangeService service, ItemId id) {
@Override public ExchangeVersion getMinimumRequiredServerVersion() {
return ExchangeVersion.Exchange2007_SP1;
}
+
+ // Properties
+
+ /**
+ * Gets the start time of the appointment.
+ *
+ * @return the start
+ * @throws ServiceLocalException the service local exception
+ */
+ public Date getStart() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.Start);
+ }
+
+ /**
+ * Gets or sets the end time of the appointment.
+ *
+ * @return the end
+ * @throws ServiceLocalException the service local exception
+ */
+ public Date getEnd() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.End);
+ }
+
+ /**
+ * Gets the location of this appointment.
+ *
+ * @return the location
+ * @throws ServiceLocalException the service local exception
+ */
+ public String getLocation() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.Location);
+ }
+
+ /**
+ * Gets the recurrence pattern for this appointment. Available
+ * recurrence pattern classes include Recurrence.DailyPattern,
+ * Recurrence.MonthlyPattern and Recurrence.YearlyPattern.
+ *
+ * @return the recurrence
+ * @throws ServiceLocalException the service local exception
+ */
+ public Recurrence getRecurrence() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.Recurrence);
+ }
+
+ /**
+ * Gets a value indicating the type of this appointment.
+ *
+ * @return the appointment type
+ * @throws ServiceLocalException the service local exception
+ */
+ public AppointmentType getAppointmentType() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.AppointmentType);
+ }
+
+ /**
+ * Gets the proposed start time.
+ *
+ * @return the start
+ * @throws ServiceLocalException the service local exception
+ */
+ public Date getProposedStart() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.ProposedStart);
+ }
+
+ /**
+ * Gets the proposed end time.
+ *
+ * @return the start
+ * @throws ServiceLocalException the service local exception
+ */
+ public Date getProposedEnd() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.ProposedEnd);
+ }
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingResponseSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingResponseSchema.java
new file mode 100644
index 000000000..c45adcfcf
--- /dev/null
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingResponseSchema.java
@@ -0,0 +1,142 @@
+/*
+ * The MIT License
+ * Copyright (c) 2012 Microsoft Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package microsoft.exchange.webservices.data.core.service.schema;
+
+import java.util.EnumSet;
+
+import microsoft.exchange.webservices.data.attribute.Schema;
+import microsoft.exchange.webservices.data.core.XmlElementNames;
+import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
+import microsoft.exchange.webservices.data.core.enumeration.property.PropertyDefinitionFlags;
+import microsoft.exchange.webservices.data.property.definition.DateTimePropertyDefinition;
+import microsoft.exchange.webservices.data.property.definition.PropertyDefinition;
+
+/**
+ * Represents the schema for meeting request.
+ */
+@Schema
+public class MeetingResponseSchema extends MeetingMessageSchema {
+
+ /**
+ * Field URIs for MeetingRequest.
+ */
+ private static interface FieldUris {
+
+ /**
+ * The Start.
+ */
+ String ProposedStart = "meetingResponse:ProposedStart";
+
+ /**
+ * The End.
+ */
+ String ProposedEnd = "meetingResponse:ProposedEnd";
+ }
+
+ /**
+ * Defines the Start property.
+ */
+ public static final PropertyDefinition Start = AppointmentSchema.Start;
+
+ /**
+ * Defines the End property.
+ */
+ public static final PropertyDefinition End = AppointmentSchema.End;
+
+ /**
+ * Defines the Location property.
+ */
+ public static final PropertyDefinition Location =
+ AppointmentSchema.Location;
+
+ /**
+ * Defines the Recurrence property.
+ */
+ public static final PropertyDefinition Recurrence =
+ AppointmentSchema.Recurrence;
+
+ /**
+ * Defines the AppointmentType property.
+ */
+ public static final PropertyDefinition AppointmentType =
+ AppointmentSchema.AppointmentType;
+
+ // Defines the Start property.
+ /**
+ * The Constant Start.
+ */
+ public static final PropertyDefinition ProposedStart =
+ new DateTimePropertyDefinition(
+ XmlElementNames.ProposedStart, FieldUris.ProposedStart, EnumSet.of(
+ PropertyDefinitionFlags.CanSet,
+ PropertyDefinitionFlags.CanFind),
+ ExchangeVersion.Exchange2007_SP1,
+ true);
+
+ // Defines the End property.
+ /**
+ * The Constant End.
+ */
+ public static final PropertyDefinition ProposedEnd
+ = new DateTimePropertyDefinition(
+ XmlElementNames.ProposedEnd, FieldUris.ProposedEnd, EnumSet.of(
+ PropertyDefinitionFlags.CanSet,
+ PropertyDefinitionFlags.CanFind),
+ ExchangeVersion.Exchange2007_SP1,
+ true);
+
+ /**
+ * This must be after the declaration of property definitions.
+ */
+ public static final MeetingResponseSchema Instance =
+ new MeetingResponseSchema();
+
+ /**
+ * Registers property.
+ *
+ * IMPORTANT NOTE: PROPERTIES MUST BE REGISTERED IN SCHEMA ORDER (i.e. the
+ * same order as they are defined in types.xsd)
+ */
+ @Override
+ protected void registerProperties() {
+ super.registerProperties();
+
+ this.registerProperty(Start);
+ this.registerProperty(End);
+ this.registerProperty(Location);
+ this.registerProperty(Recurrence);
+ this.registerProperty(AppointmentType);
+
+ this.registerProperty(ProposedStart);
+ this.registerProperty(ProposedEnd);
+
+ }
+
+ /**
+ * Initializes a new instance of the class.
+ */
+ protected MeetingResponseSchema() {
+ super();
+ }
+}
diff --git a/src/test/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponseTest.java b/src/test/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponseTest.java
new file mode 100644
index 000000000..047aab94e
--- /dev/null
+++ b/src/test/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponseTest.java
@@ -0,0 +1,81 @@
+package microsoft.exchange.webservices.data.core.service.item;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+import java.io.InputStream;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.junit.Test;
+
+import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
+import microsoft.exchange.webservices.data.core.ExchangeService;
+import microsoft.exchange.webservices.data.core.XmlElementNames;
+import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
+import microsoft.exchange.webservices.data.core.enumeration.service.calendar.AppointmentType;
+import microsoft.exchange.webservices.data.security.XmlNodeType;
+
+public class MeetingResponseTest {
+
+ private static MeetingResponse getInput(String folder, String name) throws Exception {
+
+ try (InputStream inputStream = MeetingResponseTest.class
+ .getResourceAsStream(String.format("/%s/%s.xml", folder, name))) {
+ EwsServiceXmlReader reader = new EwsServiceXmlReader(inputStream, null);
+
+ // read xml preamble
+ reader.read(new XmlNodeType(XmlNodeType.START_DOCUMENT));
+ reader.readStartElement(XmlNamespace.Soap, XmlElementNames.SOAPEnvelopeElementName);
+
+ // read soap header
+ reader.readStartElement(XmlNamespace.Soap, XmlElementNames.SOAPHeaderElementName);
+ do {
+ reader.read();
+
+ if (reader.isStartElement(XmlNamespace.Types, XmlElementNames.ServerVersionInfo)) {
+ reader.readAttributeValue("Version");
+ }
+
+ // Ignore anything else inside the SOAP header
+ } while (!reader.isEndElement(XmlNamespace.Soap, XmlElementNames.SOAPHeaderElementName));
+
+ // body
+ reader.readStartElement(XmlNamespace.Soap, XmlElementNames.SOAPBodyElementName);
+
+ reader.readStartElement(XmlNamespace.Messages, XmlElementNames.GetItemResponse);
+ reader.readStartElement(XmlNamespace.Messages, XmlElementNames.ResponseMessages);
+ reader.readStartElement(XmlNamespace.Messages, XmlElementNames.GetItemResponseMessage);
+ reader.readElementValue(XmlNamespace.Messages, XmlElementNames.ResponseCode);
+ reader.readStartElement(XmlNamespace.Messages, XmlElementNames.Items);
+
+ return readMeetingResponse(reader);
+ }
+ }
+
+ private static MeetingResponse readMeetingResponse(EwsServiceXmlReader reader) throws Exception {
+ reader.readStartElement(XmlNamespace.Types, XmlElementNames.MeetingResponse);
+ ExchangeService exchangeService = new ExchangeService();
+ MeetingResponse meetingResponse = new MeetingResponse(exchangeService);
+ meetingResponse.loadFromXml(reader, false);
+
+ return meetingResponse;
+ }
+
+ @Test
+ public void testLoadXml() throws Exception {
+ MeetingResponse meetingResponse = getInput("test-data", "GetMeetingResponse");
+ assertThat(meetingResponse.getStart(),
+ is(equalTo(new DateTime(2019, 1, 31, 10, 30, 0, DateTimeZone.UTC).toDate())));
+ assertThat(meetingResponse.getEnd(),
+ is(equalTo(new DateTime(2019, 1, 31, 11, 30, 0, DateTimeZone.UTC).toDate())));
+ assertThat(meetingResponse.getProposedStart(),
+ is(equalTo(new DateTime(2019, 1, 31, 12, 0, 0, DateTimeZone.UTC).toDate())));
+ assertThat(meetingResponse.getProposedEnd(),
+ is(equalTo(new DateTime(2019, 1, 31, 14, 30, 0, DateTimeZone.UTC).toDate())));
+ assertThat(meetingResponse.getLocation(), is(equalTo("the location")));
+ assertThat(meetingResponse.getAppointmentType(), is(equalTo(AppointmentType.Single)));
+ }
+
+}
diff --git a/src/test/resources/test-data/GetMeetingResponse.xml b/src/test/resources/test-data/GetMeetingResponse.xml
new file mode 100644
index 000000000..cceb333a1
--- /dev/null
+++ b/src/test/resources/test-data/GetMeetingResponse.xml
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+ NoError
+
+
+
+
+ IPM.Schedule.Meeting.Resp.Tent
+ New Time Proposed: something 2
+ Normal
+ <html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;
+ charset=utf-8">
+ <style type="text/css" style="display:none;"><!-- P
+ {margin-top:0;margin-bottom:0;} --></style>
+ </head>
+ <body dir="ltr">
+ <div id="divtagdefaultwrapper"
+ style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;"
+ dir="ltr">
+ <p><br>
+ </p>
+ </div>
+ </body>
+ </html>
+ 2019-01-31T10:40:04Z
+ 5220
+ Normal
+ false
+ false
+ false
+ false
+ false
+ 2019-01-31T10:40:04Z
+ 2019-01-31T10:40:04Z
+
+
+
+
+
+ 2019-01-31T10:30:00Z
+ 2019-01-31T10:15:00Z
+
+ test user 1
+ false
+ en-GB
+
+ false
+ false
+ false
+ true
+ true
+ true
+ true
+
+ test user 2
+ 2019-01-31T10:40:04Z
+ false
+ ?ItemID=AAMkAGI1NDk4ZGY3LWNkYjQtNGU1ZC05YjNlLWI5N2I5NzJlZDJiYQBGAAAAAADO3K8HRAPzQ7ckCuRCxxaLBwAPKhbVptluTr8d74Dnvry0AAAAAAEJAAAPKhbVptluTr8d74Dnvry0AAAQRE2OAAA%3D&exvsurl=1&viewmodel=ReadMessageItem
+
+
+ NotFlagged
+
+ AQAAAAAAAQkBAAAAEERNjgAAAAA=
+
+
+
+ test user 2
+ testuser2@example.com
+ SMTP
+ Mailbox
+
+
+
+
+ test user 1
+ testuser1@example.com
+ SMTP
+ Mailbox
+
+
+ false
+ AdS5T4l4kx2OQCX7TkObqqKOSqeVIgAAcoKp
+ something 2
+
+
+ test user 2
+ testuser2@example.com
+ SMTP
+ Mailbox
+
+
+ <26311bb61ca44b14a9a0cc6da3c20594@example.com>
+ true
+
+
+ test user 2
+ testuser2@example.com
+ SMTP
+ Mailbox
+
+
+
+
+ test user 2
+ testuser2@example.com
+ SMTP
+ Mailbox
+
+
+
+ false
+ false
+ Tentative
+ 040000008200E00074C5B7101A82E00800000000275B68894FB9D4010000000000000000100000003C04B5365B02D34ABCD1016A0AABA716
+ 2019-01-31T10:40:04Z
+ false
+ 2019-01-31T10:30:00Z
+ 2019-01-31T11:30:00Z
+ the location
+ Single
+ 2019-01-31T12:00:00Z
+ 2019-01-31T14:30:00Z
+
+
+
+
+
+
+
From 07e11966221a7d6af9950d62b8bebcaeb85faf0a Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 31 Jan 2019 12:13:04 +0000
Subject: [PATCH 24/70] Follow patterns
---
.../data/core/service/item/MeetingResponseTest.java | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/test/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponseTest.java b/src/test/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponseTest.java
index 047aab94e..0130776c7 100644
--- a/src/test/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponseTest.java
+++ b/src/test/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponseTest.java
@@ -9,6 +9,8 @@
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
import microsoft.exchange.webservices.data.core.ExchangeService;
@@ -17,6 +19,7 @@
import microsoft.exchange.webservices.data.core.enumeration.service.calendar.AppointmentType;
import microsoft.exchange.webservices.data.security.XmlNodeType;
+@RunWith(JUnit4.class)
public class MeetingResponseTest {
private static MeetingResponse getInput(String folder, String name) throws Exception {
From 77c23afee7818a5c5659f51012a1fd951866ad47 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 1 Feb 2019 15:27:14 +0000
Subject: [PATCH 25/70] Fix build errors on JDK 11
---
pom.xml | 1 +
.../exception/misc/ArgumentException.java | 16 +++++++--------
.../exception/misc/ArgumentNullException.java | 16 +++++++--------
...nsupportedTimeZoneDefinitionException.java | 2 +-
.../data/property/complex/StringList.java | 8 ++++----
.../data/security/XmlNodeType.java | 20 +++++++++----------
6 files changed, 32 insertions(+), 31 deletions(-)
diff --git a/pom.xml b/pom.xml
index 4d1acd6ea..5f42ba0d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -336,6 +336,7 @@
maven-javadoc-plugin${maven-javadoc-plugin.version}
+ 8true${javadoc.doclint.param}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentException.java b/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentException.java
index a2211a421..7d9b329e0 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentException.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentException.java
@@ -76,7 +76,7 @@ public ArgumentException(String s, String paramName) {
* @param message the detail message (which is saved for later retrieval by the {@link
* Throwable#getMessage()} method).
* @param cause the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method).
- * (A null value is permitted, and indicates that the cause is nonexistent or
+ * (A null value is permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.5
*/
@@ -85,13 +85,13 @@ public ArgumentException(String message, Throwable cause) {
}
/**
- * Constructs a new exception with the specified cause and a detail message of (cause==null ? null :
- * cause.toString()) (which typically contains the class and detail message of cause). This
+ * Constructs a new exception with the specified cause and a detail message of (cause==null ? null :
+ * cause.toString()) (which typically contains the class and detail message of cause). This
* constructor is useful for exceptions that are little more than wrappers for other throwables (for
* example, {@link PrivilegedActionException}).
*
* @param cause the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method).
- * (A null value is permitted, and indicates that the cause is nonexistent or
+ * (A null value is permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.5
*/
@@ -100,13 +100,13 @@ public ArgumentException(Throwable cause) {
}
/**
- * Constructs a new exception with the specified cause and a detail message of (cause==null ? null :
- * cause.toString()) (which typically contains the class and detail message of cause). This
+ * Constructs a new exception with the specified cause and a detail message of (cause==null ? null :
+ * cause.toString()) (which typically contains the class and detail message of cause). This
* constructor is useful for exceptions that are little more than wrappers for other throwables (for
* example, {@link PrivilegedActionException}).
*
* @param cause the cause (which is saved for later retrieval by the {@link Throwable#getCause()}
- * method). (A null value is permitted, and indicates that the cause is
+ * method). (A null value is permitted, and indicates that the cause is
* nonexistent or unknown.)
* @param paramName the Name of the Param that causes the exception
*/
@@ -121,7 +121,7 @@ public ArgumentException(Throwable cause, String paramName) {
*
* @param message The error message that explains the reason for the exception.
* @param cause the cause (which is saved for later retrieval by the {@link Throwable#getCause()}
- * method). (A null value is permitted, and indicates that the cause is
+ * method). (A null value is permitted, and indicates that the cause is
* nonexistent or unknown.)
* @param paramName the Name of the Param that causes the exception
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentNullException.java b/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentNullException.java
index 68d046ca2..629477d29 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentNullException.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/exception/misc/ArgumentNullException.java
@@ -53,7 +53,7 @@ public ArgumentNullException(String s, String paramName) {
* @param message the detail message (which is saved for later retrieval by the {@link
* Throwable#getMessage()} method).
* @param cause the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method).
- * (A null value is permitted, and indicates that the cause is nonexistent or
+ * (A null value is permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.5
*/
@@ -62,13 +62,13 @@ public ArgumentNullException(String message, Throwable cause) {
}
/**
- * Constructs a new exception with the specified cause and a detail message of (cause==null ? null :
- * cause.toString()) (which typically contains the class and detail message of cause). This
+ * Constructs a new exception with the specified cause and a detail message of (cause==null ? null :
+ * cause.toString()) (which typically contains the class and detail message of cause). This
* constructor is useful for exceptions that are little more than wrappers for other throwables (for
* example, {@link java.security.PrivilegedActionException}).
*
* @param cause the cause (which is saved for later retrieval by the {@link Throwable#getCause()} method).
- * (A null value is permitted, and indicates that the cause is nonexistent or
+ * (A null value is permitted, and indicates that the cause is nonexistent or
* unknown.)
* @since 1.5
*/
@@ -77,13 +77,13 @@ public ArgumentNullException(Throwable cause) {
}
/**
- * Constructs a new exception with the specified cause and a detail message of (cause==null ? null :
- * cause.toString()) (which typically contains the class and detail message of cause). This
+ * Constructs a new exception with the specified cause and a detail message of (cause==null ? null :
+ * cause.toString()) (which typically contains the class and detail message of cause). This
* constructor is useful for exceptions that are little more than wrappers for other throwables (for
* example, {@link java.security.PrivilegedActionException}).
*
* @param cause the cause (which is saved for later retrieval by the {@link Throwable#getCause()}
- * method). (A null value is permitted, and indicates that the cause is
+ * method). (A null value is permitted, and indicates that the cause is
* nonexistent or unknown.)
* @param paramName the Name of the Param that causes the exception
*/
@@ -97,7 +97,7 @@ public ArgumentNullException(Throwable cause, String paramName) {
*
* @param message The error message that explains the reason for the exception.
* @param cause the cause (which is saved for later retrieval by the {@link Throwable#getCause()}
- * method). (A null value is permitted, and indicates that the cause is
+ * method). (A null value is permitted, and indicates that the cause is
* nonexistent or unknown.)
* @param paramName the Name of the Param that causes the exception
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/exception/service/local/InvalidOrUnsupportedTimeZoneDefinitionException.java b/src/main/java/microsoft/exchange/webservices/data/core/exception/service/local/InvalidOrUnsupportedTimeZoneDefinitionException.java
index f750b443d..d51122397 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/exception/service/local/InvalidOrUnsupportedTimeZoneDefinitionException.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/exception/service/local/InvalidOrUnsupportedTimeZoneDefinitionException.java
@@ -62,7 +62,7 @@ public InvalidOrUnsupportedTimeZoneDefinitionException(String message) {
* @param message the detail message (which is saved for later retrieval by the {@link
* Throwable#getMessage()} method).
* @param innerException the cause (which is saved for later retrieval by the {@link Throwable#getCause()}
- * method). (A null value is permitted, and indicates that the cause is nonexistent
+ * method). (A null value is permitted, and indicates that the cause is nonexistent
* or unknown.)
*/
public InvalidOrUnsupportedTimeZoneDefinitionException(String message, Exception innerException) {
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/StringList.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/StringList.java
index e0d762057..e208170ae 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/StringList.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/StringList.java
@@ -291,23 +291,23 @@ public Iterator getIterator() {
* x.equals(z) should return true.
*
It is consistent: for any non-null reference values
* x and y, multiple invocations of
- * x.equals(y) consistently return true or
+ * x.equals(y) consistently return true or
* consistently return false, provided no information used in
* equals comparisons on the objects is modified.
*
For any non-null reference value x,
* x.equals(null) should return false.
*
*
- * The equals method for class Object implements the
+ * The equals method for class Object implements the
* most discriminating possible equivalence relation on objects; that is,
* for any non-null reference values x and y, this
* method returns true if and only if x and
* y refer to the same object (x == y has the
* value true).
*
- * Note that it is generally necessary to override the hashCode
+ * Note that it is generally necessary to override the hashCode
* method whenever this method is overridden, so as to maintain the general
- * contract for the hashCode method, which states that equal
+ * contract for the hashCode method, which states that equal
* objects must have equal hash codes.
*
* @param obj the reference object with which to compare.
diff --git a/src/main/java/microsoft/exchange/webservices/data/security/XmlNodeType.java b/src/main/java/microsoft/exchange/webservices/data/security/XmlNodeType.java
index 799bb71d2..bdaded1bc 100644
--- a/src/main/java/microsoft/exchange/webservices/data/security/XmlNodeType.java
+++ b/src/main/java/microsoft/exchange/webservices/data/security/XmlNodeType.java
@@ -152,23 +152,23 @@ public static String getString(int nodeType) {
* x.equals(z) should return true.
*
It is consistent: for any non-null reference values
* x and y, multiple invocations of
- * x.equals(y) consistently return true or
+ * x.equals(y) consistently return true or
* consistently return false, provided no information used in
* equals comparisons on the objects is modified.
*
For any non-null reference value x,
* x.equals(null) should return false.
*
*
- * The equals method for class Object implements the
+ * The equals method for class Object implements the
* most discriminating possible equivalence relation on objects; that is,
* for any non-null reference values x and y, this
* method returns true if and only if x and
* y refer to the same object (x == y has the
* value true).
*
- * Note that it is generally necessary to override the hashCode
+ * Note that it is generally necessary to override the hashCode
* method whenever this method is overridden, so as to maintain the general
- * contract for the hashCode method, which states that equal
+ * contract for the hashCode method, which states that equal
* objects must have equal hash codes.
*
* @param obj the reference object with which to compare.
@@ -198,27 +198,27 @@ public boolean equals(Object obj) {
* The general contract of hashCode is:
*
*
Whenever it is invoked on the same object more than once during an
- * execution of a Java application, the hashCode method must
+ * execution of a Java application, the hashCode method must
* consistently return the same integer, provided no information used in
- * equals comparisons on the object is modified. This integer need
+ * equals comparisons on the object is modified. This integer need
* not remain consistent from one execution of an application to another
* execution of the same application.
- *
If two objects are equal according to the equals(Object)
+ *
If two objects are equal according to the equals(Object)
* method, then calling the hashCode method on each of the two
* objects must produce the same integer result.
*
It is not required that if two objects are unequal according
* to the {@link Object#equals(Object)} method, then
- * calling the hashCode method on each of the two objects must
+ * calling the hashCode method on each of the two objects must
* produce distinct integer results. However, the programmer should be aware
* that producing distinct integer results for unequal objects may improve
* the performance of hashtables.
*
*
* As much as is reasonably practical, the hashCode method defined by class
- * Object does return distinct integers for distinct objects. (This
+ * Object does return distinct integers for distinct objects. (This
* is typically implemented by converting the internal address of the object
* into an integer, but this implementation technique is not required by the
- * JavaTM programming language.)
+ * Java programming language.)
*
* @return a hash code value for this object.
* @see Object#equals(Object)
From 973587b9c781dec7737302f124d7901ae2cbc9ea Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 1 Feb 2019 15:27:58 +0000
Subject: [PATCH 26/70] More getters and setters
---
.../core/service/item/MeetingMessage.java | 12 +++
.../core/service/item/MeetingRequest.java | 80 +++++++++++++++++--
2 files changed, 86 insertions(+), 6 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
index 801922a3c..93200925b 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
@@ -28,6 +28,7 @@
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.PropertySet;
import microsoft.exchange.webservices.data.core.XmlElementNames;
+import microsoft.exchange.webservices.data.core.service.schema.AppointmentSchema;
import microsoft.exchange.webservices.data.core.service.schema.MeetingMessageSchema;
import microsoft.exchange.webservices.data.core.service.schema.ServiceObjectSchema;
import microsoft.exchange.webservices.data.core.enumeration.attribute.EditorBrowsableState;
@@ -166,6 +167,17 @@ public String getICalUid() throws ServiceLocalException {
MeetingMessageSchema.ICalUid);
}
+ /**
+ * Sets the ICalendar Uid.
+ *
+ * @param value the i cal uid
+ * @throws Exception
+ */
+ public void setICalUid(String value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ AppointmentSchema.ICalUid, value);
+ }
+
/**
* Gets the ICalendar RecurrenceId.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingRequest.java
index f8c8b5a82..22c1829f3 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingRequest.java
@@ -273,7 +273,7 @@ public LegacyFreeBusyStatus getIntendedFreeBusyStatus()
*/
public Date getStart() throws ServiceLocalException {
return getPropertyBag().getObjectFromPropertyDefinition(
- AppointmentSchema.Start);
+ MeetingRequestSchema.Start);
}
/**
@@ -284,9 +284,32 @@ public Date getStart() throws ServiceLocalException {
*/
public Date getEnd() throws ServiceLocalException {
return getPropertyBag().getObjectFromPropertyDefinition(
- AppointmentSchema.End);
+ MeetingRequestSchema.End);
}
+ /**
+ * Sets the start.
+ *
+ * @param value the new start
+ * @throws Exception the exception
+ */
+ public void setStart(Date value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingRequestSchema.Start, value);
+ }
+
+ /**
+ * Sets the end.
+ *
+ * @param value the new end
+ * @throws Exception the exception
+ */
+ public void setEnd(Date value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingRequestSchema.End, value);
+ }
+
+
/**
* Gets the original start time of the appointment.
*
@@ -306,7 +329,18 @@ public Date getOriginalStart() throws ServiceLocalException {
*/
public boolean getIsAllDayEvent() throws ServiceLocalException {
return getPropertyBag().getObjectFromPropertyDefinition(
- AppointmentSchema.IsAllDayEvent) != null;
+ MeetingRequestSchema.IsAllDayEvent) != null;
+ }
+
+ /**
+ * Sets the checks if is all day event.
+ *
+ * @param value the new checks if is all day event
+ * @throws Exception the exception
+ */
+ public void setIsAllDayEvent(Boolean value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingRequestSchema.IsAllDayEvent, value);
}
/**
@@ -330,7 +364,18 @@ public LegacyFreeBusyStatus legacyFreeBusyStatus()
*/
public String getLocation() throws ServiceLocalException {
return getPropertyBag().getObjectFromPropertyDefinition(
- AppointmentSchema.Location);
+ MeetingRequestSchema.Location);
+ }
+
+ /**
+ * Sets the location.
+ *
+ * @param value the new location
+ * @throws Exception the exception
+ */
+ public void setLocation(String value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingRequestSchema.Location, value);
}
/**
@@ -646,7 +691,7 @@ public DeletedOccurrenceInfoCollection getDeletedOccurrences()
*/
public TimeZoneDefinition getStartTimeZone() throws ServiceLocalException {
return getPropertyBag().getObjectFromPropertyDefinition(
- AppointmentSchema.StartTimeZone);
+ MeetingRequestSchema.StartTimeZone);
}
/**
@@ -657,7 +702,30 @@ public TimeZoneDefinition getStartTimeZone() throws ServiceLocalException {
*/
public TimeZoneDefinition getEndTimeZone() throws ServiceLocalException {
return getPropertyBag().getObjectFromPropertyDefinition(
- AppointmentSchema.EndTimeZone);
+ MeetingRequestSchema.EndTimeZone);
+ }
+ /**
+ * Sets the start time zone.
+ *
+ * @param value the new start time zone
+ * @throws Exception the exception
+ */
+ public void setStartTimeZone(TimeZoneDefinition value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingRequestSchema.StartTimeZone, value);
+
+ }
+
+ /**
+ * Sets the start time zone.
+ *
+ * @param value the new end time zone
+ * @throws Exception the exception
+ */
+ public void setEndTimeZone(TimeZoneDefinition value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingRequestSchema.EndTimeZone, value);
+
}
/**
From 366d9e6e3fae01169d7db51129176000a4f670a2 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 6 Feb 2019 16:33:41 +0000
Subject: [PATCH 27/70] Add proposed start/end date to calendar response
---
.../response/CalendarResponseMessage.java | 50 +++++++++++++++++++
.../schema/CalendarResponseObjectSchema.java | 3 ++
2 files changed, 53 insertions(+)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/response/CalendarResponseMessage.java b/src/main/java/microsoft/exchange/webservices/data/core/service/response/CalendarResponseMessage.java
index 0645b2a0d..351037174 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/response/CalendarResponseMessage.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/response/CalendarResponseMessage.java
@@ -23,15 +23,19 @@
package microsoft.exchange.webservices.data.core.service.response;
+import java.util.Date;
+
import microsoft.exchange.webservices.data.attribute.EditorBrowsable;
import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.core.service.schema.CalendarResponseObjectSchema;
import microsoft.exchange.webservices.data.core.service.schema.EmailMessageSchema;
import microsoft.exchange.webservices.data.core.service.schema.ItemSchema;
+import microsoft.exchange.webservices.data.core.service.schema.MeetingResponseSchema;
import microsoft.exchange.webservices.data.core.service.schema.ServiceObjectSchema;
import microsoft.exchange.webservices.data.core.enumeration.attribute.EditorBrowsableState;
import microsoft.exchange.webservices.data.core.enumeration.property.Sensitivity;
+import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
import microsoft.exchange.webservices.data.property.complex.AttachmentCollection;
import microsoft.exchange.webservices.data.property.complex.EmailAddress;
import microsoft.exchange.webservices.data.property.complex.EmailAddressCollection;
@@ -215,4 +219,50 @@ public void setSender(EmailAddress value) throws Exception {
this.getPropertyBag().setObjectFromPropertyDefinition(
EmailMessageSchema.Sender, value);
}
+
+ /**
+ * Gets the proposed start time.
+ *
+ * @return the start
+ * @throws ServiceLocalException the service local exception
+ */
+ public Date getProposedStart() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.ProposedStart);
+ }
+
+ /**
+ * Sets the proposed start time.
+ *
+ * @param value the new start time
+ * @throws Exception the exception
+ */
+ public void setProposedStart(Date value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingResponseSchema.ProposedStart, value);
+ }
+
+ /**
+ * Gets the proposed end time.
+ *
+ * @return the start
+ * @throws ServiceLocalException the service local exception
+ */
+ public Date getProposedEnd() throws ServiceLocalException {
+ return getPropertyBag().getObjectFromPropertyDefinition(
+ MeetingResponseSchema.ProposedEnd);
+ }
+
+
+ /**
+ * Sets the proposed end time.
+ *
+ * @param value the new end time
+ * @throws Exception the exception
+ */
+ public void setProposedEnd(Date value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingResponseSchema.ProposedEnd, value);
+ }
+
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/CalendarResponseObjectSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/CalendarResponseObjectSchema.java
index cf8951bc6..025fc5b9e 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/CalendarResponseObjectSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/CalendarResponseObjectSchema.java
@@ -56,5 +56,8 @@ protected void registerProperties() {
this.registerProperty(EmailMessageSchema.IsReadReceiptRequested);
this.registerProperty(EmailMessageSchema.IsDeliveryReceiptRequested);
this.registerProperty(ResponseObjectSchema.ReferenceItemId);
+
+ this.registerProperty(MeetingResponseSchema.ProposedStart);
+ this.registerProperty(MeetingResponseSchema.ProposedEnd);
}
}
From a424b57d572f3fe1a22936515ff4498df26e7863 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 6 Feb 2019 16:34:14 +0000
Subject: [PATCH 28/70] AllDayEvent is optional for meeting requests
---
.../data/core/service/schema/AppointmentSchema.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
index 77f88f1f6..77ae02178 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
@@ -352,7 +352,8 @@ private static interface FieldUris {
PropertyDefinitionFlags.CanSet,
PropertyDefinitionFlags.CanUpdate,
PropertyDefinitionFlags.CanFind),
- ExchangeVersion.Exchange2007_SP1);
+ ExchangeVersion.Exchange2007_SP1,
+ true);
// Defines the LegacyFreeBusyStatus property.
/**
From d349363088a253f3d689772a77eeed3f92e553cf Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 6 Feb 2019 16:34:26 +0000
Subject: [PATCH 29/70] Schema consistency
---
.../webservices/data/core/service/item/MeetingMessage.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
index 93200925b..ac0966ed3 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
@@ -175,7 +175,7 @@ public String getICalUid() throws ServiceLocalException {
*/
public void setICalUid(String value) throws Exception {
this.getPropertyBag().setObjectFromPropertyDefinition(
- AppointmentSchema.ICalUid, value);
+ MeetingMessageSchema.ICalUid, value);
}
/**
From 3e1b8985958924a9b0c95a46769f4bc674c0cea8 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 6 Feb 2019 16:35:23 +0000
Subject: [PATCH 30/70] Release 2.4
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 5f42ba0d5..b6b1dcb99 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.4-SNAPSHOT
+ 2.4Exchange Web Services Java APIExchange Web Services (EWS) Java API
From d701c16e57075cc00688028623aadc1f68a9b364 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 7 Feb 2019 13:13:16 +0000
Subject: [PATCH 31/70] Start version 2.5
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index b6b1dcb99..9d7a21387 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.4
+ 2.5-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From e72730654935271d41cbe744912a6d5ef05e4d71 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 7 Feb 2019 15:48:43 +0000
Subject: [PATCH 32/70] We only need to set the credentials provider if it's
not already set
---
.../core/request/HttpClientWebRequest.java | 42 ++++++++++---------
1 file changed, 22 insertions(+), 20 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/HttpClientWebRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/HttpClientWebRequest.java
index 8cd6ccb8f..618ef4126 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/HttpClientWebRequest.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/HttpClientWebRequest.java
@@ -128,31 +128,33 @@ public void prepareConnection() {
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.BASIC))
.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.BASIC));
- CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-
- // Add proxy credential if necessary.
- WebProxy proxy = getProxy();
- if (proxy != null) {
- HttpHost proxyHost = new HttpHost(proxy.getHost(), proxy.getPort());
- requestConfigBuilder.setProxy(proxyHost);
-
- if (proxy.hasCredentials()) {
- NTCredentials
- proxyCredentials =
- new NTCredentials(proxy.getCredentials().getUsername(), proxy.getCredentials().getPassword(), "",
- proxy.getCredentials().getDomain());
+ if (httpContext.getCredentialsProvider() == null) {
+ CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+ // Add proxy credential if necessary.
+ WebProxy proxy = getProxy();
+ if (proxy != null) {
+ HttpHost proxyHost = new HttpHost(proxy.getHost(), proxy.getPort());
+ requestConfigBuilder.setProxy(proxyHost);
+
+ if (proxy.hasCredentials()) {
+ NTCredentials
+ proxyCredentials =
+ new NTCredentials(proxy.getCredentials().getUsername(), proxy.getCredentials().getPassword(), "",
+ proxy.getCredentials().getDomain());
+
+ credentialsProvider.setCredentials(new AuthScope(proxyHost), proxyCredentials);
+ }
+ }
- credentialsProvider.setCredentials(new AuthScope(proxyHost), proxyCredentials);
+ // Add web service credential if necessary.
+ if (isAllowAuthentication() && getUsername() != null) {
+ NTCredentials webServiceCredentials = new NTCredentials(getUsername(), getPassword(), "", getDomain());
+ credentialsProvider.setCredentials(new AuthScope(AuthScope.ANY), webServiceCredentials);
}
- }
- // Add web service credential if necessary.
- if (isAllowAuthentication() && getUsername() != null) {
- NTCredentials webServiceCredentials = new NTCredentials(getUsername(), getPassword(), "", getDomain());
- credentialsProvider.setCredentials(new AuthScope(AuthScope.ANY), webServiceCredentials);
+ httpContext.setCredentialsProvider(credentialsProvider);
}
- httpContext.setCredentialsProvider(credentialsProvider);
httpPost.setConfig(requestConfigBuilder.build());
}
From 057b54e284505f6566a80f195b213d749351e576 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 7 Feb 2019 15:59:27 +0000
Subject: [PATCH 33/70] Lazily initialize HttpClientContext
---
.../webservices/data/core/ExchangeServiceBase.java | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
index 497bd7879..7a96a240e 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
@@ -190,7 +190,6 @@ protected ExchangeServiceBase(CloseableHttpClient httpClient, CloseableHttpClien
externalHttpPoolingClient = true;
this.httpPoolingClient = httpPoolingClient;
}
- initializeHttpContext();
}
protected ExchangeServiceBase(ExchangeVersion requestedServerVersion) {
@@ -341,6 +340,10 @@ protected HttpWebRequest prepareHttpWebRequestForUrl(URI url, boolean acceptGzip
throw new ServiceLocalException(strErr);
}
+ if (httpContext == null) {
+ initializeHttpContext();
+ }
+
HttpClientWebRequest request = new HttpClientWebRequest(httpClient, httpContext);
prepareHttpWebRequestForUrl(url, acceptGzipEncoding, allowAutoRedirect, request);
@@ -375,6 +378,10 @@ protected HttpWebRequest prepareHttpPoolingWebRequestForUrl(URI url, boolean acc
initializeHttpPoolingClient();
}
+ if (httpContext == null) {
+ initializeHttpContext();
+ }
+
HttpClientWebRequest request = new HttpClientWebRequest(httpPoolingClient, httpContext);
prepareHttpWebRequestForUrl(url, acceptGzipEncoding, allowAutoRedirect, request);
@@ -664,7 +671,7 @@ public void setCredentials(ExchangeCredentials credentials) {
this.useDefaultCredentials = false;
// Reset the httpContext, to remove any existing authentication cookies from subsequent request
- initializeHttpContext();
+ httpContext = null;
}
/**
@@ -693,7 +700,7 @@ public void setUseDefaultCredentials(boolean value) {
}
// Reset the httpContext, to remove any existing authentication cookies from subsequent request
- initializeHttpContext();
+ httpContext = null;
}
/**
From e33d05c99f6494b18ceb2dd8dd0be82b94d67e36 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 8 Feb 2019 15:36:37 +0000
Subject: [PATCH 34/70] Some more setters
---
.../core/service/item/MeetingMessage.java | 12 +++++++++-
.../core/service/item/MeetingResponse.java | 23 +++++++++++++++++++
.../service/schema/MeetingMessageSchema.java | 3 ++-
3 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
index ac0966ed3..0549f4dd0 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingMessage.java
@@ -28,7 +28,6 @@
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.PropertySet;
import microsoft.exchange.webservices.data.core.XmlElementNames;
-import microsoft.exchange.webservices.data.core.service.schema.AppointmentSchema;
import microsoft.exchange.webservices.data.core.service.schema.MeetingMessageSchema;
import microsoft.exchange.webservices.data.core.service.schema.ServiceObjectSchema;
import microsoft.exchange.webservices.data.core.enumeration.attribute.EditorBrowsableState;
@@ -156,6 +155,17 @@ public MeetingResponseType getResponseType()
MeetingMessageSchema.ResponseType);
}
+ /**
+ * Sets the response type.
+ *
+ * @param value the response type
+ * @throws Exception
+ */
+ public void setResponseType(MeetingResponseType value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingMessageSchema.ResponseType, value);
+ }
+
/**
* Gets the ICalendar Uid.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponse.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponse.java
index 63e5ad0a8..ba986dc9d 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponse.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/MeetingResponse.java
@@ -194,6 +194,17 @@ public Date getProposedStart() throws ServiceLocalException {
MeetingResponseSchema.ProposedStart);
}
+ /**
+ * Sets the proposed start.
+ *
+ * @param value the proposed start
+ * @throws Exception
+ */
+ public void setProposedStart(Date value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingResponseSchema.ProposedStart, value);
+ }
+
/**
* Gets the proposed end time.
*
@@ -204,4 +215,16 @@ public Date getProposedEnd() throws ServiceLocalException {
return getPropertyBag().getObjectFromPropertyDefinition(
MeetingResponseSchema.ProposedEnd);
}
+
+ /**
+ * Sets the proposed end.
+ *
+ * @param value the proposed start
+ * @throws Exception
+ */
+ public void setProposedEnd(Date value) throws Exception {
+ this.getPropertyBag().setObjectFromPropertyDefinition(
+ MeetingResponseSchema.ProposedEnd, value);
+ }
+
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingMessageSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingMessageSchema.java
index eca224b8d..7e6142c23 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingMessageSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/MeetingMessageSchema.java
@@ -124,7 +124,8 @@ public ItemId createComplexProperty() {
new GenericPropertyDefinition(
MeetingResponseType.class,
XmlElementNames.ResponseType, FieldUris.ResponseType, EnumSet
- .of(PropertyDefinitionFlags.CanFind),
+ .of(PropertyDefinitionFlags.CanFind,
+ PropertyDefinitionFlags.CanSet),
ExchangeVersion.Exchange2007_SP1);
/**
From a3dd3755f10b71543d3feda92bb3ffd2b44e244f Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 8 Feb 2019 15:37:11 +0000
Subject: [PATCH 35/70] Release 2.5
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 9d7a21387..c78cde940 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.5-SNAPSHOT
+ 2.5Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 3b9837d4027e63f32aac57811faf07627eafcaff Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 22 Feb 2019 12:54:05 +0000
Subject: [PATCH 36/70] Prepare for release 2.6
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index c78cde940..697359226 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.5
+ 2.6-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From a8d8c0d0b753a8d4bfed8c38c31dd5aefcaf8da9 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 22 Feb 2019 12:54:37 +0000
Subject: [PATCH 37/70] Attachment WIP
---
.../data/property/complex/AttachmentCollection.java | 13 +++++++++++++
.../data/property/complex/FileAttachment.java | 2 +-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/AttachmentCollection.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/AttachmentCollection.java
index b39477312..7f3349284 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/AttachmentCollection.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/AttachmentCollection.java
@@ -153,6 +153,19 @@ public FileAttachment addFileAttachment(String name, byte[] content) {
return fileAttachment;
}
+ /**
+ * Adds a file attachment to the collection.
+ *
+ * @param name the name
+ * @param content accepts byte byte arrays representing the content of the
+ * attachment.
+ * @return FileAttachment
+ */
+ public Attachment addAttachment(Attachment attachment) {
+ this.internalAdd(attachment);
+ return attachment;
+ }
+
/**
* Adds an item attachment to the collection.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/FileAttachment.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/FileAttachment.java
index de3567f36..eee1afcf6 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/FileAttachment.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/FileAttachment.java
@@ -76,7 +76,7 @@ public final class FileAttachment extends Attachment {
*
* @param owner the owner
*/
- protected FileAttachment(Item owner) {
+ public FileAttachment(Item owner) {
super(owner);
}
From 7d6d164747052e96a39648ed8b17654f5635947e Mon Sep 17 00:00:00 2001
From: Hywel Bennett
Date: Mon, 25 Feb 2019 17:35:52 +0000
Subject: [PATCH 38/70] Fixes AllowNewTimeProposal permitted states
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* notification API sends appointments in “invalid” states
---
pom.xml | 2 +-
.../data/core/service/schema/AppointmentSchema.java | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 697359226..ce2212fa4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.6-SNAPSHOT
+ 2.6Exchange Web Services Java APIExchange Web Services (EWS) Java API
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
index 77ae02178..20e9ef617 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/schema/AppointmentSchema.java
@@ -768,8 +768,9 @@ public DeletedOccurrenceInfoCollection createComplexProperty() {
FieldUris.AllowNewTimeProposal, EnumSet.of(
PropertyDefinitionFlags.CanSet,
PropertyDefinitionFlags.CanUpdate,
- PropertyDefinitionFlags.CanFind),
- ExchangeVersion.Exchange2007_SP1);
+ PropertyDefinitionFlags.CanFind,
+ PropertyDefinitionFlags.CanDelete),
+ ExchangeVersion.Exchange2007_SP1, true);
// Defines the IsOnlineMeeting property.
/**
From d35bc280ecde56440cbe26f8880b12daceabd252 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 26 Feb 2019 12:04:22 +0000
Subject: [PATCH 39/70] Prepare for 2.7
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index ce2212fa4..c3c0d62ee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.6
+ 2.7-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From feb68bcf28926ee1033d16d4323a2c76ca412aef Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 27 Feb 2019 17:10:02 +0000
Subject: [PATCH 40/70] Export / Upload API
---
.../data/core/ExchangeService.java | 116 +++++--------
.../data/core/XmlAttributeNames.java | 2 +
.../data/core/XmlElementNames.java | 18 ++
.../data/core/request/ExportItemsRequest.java | 145 ++++++++++++++++
.../data/core/request/UploadItemsRequest.java | 131 +++++++++++++++
.../core/response/ExportItemsResponse.java | 63 +++++++
.../core/response/UploadItemsResponse.java | 25 +++
.../data/core/service/item/UploadItem.java | 83 +++++++++
.../core/request/ExportUploadItemsTest.java | 159 ++++++++++++++++++
.../test-data/ExportItemsRequest.xml | 1 +
.../test-data/ExportItemsResponse.xml | 33 ++++
.../test-data/ExportItemsResponseFail.xml | 23 +++
.../test-data/UploadItemsRequest.xml | 1 +
.../test-data/UploadItemsResponse.xml | 30 ++++
14 files changed, 757 insertions(+), 73 deletions(-)
create mode 100644 src/main/java/microsoft/exchange/webservices/data/core/request/ExportItemsRequest.java
create mode 100644 src/main/java/microsoft/exchange/webservices/data/core/request/UploadItemsRequest.java
create mode 100644 src/main/java/microsoft/exchange/webservices/data/core/response/ExportItemsResponse.java
create mode 100644 src/main/java/microsoft/exchange/webservices/data/core/response/UploadItemsResponse.java
create mode 100644 src/main/java/microsoft/exchange/webservices/data/core/service/item/UploadItem.java
create mode 100644 src/test/java/microsoft/exchange/webservices/data/core/request/ExportUploadItemsTest.java
create mode 100644 src/test/resources/test-data/ExportItemsRequest.xml
create mode 100644 src/test/resources/test-data/ExportItemsResponse.xml
create mode 100644 src/test/resources/test-data/ExportItemsResponseFail.xml
create mode 100644 src/test/resources/test-data/UploadItemsRequest.xml
create mode 100644 src/test/resources/test-data/UploadItemsResponse.xml
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
index f4def5386..e0aab5ca0 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
@@ -71,81 +71,11 @@
import microsoft.exchange.webservices.data.core.exception.service.remote.AccountIsLockedException;
import microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRemoteException;
import microsoft.exchange.webservices.data.core.exception.service.remote.ServiceResponseException;
-import microsoft.exchange.webservices.data.core.request.AddDelegateRequest;
-import microsoft.exchange.webservices.data.core.request.ConvertIdRequest;
-import microsoft.exchange.webservices.data.core.request.CopyFolderRequest;
-import microsoft.exchange.webservices.data.core.request.CopyItemRequest;
-import microsoft.exchange.webservices.data.core.request.CreateAttachmentRequest;
-import microsoft.exchange.webservices.data.core.request.CreateFolderRequest;
-import microsoft.exchange.webservices.data.core.request.CreateItemRequest;
-import microsoft.exchange.webservices.data.core.request.CreateResponseObjectRequest;
-import microsoft.exchange.webservices.data.core.request.CreateUserConfigurationRequest;
-import microsoft.exchange.webservices.data.core.request.DeleteAttachmentRequest;
-import microsoft.exchange.webservices.data.core.request.DeleteFolderRequest;
-import microsoft.exchange.webservices.data.core.request.DeleteItemRequest;
-import microsoft.exchange.webservices.data.core.request.DeleteUserConfigurationRequest;
-import microsoft.exchange.webservices.data.core.request.EmptyFolderRequest;
-import microsoft.exchange.webservices.data.core.request.ExecuteDiagnosticMethodRequest;
-import microsoft.exchange.webservices.data.core.request.ExpandGroupRequest;
-import microsoft.exchange.webservices.data.core.request.FindConversationRequest;
-import microsoft.exchange.webservices.data.core.request.FindFolderRequest;
-import microsoft.exchange.webservices.data.core.request.FindItemRequest;
-import microsoft.exchange.webservices.data.core.request.GetAttachmentRequest;
-import microsoft.exchange.webservices.data.core.request.GetDelegateRequest;
-import microsoft.exchange.webservices.data.core.request.GetEventsRequest;
-import microsoft.exchange.webservices.data.core.request.GetFolderRequest;
-import microsoft.exchange.webservices.data.core.request.GetFolderRequestForLoad;
-import microsoft.exchange.webservices.data.core.request.GetInboxRulesRequest;
-import microsoft.exchange.webservices.data.core.request.GetItemRequest;
-import microsoft.exchange.webservices.data.core.request.GetItemRequestForLoad;
-import microsoft.exchange.webservices.data.core.request.GetPasswordExpirationDateRequest;
-import microsoft.exchange.webservices.data.core.request.GetRoomListsRequest;
-import microsoft.exchange.webservices.data.core.request.GetRoomsRequest;
-import microsoft.exchange.webservices.data.core.request.GetServerTimeZonesRequest;
-import microsoft.exchange.webservices.data.core.request.GetUserAvailabilityRequest;
-import microsoft.exchange.webservices.data.core.request.GetUserConfigurationRequest;
-import microsoft.exchange.webservices.data.core.request.GetUserOofSettingsRequest;
-import microsoft.exchange.webservices.data.core.request.HttpWebRequest;
-import microsoft.exchange.webservices.data.core.request.MoveFolderRequest;
-import microsoft.exchange.webservices.data.core.request.MoveItemRequest;
-import microsoft.exchange.webservices.data.core.request.RemoveDelegateRequest;
-import microsoft.exchange.webservices.data.core.request.ResolveNamesRequest;
-import microsoft.exchange.webservices.data.core.request.SendItemRequest;
-import microsoft.exchange.webservices.data.core.request.SetUserOofSettingsRequest;
-import microsoft.exchange.webservices.data.core.request.SubscribeToPullNotificationsRequest;
-import microsoft.exchange.webservices.data.core.request.SubscribeToPushNotificationsRequest;
-import microsoft.exchange.webservices.data.core.request.SubscribeToStreamingNotificationsRequest;
-import microsoft.exchange.webservices.data.core.request.SyncFolderHierarchyRequest;
-import microsoft.exchange.webservices.data.core.request.SyncFolderItemsRequest;
-import microsoft.exchange.webservices.data.core.request.UnsubscribeRequest;
-import microsoft.exchange.webservices.data.core.request.UpdateDelegateRequest;
-import microsoft.exchange.webservices.data.core.request.UpdateFolderRequest;
-import microsoft.exchange.webservices.data.core.request.UpdateInboxRulesRequest;
-import microsoft.exchange.webservices.data.core.request.UpdateItemRequest;
-import microsoft.exchange.webservices.data.core.request.UpdateUserConfigurationRequest;
-import microsoft.exchange.webservices.data.core.response.ConvertIdResponse;
-import microsoft.exchange.webservices.data.core.response.CreateAttachmentResponse;
-import microsoft.exchange.webservices.data.core.response.CreateResponseObjectResponse;
-import microsoft.exchange.webservices.data.core.response.DelegateManagementResponse;
-import microsoft.exchange.webservices.data.core.response.DelegateUserResponse;
-import microsoft.exchange.webservices.data.core.response.DeleteAttachmentResponse;
-import microsoft.exchange.webservices.data.core.response.FindFolderResponse;
-import microsoft.exchange.webservices.data.core.response.FindItemResponse;
-import microsoft.exchange.webservices.data.core.response.GetAttachmentResponse;
-import microsoft.exchange.webservices.data.core.response.GetDelegateResponse;
-import microsoft.exchange.webservices.data.core.response.GetFolderResponse;
-import microsoft.exchange.webservices.data.core.response.GetItemResponse;
-import microsoft.exchange.webservices.data.core.response.GetServerTimeZonesResponse;
-import microsoft.exchange.webservices.data.core.response.MoveCopyFolderResponse;
-import microsoft.exchange.webservices.data.core.response.MoveCopyItemResponse;
-import microsoft.exchange.webservices.data.core.response.ServiceResponse;
-import microsoft.exchange.webservices.data.core.response.ServiceResponseCollection;
-import microsoft.exchange.webservices.data.core.response.UpdateItemResponse;
+import microsoft.exchange.webservices.data.core.request.*;
+import microsoft.exchange.webservices.data.core.response.*;
import microsoft.exchange.webservices.data.core.service.ServiceObject;
import microsoft.exchange.webservices.data.core.service.folder.Folder;
-import microsoft.exchange.webservices.data.core.service.item.Appointment;
-import microsoft.exchange.webservices.data.core.service.item.Conversation;
-import microsoft.exchange.webservices.data.core.service.item.Item;
+import microsoft.exchange.webservices.data.core.service.item.*;
import microsoft.exchange.webservices.data.messaging.UnifiedMessaging;
import microsoft.exchange.webservices.data.misc.AsyncCallback;
import microsoft.exchange.webservices.data.misc.AsyncRequestResult;
@@ -3069,6 +2999,46 @@ public ServiceResponseCollection setReadStateForItemsInConversa
ServiceErrorHandling.ReturnErrors);
}
+ private ServiceResponseCollection internalExportItems(
+ Iterable itemIds, ServiceErrorHandling errorHandling) throws Exception {
+ ExportItemsRequest request = new ExportItemsRequest(this, errorHandling);
+ request.getItemIds().addRange(itemIds);
+ return request.execute();
+ }
+
+ public ExportItemsResponse exportItem(ItemId itemId) throws Exception {
+ EwsUtilities.validateParam(itemId, "itemId");
+ ServiceResponseCollection responses = internalExportItems(Arrays.asList(itemId),
+ ServiceErrorHandling.ThrowOnError);
+ return responses.getResponseAtIndex(0);
+ }
+
+ public ServiceResponseCollection exportItems(
+ Iterable itemIds) throws Exception {
+ EwsUtilities.validateParamCollection(itemIds.iterator(), "itemIds");
+ return this.internalExportItems(itemIds,
+ ServiceErrorHandling.ReturnErrors);
+ }
+
+ private ServiceResponseCollection internalUploadItems(
+ List items, ServiceErrorHandling errorHandling) throws Exception {
+ UploadItemsRequest request = new UploadItemsRequest(this, errorHandling);
+ request.setItems(items);
+ return request.execute();
+ }
+
+ public UploadItemsResponse uploadItem(UploadItem item) throws Exception {
+ EwsUtilities.validateParam(item, "item");
+ ServiceResponseCollection responses = internalUploadItems(Arrays.asList(item),
+ ServiceErrorHandling.ThrowOnError);
+ return responses.getResponseAtIndex(0);
+ }
+
+ public ServiceResponseCollection uploadItems(
+ List items) throws Exception {
+ return this.internalUploadItems(items,
+ ServiceErrorHandling.ReturnErrors);
+ }
// Id conversion operations
/**
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/XmlAttributeNames.java b/src/main/java/microsoft/exchange/webservices/data/core/XmlAttributeNames.java
index c1d97c3e0..1f4adbb07 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/XmlAttributeNames.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/XmlAttributeNames.java
@@ -156,6 +156,8 @@ public class XmlAttributeNames {
*/
public static final String ConflictResolution = "ConflictResolution";
+ public static final String CreateAction = "CreateAction";
+
/**
* The Constant SendMeetingInvitationsOrCancellations.
*/
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java b/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
index cdd0d23fb..ff6131ee4 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/XmlElementNames.java
@@ -892,6 +892,8 @@ public class XmlElementNames {
*/
public static final String DailyRegeneration = "DailyRegeneration";
+ public static final String Data = "Data";
+
/**
* The Constant WeeklyRegeneration.
*/
@@ -3996,6 +3998,22 @@ public class XmlElementNames {
public static final String DeleteItemResponseMessage =
"DeleteItemResponseMessage";
+ // ExportItems
+ public static final String ExportItems = "ExportItems";
+
+ public static final String ExportItemsResponse = "ExportItemsResponse";
+
+ public static final String ExportItemsResponseMessage =
+ "ExportItemsResponseMessage";
+
+ // ExportItems
+ public static final String UploadItems = "UploadItems";
+
+ public static final String UploadItemsResponse = "UploadItemsResponse";
+
+ public static final String UploadItemsResponseMessage =
+ "UploadItemsResponseMessage";
+
// UpdateItem
/**
* The Constant UpdateItem.
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/ExportItemsRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/ExportItemsRequest.java
new file mode 100644
index 000000000..64478e9f8
--- /dev/null
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/ExportItemsRequest.java
@@ -0,0 +1,145 @@
+/*
+ * The MIT License
+ * Copyright (c) 2012 Microsoft Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package microsoft.exchange.webservices.data.core.request;
+
+import microsoft.exchange.webservices.data.core.*;
+import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
+import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
+import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling;
+import microsoft.exchange.webservices.data.core.response.ExportItemsResponse;
+import microsoft.exchange.webservices.data.misc.ItemIdWrapperList;
+
+/**
+ * Represents a DeleteItem request.
+ */
+public final class ExportItemsRequest extends MultiResponseServiceRequest {
+
+ /**
+ * The item ids.
+ */
+ private ItemIdWrapperList itemIds = new ItemIdWrapperList();
+
+ /**
+ * Initializes a new instance of the class.
+ *
+ * @param service the service
+ * @param errorHandlingMode the error handling mode
+ * @throws Exception
+ */
+ public ExportItemsRequest(ExchangeService service, ServiceErrorHandling errorHandlingMode)
+ throws Exception {
+ super(service, errorHandlingMode);
+ }
+
+ @Override
+ protected void validate() throws Exception {
+ EwsUtilities.validateParamCollection(itemIds.iterator(), "itemIds");
+ }
+
+ /**
+ * Gets the expected response message count.
+ *
+ * @return Number of expected response messages
+ */
+ @Override
+ protected int getExpectedResponseMessageCount() {
+ return itemIds.getCount();
+ }
+
+ /**
+ * Creates the service response.
+ *
+ * @param service the service
+ * @param responseIndex the response index
+ * @return Service response.
+ */
+ @Override
+ protected ExportItemsResponse createServiceResponse(ExchangeService service,
+ int responseIndex) {
+ return new ExportItemsResponse();
+ }
+
+ /**
+ * Gets the name of the XML element.
+ *
+ * @return XML element name
+ */
+ @Override public String getXmlElementName() {
+ return XmlElementNames.ExportItems;
+ }
+
+ /**
+ * Gets the name of the response XML element.
+ *
+ * @return XML element name
+ */
+ @Override
+ protected String getResponseXmlElementName() {
+ return XmlElementNames.ExportItemsResponse;
+ }
+
+ /**
+ * Gets the name of the response message XML element.
+ *
+ * @return XML element name
+ */
+ @Override
+ protected String getResponseMessageXmlElementName() {
+ return XmlElementNames.ExportItemsResponseMessage;
+ }
+
+ /**
+ * Writes XML elements.
+ *
+ * @param writer the writer
+ * @throws Exception the exception
+ */
+ @Override
+ protected void writeElementsToXml(EwsServiceXmlWriter writer)
+ throws Exception {
+ itemIds.writeToXml(writer, XmlNamespace.Messages,
+ XmlElementNames.ItemIds);
+ }
+
+ /**
+ * Gets the request version.
+ *
+ * @return Earliest Exchange version in which this request is supported.
+ */
+ @Override
+ protected ExchangeVersion getMinimumRequiredServerVersion() {
+ return ExchangeVersion.Exchange2010_SP1;
+ }
+
+ /**
+ * Gets the item ids.
+ *
+ * @return the item ids
+ */
+ public ItemIdWrapperList getItemIds() {
+ return itemIds;
+ }
+
+
+}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/UploadItemsRequest.java b/src/main/java/microsoft/exchange/webservices/data/core/request/UploadItemsRequest.java
new file mode 100644
index 000000000..9d21ad324
--- /dev/null
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/UploadItemsRequest.java
@@ -0,0 +1,131 @@
+package microsoft.exchange.webservices.data.core.request;
+
+import microsoft.exchange.webservices.data.core.*;
+import microsoft.exchange.webservices.data.core.enumeration.misc.*;
+import microsoft.exchange.webservices.data.core.enumeration.service.error.*;
+import microsoft.exchange.webservices.data.core.response.*;
+import microsoft.exchange.webservices.data.core.service.item.*;
+
+import java.util.*;
+
+public class UploadItemsRequest extends MultiResponseServiceRequest {
+
+ private List items;
+
+ /**
+ * The item ids.
+ */
+
+ /**
+ * Initializes a new instance of the class.
+ *
+ * @param service the service
+ * @param errorHandlingMode the error handling mode
+ * @throws Exception
+ */
+ public UploadItemsRequest(ExchangeService service, ServiceErrorHandling errorHandlingMode)
+ throws Exception {
+ super(service, errorHandlingMode);
+ }
+
+ /**
+ * Validate request.
+ *
+ * @throws Exception the exception
+ */
+ @Override
+ protected void validate() throws Exception {
+ super.validate();
+ EwsUtilities.validateParam(items, "items");
+ for (UploadItem i : items) {
+ i.validate();
+ }
+ }
+
+ /**
+ * Gets the expected response message count.
+ *
+ * @return Number of expected response messages
+ */
+ @Override
+ protected int getExpectedResponseMessageCount() {
+ return items.size();
+ }
+
+ /**
+ * Creates the service response.
+ *
+ * @param service the service
+ * @param responseIndex the response index
+ * @return Service response.
+ */
+ @Override
+ protected UploadItemsResponse createServiceResponse(ExchangeService service,
+ int responseIndex) {
+ return new UploadItemsResponse();
+ }
+
+ /**
+ * Gets the name of the XML element.
+ *
+ * @return XML element name
+ */
+ @Override
+ public String getXmlElementName() {
+ return XmlElementNames.UploadItems;
+ }
+
+ /**
+ * Gets the name of the response XML element.
+ *
+ * @return XML element name
+ */
+ @Override
+ protected String getResponseXmlElementName() {
+ return XmlElementNames.UploadItemsResponse;
+ }
+
+ /**
+ * Gets the name of the response message XML element.
+ *
+ * @return XML element name
+ */
+ @Override
+ protected String getResponseMessageXmlElementName() {
+ return XmlElementNames.UploadItemsResponseMessage;
+ }
+
+ /**
+ * Writes XML elements.
+ *
+ * @param writer the writer
+ * @throws Exception the exception
+ */
+ @Override
+ protected void writeElementsToXml(EwsServiceXmlWriter writer)
+ throws Exception {
+ if (!items.isEmpty()) {
+ writer.writeStartElement(XmlNamespace.Messages, XmlElementNames.Items);
+ items.stream().forEach(item -> item.writeToXml(writer));
+ writer.writeEndElement();
+ }
+ }
+
+ /**
+ * Gets the request version.
+ *
+ * @return Earliest Exchange version in which this request is supported.
+ */
+ @Override
+ protected ExchangeVersion getMinimumRequiredServerVersion() {
+ return ExchangeVersion.Exchange2010_SP1;
+ }
+
+ public void setItems(List items) {
+ this.items = items;
+ }
+
+ public List getItems() {
+ return items;
+ }
+}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/response/ExportItemsResponse.java b/src/main/java/microsoft/exchange/webservices/data/core/response/ExportItemsResponse.java
new file mode 100644
index 000000000..7e7757efb
--- /dev/null
+++ b/src/main/java/microsoft/exchange/webservices/data/core/response/ExportItemsResponse.java
@@ -0,0 +1,63 @@
+/*
+ * The MIT License
+ * Copyright (c) 2012 Microsoft Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package microsoft.exchange.webservices.data.core.response;
+
+import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
+import microsoft.exchange.webservices.data.core.EwsUtilities;
+import microsoft.exchange.webservices.data.core.ExchangeService;
+import microsoft.exchange.webservices.data.core.XmlElementNames;
+import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
+import microsoft.exchange.webservices.data.core.enumeration.service.ServiceResult;
+import microsoft.exchange.webservices.data.core.service.ServiceObject;
+import microsoft.exchange.webservices.data.core.service.item.Item;
+import microsoft.exchange.webservices.data.property.complex.ItemId;
+
+public final class ExportItemsResponse extends ServiceResponse {
+
+ private ItemId itemId;
+
+ private byte[] data;
+
+ @Override
+ protected void readElementsFromXml(EwsServiceXmlReader reader) throws Exception {
+ super.readElementsFromXml(reader);
+
+ reader.read();
+
+ itemId = new ItemId();
+ itemId.setNamespace(XmlNamespace.Messages);
+ itemId.loadFromXml(reader, XmlElementNames.ItemId);
+
+ reader.readStartElement(XmlNamespace.Messages, XmlElementNames.Data);
+ data = reader.readBase64ElementValue();
+ }
+
+ public ItemId getItemId() {
+ return this.itemId;
+ }
+
+ public byte[] getData() {
+ return data;
+ }
+}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/response/UploadItemsResponse.java b/src/main/java/microsoft/exchange/webservices/data/core/response/UploadItemsResponse.java
new file mode 100644
index 000000000..f9a273dd5
--- /dev/null
+++ b/src/main/java/microsoft/exchange/webservices/data/core/response/UploadItemsResponse.java
@@ -0,0 +1,25 @@
+package microsoft.exchange.webservices.data.core.response;
+
+import microsoft.exchange.webservices.data.core.*;
+import microsoft.exchange.webservices.data.core.enumeration.misc.*;
+import microsoft.exchange.webservices.data.property.complex.*;
+
+public class UploadItemsResponse extends ServiceResponse {
+
+ private ItemId itemId;
+
+ @Override
+ protected void readElementsFromXml(EwsServiceXmlReader reader) throws Exception {
+ super.readElementsFromXml(reader);
+
+ reader.read();
+
+ itemId = new ItemId();
+ itemId.setNamespace(XmlNamespace.Messages);
+ itemId.loadFromXml(reader, XmlElementNames.ItemId);
+ }
+
+ public ItemId getItemId() {
+ return this.itemId;
+ }
+}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/UploadItem.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/UploadItem.java
new file mode 100644
index 000000000..763d216f1
--- /dev/null
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/UploadItem.java
@@ -0,0 +1,83 @@
+package microsoft.exchange.webservices.data.core.service.item;
+
+import microsoft.exchange.webservices.data.core.*;
+import microsoft.exchange.webservices.data.core.enumeration.misc.*;
+import microsoft.exchange.webservices.data.property.complex.*;
+
+public class UploadItem {
+
+ public enum CreateAction {
+ CreateNew,
+ Update
+ }
+
+ private CreateAction createAction;
+
+ private FolderId parentFolderId;
+
+ private ItemId itemId;
+
+ private byte[] data;
+
+ public void writeToXml(EwsServiceXmlWriter writer) {
+ try {
+ writer.writeStartElement(XmlNamespace.Types, XmlElementNames.Item);
+ writer.writeAttributeValue(XmlAttributeNames.CreateAction, createAction);
+ parentFolderId.writeToXml(writer, XmlElementNames.ParentFolderId);
+ if (itemId != null) {
+ itemId.writeToXml(writer);
+ }
+ writer.writeStartElement(XmlNamespace.Types, XmlElementNames.Data);
+ writer.writeBase64ElementValue(data);
+ writer.writeEndElement();
+ writer.writeEndElement();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void validate() throws Exception {
+ EwsUtilities.validateParam(createAction, "createAction");
+ EwsUtilities.validateParam(parentFolderId, "parentFolderId");
+ EwsUtilities.validateParam(data, "data");
+ if (createAction == CreateAction.Update) {
+ EwsUtilities.validateParam(itemId, "itemId required for updates");
+ }
+ }
+
+ public CreateAction getCreateAction() {
+ return createAction;
+ }
+
+ public UploadItem setCreateAction(CreateAction createAction) {
+ this.createAction = createAction;
+ return this;
+ }
+
+ public FolderId getParentFolderId() {
+ return parentFolderId;
+ }
+
+ public UploadItem setParentFolderId(FolderId parentFolderId) {
+ this.parentFolderId = parentFolderId;
+ return this;
+ }
+
+ public ItemId getItemId() {
+ return itemId;
+ }
+
+ public UploadItem setItemId(ItemId itemId) {
+ this.itemId = itemId;
+ return this;
+ }
+
+ public byte[] getData() {
+ return data;
+ }
+
+ public UploadItem setData(byte[] data) {
+ this.data = data;
+ return this;
+ }
+}
diff --git a/src/test/java/microsoft/exchange/webservices/data/core/request/ExportUploadItemsTest.java b/src/test/java/microsoft/exchange/webservices/data/core/request/ExportUploadItemsTest.java
new file mode 100644
index 000000000..1800f2662
--- /dev/null
+++ b/src/test/java/microsoft/exchange/webservices/data/core/request/ExportUploadItemsTest.java
@@ -0,0 +1,159 @@
+package microsoft.exchange.webservices.data.core.request;
+
+import microsoft.exchange.webservices.data.core.*;
+import microsoft.exchange.webservices.data.core.enumeration.misc.*;
+import microsoft.exchange.webservices.data.core.enumeration.service.error.*;
+import microsoft.exchange.webservices.data.core.exception.service.remote.*;
+import microsoft.exchange.webservices.data.core.response.*;
+import microsoft.exchange.webservices.data.core.service.item.*;
+import microsoft.exchange.webservices.data.core.service.item.UploadItem.*;
+import microsoft.exchange.webservices.data.property.complex.*;
+import org.apache.commons.io.*;
+import org.junit.*;
+import org.junit.runner.*;
+import org.junit.runners.*;
+import org.mockito.*;
+
+import java.io.*;
+import java.util.*;
+
+import static org.hamcrest.MatcherAssert.*;
+import static org.hamcrest.Matchers.*;
+import static org.hamcrest.core.Is.is;
+import static org.mockito.Mockito.*;
+
+@RunWith(JUnit4.class)
+public class ExportUploadItemsTest {
+
+ private static final String DATA = "DATA";
+
+ private static byte[] fixture(String folder, String name) {
+ try (InputStream in = fixtureStream(folder, name)) {
+ return IOUtils.toByteArray(in);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static InputStream fixtureStream(String folder, String name) {
+ return ExportUploadItemsTest.class
+ .getResourceAsStream(String.format("/%s/%s.xml", folder, name));
+ }
+
+ private final ExchangeService exchangeService = Mockito.mock(ExchangeService.class);
+
+ @Before
+ public void setUp() {
+ when(exchangeService.getRequestedServerVersion()).thenReturn(ExchangeVersion.Exchange2013);
+ when(exchangeService.getDateTimePrecision()).thenReturn(DateTimePrecision.Default);
+ }
+
+ @Test
+ public void testExportRequest() throws Exception {
+ ExportItemsRequest request = new ExportItemsRequest(exchangeService, ServiceErrorHandling.ReturnErrors);
+ request.getItemIds().addRange(Arrays.asList(new ItemId("12345"), new ItemId("23456")));
+
+ try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+ EwsServiceXmlWriter writer = new EwsServiceXmlWriter(exchangeService, os);
+ request.writeToXml(writer);
+ assertThat(os.toByteArray(), is(equalTo(fixture("test-data", "ExportItemsRequest"))));
+ }
+
+ try (InputStream in = fixtureStream("test-data", "ExportItemsResponse")) {
+ EwsServiceXmlReader reader = new EwsServiceXmlReader(in, exchangeService);
+ ServiceResponseCollection responses = request.readResponse(reader);
+ assertThat(responses.getCount(), is(equalTo(2)));
+
+ ExportItemsResponse response1 = responses.getResponseAtIndex(0);
+ assertThat(response1.getItemId().getUniqueId(), is(equalTo("AAMkADNiMDU5YzBhLTgzYzgtNGMxZi1iYTZlLTgzOTkxMzBjYmVhZgBGAAAAAABPTDZfYrvVTr8HgEV+HADsBwCLjN8GwkCsQKoM14gF2rmPAAAAAAENAACLjN8GwkCsQKoM14gF2rmPAAAiEWxoAAA=")));
+ ExportItemsResponse response2 = responses.getResponseAtIndex(1);
+ assertThat(response2.getItemId().getUniqueId(), is(equalTo("AAMkADNiMDU5YzBhLTgzYzgtNGMxZi1iYTZlLTgzOTkxMzBjYmVhZgBGAAAAAABPTDZfYrvVTr8HgEV+HADsBwCLjN8GwkCsQKoM14gF2rmPAAAAAAENAACLjN8GwkCsQKoM14gF2rmPAAAiEWxoAAB=")));
+ }
+ }
+
+ @Test(expected = ServiceResponseException.class)
+ public void testExportRequestFails() throws Exception {
+ ExportItemsRequest request = new ExportItemsRequest(exchangeService, ServiceErrorHandling.ThrowOnError);
+ request.getItemIds().addRange(Arrays.asList(new ItemId("12345")));
+
+ try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+ EwsServiceXmlWriter writer = new EwsServiceXmlWriter(exchangeService, os);
+ request.writeToXml(writer);
+ }
+
+ try (InputStream in = fixtureStream("test-data", "ExportItemsResponseFail")) {
+ EwsServiceXmlReader reader = new EwsServiceXmlReader(in, exchangeService);
+ ServiceResponseCollection responses = request.readResponse(reader);
+ responses.getResponseAtIndex(0).throwIfNecessary();
+ }
+ }
+
+ @Test
+ public void testUploadRequest() throws Exception {
+ UploadItemsRequest request = new UploadItemsRequest(exchangeService, ServiceErrorHandling.ReturnErrors);
+
+ UploadItem uploadItem1 = new UploadItem();
+ uploadItem1.setCreateAction(CreateAction.CreateNew);
+ uploadItem1.setParentFolderId(new FolderId("1234"));
+ uploadItem1.setData(DATA.getBytes("UTF-8"));
+
+ UploadItem uploadItem2 = new UploadItem();
+ uploadItem2.setCreateAction(CreateAction.Update);
+ uploadItem2.setParentFolderId(new FolderId("2345"));
+ uploadItem2.setItemId(new ItemId("3456"));
+ uploadItem2.setData(DATA.getBytes("UTF-8"));
+
+ request.setItems(Arrays.asList(uploadItem1, uploadItem2));
+
+ try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
+ EwsServiceXmlWriter writer = new EwsServiceXmlWriter(exchangeService, os);
+ request.writeToXml(writer);
+ assertThat(os.toByteArray(), is(equalTo(fixture("test-data", "UploadItemsRequest"))));
+ }
+
+ try (InputStream in = fixtureStream("test-data", "UploadItemsResponse")) {
+ EwsServiceXmlReader reader = new EwsServiceXmlReader(in, exchangeService);
+ ServiceResponseCollection responses = request.readResponse(reader);
+ assertThat(responses.getCount(), is(equalTo(2)));
+
+ UploadItemsResponse response1 = responses.getResponseAtIndex(0);
+ assertThat(response1.getItemId().getUniqueId(), is(equalTo("AAMkADhhUFZ/AAA=")));
+ UploadItemsResponse response2 = responses.getResponseAtIndex(1);
+ assertThat(response2.getItemId().getUniqueId(), is(equalTo("AAMkADhhOGZ7AAA=")));
+ }
+ }
+
+ @Test(expected = Exception.class)
+ public void testUploadRequestValidateEmpty() throws Exception {
+ UploadItem item = new UploadItem();
+ item.validate();
+ }
+
+ @Test
+ public void testUploadRequestValidateFine() throws Exception {
+ UploadItem item = new UploadItem();
+ item.setData(new byte[]{});
+ item.setParentFolderId(new FolderId("1234"));
+ item.setCreateAction(CreateAction.CreateNew);
+ item.validate();
+ }
+
+ @Test(expected = Exception.class)
+ public void testUploadRequestValidateUpdateFails() throws Exception {
+ UploadItem item = new UploadItem();
+ item.setData(new byte[]{});
+ item.setParentFolderId(new FolderId("1234"));
+ item.setCreateAction(CreateAction.Update);
+ item.validate();
+ }
+
+ @Test
+ public void testUploadRequestValidateUpdateFine() throws Exception {
+ UploadItem item = new UploadItem();
+ item.setData(new byte[]{});
+ item.setParentFolderId(new FolderId("1234"));
+ item.setCreateAction(CreateAction.Update);
+ item.setItemId(new ItemId("1234"));
+ item.validate();
+ }
+}
diff --git a/src/test/resources/test-data/ExportItemsRequest.xml b/src/test/resources/test-data/ExportItemsRequest.xml
new file mode 100644
index 000000000..2bdb58ac4
--- /dev/null
+++ b/src/test/resources/test-data/ExportItemsRequest.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/test/resources/test-data/ExportItemsResponse.xml b/src/test/resources/test-data/ExportItemsResponse.xml
new file mode 100644
index 000000000..577ca6524
--- /dev/null
+++ b/src/test/resources/test-data/ExportItemsResponse.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+ NoError
+
+
+ AQAAAAgAAAAAAAAAAQAAAAMAAAAYAAAAAQAAAAcDAgAAAAAAwAAAAAAAAEYAJACABAAAAAYAAAABDzeGeBcCAAAAUEAAAAMAFwABAAAAsIQaACAAAABJAFAATQAuAEEAcABwAG8AaQBuAHQAbQBlAG4AdAAAAAMAJgAAAAAACwApAAAAAwA2AAAAAACwhDcABAAAADQAAABAADkAhHw2Y4rO1AECATsAgAAAAEVYOi9PPUVYQ0hBTkdFL09VPUVYQ0hBTkdFIEFETUlOSVNUUkFUSVZFIEdST1VQIChGWURJQk9IRjIzU1BETFQpL0NOPVJFQ0lQSUVOVFMvQ049RDY3OTFDRjA0MzIxNDgxMUE0OEM3OTI1MkZCQjc2QUMtVEVTVCBVU0VSIDEAsIQ9AAIAAAAAAAIBQQCZAAAAAAAAANynQMjAQhAatLkIACsv4YIBAAAAAAAAAC9vPUV4Y2hhbmdlL291PUV4Y2hhbmdlIEFkbWluaXN0cmF0aXZlIEdyb3VwIChGWURJQk9IRjIzU1BETFQpL2NuPVJlY2lwaWVudHMvY249ZDY3OTFjZjA0MzIxNDgxMWE0OGM3OTI1MmZiYjc2YWMtdGVzdCB1c2VyIDEAsIRCABgAAAB0AGUAcwB0ACAAdQBzAGUAcgAgADEAAABAAGAAAHg6lYvO1AFAAGEAAKwcxo/O1AEDAGIAgd4yfgsAYwABALCEZAAGAAAARQBYAAAAsIRlAPoAAAAvAE8APQBFAFgAQwBIAEEATgBHAEUALwBPAFUAPQBFAFgAQwBIAEEATgBHAEUAIABBAEQATQBJAE4ASQBTAFQAUgBBAFQASQBWAEUAIABHAFIATwBVAFAAIAAoAEYAWQBEAEkAQgBPAEgARgAyADMAUwBQAEQATABUACkALwBDAE4APQBSAEUAQwBJAFAASQBFAE4AVABTAC8AQwBOAD0ARAA2ADcAOQAxAEMARgAwADQAMwAyADEANAA4ADEAMQBBADQAOABDADcAOQAyADUAMgBGAEIAQgA3ADYAQQBDAC0AVABFAFMAVAAgAFUAUwBFAFIAIAAxAAAAsIRwAAQAAAA0AAAAAgFxABYAAAAB1M6KWC74jFJYxh/SQJkngddl9l0sCwAGDAAACwAXDAEAAgEZDJkAAAAAAAAA3KdAyMBCEBq0uQgAKy/hggEAAAAAAAAAL289RXhjaGFuZ2Uvb3U9RXhjaGFuZ2UgQWRtaW5pc3RyYXRpdmUgR3JvdXAgKEZZRElCT0hGMjNTUERMVCkvY249UmVjaXBpZW50cy9jbj1kNjc5MWNmMDQzMjE0ODExYTQ4Yzc5MjUyZmJiNzZhYy10ZXN0IHVzZXIgMQCwhBoMGAAAAHQAZQBzAHQAIAB1AHMAZQByACAAMQAAAAIBHQyAAAAARVg6L089RVhDSEFOR0UvT1U9RVhDSEFOR0UgQURNSU5JU1RSQVRJVkUgR1JPVVAgKEZZRElCT0hGMjNTUERMVCkvQ049UkVDSVBJRU5UUy9DTj1ENjc5MUNGMDQzMjE0ODExQTQ4Qzc5MjUyRkJCNzZBQy1URVNUIFVTRVIgMQCwhB4MBgAAAEUAWAAAALCEHwz6AAAALwBPAD0ARQBYAEMASABBAE4ARwBFAC8ATwBVAD0ARQBYAEMASABBAE4ARwBFACAAQQBEAE0ASQBOAEkAUwBUAFIAQQBUAEkAVgBFACAARwBSAE8AVQBQACAAKABGAFkARABJAEIATwBIAEYAMgAzAFMAUABEAEwAVAApAC8AQwBOAD0AUgBFAEMASQBQAEkARQBOAFQAUwAvAEMATgA9AEQANgA3ADkAMQBDAEYAMAA0ADMAMgAxADQAOAAxADEAQQA0ADgAQwA3ADkAMgA1ADIARgBCAEIANwA2AEEAQwAtAFQARQBTAFQAIABVAFMARQBSACAAMQAAALCEBQ4SAAAAQwBhAGwAZQBuAGQAYQByAAAAQAAGDoR8NmOKztQBAwAHDhEEAACwhB0OBAAAADQAAAADACMOOAAAAAMALw44AAAAAgFLDhAAAAAOCheTbP8mRLo5BRSyr05CAgFMDhAAAAAOCheTbP8mRLo5BRSyr05CAgFYDhwAAAABBQAAAAAABRUAAAC+Hl36qX/3pCBTx+9zBAAAAgFZDhwAAAABBQAAAAAABRUAAAC+Hl36qX/3pCBTx+9zBAAACwDNDgAAQAACD4R8NmOKztQBQAAKDwB4OpWLztQBAwD3DwEAAAACARMQMgIAADxodG1sPjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXMtYXNjaWkiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PCEtLSBQIHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO30gLS0+PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5IGRpcj0ibHRyIj4NCjxkaXYgaWQ9ImRpdnRhZ2RlZmF1bHR3cmFwcGVyIiBzdHlsZT0iZm9udC1zaXplOjEycHQ7Y29sb3I6IzAwMDAwMDtmb250LWZhbWlseTpDYWxpYnJpLEhlbHZldGljYSxzYW5zLXNlcmlmOyIgZGlyPSJsdHIiPg0KPHA+PGltZyBzaXplPSIzMzgzIiBjb250ZW50dHlwZT0iaW1hZ2UvZ2lmIiBpZD0iaW1nNDg5ODg4IiBzdHlsZT0ibWF4LXdpZHRoOiA5OS45JTsgdXNlci1zZWxlY3Q6IG5vbmU7IiBjb250ZXh0aWQ9ImltZzU2NzgxNCIgdGFiaW5kZXg9IjAiIHNyYz0iY2lkOjRkMjk4YzMxLTEyYWUtNGRmYy05ZGUwLWZhYTFkN2UwMWYyNyI+PGJyPg0KPGJyPg0KPC9wPg0KPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQoDABYQAwAAALCENRBqAAAAPABhADEAMQBjAGYAMQBjADcAYQA5AGUAZAA0AGIAYQBlAGIAMQBlADcANwBkAGQAMQAwADUAMABkADkAZQAyAGIAQABiAHIAZQBnAGEAdwBuAC4AcwB1AHIAZQAuAHYAaQBuAGUAPgAAAAMAExIAAAAAQAAHMLeFMmOKztQBQAAIMIV8NmOKztQBAgELMBAAAABV7gdq3gPVRoVzB4q45n99CwAWMAEACwBAOgEAsITZPwIAAAAAAAMA3j+fTgAAAwDxPwkIAACwhPg/GAAAAHQAZQBzAHQAIAB1AHMAZQByACAAMgAAAAIB+T+ZAAAAAAAAANynQMjAQhAatLkIACsv4YIBAAAAAAAAAC9PPUVYQ0hBTkdFL09VPUVYQ0hBTkdFIEFETUlOSVNUUkFUSVZFIEdST1VQIChGWURJQk9IRjIzU1BETFQpL0NOPVJFQ0lQSUVOVFMvQ049MTAwMjBBNUEzQTMwNENGRTlCRkY5NTk2OUI3MDgyNjYtVEVTVCBVU0VSIDIAsIT6PxgAAAB0AGUAcwB0ACAAdQBzAGUAcgAgADIAAAACAfs/mQAAAAAAAADcp0DIwEIQGrS5CAArL+GCAQAAAAAAAAAvTz1FWENIQU5HRS9PVT1FWENIQU5HRSBBRE1JTklTVFJBVElWRSBHUk9VUCAoRllESUJPSEYyM1NQRExUKS9DTj1SRUNJUElFTlRTL0NOPTEwMDIwQTVBM0EzMDRDRkU5QkZGOTU5NjlCNzA4MjY2LVRFU1QgVVNFUiAyAAMA/T/kBAAAsIQiQAYAAABFAFgAAACwhCNA+gAAAC8ATwA9AEUAWABDAEgAQQBOAEcARQAvAE8AVQA9AEUAWABDAEgAQQBOAEcARQAgAEEARABNAEkATgBJAFMAVABSAEEAVABJAFYARQAgAEcAUgBPAFUAUAAgACgARgBZAEQASQBCAE8ASABGADIAMwBTAFAARABMAFQAKQAvAEMATgA9AFIARQBDAEkAUABJAEUATgBUAFMALwBDAE4APQAxADAAMAAyADAAQQA1AEEAMwBBADMAMAA0AEMARgBFADkAQgBGAEYAOQA1ADkANgA5AEIANwAwADgAMgA2ADYALQBUAEUAUwBUACAAVQBTAEUAUgAgADIAAACwhCRABgAAAEUAWAAAALCEJUD6AAAALwBPAD0ARQBYAEMASABBAE4ARwBFAC8ATwBVAD0ARQBYAEMASABBAE4ARwBFACAAQQBEAE0ASQBOAEkAUwBUAFIAQQBUAEkAVgBFACAARwBSAE8AVQBQACAAKABGAFkARABJAEIATwBIAEYAMgAzAFMAUABEAEwAVAApAC8AQwBOAD0AUgBFAEMASQBQAEkARQBOAFQAUwAvAEMATgA9ADEAMAAwADIAMABBADUAQQAzAEEAMwAwADQAQwBGAEUAOQBCAEYARgA5ADUAOQA2ADkAQgA3ADAAOAAyADYANgAtAFQARQBTAFQAIABVAFMARQBSACAAMgAAALCEMEBaAAAAZAA2ADcAOQAxAGMAZgAwADQAMwAyADEANAA4ADEAMQBhADQAOABjADcAOQAyADUAMgBmAGIAYgA3ADYAYQBjAC0AdABlAHMAdAAgAHUAcwBlAHIAIAAxAAAAsIQxQFoAAABkADYANwA5ADEAYwBmADAANAAzADIAMQA0ADgAMQAxAGEANAA4AGMANwA5ADIANQAyAGYAYgBiADcANgBhAGMALQB0AGUAcwB0ACAAdQBzAGUAcgAgADEAAACwhDhAGAAAAHQAZQBzAHQAIAB1AHMAZQByACAAMgAAALCEOUAYAAAAdABlAHMAdAAgAHUAcwBlAHIAIAAyAAAAAwBZQAAAAAADAFpAAAAAALCEAV04AAAAdABlAHMAdAB1AHMAZQByADEAQABiAHIAZQBnAGEAdwBuAC4AcwB1AHIAZQAuAHYAaQBuAGUAAACwhAJdOAAAAHQAZQBzAHQAdQBzAGUAcgAxAEAAYgByAGUAZwBhAHcAbgAuAHMAdQByAGUALgB2AGkAbgBlAAAAsIQKXTgAAAB0AGUAcwB0AHUAcwBlAHIAMgBAAGIAcgBlAGcAYQB3AG4ALgBzAHUAcgBlAC4AdgBpAG4AZQAAALCEC104AAAAdABlAHMAdAB1AHMAZQByADIAQABiAHIAZQBnAGEAdwBuAC4AcwB1AHIAZQAuAHYAaQBuAGUAAAACAeFlFgAAAIuM3wbCQKxAqgzXiAXauY8AAAAAAQ0DAMNm5AQAAAsAyIAIIAYAAAAAAMAAAAAAAABGABSFAAAAAAsAyYAIIAYAAAAAAMAAAAAAAABGAAaFAAAAAEAAzYAIIAYAAAAAAMAAAAAAAABGAAKFAAAAeDqVi87UAQIBz4ACIAYAAAAAAMAAAAAAAABGADOCAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwDRgAggBgAAAAAAwAAAAAAAAEYAA4UAAAEAAwDSgAggBgAAAAAAwAAAAAAAAEYAAYUAAA8AAABAANOACCAGAAAAAADAAAAAAAAARgBghQAAAF7JfInO1AGwhNSAAiAGAAAAAADAAAAAAAAARgA0ggAAQgAAACgAVQBUAEMAKQAgAEMAbwBvAHIAZABpAG4AYQB0AGUAZAAgAFUAbgBpAHYAZQByAHMAYQBsACAAVABpAG0AZQAAAEAA2YAIIAYAAAAAAMAAAAAAAABGABaFAAAAeDqVi87UAUAA2oAIIAYAAAAAAMAAAAAAAABGABeFAAAArBzGj87UAQIB3IACIAYAAAAAAMAAAAAAAABGAF6CAABSAAAAAgEMAAIAAwBVAFQAQwABAAIBPgACAAEAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCEI4GGAwIAAAAAAMAAAAAAAABGAWEAYwBjAGUAcAB0AGwAYQBuAGcAdQBhAGcAZQAAABoAAABlAG4ALQBHAEIALAAgAGUAbgAtAFUAUwAAAAMAKIECIAYAAAAAAMAAAAAAAABGABeCAAADAAAAQABfgQIgBgAAAAAAwAAAAAAAAEYADoIAAACsHMaPztQBQABhgQIgBgAAAAAAwAAAAAAAAEYADYIAAAB4OpWLztQBAgFigZDa2G4LRRsQmNoAqgA/EwUAAwAAADgAAAAEAAAAggDgAHTFtxAaguAIAAAAAHtYJFiKztQBAAAAAAAAAAAQAAAAPqlDfMEz+Eexh5UmxzSNqQIBY4GQ2thuC0UbEJjaAKoAPxMFACMAAAA4AAAABAAAAIIA4AB0xbcQGoLgCAAAAAB7WCRYis7UAQAAAAAAAAAAEAAAAD6pQ3zBM/hHsYeVJsc0jakLAGSBAiAGAAAAAADAAAAAAAAARgAjggAAAAALAGWBkNrYbgtFGxCY2gCqAD8TBQAKAAAAAACwhGaBAiAGAAAAAADAAAAAAAAARgAIggAABAAAADQAAAADAGeBAiAGAAAAAADAAAAAAAAARgAYggAABQAAAAMAaIECIAYAAAAAAMAAAAAAAABGAAGCAAAAAAAAQABpgZDa2G4LRRsQmNoAqgA/EwUAGgAAAH7Z22KKztQBQABsgQIgBgAAAAAAwAAAAAAAAEYALYIAAEEzNGOKztQBFABtgQIgBgAAAAAAwAAAAAAAAEYALIIAAAgANwYBAA8AAgFvgQIgBgAAAAAAwAAAAAAAAEYAX4IAAFIAAAACAQwAAgADAFUAVABDAAEAAgE+AAIAAQABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwBwgQcOABEbtdZAryHKqF7asdAAFgAAAAEAAAADAHKBAiAGAAAAAADAAAAAAAAARgAEggAAAAAAAAsAc4ECIAYAAAAAAMAAAAAAAABGABWCAAAAAAMAdIECIAYAAAAAAMAAAAAAAABGAAWCAAABAAAAQACsgQIgBgAAAAAAwAAAAAAAAEYANoIAAABs4z5h7dUBQACtgQIgBgAAAAAAwAAAAAAAAEYANYIAAAA4AQ5d7dUBCwCygQIgBgAAAAAAwAAAAAAAAEYAKYIAAAAACwDBgZDa2G4LRRsQmNoAqgA/EwUABQAAAAAAsITIgVniGaeaKrhPurM6nwKXDksBTABvAGMAYQB0AGkAbwBuAEQAaQBzAHAAbABhAHkATgBhAG0AZQAAAAQAAAA0AAAAsITJgVniGaeaKrhPurM6nwKXDksBTABvAGMAYQB0AGkAbwBuAEEAbgBuAG8AdABhAHQAaQBvAG4AAAACAAAAAAADAMqBWeIZp5oquE+6szqfApcOSwFMAG8AYwBhAHQAaQBvAG4AUwBvAHUAcgBjAGUAAAAAAAAAsITLgVniGaeaKrhPurM6nwKXDksBTABvAGMAYQB0AGkAbwBuAFUAcgBpAAAAAgAAAAAABQDMgVniGaeaKrhPurM6nwKXDksBTABhAHQAaQB0AHUAZABlAAAAAAAAAAAA+P8FAM2BWeIZp5oquE+6szqfApcOSwFMAG8AbgBnAGkAdAB1AGQAZQAAAAAAAAAAAPj/BQDOgVniGaeaKrhPurM6nwKXDksBQQBjAGMAdQByAGEAYwB5AAAAAAAAAAAA+P8FAM+BWeIZp5oquE+6szqfApcOSwFBAGwAdABpAHQAdQBkAGUAAAAAAAAAAAD4/wUA0IFZ4hmnmiq4T7qzOp8Clw5LAUEAbAB0AGkAdAB1AGQAZQBBAGMAYwB1AHIAYQBjAHkAAAAAAAAAAAD4/7CE0YFZ4hmnmiq4T7qzOp8Clw5LAVMAdAByAGUAZQB0AEEAZABkAHIAZQBzAHMAAAACAAAAAACwhNKBWeIZp5oquE+6szqfApcOSwFMAG8AYwBhAHQAaQBvAG4AQwBpAHQAeQAAAAIAAAAAALCE04FZ4hmnmiq4T7qzOp8Clw5LAUwAbwBjAGEAdABpAG8AbgBTAHQAYQB0AGUAAAACAAAAAACwhNSBWeIZp5oquE+6szqfApcOSwFMAG8AYwBhAHQAaQBvAG4AQwBvAHUAbgB0AHIAeQAAAAIAAAAAALCE1YFZ4hmnmiq4T7qzOp8Clw5LAUwAbwBjAGEAdABpAG8AbgBQAG8AcwB0AGEAbABDAG8AZABlAAAAAgAAAAAAsITWgVniGaeaKrhPurM6nwKXDksBTABvAGMAYQB0AGkAbwBuAEEAZABkAHIAZQBzAHMASQBuAHQAZQByAG4AYQBsAAAAAgAAAAAAAwAKgpDa2G4LRRsQmNoAqgA/EwUAJgAAAAEAAACwhBKCAiAGAAAAAADAAAAAAAAARgAyggAAAgAAAAAAAwAXggggBgAAAAAAwAAAAAAAAEYAEIUAAHEBAACwhDGCBw4AERu11kCvIcqoXtqx0AAGAAAADgAAAEMAcgBlAGEAdABlAAAAsIQzggcOABEbtdZAryHKqF7asdAAGAAAAEQBAABkADAAMAA2AGEAMwAzADAALQAxADgANgA0AC0ANAAzADIAOQAtADkANwAzADEALQBiADYAZABhADAAOAA3ADUAZgAwAGMAYgA7AC8AbwA9AEUAeABjAGgAYQBuAGcAZQAvAG8AdQA9AEUAeABjAGgAYQBuAGcAZQAgAEEAZABtAGkAbgBpAHMAdAByAGEAdABpAHYAZQAgAEcAcgBvAHUAcAAgACgARgBZAEQASQBCAE8ASABGADIAMwBTAFAARABMAFQAKQAvAGMAbgA9AFIAZQBjAGkAcABpAGUAbgB0AHMALwBjAG4APQBkADYANwA5ADEAYwBmADAANAAzADIAMQA0ADgAMQAxAGEANAA4AGMANwA5ADIANQAyAGYAYgBiADcANgBhAGMALQB0AGUAcwB0ACAAdQBzAGUAcgAgADEAAAADADyCAiAGAAAAAADAAAAAAAAARgATggAAHgAAAEAAToICIAYAAAAAAMAAAAAAAABGAAKCAAB+2dtiis7UAQMAXIICIAYAAAAAAMAAAAAAAABGACSCAAACAAAAAwBjggcOABEbtdZAryHKqF7asdAAFQAAAAAAgACwhGWCAiAGAAAAAADAAAAAAAAARgA4ggAAGAAAAHQAZQBzAHQAIAB1AHMAZQByACAAMgAAALCEZoICIAYAAAAAAMAAAAAAAABGADuCAAAYAAAAdABlAHMAdAAgAHUAcwBlAHIAIAAyAAAAsIRnggIgBgAAAAAAwAAAAAAAAEYAPIIAAAIAAAAAAAIBdIIHDgARG7XWQK8hyqhe2rHQAAcAAAAuAAAAAAAAAE9MNl9iu9VOvweARX4cAOwBAIuM3wbCQKxAqgzXiAXauY8AAAAAAQ0AAEAAdYIHDgARG7XWQK8hyqhe2rHQAAgAAAC3hTJjis7UAQIBdoIHDgARG7XWQK8hyqhe2rHQABcAAAAAAAAAAgF3ggcOABEbtdZAryHKqF7asdAABQAAANkEAAB2MkNhbGVuZGFyTG9nZ2luZ/TNAAAAAAAAlbYAAAQAAAB1sQAAAAAAAPTsAAB8AAAA9IwAAAAAAAB0xgAAAAAAAJWCAAAAAAAA9IcAAHgAAAD0uwAAAAAAAPT7AAAAAAAA9NsAAAAAAAD04wAAAAAAAPTDAAAAAAAA9OMAAAAAAAD0wwAAAAAAAPTTAAAAAAAA9OsAAAAAAAD0iwAAAAAAAPWpAAAAAAAA9JcAAAAAAAD01wAAAAAAAPTLAAB5AAAA9LsAAAAAAAD0+wAAAAAAAPSrAAAAAAAA9IsAAAAAAAD1qQAAAAAAAPSXAAAAAAAA9NcAAAAAAAD0lwAAAAAAAPTXAAAAAAAAdIkAAGoAAAB13wAAAAAAAHWvAAAAAAAAdIkAAGoAAAB0iQAAagAAAHSJAABqAAAAdaQAAAAAAAAMvwAAAAAAAPX/AAAQAAAAdYcAAAAAAAB1jAAAHwAAAHXMAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB13QAAAAAAAHXkAAAAAAAAdfQAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXBAAAAAAAAbJQAAAAAAAB1wQAAAAAAAHXBAAAAAAAAdcEAAAAAAAB1wQAAAAAAAHXUAAAAAAAAdcQAAAAAAAD0lwAAAAAAAPTXAAAAAAAA9JcAAAAAAAD01wAAAAAAAHSJAABqAAAAdIkAAGoAAAB0iQAAagAAAHSJAABqAAAAdIkAAGoAAAB0iQAAagAAAHSJAABqAAAA9JcAAAAAAAD01wAAAAAAAHXvAAAAAAAA9fkAAAAAAAB1wwAAAAAAAHTdAAAAAAAAdI8AAAAAAAB07wAAAAAAAHXXAAACAAAAdKcAAG4AAACUggAAXQAAAHSWAAAAAAAAdNYAAAAAAAB1kwAAAAAAAHW/AAAAAAAAddMAAAAAAACU0gAAXAAAAMyhAABbAAAA9ekAAAwAAAB14wAAAAAAAJTSAABcAAAAzKEAAFsAAAD16QAADAAAAHWAAAATAAAAdcAAABsAAAB1vgAAAAAAAJ/oAAAAAAAA9JcAAAAAAAD01wAAAAAAAPSXAAAAAAAA9NcAAAAAAAB0sQAAAAAAAHSJAABqAAAAdPEAAAAAAAB0iQAAagAAAHSgAAAAAAAAdOAAAAAAAACUggAAXQAAAPWBAAAAAAAAdL4AAAAAAAD0lwAAAAAAAPTXAAAAAAAADKEAAGUAAACshgAAcQAAAKzGAAByAAAAH6QAADcAAAAf5AAAOAAAAB/wAABEAAAAH9QAADYAAAAczQAASAAAAB/QAABGAAAAn5wAAEgAAAAcjQAAWAAAALCEeIIHDgARG7XWQK8hyqhe2rHQAAwAAAACAAAAAACwhHmCBw4AERu11kCvIcqoXtqx0AANAAAAAgAAAAAAsIR6ggcOABEbtdZAryHKqF7asdAADgAAABAAAAAwAC4AMAAuADAALgAwAAAAsIR7ggcOABEbtdZAryHKqF7asdAADwAAACYAAABNAFMARQB4AGMAaABhAG4AZwBlAEQAZQBsAGkAdgBlAHIAeQAAALCEfIIHDgARG7XWQK8hyqhe2rHQABAAAAAYAAAATABPAFcARQBYAEMASABBAE4ARwBFAAAAsIR9ggcOABEbtdZAryHKqF7asdAAEQAAAB4AAAAxADUALgAwADEALgAxADUAOQAxAC4AMAAwADgAAACwhH6CBw4AERu11kCvIcqoXtqx0AALAAAAKgAAAEMAbABpAGUAbgB0AD0ASAB1AGIAIABUAHIAYQBuAHMAcABvAHIAdAAAALCEf4IHDgARG7XWQK8hyqhe2rHQAAoAAAAQAQAALwBvAD0ARQB4AGMAaABhAG4AZwBlAC8AbwB1AD0ARQB4AGMAaABhAG4AZwBlACAAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AGkAdgBlACAARwByAG8AdQBwACAAKABGAFkARABJAEIATwBIAEYAMgAzAFMAUABEAEwAVAApAC8AYwBuAD0AQwBvAG4AZgBpAGcAdQByAGEAdABpAG8AbgAvAGMAbgA9AFMAZQByAHYAZQByAHMALwBjAG4APQBMAE8AVwBFAFgAQwBIAEEATgBHAEUALwBjAG4APQBNAGkAYwByAG8AcwBvAGYAdAAgAFMAeQBzAHQAZQBtACAAQQB0AHQAZQBuAGQAYQBuAHQAAACwhICCBw4AERu11kCvIcqoXtqx0AASAAAAPAAAAEwAbwB3AEUAeABjAGgAYQBuAGcAZQAuAGIAcgBlAGcAYQB3AG4ALgBzAHUAcgBlAC4AdgBpAG4AZQAAALCEgYIHDgARG7XWQK8hyqhe2rHQABMAAAA4AAAAVgBlAHIAcwBpAG8AbgAgADEANQAuADEAIAAoAEIAdQBpAGwAZAAgADEANQA5ADEALgAwACkAAACwhIKCBw4AERu11kCvIcqoXtqx0AAUAAAABgEAAC8AbwA9AEUAeABjAGgAYQBuAGcAZQAvAG8AdQA9AEUAeABjAGgAYQBuAGcAZQAgAEEAZABtAGkAbgBpAHMAdAByAGEAdABpAHYAZQAgAEcAcgBvAHUAcAAgACgARgBZAEQASQBCAE8ASABGADIAMwBTAFAARABMAFQAKQAvAGMAbgA9AEMAbwBuAGYAaQBnAHUAcgBhAHQAaQBvAG4ALwBjAG4APQBTAGUAcgB2AGUAcgBzAC8AYwBuAD0ATABPAFcARQBYAEMASABBAE4ARwBFAC8AYwBuAD0ATQBpAGMAcgBvAHMAbwBmAHQAIABQAHIAaQB2AGEAdABlACAATQBEAEIAAABAAIOCBw4AERu11kCvIcqoXtqx0AAJAAAA0OA1Y4rO1AGwhIiCCCAGAAAAAADAAAAAAAAARgBUhQAADgAAADEANQAuADEARQB4AAAAAwCJggggBgAAAAAAwAAAAAAAAEYAUoUAAAgANwYDABZADQASDgMAA0ADAAAwAAAAAAMAFQwBAAAAAgEkDBwAAAABBQAAAAAABRUAAAC+Hl36qX/3pCBTx+9yBAAAAgElDBAAAABzIY1u5TQnQ5+1AxJMPD96CwAPDgEAAgH2DwQAAAAAAAAAAgH5D5kAAAAAAAAA3KdAyMBCEBq0uQgAKy/hggEAAAAAAAAAL289RXhjaGFuZ2Uvb3U9RXhjaGFuZ2UgQWRtaW5pc3RyYXRpdmUgR3JvdXAgKEZZRElCT0hGMjNTUERMVCkvY249UmVjaXBpZW50cy9jbj1kNjc5MWNmMDQzMjE0ODExYTQ4Yzc5MjUyZmJiNzZhYy10ZXN0IHVzZXIgMQADAP4PBgAAAAIB/w+ZAAAAAAAAANynQMjAQhAatLkIACsv4YIBAAAAAAAAAC9vPUV4Y2hhbmdlL291PUV4Y2hhbmdlIEFkbWluaXN0cmF0aXZlIEdyb3VwIChGWURJQk9IRjIzU1BETFQpL2NuPVJlY2lwaWVudHMvY249ZDY3OTFjZjA0MzIxNDgxMWE0OGM3OTI1MmZiYjc2YWMtdGVzdCB1c2VyIDEAsIQBMBgAAAB0AGUAcwB0ACAAdQBzAGUAcgAgADEAAACwhAIwBgAAAEUAWAAAALCEAzD6AAAALwBvAD0ARQB4AGMAaABhAG4AZwBlAC8AbwB1AD0ARQB4AGMAaABhAG4AZwBlACAAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AGkAdgBlACAARwByAG8AdQBwACAAKABGAFkARABJAEIATwBIAEYAMgAzAFMAUABEAEwAVAApAC8AYwBuAD0AUgBlAGMAaQBwAGkAZQBuAHQAcwAvAGMAbgA9AGQANgA3ADkAMQBjAGYAMAA0ADMAMgAxADQAOAAxADEAYQA0ADgAYwA3ADkAMgA1ADIAZgBiAGIANwA2AGEAYwAtAHQAZQBzAHQAIAB1AHMAZQByACAAMQAAAAIBCzCAAAAARVg6L089RVhDSEFOR0UvT1U9RVhDSEFOR0UgQURNSU5JU1RSQVRJVkUgR1JPVVAgKEZZRElCT0hGMjNTUERMVCkvQ049UkVDSVBJRU5UUy9DTj1ENjc5MUNGMDQzMjE0ODExQTQ4Qzc5MjUyRkJCNzZBQy1URVNUIFVTRVIgMQADAAA5AAAAAAMABTkAAABAsIT+OTgAAAB0AGUAcwB0AHUAcwBlAHIAMQBAAGIAcgBlAGcAYQB3AG4ALgBzAHUAcgBlAC4AdgBpAG4AZQAAALCEIDoYAAAAdABlAHMAdAAgAHUAcwBlAHIAIAAxAAAACwBAOgEAsITlXwQAAAAgAAAAAgH3X5kAAAAAAAAA3KdAyMBCEBq0uQgAKy/hggEAAAAAAAAAL289RXhjaGFuZ2Uvb3U9RXhjaGFuZ2UgQWRtaW5pc3RyYXRpdmUgR3JvdXAgKEZZRElCT0hGMjNTUERMVCkvY249UmVjaXBpZW50cy9jbj1kNjc5MWNmMDQzMjE0ODExYTQ4Yzc5MjUyZmJiNzZhYy10ZXN0IHVzZXIgMQADAP1fAwAAAAMA/18AAAAAsITKZvoAAAAvAG8APQBFAHgAYwBoAGEAbgBnAGUALwBvAHUAPQBFAHgAYwBoAGEAbgBnAGUAIABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAaQB2AGUAIABHAHIAbwB1AHAAIAAoAEYAWQBEAEkAQgBPAEgARgAyADMAUwBQAEQATABUACkALwBjAG4APQBSAGUAYwBpAHAAaQBlAG4AdABzAC8AYwBuAD0AZAA2ADcAOQAxAGMAZgAwADQAMwAyADEANAA4ADEAMQBhADQAOABjADcAOQAyADUAMgBmAGIAYgA3ADYAYQBjAC0AdABlAHMAdAAgAHUAcwBlAHIAIAAxAAAAAwAEQAMAA0ADAAAwAQAAAAMAFQwBAAAAAgEkDBwAAAABBQAAAAAABRUAAAC+Hl36qX/3pCBTx+9zBAAAAgElDBAAAAAOCheTbP8mRLo5BRSyr05CCwAPDgEAAgH2DwQAAAABAAAAAgH5D5kAAAAAAAAA3KdAyMBCEBq0uQgAKy/hggEAAAAAAAAAL289RXhjaGFuZ2Uvb3U9RXhjaGFuZ2UgQWRtaW5pc3RyYXRpdmUgR3JvdXAgKEZZRElCT0hGMjNTUERMVCkvY249UmVjaXBpZW50cy9jbj0xMDAyMGE1YTNhMzA0Y2ZlOWJmZjk1OTY5YjcwODI2Ni10ZXN0IHVzZXIgMgADAP4PBgAAAAIB/w+ZAAAAAAAAANynQMjAQhAatLkIACsv4YIBAAAAAAAAAC9vPUV4Y2hhbmdlL291PUV4Y2hhbmdlIEFkbWluaXN0cmF0aXZlIEdyb3VwIChGWURJQk9IRjIzU1BETFQpL2NuPVJlY2lwaWVudHMvY249MTAwMjBhNWEzYTMwNGNmZTliZmY5NTk2OWI3MDgyNjYtdGVzdCB1c2VyIDIAsIQBMBgAAAB0AGUAcwB0ACAAdQBzAGUAcgAgADIAAACwhAIwBgAAAEUAWAAAALCEAzD6AAAALwBvAD0ARQB4AGMAaABhAG4AZwBlAC8AbwB1AD0ARQB4AGMAaABhAG4AZwBlACAAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AGkAdgBlACAARwByAG8AdQBwACAAKABGAFkARABJAEIATwBIAEYAMgAzAFMAUABEAEwAVAApAC8AYwBuAD0AUgBlAGMAaQBwAGkAZQBuAHQAcwAvAGMAbgA9ADEAMAAwADIAMABhADUAYQAzAGEAMwAwADQAYwBmAGUAOQBiAGYAZgA5ADUAOQA2ADkAYgA3ADAAOAAyADYANgAtAHQAZQBzAHQAIAB1AHMAZQByACAAMgAAAAIBCzCAAAAARVg6L089RVhDSEFOR0UvT1U9RVhDSEFOR0UgQURNSU5JU1RSQVRJVkUgR1JPVVAgKEZZRElCT0hGMjNTUERMVCkvQ049UkVDSVBJRU5UUy9DTj0xMDAyMEE1QTNBMzA0Q0ZFOUJGRjk1OTY5QjcwODI2Ni1URVNUIFVTRVIgMgADAAA5AAAAAAMABTkAAABAsIT+OTgAAAB0AGUAcwB0AHUAcwBlAHIAMgBAAGIAcgBlAGcAYQB3AG4ALgBzAHUAcgBlAC4AdgBpAG4AZQAAALCEIDoYAAAAdABlAHMAdAAgAHUAcwBlAHIAIAAyAAAACwBAOgEAsITlXwQAAAAgAAAAAgH3X5kAAAAAAAAA3KdAyMBCEBq0uQgAKy/hggEAAAAAAAAAL289RXhjaGFuZ2Uvb3U9RXhjaGFuZ2UgQWRtaW5pc3RyYXRpdmUgR3JvdXAgKEZZRElCT0hGMjNTUERMVCkvY249UmVjaXBpZW50cy9jbj0xMDAyMGE1YTNhMzA0Y2ZlOWJmZjk1OTY5YjcwODI2Ni10ZXN0IHVzZXIgMgADAP1fAQAAAAMA/18AAAAAsITKZvoAAAAvAG8APQBFAHgAYwBoAGEAbgBnAGUALwBvAHUAPQBFAHgAYwBoAGEAbgBnAGUAIABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAaQB2AGUAIABHAHIAbwB1AHAAIAAoAEYAWQBEAEkAQgBPAEgARgAyADMAUwBQAEQATABUACkALwBjAG4APQBSAGUAYwBpAHAAaQBlAG4AdABzAC8AYwBuAD0AMQAwADAAMgAwAGEANQBhADMAYQAzADAANABjAGYAZQA5AGIAZgBmADkANQA5ADYAOQBiADcAMAA4ADIANgA2AC0AdABlAHMAdAAgAHUAcwBlAHIAIAAyAAAAAwAEQAMAFkANABMOAwAAQAMAIQ4AAAAAAwAgDkwOAAADAPcPAAAAAAIB+Q8QAAAA7+tQ+DYhYE2PRSD4bLm8irCEATAiAAAAbQBhAHIAaQBvAF8AaABhAG0AbQBlAHIALgBnAGkAZgAAAEAABzCubVtYis7UAUAACDCubVtYis7UAQIBATc3DQAAR0lGODlhYABgAOf/AAABAAABDgUAFAIAIQkCAAcAHQsAGQsAIggAKxUDABAAMRAEDBMFBhoEABEASRcHARYAXw4CZhoDQSQGBxoAZxkCWy0GBRYDcSEAchoCejQHAx8AiisKBigETxgRCScAlhsDnDcKCT4KBycAuBgEwD8LCCwRDSwAwjAAxE8KBi0CuzcAtT4QC1YJC0QPBy8DvD8PIFEMCUcRCkMCq0gPHzwVEzIHvzsGsU8SCiwdClwPCiweC08TEVYSDmsMDWQPCVMHnkwJoloHm1wWBlwXDU0cDnESC2QWCyslIGkVGVobDjoTvWMMjFgbGGwXCnsTC0YSuWgaCGQOjWUXNXYYEDIsJnMQgz4qH58PEXMdCVojIXocDHUfEUIdvYEbIGIZnYAUeYYeDUAxJKQWDqUXD4IjDEcomKcaEEkmvTw5LY8abJIaaFImuUI5L4IqFZUlD6sfGlEwjq0hFU49KqglE2A4Lk84YqElQqohWqspFaUmWV41uLIvE2A3u2Y3trkqRJk3I7QxHFs8vFRLQMYwFscsO84vE8gyENIsNdgvEFlQRbo3IGw/t9UuMVtRQc0xNNcwLNsyEnpBo7g9IeIxLOQyJ942Ftw1KmlMnr1AJG1OiOg1G+k2E/E1GHFMrvM2GfQ3EbtGJes5Hew6HnZOuMFKI3lRu/k8Fd5BNPI/GnlUtsZPJ3NoV/JIJX9duN5PMnZqWoRdtMlYLM1bLoVokc9dMO5VNIpmtoxouMlkMPFYN9JlLuZeQY9ut9dpMtJrMJZxtu5kQNBvOZJ+addvNMpucpCCa5h9jZ96stp3OqJ9taOBs+J9OcmJjauVgLCPtO6FYuyLQ66WjaqZfLCYfeCTQ7ScgbSXtbybfbqasvGVQ8WYqOOdV+2dRvSdSfCgSPegTMKqju6mWvukT8uqsOymhvupSsiussmxlfCogvasYNCzsdO6nuy0lNi4sde8rey6md3Dp+DCreLEnO3CnuLHpeHIrO3Jo+XLr+rOrOvPre3Rr/HVsvTWrfDZrv///yH/C05FVFNDQVBFMi4wAwEAAAAh/gNHNDQAIfkECQ8A/wAsAAAAAGAAYAAACP4A/wkcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYUwLYyrVr1a5guVLlQLasWbJSAQzhxLatW06b/oUFkHTrkE548+rtxInDXLpHGzCIsrcwpxIMGihe3ABp4ceJIkuenKjo1i2PM2c+tWWr0K1URIkeTXp0qtOnRb3N4jno1g5AYsueDeRLu9u460wwy6A10K0QVAgfTlzFknf7kidv8/czgODFi0NBrq+6PuZzhW7YgOma92vZev4J7+I9Gz59+FTt8XNsmrP38Kn93IoBhQpcyvf1yyacDb7k1dmDBgkqZMPPgQgeaIxvOdEnHC7W6bPPNf1FqI+ABF7TD4DW8bMgYDo5eF+EEwq3BCmkuCLPPvg8s8wyrqCYzT7W7YPOMMaEs5OI+OVHoXAkkHBcfvsIEuQyNNZ4oDUM1sQjkT8COWR+fgi3jD9ELtkkTRBA8IFwe+ByyzPJrYPLmWICYw+LyNxySxfCMYLmmbSwAgtP0alAAilE5hcgGnkOhwIGWzr0V1ga5YkCKRY2imGQkAYp3KCFNnQoohhhoOmmmmrSqIX4oCiqqKqYoelFJaSq6qqr6pDRX/6KfGphn8nxw0qlDG2lAxm89uprr2eMMQGIFP3lCK1ZJpggLLgutFULv0ZLxhhjYNFAsw9tZYACCtiRzXfXbFPOuORu45008DlDzSDYJqSBBT5I6+sZk9QrgwUlvPpcoECIopcoQAh3aXMHbSVvtGPIoc043gQyBhklEDsRcPyKAsrFoAAs8MCYGmTwwb4mvHDDD1vQrkIHFHBBoEEU8sjLjxQShHAOFHDAzTgfgMTOPPOM0Mcg8yoyww6TYbLEEGUQKHEjNO3001A77Uk9VFdNdTxIyOUZV0H3OjTJRp/sMQBLl232nkmSyM6hXQutMNEli13QVmbXneeen+7Djv4HfPfdd9vTvg02C3xPTLbdiAPJ6Kf3VOP4448D/nXRwjhueOKJ4834OJx33vkqbU/+MDOcG37BCqinrvrqrLf+wguqpF0d1fN0Y/vtt0sueNHJeNON4V4ggggYxQkB8/HII49IMeSQ4w6J6FSRw/TUV58D4GTs/nAR0xv+ximnrFGcFBiXb775nUCjHInhcKz7yEUf7f0poKgxvmaaqd+o3u6Hrn3YSLMUAL7XCUj84YAHxF9mQAGINLThgRBsg7MAgD161esMvJKfRLbyBgV6MC+g6Ex2FAK00FGrVxqMCAc/+MEQEiwhJewatR6WQbkRZIUsVKALA0hCCgJODvG7IIYv5BA3Hk6wgznE3w5V6EMZvg0c8bPhQHCYxMeAT4RMfN84oMgrDUhRIFTMTCK2sIUwaIYOWdjCRVoAraCdQRazmEUUUvADi4TxMYQgAAAaoJkhfHFuAGgjyKhlrT9OcYDnwxj4DqHHBiQSFKfwoxENFcgzWPKSmMSksAwJRgBMQQ+gDCUo7/CGN2xBjwsQpSjxAANOFuQHsIylLGX5BH1hQFEbAIsAluYAV96QY77s5C3zlMuu7DJQvZwkRICpzGwBYJjR+QC3ELCVY+YpAtxyDjQDBYJq1i0CwTyJiJbWTQBYc2kQCGdW1snOlgQEACH5BAEPAP8ALAAAAABgAGAAAAj+AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3KgRgEePObqNq+bho0eOKDGaBBByZEmTKWNSpPKj5g8qpVaFMmLzhw+ZQBt6dHGmqNGjR8lYOBm0aUGPIsZInTqVjNWpSwE43SqQSAo3tcKKDSvrDJkzq8JyiRGDa1CPRM6MWTWurt262uSMORPN3LhMe0UwdcvRYwy5dO/azbu3798xZARrJVwYwOExi4hp3qx5l5yztTQHgiyZcuUYVFNXtUpGKuvSpjtaZk27tu3Xg2NfNHy7t23YunfP9k08cu7gFHkX9w0cefLhy283dy5RefTfx6lDtH6d9nTtD7n+d7f6HbxQ6OPJZzfPUPz48uwVuu8OPz7C+dfr2zeIP7r+/QR5lB5rY8DRxHoAJhSCBeOlYAELCVYHgAjXjZFVhBF5xENvkNEGRw0IYrgQDyKUKIISvxCTCw4miqCFiBWtFJI5JK0E43MftVQjTDfGyJJIO/ao0o8uhSikQyAB+dKRFiVZ5GRMTuRkkFFKSSSVVWZ45ZJZhpejkkZ2GaBJOnIp5kIhcGACEkjMIY463IjB5pkLlTEKJ7zUo2c+fOpZzz8rhXkjXJ10EgyfiCJaDxKBCiriAw84UeihiSp6BaSYYipmHpYkssmklSr6SiKklpqIJVl6tMUphYIaKp/+urQq6ylbOBqfR1SMssmum1D6aqyp3MnJsKNkYSt7HnUQBBDMBiHJq3zC0047dXBgrbUPHGueRxCgoMK3JOwBbT77lNtGo1D2yO0L337rx7iIntsokxtsgEk21+SbjTJ+9Ovvv/0eM40zBBdMjboAYOAtLv6Uu48/2bQr8cTZ8GPxxRYbo61uHmHwLS77ILrPNROXrMI1/ZSbKD8apwtgxx+HzOfIJqvwAi7LLBMLKaRkIzO56AxjTDgYwqwCyCKTbPIL56S8BwkkLPMzuRZbszFhRjOsMs1LN72PH98u07DD+1R9tVsQQPDBt3vgcssz5Spd8guquN3Ft4zgorf+3rSwAouIJpNAStw1F94uChicTZnJKJjSD8SGQy255N8irjhhGGSueeZx5BxLzS/wLLroppiROcKBOmC4zeeQ7TA/rFxuGrqqG8706xjH7jKMHhmggAIUrP5CM+mUg03BzhxcJbert7vCI6CM4oKNywMAQfPfPh/99DxGybztywLRSPQ0DHBAALI7933hM0Ci6yidjMLECCM4kD5y69c8wyWgtCo/CSqw3+4Qdr2lzWAGQEBFK1pRqFFY4QYzkMD9gpM/iQUBEpdARTvoAQ9bFKoSl6BEDybIMevVDAijAEUr6BEyD7YKFEQgYWw8UoEV2PCGNgTCp1oBj3zQw4X8rToCAAiQKgAk4RFITCISGwG/TtjiibIqVCIIYQg+VG8LoMhi/6LIxS7SSoZuUVUXxzhGUNRqgBEiBB/yQMY2RtGMYGyKR97gxjq+8IwIo6Md6whHNO5njnvkIx4HBQA9BpKMfczjIRF5ijDE8S2FdGMitrCFMJCRDlkIA5MA2UZCEAAADyBjDP2YoDlq8ZRZPMUpDPHJB6BSi6cY5SYBMAU92PKWtrzDG96whU8uAJe4xAMMHukUo00MBRtYiQAKJ8BZesxkyTTJMmvWzCMZc2If+B0CPDJNk1Hgd85cHQjQ183CUYCYMrmmycYJgHLWDALopJM850lPhQQEADuwhAM3CgAAAC4AZwBpAGYAAACwhAQ3GgAAAG0AYQByAGkAbwBfAH4AMQAuAGcAaQBmAAAAAwAFNwEAAACwhAc3IgAAAG0AYQByAGkAbwBfAGgAYQBtAG0AZQByAC4AZwBpAGYAAAADAAs3/////7CEDjcUAAAAaQBtAGEAZwBlAC8AZwBpAGYAAACwhBI3SgAAADQAZAAyADkAOABjADMAMQAtADEAMgBhAGUALQA0AGQAZgBjAC0AOQBkAGUAMAAtAGYAYQBhADEAZAA3AGUAMAAxAGYAMgA3AAAAAwAUNwQAAACwhAw6CgAAAEUAbgBVAHMAAAALAP5/AQALAP9/AAALALiCf381luFZ0EeZp0ZRXBg7VAFJAG0AYQBnAGUAVABoAHUAbQBiAG4AYQBpAGwARQByAHIAbwByAAAAAQADALmCf381luFZ0EeZp0ZRXBg7VAFJAG0AYQBnAGUATgBhAHQAdQByAGEAbABIAGUAaQBnAGgAdAAAAGAAAAADALqCf381luFZ0EeZp0ZRXBg7VAFJAG0AYQBnAGUATgBhAHQAdQByAGEAbABXAGkAZAB0AGgAAABgAAAAAwAOQA==
+
+
+
+ NoError
+
+
+ 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
+
+
+
+
+
+
diff --git a/src/test/resources/test-data/ExportItemsResponseFail.xml b/src/test/resources/test-data/ExportItemsResponseFail.xml
new file mode 100644
index 000000000..43dfb64a7
--- /dev/null
+++ b/src/test/resources/test-data/ExportItemsResponseFail.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+ No mailbox with such guid.
+ ErrorNonExistentMailbox
+ 0
+
+ f3f6f699-2254-40ce-9994-388d9d98419e
+
+
+
+
+
+
diff --git a/src/test/resources/test-data/UploadItemsRequest.xml b/src/test/resources/test-data/UploadItemsRequest.xml
new file mode 100644
index 000000000..f6be74705
--- /dev/null
+++ b/src/test/resources/test-data/UploadItemsRequest.xml
@@ -0,0 +1 @@
+REFUQQ==REFUQQ==
\ No newline at end of file
diff --git a/src/test/resources/test-data/UploadItemsResponse.xml b/src/test/resources/test-data/UploadItemsResponse.xml
new file mode 100644
index 000000000..a0f480817
--- /dev/null
+++ b/src/test/resources/test-data/UploadItemsResponse.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+ NoError
+
+
+
+ NoError
+
+
+
+
+
+
\ No newline at end of file
From a23317ed7197769e6e9df633c610be5c7b564689 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 28 Feb 2019 12:31:27 +0000
Subject: [PATCH 41/70] Release 2.7
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index c3c0d62ee..ee747dfc1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.7-SNAPSHOT
+ 2.7Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 0ec2d30d2489a300664403076a545578edeef540 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 4 Mar 2019 09:57:58 +0000
Subject: [PATCH 42/70] Prepare for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index ee747dfc1..23dd77ec1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.7
+ 2.8-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 12e11748e01b2fefe32c6d254b03d9039306b8f5 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 4 Mar 2019 16:16:56 +0000
Subject: [PATCH 43/70] Throw exceptions on failed upload/export requests
---
.../webservices/data/core/ExchangeService.java | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
index e0aab5ca0..d30cc5598 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeService.java
@@ -3010,7 +3010,9 @@ public ExportItemsResponse exportItem(ItemId itemId) throws Exception {
EwsUtilities.validateParam(itemId, "itemId");
ServiceResponseCollection responses = internalExportItems(Arrays.asList(itemId),
ServiceErrorHandling.ThrowOnError);
- return responses.getResponseAtIndex(0);
+ ExportItemsResponse response = responses.getResponseAtIndex(0);
+ response.throwIfNecessary();
+ return response;
}
public ServiceResponseCollection exportItems(
@@ -3031,14 +3033,16 @@ public UploadItemsResponse uploadItem(UploadItem item) throws Exception {
EwsUtilities.validateParam(item, "item");
ServiceResponseCollection responses = internalUploadItems(Arrays.asList(item),
ServiceErrorHandling.ThrowOnError);
- return responses.getResponseAtIndex(0);
+ UploadItemsResponse response = responses.getResponseAtIndex(0);
+ response.throwIfNecessary();
+ return response;
}
- public ServiceResponseCollection uploadItems(
- List items) throws Exception {
- return this.internalUploadItems(items,
- ServiceErrorHandling.ReturnErrors);
- }
+ public ServiceResponseCollection uploadItems(
+ List items) throws Exception {
+ return this.internalUploadItems(items,
+ ServiceErrorHandling.ReturnErrors);
+ }
// Id conversion operations
/**
From fdec4848c00f6305ecd9bc3a73fd4380a04c702b Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 4 Mar 2019 16:21:43 +0000
Subject: [PATCH 44/70] Version 2.8
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 23dd77ec1..27361fc18 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.8-SNAPSHOT
+ 2.8Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 577fadd33a17fb0acfeb7fe8c296e5c40218d2da Mon Sep 17 00:00:00 2001
From: Dominic Lavery
Date: Thu, 7 Mar 2019 14:34:46 +0000
Subject: [PATCH 45/70] Version bump
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 27361fc18..0603d80b7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.8
+ 2.9-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 258b8c3e9c2dc20cb17601e5c6f2fd126767aa75 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 7 Mar 2019 15:36:12 +0000
Subject: [PATCH 46/70] Set the namespace correctly on item IDs returned from
the upload/export API
---
.../data/core/response/ExportItemsResponse.java | 6 +-----
.../data/core/response/UploadItemsResponse.java | 8 +++++---
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/response/ExportItemsResponse.java b/src/main/java/microsoft/exchange/webservices/data/core/response/ExportItemsResponse.java
index 7e7757efb..c2acf48be 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/response/ExportItemsResponse.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/response/ExportItemsResponse.java
@@ -24,13 +24,8 @@
package microsoft.exchange.webservices.data.core.response;
import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
-import microsoft.exchange.webservices.data.core.EwsUtilities;
-import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.XmlElementNames;
import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
-import microsoft.exchange.webservices.data.core.enumeration.service.ServiceResult;
-import microsoft.exchange.webservices.data.core.service.ServiceObject;
-import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.property.complex.ItemId;
public final class ExportItemsResponse extends ServiceResponse {
@@ -48,6 +43,7 @@ protected void readElementsFromXml(EwsServiceXmlReader reader) throws Exception
itemId = new ItemId();
itemId.setNamespace(XmlNamespace.Messages);
itemId.loadFromXml(reader, XmlElementNames.ItemId);
+ itemId.setNamespace(XmlNamespace.Types);
reader.readStartElement(XmlNamespace.Messages, XmlElementNames.Data);
data = reader.readBase64ElementValue();
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/response/UploadItemsResponse.java b/src/main/java/microsoft/exchange/webservices/data/core/response/UploadItemsResponse.java
index f9a273dd5..e2ccf79ee 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/response/UploadItemsResponse.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/response/UploadItemsResponse.java
@@ -1,8 +1,9 @@
package microsoft.exchange.webservices.data.core.response;
-import microsoft.exchange.webservices.data.core.*;
-import microsoft.exchange.webservices.data.core.enumeration.misc.*;
-import microsoft.exchange.webservices.data.property.complex.*;
+import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
+import microsoft.exchange.webservices.data.core.XmlElementNames;
+import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
+import microsoft.exchange.webservices.data.property.complex.ItemId;
public class UploadItemsResponse extends ServiceResponse {
@@ -17,6 +18,7 @@ protected void readElementsFromXml(EwsServiceXmlReader reader) throws Exception
itemId = new ItemId();
itemId.setNamespace(XmlNamespace.Messages);
itemId.loadFromXml(reader, XmlElementNames.ItemId);
+ itemId.setNamespace(XmlNamespace.Types);
}
public ItemId getItemId() {
From a7b84b11b49d2cab9c8873a16b05762a7a1951a3 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 7 Mar 2019 15:37:14 +0000
Subject: [PATCH 47/70] Release 2.9
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 0603d80b7..3f3f6e5df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.9-SNAPSHOT
+ 2.9Exchange Web Services Java APIExchange Web Services (EWS) Java API
From dec8153c941cbe2a30719f3de5089c7ddd2a0261 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 7 Mar 2019 15:46:54 +0000
Subject: [PATCH 48/70] Prepare for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 3f3f6e5df..b77b4d721 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.9
+ 2.10-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 21a1ab8550bbef3fe195f5a4835aa3974aff6add Mon Sep 17 00:00:00 2001
From: Dominic Lavery
Date: Fri, 8 Mar 2019 14:46:27 +0000
Subject: [PATCH 49/70] Add externalContacts to the wellKnownFolderName enum
---
.../data/core/enumeration/property/WellKnownFolderName.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/enumeration/property/WellKnownFolderName.java b/src/main/java/microsoft/exchange/webservices/data/core/enumeration/property/WellKnownFolderName.java
index dbd7fc862..5e0d0b91a 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/enumeration/property/WellKnownFolderName.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/enumeration/property/WellKnownFolderName.java
@@ -42,6 +42,12 @@ public enum WellKnownFolderName {
*/
Contacts,
+ // The ExternalContacts folder.
+ /**
+ * The External Contacts.
+ */
+ ExternalContacts,
+
// The Deleted Items folder
/**
* The Deleted item.
From 3f0f785c103f3d0472f9155f6939cd3245cf4a52 Mon Sep 17 00:00:00 2001
From: Dominic Lavery
Date: Fri, 8 Mar 2019 14:47:27 +0000
Subject: [PATCH 50/70] Release 2.10
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index b77b4d721..0243b7554 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.10-SNAPSHOT
+ 2.10Exchange Web Services Java APIExchange Web Services (EWS) Java API
From ac73cdb9bb9d2a9d22c1a6cce7b2a43444970082 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 14 Mar 2019 11:29:36 +0000
Subject: [PATCH 51/70] Prepare for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 0243b7554..c20df25da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.10
+ 2.11-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 0bb3a9c171e5021cbdcd498c01eb9de98eac9774 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 14 Mar 2019 11:32:55 +0000
Subject: [PATCH 52/70] Don't thrash byte arrays around so much
---
.../webservices/data/core/EwsXmlReader.java | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/EwsXmlReader.java b/src/main/java/microsoft/exchange/webservices/data/core/EwsXmlReader.java
index ba1b1cc9d..5b692d503 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/EwsXmlReader.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/EwsXmlReader.java
@@ -561,16 +561,7 @@ public byte[] readBase64ElementValue()
throws ServiceXmlDeserializationException, XMLStreamException,
IOException {
this.ensureCurrentNodeIsStartElement();
-
- byte[] buffer = null;
-
- ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
-
- buffer = Base64.decodeBase64(this.xmlReader.getElementText().toString());
- byteArrayStream.write(buffer);
-
- return byteArrayStream.toByteArray();
-
+ return Base64.decodeBase64(this.xmlReader.getElementText());
}
/**
@@ -583,8 +574,7 @@ public void readBase64ElementValue(OutputStream outputStream)
throws Exception {
this.ensureCurrentNodeIsStartElement();
- byte[] buffer = null;
- buffer = Base64.decodeBase64(this.xmlReader.getElementText().toString());
+ byte[] buffer = Base64.decodeBase64(this.xmlReader.getElementText());
outputStream.write(buffer);
outputStream.flush();
}
From 592942cec594b5ae3e395f3686082baeffed4ad5 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Thu, 14 Mar 2019 11:52:04 +0000
Subject: [PATCH 53/70] Release version 2.11
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index c20df25da..df43178be 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.11-SNAPSHOT
+ 2.11Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 5e232d10adde79fef57056002050884a8f18a370 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 12 Apr 2019 17:07:59 +0100
Subject: [PATCH 54/70] Prepare for 2.12 release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index df43178be..3cb9e11e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.11
+ 2.12-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From ea8614dcccf12fdf5bcbb9fc6d15facb4e928058 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 12 Apr 2019 17:08:51 +0100
Subject: [PATCH 55/70] Update readme.md
---
readme.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/readme.md b/readme.md
index 6101807c8..890762822 100644
--- a/readme.md
+++ b/readme.md
@@ -2,7 +2,7 @@
[](https://gitter.im/OfficeDev/ews-java-api?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[](https://travis-ci.org/OfficeDev/ews-java-api) [](https://codecov.io/github/OfficeDev/ews-java-api?branch=master)
+[](https://circleci.com/gh/surevine/ews-java-api) [](https://codecov.io/github/OfficeDev/ews-java-api?branch=master)
The Exchange Web Services (EWS) Java API provides a managed interface for developing Java applications that use EWS.
By using the EWS Java API, you can access almost all the information stored in an Office 365, Exchange Online, or Exchange Server mailbox. However, this API is in sustaining mode, the recommended access pattern for Office 365 and Exchange online data is [Microsoft Graph](https://graph.microsoft.com)
From 62d32b55e1d28ff16ebffa97b424fc57fd82c181 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 30 Apr 2019 15:26:24 +0100
Subject: [PATCH 56/70] Add service request listener for better tracing
---
.../data/core/ExchangeServiceBase.java | 99 ++++++++++---------
.../data/core/request/ServiceRequestBase.java | 63 +++++-------
.../misc/ServiceRequestTraceListener.java | 11 +++
3 files changed, 86 insertions(+), 87 deletions(-)
create mode 100644 src/main/java/microsoft/exchange/webservices/data/misc/ServiceRequestTraceListener.java
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
index 7a96a240e..6c755d2b4 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
@@ -23,55 +23,31 @@
package microsoft.exchange.webservices.data.core;
-import java.io.ByteArrayOutputStream;
-import java.io.Closeable;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.security.GeneralSecurityException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.TimeZone;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import microsoft.exchange.webservices.data.EWSConstants;
-import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
-import microsoft.exchange.webservices.data.core.enumeration.misc.TraceFlags;
-import microsoft.exchange.webservices.data.core.exception.http.EWSHttpException;
-import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
-import microsoft.exchange.webservices.data.core.exception.service.remote.AccountIsLockedException;
-import microsoft.exchange.webservices.data.core.request.HttpClientWebRequest;
-import microsoft.exchange.webservices.data.core.request.HttpWebRequest;
-import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
-import microsoft.exchange.webservices.data.misc.EwsTraceListener;
-import microsoft.exchange.webservices.data.misc.ITraceListener;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.client.AuthenticationStrategy;
+import microsoft.exchange.webservices.data.*;
+import microsoft.exchange.webservices.data.core.enumeration.misc.*;
+import microsoft.exchange.webservices.data.core.exception.http.*;
+import microsoft.exchange.webservices.data.core.exception.service.local.*;
+import microsoft.exchange.webservices.data.core.exception.service.remote.*;
+import microsoft.exchange.webservices.data.core.request.*;
+import microsoft.exchange.webservices.data.credential.*;
+import microsoft.exchange.webservices.data.misc.*;
+import org.apache.commons.io.*;
+import org.apache.commons.logging.*;
import org.apache.http.client.CookieStore;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.HttpClientConnectionManager;
-import org.apache.http.conn.socket.ConnectionSocketFactory;
-import org.apache.http.conn.socket.PlainConnectionSocketFactory;
-import org.apache.http.impl.client.BasicCookieStore;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.client.*;
+import org.apache.http.client.protocol.*;
+import org.apache.http.config.*;
+import org.apache.http.conn.*;
+import org.apache.http.conn.socket.*;
+import org.apache.http.impl.client.*;
+import org.apache.http.impl.conn.*;
+
+import javax.xml.stream.*;
+import java.io.*;
+import java.net.*;
+import java.security.*;
+import java.text.*;
+import java.util.*;
/**
* Represents an abstract binding to an Exchange Service.
@@ -168,6 +144,8 @@ public abstract class ExchangeServiceBase implements Closeable {
*/
private static String defaultUserAgent = "ExchangeServicesClient/" + EwsUtilities.getBuildVersion();
+ private ServiceRequestTraceListener serviceRequestTraceListener;
+
/**
* Initializes a new instance.
*
@@ -650,6 +628,10 @@ public void setTraceListener(ITraceListener traceListener) {
this.traceEnabled = (traceListener != null);
}
+ public void setServiceRequestTracer(ServiceRequestTraceListener serviceRequestTraceListener) {
+ this.serviceRequestTraceListener = serviceRequestTraceListener;
+ }
+
/**
* Gets the credential used to authenticate with the Exchange Web Services.
*
@@ -929,4 +911,25 @@ public static byte[] getSessionKey() {
public int getMaximumPoolingConnections() {
return maximumPoolingConnections;
}
+
+ public void traceServiceRequestStart(ServiceRequestBase serviceRequest, HttpWebRequest request) {
+ if (serviceRequestTraceListener == null) {
+ return;
+ }
+ serviceRequestTraceListener.requestStart(serviceRequest, request);
+ }
+
+ public void traceServiceRequestError(ServiceRequestBase serviceRequest, HttpWebRequest request, Exception e) {
+ if (serviceRequestTraceListener == null) {
+ return;
+ }
+ serviceRequestTraceListener.requestError(serviceRequest, request, e);
+ }
+
+ public void traceServiceRequestSuccess(ServiceRequestBase serviceRequest, HttpWebRequest request) {
+ if (serviceRequestTraceListener == null) {
+ return;
+ }
+ serviceRequestTraceListener.requestFinish(serviceRequest, request);
+ }
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/request/ServiceRequestBase.java b/src/main/java/microsoft/exchange/webservices/data/core/request/ServiceRequestBase.java
index aafd48cf6..0477904e3 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/request/ServiceRequestBase.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/request/ServiceRequestBase.java
@@ -23,42 +23,22 @@
package microsoft.exchange.webservices.data.core.request;
-import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
-import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
-import microsoft.exchange.webservices.data.core.EwsUtilities;
-import microsoft.exchange.webservices.data.core.ExchangeServerInfo;
-import microsoft.exchange.webservices.data.core.ExchangeService;
-import microsoft.exchange.webservices.data.core.XmlAttributeNames;
-import microsoft.exchange.webservices.data.core.XmlElementNames;
-import microsoft.exchange.webservices.data.core.response.ServiceResponse;
-import microsoft.exchange.webservices.data.core.enumeration.misc.DateTimePrecision;
-import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
-import microsoft.exchange.webservices.data.core.enumeration.misc.TraceFlags;
-import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
-import microsoft.exchange.webservices.data.core.exception.http.EWSHttpException;
-import microsoft.exchange.webservices.data.core.exception.http.HttpErrorException;
-import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
-import microsoft.exchange.webservices.data.core.exception.service.remote.ServiceRequestException;
-import microsoft.exchange.webservices.data.core.exception.service.remote.ServiceResponseException;
-import microsoft.exchange.webservices.data.core.exception.service.local.ServiceVersionException;
-import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlDeserializationException;
-import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
-import microsoft.exchange.webservices.data.core.exception.xml.XmlException;
-import microsoft.exchange.webservices.data.misc.SoapFaultDetails;
-import microsoft.exchange.webservices.data.security.XmlNodeType;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.ws.http.HTTPException;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.InflaterInputStream;
+import microsoft.exchange.webservices.data.core.*;
+import microsoft.exchange.webservices.data.core.enumeration.misc.*;
+import microsoft.exchange.webservices.data.core.exception.http.*;
+import microsoft.exchange.webservices.data.core.exception.service.local.*;
+import microsoft.exchange.webservices.data.core.exception.service.remote.*;
+import microsoft.exchange.webservices.data.core.exception.xml.*;
+import microsoft.exchange.webservices.data.core.response.*;
+import microsoft.exchange.webservices.data.misc.*;
+import microsoft.exchange.webservices.data.security.*;
+import org.apache.commons.io.*;
+import org.apache.commons.logging.*;
+
+import javax.xml.stream.*;
+import javax.xml.ws.http.*;
+import java.io.*;
+import java.util.zip.*;
/**
* Represents an abstract service request.
@@ -719,18 +699,23 @@ private HttpWebRequest buildEwsHttpWebRequest(HttpWebRequest request) throws Exc
*/
protected HttpWebRequest getEwsHttpWebResponse(HttpWebRequest request) throws Exception {
try {
+ service.traceServiceRequestStart(this, request);
request.executeRequest();
if (request.getResponseCode() >= 400) {
- throw new HttpErrorException(
- "The remote server returned an error: (" + request.getResponseCode() + ")" +
- request.getResponseText(), request.getResponseCode());
+ HttpErrorException e = new HttpErrorException(
+ "The remote server returned an error: (" + request.getResponseCode() + ")" +
+ request.getResponseText(), request.getResponseCode());
+ service.traceServiceRequestError(this, request, e);
+ throw e;
}
} catch (IOException e) {
// Wrap exception.
+ service.traceServiceRequestError(this, request, e);
throw new ServiceRequestException(String.format("The request failed. %s", e.getMessage()), e);
}
+ service.traceServiceRequestSuccess(this, request);
return request;
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/ServiceRequestTraceListener.java b/src/main/java/microsoft/exchange/webservices/data/misc/ServiceRequestTraceListener.java
new file mode 100644
index 000000000..829fdbe9d
--- /dev/null
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/ServiceRequestTraceListener.java
@@ -0,0 +1,11 @@
+package microsoft.exchange.webservices.data.misc;
+
+import microsoft.exchange.webservices.data.core.request.*;
+
+public interface ServiceRequestTraceListener {
+ void requestStart(ServiceRequestBase> serviceRequest, HttpWebRequest request);
+
+ void requestError(ServiceRequestBase> serviceRequest, HttpWebRequest request, Exception e);
+
+ void requestFinish(ServiceRequestBase> serviceRequest, HttpWebRequest request);
+}
From ba78fd404f8069decdd74e7dd597db47d507f51c Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 30 Apr 2019 15:31:02 +0100
Subject: [PATCH 57/70] Release 2.12
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 3cb9e11e6..73dabfe82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.12-SNAPSHOT
+ 2.12Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 571ef6d0090db0c87a918d11840b31a61d1a64a6 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 30 Apr 2019 15:48:24 +0100
Subject: [PATCH 58/70] Prepare for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 73dabfe82..03e2d1ee4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.12
+ 2.13-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 304a14c0854241b1d10d017500e2d9aed6a3412a Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 7 May 2019 15:02:42 +0100
Subject: [PATCH 59/70] Add option to use global HTTP cookie store
---
.../data/core/ExchangeServiceBase.java | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
index 6c755d2b4..2daf26ec2 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/ExchangeServiceBase.java
@@ -134,6 +134,7 @@ public abstract class ExchangeServiceBase implements Closeable {
private int maximumPoolingConnections = 10;
+ private boolean useGlobalCookieStore = false;
// protected HttpClientWebRequest request = null;
@@ -260,9 +261,11 @@ protected Registry createConnectionSocketFactoryRegistr
* cookie store, instead of the httpClient's global store, so cookies get reset on reinitialization
*/
private void initializeHttpContext() {
- CookieStore cookieStore = new BasicCookieStore();
httpContext = HttpClientContext.create();
- httpContext.setCookieStore(cookieStore);
+ if (!useGlobalCookieStore) {
+ CookieStore cookieStore = new BasicCookieStore();
+ httpContext.setCookieStore(cookieStore);
+ }
}
@Override
@@ -819,6 +822,14 @@ public void setWebProxy(WebProxy value) {
this.webProxy = value;
}
+ public boolean isUseGlobalCookieStore() {
+ return useGlobalCookieStore;
+ }
+
+ public void setUseGlobalCookieStore(boolean useGlobalCookieStore) {
+ this.useGlobalCookieStore = useGlobalCookieStore;
+ }
+
/**
* Gets a collection of HTTP headers that will be sent with each request to
* EWS.
From 8a9d727366ea2bb0dea656ddc470f4cb243b0668 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 7 May 2019 15:08:08 +0100
Subject: [PATCH 60/70] Release 2.13
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 03e2d1ee4..e54f335b1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.13-SNAPSHOT
+ 2.13Exchange Web Services Java APIExchange Web Services (EWS) Java API
From cc090e0c5248c079a26f119325a576174366b4ae Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 7 May 2019 15:09:12 +0100
Subject: [PATCH 61/70] Prepare for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index e54f335b1..ca2ca0ac2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.13
+ 2.14-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From a93b46411cbeb27c7744eb609033240b884c8822 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 10 May 2019 12:45:01 +0100
Subject: [PATCH 62/70] Make it easier to create a new item just for making
updates
---
.../exchange/webservices/data/core/PropertyBag.java | 4 ++++
.../webservices/data/core/service/ServiceObject.java | 7 +++++++
.../webservices/data/core/service/item/EmailMessage.java | 5 +++++
.../exchange/webservices/data/core/service/item/Item.java | 7 +++++++
.../exchange/webservices/data/property/complex/ItemId.java | 4 ++++
.../webservices/data/property/complex/ServiceId.java | 6 ++++++
6 files changed, 33 insertions(+)
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/PropertyBag.java b/src/main/java/microsoft/exchange/webservices/data/core/PropertyBag.java
index f65aea5bb..5f24c7fa7 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/PropertyBag.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/PropertyBag.java
@@ -878,4 +878,8 @@ public void setObjectFromPropertyDefinition(PropertyDefinition propertyDefinitio
public void complexPropertyChanged(ComplexProperty complexProperty) {
this.propertyChanged(complexProperty);
}
+
+ public void setLoading(boolean loading) {
+ this.loading = loading;
+ }
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/ServiceObject.java b/src/main/java/microsoft/exchange/webservices/data/core/service/ServiceObject.java
index 2c4d87ccc..97ec6dd1f 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/ServiceObject.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/ServiceObject.java
@@ -232,6 +232,13 @@ protected ServiceObject(ExchangeService service) throws Exception {
this.propertyBag = new PropertyBag(this);
}
+ protected ServiceObject(ExchangeService service, ServiceId serviceId) throws Exception {
+ this(service);
+ propertyBag.setLoading(true);
+ propertyBag.setObjectFromPropertyDefinition(getIdPropertyDefinition(), serviceId);
+ propertyBag.setLoading(false);
+ }
+
/**
* Gets the schema associated with this type of object.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/EmailMessage.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/EmailMessage.java
index 00ff93df0..733f7137d 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/EmailMessage.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/EmailMessage.java
@@ -68,6 +68,10 @@ public EmailMessage(ExchangeService service) throws Exception {
super(service);
}
+ public EmailMessage(ExchangeService service, ItemId itemId) throws Exception {
+ super(service, itemId);
+ }
+
/**
* Initializes a new instance of the "EmailMessage" class.
*
@@ -398,6 +402,7 @@ public void setFrom(EmailAddress value) throws Exception {
* @return the checks if is associated
* @throws ServiceLocalException the service local exception
*/
+ @Override
public boolean getIsAssociated() throws ServiceLocalException {
return super.getIsAssociated();
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Item.java b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Item.java
index 4cdab42e6..3674da59b 100644
--- a/src/main/java/microsoft/exchange/webservices/data/core/service/item/Item.java
+++ b/src/main/java/microsoft/exchange/webservices/data/core/service/item/Item.java
@@ -93,6 +93,10 @@ public Item(ExchangeService service) throws Exception {
super(service);
}
+ public Item(ExchangeService service, ItemId itemId) throws Exception {
+ super(service, itemId);
+ }
+
/**
* Initializes a new instance of the item class.
*
@@ -173,6 +177,7 @@ protected void throwIfThisIsAttachment() throws InvalidOperationException {
*
* @return A PropertyDefinition instance.
*/
+ @Override
public PropertyDefinition getIdPropertyDefinition() {
return ItemSchema.Id;
}
@@ -514,6 +519,7 @@ public boolean removeExtendedProperty(
* @return true if a time zone SOAP header should be emitted;
* otherwise,false
*/
+ @Override
public boolean getIsTimeZoneHeaderRequired(boolean isUpdateOperation)
throws Exception {
// Starting E14SP2, attachment will be sent along with CreateItem
@@ -588,6 +594,7 @@ public boolean getIsNew() throws ServiceLocalException {
* @return the id
* @throws ServiceLocalException the service local exception
*/
+ @Override
public ItemId getId() throws ServiceLocalException {
return getPropertyBag().getObjectFromPropertyDefinition(
getIdPropertyDefinition());
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemId.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemId.java
index 15ab7a558..f5f0dd328 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemId.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/ItemId.java
@@ -58,6 +58,10 @@ public ItemId(String uniqueId) throws Exception {
super(uniqueId);
}
+ public ItemId(String uniqueId, String changeKey) throws Exception {
+ super(uniqueId, changeKey);
+ }
+
/**
* Gets the name of the XML element.
*
diff --git a/src/main/java/microsoft/exchange/webservices/data/property/complex/ServiceId.java b/src/main/java/microsoft/exchange/webservices/data/property/complex/ServiceId.java
index be673debf..d1e7221f2 100644
--- a/src/main/java/microsoft/exchange/webservices/data/property/complex/ServiceId.java
+++ b/src/main/java/microsoft/exchange/webservices/data/property/complex/ServiceId.java
@@ -64,6 +64,12 @@ public ServiceId(String uniqueId) throws Exception {
this.uniqueId = uniqueId;
}
+ public ServiceId(String uniqueId, String changeKey) throws Exception {
+ this(uniqueId);
+ EwsUtilities.validateParam(changeKey, "changeKey");
+ this.changeKey = changeKey;
+ }
+
/**
* Read attribute from XML.
*
From d24090a74a859c78e79f0552bd36796dd4964997 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Fri, 10 May 2019 12:47:04 +0100
Subject: [PATCH 63/70] Release 2.14
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index ca2ca0ac2..cfb751422 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.14-SNAPSHOT
+ 2.14Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 2bc37fe61bc44e29a8cf7c86cf552774868b65d5 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 14 May 2019 23:01:51 +0100
Subject: [PATCH 64/70] Prepare for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index cfb751422..7dd897033 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.14
+ 2.15-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From ad4a125fc28095cbf593541c46d5848485fc5b2a Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 14 May 2019 23:36:54 +0100
Subject: [PATCH 65/70] Update readme.md
---
readme.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/readme.md b/readme.md
index 890762822..d113f400e 100644
--- a/readme.md
+++ b/readme.md
@@ -2,7 +2,7 @@
[](https://gitter.im/OfficeDev/ews-java-api?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[](https://circleci.com/gh/surevine/ews-java-api) [](https://codecov.io/github/OfficeDev/ews-java-api?branch=master)
+[](https://circleci.com/gh/surevine/ews-java-api)  [](https://codecov.io/github/surevine/ews-java-api?branch=master)
The Exchange Web Services (EWS) Java API provides a managed interface for developing Java applications that use EWS.
By using the EWS Java API, you can access almost all the information stored in an Office 365, Exchange Online, or Exchange Server mailbox. However, this API is in sustaining mode, the recommended access pattern for Office 365 and Exchange online data is [Microsoft Graph](https://graph.microsoft.com)
From 3847bebb7a1d9944d4e6dfb79fdf06f7565c2a0c Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Tue, 14 May 2019 23:45:42 +0100
Subject: [PATCH 66/70] Update readme.md
---
readme.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/readme.md b/readme.md
index d113f400e..0acdadaf7 100644
--- a/readme.md
+++ b/readme.md
@@ -2,7 +2,7 @@
[](https://gitter.im/OfficeDev/ews-java-api?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-[](https://circleci.com/gh/surevine/ews-java-api)  [](https://codecov.io/github/surevine/ews-java-api?branch=master)
+  [](https://codecov.io/github/surevine/ews-java-api?branch=master)
The Exchange Web Services (EWS) Java API provides a managed interface for developing Java applications that use EWS.
By using the EWS Java API, you can access almost all the information stored in an Office 365, Exchange Online, or Exchange Server mailbox. However, this API is in sustaining mode, the recommended access pattern for Office 365 and Exchange online data is [Microsoft Graph](https://graph.microsoft.com)
From 9e7a89b6b0a533c7ee42cd047621c6e838e2df31 Mon Sep 17 00:00:00 2001
From: Hywel Bennett
Date: Mon, 20 May 2019 16:05:20 +0100
Subject: [PATCH 67/70] Adds toString() to request Item wrappers
---
.../webservices/data/misc/AbstractItemIdWrapper.java | 2 +-
.../webservices/data/misc/FolderIdWrapper.java | 12 ++++++++++++
.../webservices/data/misc/FolderIdWrapperList.java | 4 ++++
.../webservices/data/misc/ItemIdWrapper.java | 10 +++++++++-
.../webservices/data/misc/ItemIdWrapperList.java | 11 ++++++++---
.../exchange/webservices/data/misc/ItemWrapper.java | 2 +-
6 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/AbstractItemIdWrapper.java b/src/main/java/microsoft/exchange/webservices/data/misc/AbstractItemIdWrapper.java
index 2acd24a41..52bfbbb3d 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/AbstractItemIdWrapper.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/AbstractItemIdWrapper.java
@@ -29,7 +29,7 @@
/**
* Represents the abstraction of an item Id.
*/
-abstract class AbstractItemIdWrapper {
+public abstract class AbstractItemIdWrapper {
/**
* Initializes a new instance of the class.
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapper.java b/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapper.java
index 03e71f3c7..16304b9aa 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapper.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapper.java
@@ -70,4 +70,16 @@ protected void validate(ExchangeVersion version)
throws ServiceVersionException {
this.folderId.validate(version);
}
+
+ public FolderId getFolderId() {
+ return folderId;
+ }
+
+ @Override
+ public String toString() {
+ if (folderId.getFolderName() != null ){
+ return folderId.getFolderName().toString();
+ }
+ return folderId.getUniqueId();
+ }
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapperList.java b/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapperList.java
index 45c844a06..d6f607be3 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapperList.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/FolderIdWrapperList.java
@@ -156,4 +156,8 @@ public Iterator iterator() {
return ids.iterator();
}
+ @Override
+ public String toString() {
+ return ids.toString();
+ }
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/ItemIdWrapper.java b/src/main/java/microsoft/exchange/webservices/data/misc/ItemIdWrapper.java
index 1d704202d..78059aa78 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/ItemIdWrapper.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/ItemIdWrapper.java
@@ -30,7 +30,7 @@
/**
* Represents an item Id provided by a ItemId object.
*/
-class ItemIdWrapper extends AbstractItemIdWrapper {
+public class ItemIdWrapper extends AbstractItemIdWrapper {
/**
* The ItemId object providing the Id.
@@ -58,4 +58,12 @@ protected void writeToXml(EwsServiceXmlWriter writer) throws Exception {
this.itemId.writeToXml(writer);
}
+ public ItemId getItemId() {
+ return itemId;
+ }
+
+ @Override
+ public String toString() {
+ return itemId.toString();
+ }
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/ItemIdWrapperList.java b/src/main/java/microsoft/exchange/webservices/data/misc/ItemIdWrapperList.java
index 7a5f9ef02..6c03734bb 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/ItemIdWrapperList.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/ItemIdWrapperList.java
@@ -24,9 +24,9 @@
package microsoft.exchange.webservices.data.misc;
import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
-import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException;
+import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.property.complex.ItemId;
import java.util.ArrayList;
@@ -42,7 +42,7 @@ public class ItemIdWrapperList implements Iterable {
* The item ids.
*/
private List itemIds =
- new ArrayList();
+ new ArrayList();
/**
* Initializes a new instance of the class.
@@ -68,7 +68,7 @@ protected void add(Item item) throws ServiceLocalException {
* @throws ServiceLocalException the service local exception
*/
public void addRangeItem(Iterable items)
- throws ServiceLocalException {
+ throws ServiceLocalException {
for (Item item : items) {
this.add(item);
}
@@ -144,4 +144,9 @@ public Iterator iterator() {
return itemIds.iterator();
}
+
+ @Override
+ public String toString() {
+ return itemIds.toString();
+ }
}
diff --git a/src/main/java/microsoft/exchange/webservices/data/misc/ItemWrapper.java b/src/main/java/microsoft/exchange/webservices/data/misc/ItemWrapper.java
index 5b13cbe3a..c61964e03 100644
--- a/src/main/java/microsoft/exchange/webservices/data/misc/ItemWrapper.java
+++ b/src/main/java/microsoft/exchange/webservices/data/misc/ItemWrapper.java
@@ -31,7 +31,7 @@
/**
* Represents an item Id provided by a ItemBase object.
*/
-class ItemWrapper extends AbstractItemIdWrapper {
+public class ItemWrapper extends AbstractItemIdWrapper {
/**
* The ItemBase object providing the Id.
From 0828c68b7536ce1d04212af6e239df03fe425fba Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 20 May 2019 16:15:42 +0100
Subject: [PATCH 68/70] Release 2.15
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 7dd897033..10bbf66e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.15-SNAPSHOT
+ 2.15Exchange Web Services Java APIExchange Web Services (EWS) Java API
From 49b1ad553fa5f2a2fded88edba3860c72b1b273c Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Mon, 20 May 2019 16:20:21 +0100
Subject: [PATCH 69/70] Prepare for next release
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 10bbf66e2..54bedbac2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
com.surevineews-java-api
- 2.15
+ 2.16-SNAPSHOTExchange Web Services Java APIExchange Web Services (EWS) Java API
From 733cf7a45906bf8d6feb4c906f936b3c1d66d563 Mon Sep 17 00:00:00 2001
From: Pete Woods
Date: Wed, 29 May 2019 12:02:04 +0100
Subject: [PATCH 70/70] Set Jenv Java version to 1.8
---
.java-version | 1 +
1 file changed, 1 insertion(+)
create mode 100644 .java-version
diff --git a/.java-version b/.java-version
new file mode 100644
index 000000000..625934097
--- /dev/null
+++ b/.java-version
@@ -0,0 +1 @@
+1.8