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}