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.EwsServiceXmlReader; 027import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter; 028import microsoft.exchange.webservices.data.core.ExchangeService; 029import microsoft.exchange.webservices.data.core.XmlElementNames; 030import microsoft.exchange.webservices.data.core.response.FindConversationResponse; 031import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion; 032import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace; 033import microsoft.exchange.webservices.data.core.exception.service.local.ServiceLocalException; 034import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException; 035import microsoft.exchange.webservices.data.misc.FolderIdWrapper; 036import microsoft.exchange.webservices.data.search.ConversationIndexedItemView; 037import microsoft.exchange.webservices.data.search.filter.SearchFilter; 038 039/** 040 * Represents a request to a Find Conversation operation 041 */ 042public final class FindConversationRequest extends SimpleServiceRequestBase<FindConversationResponse> { 043 044 045 private ConversationIndexedItemView view; 046 private SearchFilter.IsEqualTo searchFilter; 047 private FolderIdWrapper folderId; 048 049 /** 050 * @throws Exception 051 */ 052 public FindConversationRequest(ExchangeService service) 053 throws Exception { 054 super(service); 055 } 056 057 058 /** 059 * Gets or sets the view controlling the number of conversations returned. 060 */ 061 protected ConversationIndexedItemView getIndexedItemView() { 062 return this.view; 063 } 064 065 public void setIndexedItemView(ConversationIndexedItemView value) { 066 this.view = value; 067 } 068 069 070 071 /** 072 * Gets or sets the search filter. 073 */ 074 protected SearchFilter.IsEqualTo getConversationViewFilter() { 075 076 return this.searchFilter; 077 } 078 079 public void setConversationViewFilter(SearchFilter.IsEqualTo value) { 080 this.searchFilter = value; 081 082 } 083 084 /** 085 * Gets or sets folder id 086 */ 087 protected FolderIdWrapper getFolderId() { 088 return this.folderId; 089 } 090 091 public void setFolderId(FolderIdWrapper value) { 092 this.folderId = value; 093 } 094 095 096 /** 097 * Validate request. 098 * 099 * @throws Exception 100 * @throws ServiceLocalException 101 */ 102 @Override 103 protected void validate() throws ServiceLocalException, Exception { 104 super.validate(); 105 this.view.internalValidate(this); 106 } 107 108 109 /** 110 * Writes XML attribute. 111 * 112 * @param writer The writer. 113 * @throws ServiceXmlSerializationException 114 */ 115 @Override 116 protected void writeAttributesToXml(EwsServiceXmlWriter writer) 117 throws ServiceXmlSerializationException { 118 super.writeAttributesToXml(writer); 119 } 120 121 122 /** 123 * Writes XML attribute. 124 * 125 * @param writer The writer. 126 * @throws Exception 127 */ 128 @Override 129 protected void writeElementsToXml(EwsServiceXmlWriter writer) 130 throws Exception { 131 this.getIndexedItemView().writeToXml(writer); 132 133 if (this.getConversationViewFilter() != null) { 134 writer.writeStartElement(XmlNamespace.Messages, 135 XmlElementNames.Restriction); 136 this.getConversationViewFilter().writeToXml(writer); 137 writer.writeEndElement(); // Restriction 138 } 139 140 this.getIndexedItemView().writeOrderByToXml(writer); 141 142 writer.writeStartElement(XmlNamespace.Messages, 143 XmlElementNames.ParentFolderId); 144 this.getFolderId().writeToXml(writer); 145 writer.writeEndElement(); 146 } 147 148 /** 149 * {@inheritDoc} 150 */ 151 @Override 152 protected FindConversationResponse parseResponse(EwsServiceXmlReader reader) 153 throws Exception { 154 FindConversationResponse response = new FindConversationResponse(); 155 response.loadFromXml(reader, 156 XmlElementNames.FindConversationResponse); 157 return response; 158 } 159 160 /** 161 * Gets the name of the XML element. 162 * 163 * @return XML element name. 164 */ 165 @Override public String getXmlElementName() { 166 return XmlElementNames.FindConversation; 167 } 168 169 /** 170 * Gets the name of the response XML element. 171 * 172 * @return XML element name. 173 */ 174 @Override 175 protected String getResponseXmlElementName() { 176 return XmlElementNames.FindConversationResponse; 177 } 178 179 /** 180 * Gets the request version. 181 * 182 * @return Earliest Exchange version in which this request is supported. 183 */ 184 @Override 185 protected ExchangeVersion getMinimumRequiredServerVersion() { 186 return ExchangeVersion.Exchange2010_SP1; 187 } 188 189 /** 190 * Executes this request. 191 * 192 * @return Service response. 193 * @throws Exception 194 * @throws ServiceLocalException 195 */ 196 public FindConversationResponse execute() 197 throws ServiceLocalException, Exception { 198 FindConversationResponse serviceResponse = internalExecute(); 199 serviceResponse.throwIfNecessary(); 200 return serviceResponse; 201 } 202} 203