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.search;
025
026import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
027import microsoft.exchange.webservices.data.core.XmlAttributeNames;
028import microsoft.exchange.webservices.data.core.XmlElementNames;
029import microsoft.exchange.webservices.data.core.request.ServiceRequestBase;
030import microsoft.exchange.webservices.data.core.enumeration.search.ItemTraversal;
031import microsoft.exchange.webservices.data.core.enumeration.service.ServiceObjectType;
032import microsoft.exchange.webservices.data.core.exception.misc.ArgumentException;
033import microsoft.exchange.webservices.data.core.exception.service.local.ServiceValidationException;
034import microsoft.exchange.webservices.data.core.exception.service.local.ServiceVersionException;
035import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
036
037import java.util.Date;
038
039/**
040 * Represents a date range view of appointments in calendar folder search
041 * operations.
042 */
043public final class CalendarView extends ViewBase {
044
045  /**
046   * The traversal.
047   */
048  private ItemTraversal traversal = ItemTraversal.Shallow;
049
050  /**
051   * The max item returned.
052   */
053  private Integer maxItemsReturned;
054
055  /**
056   * The start date.
057   */
058  private Date startDate;
059
060  /**
061   * The end date.
062   */
063  private Date endDate;
064
065  /**
066   * Writes the attribute to XML.
067   *
068   * @param writer the writer
069   * @throws ServiceXmlSerializationException the service xml serialization exception
070   */
071  public void writeAttributesToXml(EwsServiceXmlWriter writer)
072      throws ServiceXmlSerializationException {
073    writer.writeAttributeValue(XmlAttributeNames.Traversal, this
074        .getTraversal());
075  }
076
077  /**
078   * Writes the search settings to XML.
079   *
080   * @param writer  the writer
081   * @param groupBy the group by
082   */
083  protected void internalWriteSearchSettingsToXml(EwsServiceXmlWriter writer,
084      Grouping groupBy) {
085    // No search settings for calendar views.
086  }
087
088  /**
089   * Writes OrderBy property to XML.
090   *
091   * @param writer the writer
092   */
093  public void writeOrderByToXml(EwsServiceXmlWriter writer) {
094    // No OrderBy for calendar views.
095  }
096
097  /**
098   * Gets the type of service object this view applies to.
099   *
100   * @return A ServiceObjectType value.
101   */
102  protected ServiceObjectType getServiceObjectType() {
103    return ServiceObjectType.Item;
104  }
105
106  /**
107   * Initializes a new instance of CalendarView.
108   *
109   * @param startDate the start date
110   * @param endDate   the end date
111   */
112  public CalendarView(Date startDate, Date endDate) {
113    super();
114    this.startDate = startDate;
115    this.endDate = endDate;
116  }
117
118  /**
119   * Initializes a new instance of CalendarView.
120   *
121   * @param startDate        the start date
122   * @param endDate          the end date
123   * @param maxItemsReturned the max item returned
124   */
125  public CalendarView(Date startDate, Date endDate, int maxItemsReturned) {
126    this(startDate, endDate);
127    this.maxItemsReturned = maxItemsReturned;
128  }
129
130  /**
131   * Validate instance.
132   *
133   * @param request the request
134   * @throws ServiceVersionException    the service version exception
135   * @throws ServiceValidationException the service validation exception
136   */
137  public void internalValidate(ServiceRequestBase request)
138      throws ServiceVersionException, ServiceValidationException {
139    super.internalValidate(request);
140
141    if (this.endDate.compareTo(this.startDate) < 0) {
142      throw new ServiceValidationException("EndDate must be greater than StartDate.");
143    }
144  }
145
146  /**
147   * Write to XML.
148   *
149   * @param writer the writer
150   * @throws Exception the exception
151   */
152  protected void internalWriteViewToXml(EwsServiceXmlWriter writer)
153      throws Exception {
154    super.internalWriteViewToXml(writer);
155
156    writer.writeAttributeValue(XmlAttributeNames.StartDate, this.startDate);
157    writer.writeAttributeValue(XmlAttributeNames.EndDate, this.endDate);
158  }
159
160  /**
161   * Gets the name of the view XML element.
162   *
163   * @return XML element name
164   */
165  protected String getViewXmlElementName() {
166    return XmlElementNames.CalendarView;
167  }
168
169  /**
170   * Gets the maximum number of item or folder the search operation should
171   * return.
172   *
173   * @return The maximum number of item the search operation should return.
174   */
175  protected Integer getMaxEntriesReturned() {
176    return this.maxItemsReturned;
177  }
178
179  /**
180   * Gets the start date.
181   *
182   * @return the start date
183   */
184  public Date getStartDate() {
185    return this.startDate;
186  }
187
188  /**
189   * Sets the start date.
190   *
191   * @param startDate the new start date
192   */
193  public void setStartDate(Date startDate) {
194    this.startDate = startDate;
195  }
196
197  /**
198   * Gets the end date.
199   *
200   * @return the end date
201   */
202  public Date getEndDate() {
203    return this.endDate;
204  }
205
206  /**
207   * Sets the end date.
208   *
209   * @param endDate the new end date
210   */
211  public void setEndDate(Date endDate) {
212    this.endDate = endDate;
213  }
214
215  /**
216   * The maximum number of item the search operation should return.
217   *
218   * @return the max item returned
219   */
220  public Integer getMaxItemsReturned() {
221
222    return this.maxItemsReturned;
223  }
224
225  /**
226   * Sets the max item returned.
227   *
228   * @param maxItemsReturned the new max item returned
229   * @throws ArgumentException the argument exception
230   */
231  public void setMaxItemsReturned(Integer maxItemsReturned)
232      throws ArgumentException {
233    if (maxItemsReturned != null) {
234      if (maxItemsReturned.intValue() <= 0) {
235        throw new ArgumentException("The value must be greater than 0.");
236      }
237    }
238
239    this.maxItemsReturned = maxItemsReturned;
240  }
241
242  /**
243   * Gets  the search traversal mode. Defaults to
244   * ItemTraversal.Shallow.
245   *
246   * @return the traversal
247   */
248  public ItemTraversal getTraversal() {
249    return this.traversal;
250
251  }
252
253  /**
254   * Sets the traversal.
255   *
256   * @param traversal the new traversal
257   */
258  public void setTraversal(ItemTraversal traversal) {
259    this.traversal = traversal;
260  }
261
262}