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.search;
025
026 import microsoft.exchange.webservices.data.attribute.EditorBrowsable;
027 import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
028 import microsoft.exchange.webservices.data.core.PropertySet;
029 import microsoft.exchange.webservices.data.core.XmlAttributeNames;
030 import microsoft.exchange.webservices.data.core.request.ServiceRequestBase;
031 import microsoft.exchange.webservices.data.core.enumeration.attribute.EditorBrowsableState;
032 import microsoft.exchange.webservices.data.core.enumeration.service.ServiceObjectType;
033 import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
034 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceValidationException;
035 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceVersionException;
036 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
037
038 import javax.xml.stream.XMLStreamException;
039
040 /**
041 * Represents the base view class for search operations.
042 */
043 @EditorBrowsable(state = EditorBrowsableState.Never)
044 public abstract class ViewBase {
045
046 /**
047 * The property set.
048 */
049 private PropertySet propertySet;
050
051 /**
052 * Initializes a new instance of the "ViewBase" class.
053 */
054 ViewBase() {
055 }
056
057 /**
058 * Validates this view.
059 *
060 * @param request The request using this view.
061 * @throws ServiceValidationException the service validation exception
062 * @throws ServiceVersionException the service version exception
063 */
064 public void internalValidate(ServiceRequestBase request)
065 throws ServiceValidationException, ServiceVersionException {
066 if (this.getPropertySet() != null) {
067 this.getPropertySet().internalValidate();
068 this.getPropertySet().validateForRequest(
069 request,
070 true /* summaryPropertiesOnly */);
071 }
072 }
073
074 /**
075 * Writes this view to XML.
076 *
077 * @param writer The writer
078 * @throws ServiceXmlSerializationException the service xml serialization exception
079 * @throws Exception the exception
080 */
081 protected void internalWriteViewToXml(EwsServiceXmlWriter writer)
082 throws ServiceXmlSerializationException, Exception {
083 Integer maxEntriesReturned = this.getMaxEntriesReturned();
084
085 if (maxEntriesReturned != null) {
086 writer.writeAttributeValue(XmlAttributeNames.MaxEntriesReturned,
087 maxEntriesReturned);
088 }
089 }
090
091 /**
092 * Writes the search settings to XML.
093 *
094 * @param writer the writer
095 * @param groupBy the group by clause
096 * @throws XMLStreamException the XML stream exception
097 * @throws ServiceXmlSerializationException the service xml serialization exception
098 */
099 protected abstract void internalWriteSearchSettingsToXml(
100 EwsServiceXmlWriter writer, Grouping groupBy)
101 throws XMLStreamException, ServiceXmlSerializationException;
102
103 /**
104 * Writes OrderBy property to XML.
105 *
106 * @param writer the writer
107 * @throws XMLStreamException the XML stream exception
108 * @throws ServiceXmlSerializationException the service xml serialization exception
109 */
110 public abstract void writeOrderByToXml(EwsServiceXmlWriter writer)
111 throws XMLStreamException, ServiceXmlSerializationException;
112
113 /**
114 * Gets the name of the view XML element.
115 *
116 * @return TheXml Element name
117 */
118 protected abstract String getViewXmlElementName();
119
120 /**
121 * Gets the maximum number of item or folder the search operation should
122 * return.
123 *
124 * @return The maximum number of item or folder that should be returned by
125 * the search operation.
126 */
127 protected abstract Integer getMaxEntriesReturned();
128
129 /**
130 * Gets the type of service object this view applies to.
131 *
132 * @return A ServiceObjectType value.
133 */
134 protected abstract ServiceObjectType getServiceObjectType();
135
136 /**
137 * Writes the attribute to XML.
138 *
139 * @param writer The writer.
140 * @throws ServiceXmlSerializationException the service xml serialization exception
141 */
142 public abstract void writeAttributesToXml(EwsServiceXmlWriter writer)
143 throws ServiceXmlSerializationException;
144
145 /**
146 * Writes to XML.
147 *
148 * @param writer The writer.
149 * @param groupBy The group by clause.
150 * @throws Exception the exception
151 */
152 public void writeToXml(EwsServiceXmlWriter writer, Grouping groupBy)
153 throws Exception {
154 this.getPropertySetOrDefault().writeToXml(writer,
155 this.getServiceObjectType());
156 writer.writeStartElement(XmlNamespace.Messages, this
157 .getViewXmlElementName());
158 this.internalWriteViewToXml(writer);
159 writer.writeEndElement(); // this.GetViewXmlElementName()
160 this.internalWriteSearchSettingsToXml(writer, groupBy);
161 }
162
163 /**
164 * Gets the property set or the default.
165 *
166 * @return PropertySet
167 */
168 public PropertySet getPropertySetOrDefault() {
169 if (this.getPropertySet() == null) {
170 return PropertySet.getFirstClassProperties();
171 } else {
172 return this.getPropertySet();
173 }
174 }
175
176 /**
177 * Gets the property set. PropertySet determines which property will be
178 * loaded on found item. If PropertySet is null, all first class property
179 * are loaded on found item.
180 *
181 * @return the property set
182 */
183 public PropertySet getPropertySet() {
184 return propertySet;
185 }
186
187 /**
188 * Sets the property set. PropertySet determines which property will be
189 * loaded on found item. If PropertySet is null, all first class property
190 * are loaded on found item.
191 *
192 * @param propertySet The property set
193 */
194 public void setPropertySet(PropertySet propertySet) {
195 this.propertySet = propertySet;
196 }
197
198 }