001/* 002 * The MIT License 003 * Copyright (c) 2012 Microsoft Corporation 004 * 005 * Permission is hereby granted, free of charge, to any person obtaining a copy 006 * of this software and associated documentation files (the "Software"), to deal 007 * in the Software without restriction, including without limitation the rights 008 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 009 * copies of the Software, and to permit persons to whom the Software is 010 * furnished to do so, subject to the following conditions: 011 * 012 * The above copyright notice and this permission notice shall be included in 013 * all copies or substantial portions of the Software. 014 * 015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 018 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 020 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 021 * THE SOFTWARE. 022 */ 023 024package microsoft.exchange.webservices.data.core.request; 025 026import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter; 027import microsoft.exchange.webservices.data.core.EwsUtilities; 028import microsoft.exchange.webservices.data.core.ExchangeService; 029import microsoft.exchange.webservices.data.core.PropertySet; 030import microsoft.exchange.webservices.data.core.XmlElementNames; 031import microsoft.exchange.webservices.data.core.enumeration.service.error.ServiceErrorHandling; 032import microsoft.exchange.webservices.data.core.response.SyncFolderHierarchyResponse; 033import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion; 034import microsoft.exchange.webservices.data.core.enumeration.service.ServiceObjectType; 035import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace; 036import microsoft.exchange.webservices.data.property.complex.FolderId; 037 038/** 039 * Represents a SyncFolderHierarchy request. 040 */ 041public class SyncFolderHierarchyRequest extends 042 MultiResponseServiceRequest<SyncFolderHierarchyResponse> { 043 044 /** 045 * The property set. 046 */ 047 private PropertySet propertySet; 048 049 /** 050 * The sync folder id. 051 */ 052 private FolderId syncFolderId; 053 054 /** 055 * The sync state. 056 */ 057 private String syncState; 058 059 /** 060 * Initializes a new instance of the class. 061 * 062 * @param service the service 063 * @throws Exception 064 */ 065 public SyncFolderHierarchyRequest(ExchangeService service) 066 throws Exception { 067 super(service, ServiceErrorHandling.ThrowOnError); 068 } 069 070 /** 071 * Creates the service response. 072 * 073 * @param service the service 074 * @param responseIndex the response index 075 * @return Service response. 076 */ 077 @Override 078 protected SyncFolderHierarchyResponse createServiceResponse( 079 ExchangeService service, int responseIndex) { 080 return new SyncFolderHierarchyResponse(this.getPropertySet()); 081 } 082 083 /** 084 * Gets the expected response message count. 085 * 086 * @return Number of expected response 087 */ 088 @Override 089 protected int getExpectedResponseMessageCount() { 090 return 1; 091 } 092 093 /** 094 * Gets the name of the XML element. 095 * 096 * @return XML element name 097 */ 098 @Override public String getXmlElementName() { 099 return XmlElementNames.SyncFolderHierarchy; 100 } 101 102 /** 103 * Gets the name of the response XML element. 104 * 105 * @return XML element name 106 */ 107 @Override 108 protected String getResponseXmlElementName() { 109 return XmlElementNames.SyncFolderHierarchyResponse; 110 } 111 112 /** 113 * Gets the name of the response message XML element. 114 * 115 * @return XML element name 116 */ 117 @Override 118 protected String getResponseMessageXmlElementName() { 119 return XmlElementNames.SyncFolderHierarchyResponseMessage; 120 } 121 122 /** 123 * Validates request. 124 * 125 * @throws Exception the exception 126 */ 127 @Override 128 protected void validate() throws Exception { 129 super.validate(); 130 EwsUtilities.validateParam(this.getPropertySet(), "PropertySet"); 131 if (this.getSyncFolderId() != null) { 132 this.getSyncFolderId().validate( 133 this.getService().getRequestedServerVersion()); 134 } 135 136 this.getPropertySet() 137 .validateForRequest(this, false /* summaryPropertiesOnly */); 138 } 139 140 /** 141 * Writes XML elements. 142 * 143 * @param writer the writer 144 * @throws Exception the exception 145 */ 146 @Override 147 protected void writeElementsToXml(EwsServiceXmlWriter writer) 148 throws Exception { 149 this.getPropertySet().writeToXml(writer, ServiceObjectType.Folder); 150 151 if (this.getSyncFolderId() != null) { 152 writer.writeStartElement(XmlNamespace.Messages, 153 XmlElementNames.SyncFolderId); 154 this.getSyncFolderId().writeToXml(writer); 155 writer.writeEndElement(); 156 } 157 158 writer.writeElementValue(XmlNamespace.Messages, 159 XmlElementNames.SyncState, this.getSyncState()); 160 } 161 162 /** 163 * Gets the request version. 164 * 165 * @return Earliest Exchange version in which this request is supported. 166 */ 167 @Override 168 protected ExchangeVersion getMinimumRequiredServerVersion() { 169 return ExchangeVersion.Exchange2007_SP1; 170 } 171 172 /** 173 * Gets or sets the property set. 174 * 175 * @return the property set 176 */ 177 public PropertySet getPropertySet() { 178 return this.propertySet; 179 } 180 181 /** 182 * Sets the property set. 183 * 184 * @param value the new property set 185 */ 186 public void setPropertySet(PropertySet value) { 187 this.propertySet = value; 188 } 189 190 /** 191 * Gets or sets the property set. 192 * 193 * @return the sync folder id 194 */ 195 public FolderId getSyncFolderId() { 196 return this.syncFolderId; 197 } 198 199 /** 200 * Sets the sync folder id. 201 * 202 * @param value the new sync folder id 203 */ 204 public void setSyncFolderId(FolderId value) { 205 this.syncFolderId = value; 206 } 207 208 /** 209 * Gets or sets the state of the sync. 210 * 211 * @return the sync state 212 */ 213 public String getSyncState() { 214 return this.syncState; 215 } 216 217 /** 218 * Sets the sync state. 219 * 220 * @param value the new sync state 221 */ 222 public void setSyncState(String value) { 223 this.syncState = value; 224 } 225 226}