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    
024    package microsoft.exchange.webservices.data.core.request;
025    
026    import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
027    import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
028    import microsoft.exchange.webservices.data.core.EwsUtilities;
029    import microsoft.exchange.webservices.data.core.ExchangeService;
030    import microsoft.exchange.webservices.data.core.XmlElementNames;
031    import microsoft.exchange.webservices.data.core.response.UpdateInboxRulesResponse;
032    import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
033    import microsoft.exchange.webservices.data.core.enumeration.service.ServiceResult;
034    import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
035    import microsoft.exchange.webservices.data.core.exception.service.remote.UpdateInboxRulesException;
036    import microsoft.exchange.webservices.data.property.complex.RuleOperation;
037    
038    /**
039     * Represents a UpdateInboxRulesRequest request.
040     */
041    public final class UpdateInboxRulesRequest extends SimpleServiceRequestBase<UpdateInboxRulesResponse> {
042      /**
043       * The smtp address of the mailbox from which to get the inbox rules.
044       */
045      private String mailboxSmtpAddress;
046    
047      /**
048       * Remove OutlookRuleBlob or not.
049       */
050      private boolean removeOutlookRuleBlob;
051    
052      /**
053       * InboxRule operation collection.
054       */
055      private Iterable<RuleOperation> inboxRuleOperations;
056    
057      /**
058       * Initializes a new instance of the
059       * <see cref="UpdateInboxRulesRequest"/> class.
060       *
061       * @param service The service.
062       */
063      public UpdateInboxRulesRequest(ExchangeService service)
064          throws Exception {
065        super(service);
066      }
067    
068      /**
069       * Gets the name of the XML element.
070       *
071       * @return XML element name.
072       */
073      @Override public String getXmlElementName() {
074        return XmlElementNames.UpdateInboxRules;
075      }
076    
077      /**
078       * Writes XML elements.
079       *
080       * @param writer The writer.
081       */
082      @Override
083      protected void writeElementsToXml(EwsServiceXmlWriter writer)
084          throws Exception {
085        if (!(mailboxSmtpAddress == null || mailboxSmtpAddress.isEmpty())) {
086          writer.writeElementValue(
087              XmlNamespace.Messages,
088              XmlElementNames.MailboxSmtpAddress,
089              this.mailboxSmtpAddress);
090        }
091    
092        writer.writeElementValue(
093            XmlNamespace.Messages,
094            XmlElementNames.RemoveOutlookRuleBlob,
095            this.removeOutlookRuleBlob);
096        writer.writeStartElement(XmlNamespace.Messages,
097            XmlElementNames.Operations);
098        for (RuleOperation operation : this.inboxRuleOperations) {
099          operation.writeToXml(writer, operation.getXmlElementName());
100        }
101        writer.writeEndElement();
102      }
103    
104      /**
105       * Gets the name of the response XML element.
106       *
107       * @return XML element name.
108       */
109      @Override
110      protected String getResponseXmlElementName() {
111        return XmlElementNames.UpdateInboxRulesResponse;
112      }
113    
114      /**
115       * {@inheritDoc}
116       */
117      @Override
118      protected UpdateInboxRulesResponse parseResponse(EwsServiceXmlReader reader)
119          throws Exception {
120        UpdateInboxRulesResponse response = new UpdateInboxRulesResponse();
121        response.loadFromXml(reader, XmlElementNames.UpdateInboxRulesResponse);
122        return response;
123      }
124    
125      /**
126       * Gets the request version.
127       *
128       * @return Earliest Exchange version in which this request is supported.
129       */
130      @Override
131      protected ExchangeVersion getMinimumRequiredServerVersion() {
132        return ExchangeVersion.Exchange2010_SP1;
133      }
134    
135      /**
136       * Validate request.
137       */
138      @Override
139      protected void validate() throws Exception {
140        if (this.inboxRuleOperations == null) {
141          throw new IllegalArgumentException(
142              "RuleOperations cannot be null." + "Operations");
143        }
144    
145        int operationCount = 0;
146        for (RuleOperation operation : this.inboxRuleOperations) {
147          EwsUtilities.validateParam(operation, "RuleOperation");
148          operationCount++;
149        }
150    
151        if (operationCount == 0) {
152          throw new IllegalArgumentException(
153              "RuleOperations cannot be empty." + "Operations");
154        }
155    
156        this.getService().validate();
157      }
158    
159      /**
160       * Executes this request.
161       *
162       * @return Service response.
163       * @throws Exception on error
164       */
165      public UpdateInboxRulesResponse execute() throws Exception {
166        UpdateInboxRulesResponse serviceResponse = internalExecute();
167        if (serviceResponse.getResult() == ServiceResult.Error) {
168          throw new UpdateInboxRulesException(serviceResponse,
169              this.inboxRuleOperations);
170        }
171        return serviceResponse;
172      }
173    
174      /**
175       * Gets the address of the mailbox in which to update the inbox rules.
176       */
177      protected String getMailboxSmtpAddress() {
178        return this.mailboxSmtpAddress;
179      }
180    
181      /**
182       * Sets the address of the mailbox in which to update the inbox rules.
183       */
184      public void setMailboxSmtpAddress(String value) {
185        this.mailboxSmtpAddress = value;
186      }
187    
188      /**
189       * Gets a value indicating whether or not to
190       * remove OutlookRuleBlob from the rule collection.
191       */
192      protected boolean getRemoveOutlookRuleBlob() {
193        return this.removeOutlookRuleBlob;
194      }
195    
196      /**
197       * Sets a value indicating whether or not to
198       * remove OutlookRuleBlob from the rule collection.
199       */
200      public void setRemoveOutlookRuleBlob(boolean value) {
201        this.removeOutlookRuleBlob = value;
202      }
203    
204    
205      /**
206       * Gets the RuleOperation collection.
207       */
208      protected Iterable<RuleOperation> getInboxRuleOperations() {
209        return this.inboxRuleOperations;
210      }
211    
212      /**
213       * Sets the RuleOperation collection.
214       */
215      public void setInboxRuleOperations(Iterable<RuleOperation> value) {
216        this.inboxRuleOperations = value;
217      }
218    
219    }