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.attribute.EditorBrowsable; 027import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter; 028import microsoft.exchange.webservices.data.core.XmlAttributeNames; 029import microsoft.exchange.webservices.data.core.request.ServiceRequestBase; 030import microsoft.exchange.webservices.data.core.enumeration.attribute.EditorBrowsableState; 031import microsoft.exchange.webservices.data.core.enumeration.search.OffsetBasePoint; 032import microsoft.exchange.webservices.data.core.exception.service.local.ServiceValidationException; 033import microsoft.exchange.webservices.data.core.exception.service.local.ServiceVersionException; 034import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException; 035 036import javax.xml.stream.XMLStreamException; 037 038/** 039 * Represents a view settings that support paging in a search operation. 040 */ 041@EditorBrowsable(state = EditorBrowsableState.Never) 042public abstract class PagedView extends ViewBase { 043 044 /** 045 * The page size. 046 */ 047 private int pageSize; 048 049 /** 050 * The offset base point. 051 */ 052 private OffsetBasePoint offsetBasePoint = OffsetBasePoint.Beginning; 053 054 /** 055 * The offset. 056 */ 057 private int offset; 058 059 /** 060 * Write to XML. 061 * 062 * @param writer The Writer 063 * @throws Exception the exception 064 */ 065 @Override 066 protected void internalWriteViewToXml(EwsServiceXmlWriter writer) 067 throws Exception { 068 super.internalWriteViewToXml(writer); 069 070 writer.writeAttributeValue(XmlAttributeNames.Offset, this.getOffset()); 071 writer.writeAttributeValue(XmlAttributeNames.BasePoint, this 072 .getOffsetBasePoint()); 073 } 074 075 /** 076 * Gets the maximum number of item or folder the search operation should 077 * return. 078 * 079 * @return The maximum number of item or folder that should be returned by 080 * the search operation. 081 */ 082 @Override 083 protected Integer getMaxEntriesReturned() { 084 return this.getPageSize(); 085 } 086 087 /** 088 * Internals the write search settings to XML. 089 * 090 * @param writer the writer 091 * @param groupBy the group by clause 092 * @throws XMLStreamException the XML stream exception 093 * @throws ServiceXmlSerializationException the service xml serialization exception 094 */ 095 @Override 096 protected void internalWriteSearchSettingsToXml(EwsServiceXmlWriter writer, 097 Grouping groupBy) throws XMLStreamException, 098 ServiceXmlSerializationException { 099 if (groupBy != null) { 100 groupBy.writeToXml(writer); 101 } 102 } 103 104 /** 105 * Writes OrderBy property to XML. 106 * 107 * @param writer the writer 108 * @throws XMLStreamException the XML stream exception 109 * @throws ServiceXmlSerializationException the service xml serialization exception 110 */ 111 @Override public void writeOrderByToXml(EwsServiceXmlWriter writer) 112 throws XMLStreamException, ServiceXmlSerializationException { 113 // No order by for paged view 114 } 115 116 /** 117 * Validates this view. 118 * 119 * @param request The request using this view. 120 * @throws ServiceVersionException the service version exception 121 * @throws ServiceValidationException the service validation exception 122 */ 123 @Override public void internalValidate(ServiceRequestBase request) 124 throws ServiceVersionException, ServiceValidationException { 125 super.internalValidate(request); 126 } 127 128 /** 129 * Initializes a new instance of the "PagedView" class. 130 * 131 * @param pageSize The maximum number of elements the search operation should 132 * return. 133 */ 134 protected PagedView(int pageSize) { 135 super(); 136 this.setPageSize(pageSize); 137 } 138 139 /** 140 * Initializes a new instance of the "PagedView" class. 141 * 142 * @param pageSize The maximum number of elements the search operation should 143 * return. 144 * @param offset The offset of the view from the base point. 145 */ 146 protected PagedView(int pageSize, int offset) { 147 this(pageSize); 148 this.setOffset(offset); 149 } 150 151 /** 152 * Initializes a new instance of the "PagedView" class. 153 * 154 * @param pageSize The maximum number of elements the search operation should 155 * return. 156 * @param offset The offset of the view from the base point. 157 * @param offsetBasePoint The base point of the offset. 158 */ 159 protected PagedView(int pageSize, int offset, 160 OffsetBasePoint offsetBasePoint) { 161 this(pageSize, offset); 162 this.setOffsetBasePoint(offsetBasePoint); 163 } 164 165 /** 166 * Gets the maximum number of item or folder the search operation should 167 * return. 168 * 169 * @return the page size 170 */ 171 public int getPageSize() { 172 return pageSize; 173 } 174 175 /** 176 * Sets the maximum number of item or folder the search operation should 177 * return. 178 * 179 * @param pageSize the new page size 180 */ 181 public void setPageSize(int pageSize) { 182 if (pageSize <= 0) { 183 throw new IllegalArgumentException("The value must be greater than 0."); 184 } 185 this.pageSize = pageSize; 186 } 187 188 /** 189 * Gets the base point of the offset. 190 * 191 * @return the offset base point 192 */ 193 public OffsetBasePoint getOffsetBasePoint() { 194 return offsetBasePoint; 195 } 196 197 /** 198 * Sets the base point of the offset. 199 * 200 * @param offsetBasePoint the new offset base point 201 */ 202 public void setOffsetBasePoint(OffsetBasePoint offsetBasePoint) { 203 this.offsetBasePoint = offsetBasePoint; 204 } 205 206 /** 207 * Gets the offset. 208 * 209 * @return the offset 210 */ 211 public int getOffset() { 212 return offset; 213 } 214 215 /** 216 * Sets the offset. 217 * 218 * @param offset the new offset 219 */ 220 public void setOffset(int offset) { 221 if (offset >= 0) { 222 this.offset = offset; 223 } else { 224 throw new IllegalArgumentException("The offset must be greater than 0."); 225 } 226 } 227 228}