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.property.complex.availability;
025
026 import microsoft.exchange.webservices.data.ISelfValidate;
027 import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
028 import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter;
029 import microsoft.exchange.webservices.data.core.EwsUtilities;
030 import microsoft.exchange.webservices.data.core.XmlElementNames;
031 import microsoft.exchange.webservices.data.core.enumeration.property.OofExternalAudience;
032 import microsoft.exchange.webservices.data.core.enumeration.property.OofState;
033 import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
034 import microsoft.exchange.webservices.data.core.exception.misc.ArgumentException;
035 import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException;
036 import microsoft.exchange.webservices.data.misc.availability.OofReply;
037 import microsoft.exchange.webservices.data.misc.availability.TimeWindow;
038 import microsoft.exchange.webservices.data.property.complex.ComplexProperty;
039
040 import javax.xml.stream.XMLStreamException;
041
042 /**
043 * Represents a user's Out of Office (OOF) settings.
044 */
045 public final class OofSettings extends ComplexProperty implements ISelfValidate {
046
047 /**
048 * The state.
049 */
050 private OofState state = OofState.Disabled;
051
052 /**
053 * The external audience.
054 */
055 private OofExternalAudience externalAudience = OofExternalAudience.None;
056
057 /**
058 * The allow external oof.
059 */
060 private OofExternalAudience allowExternalOof = OofExternalAudience.None;
061
062 /**
063 * The duration.
064 */
065 private TimeWindow duration;
066
067 /**
068 * The internal reply.
069 */
070 private OofReply internalReply;
071
072 /**
073 * The external reply.
074 */
075 private OofReply externalReply;
076
077 /**
078 * Serializes an OofReply. Emits an empty OofReply in case the one passed in
079 * is null.
080 *
081 * @param oofReply The oof reply
082 * @param writer The writer
083 * @param xmlElementName Name of the xml element
084 * @throws XMLStreamException the XML stream exception
085 * @throws ServiceXmlSerializationException the service xml serialization exception
086 */
087 private void serializeOofReply(OofReply oofReply,
088 EwsServiceXmlWriter writer, String xmlElementName)
089 throws XMLStreamException, ServiceXmlSerializationException {
090 if (oofReply != null) {
091 oofReply.writeToXml(writer, xmlElementName);
092 } else {
093 OofReply.writeEmptyReplyToXml(writer, xmlElementName);
094 }
095 }
096
097 /**
098 * Initializes a new instance of OofSettings.
099 */
100 public OofSettings()
101
102 {
103 super();
104 }
105
106 /**
107 * Tries to read element from XML.
108 *
109 * @param reader The reader
110 * @return True if appropriate element was read.
111 * @throws Exception the exception
112 */
113 @Override
114 public boolean tryReadElementFromXml(EwsServiceXmlReader reader)
115 throws Exception {
116 if (reader.getLocalName().equals(XmlElementNames.OofState)) {
117 this.state = reader.readValue(OofState.class);
118 return true;
119 } else if (reader.getLocalName().equals(
120 XmlElementNames.ExternalAudience)) {
121 this.externalAudience = reader.readValue(OofExternalAudience.class);
122 return true;
123 } else if (reader.getLocalName().equals(XmlElementNames.Duration)) {
124 this.duration = new TimeWindow();
125 this.duration.loadFromXml(reader);
126 return true;
127 } else if (reader.getLocalName().equals(XmlElementNames.InternalReply)) {
128 this.internalReply = new OofReply();
129 this.internalReply.loadFromXml(reader, reader.getLocalName());
130 return true;
131 } else if (reader.getLocalName().equals(XmlElementNames.ExternalReply)) {
132 this.externalReply = new OofReply();
133 this.externalReply.loadFromXml(reader, reader.getLocalName());
134 return true;
135 } else {
136 return false;
137 }
138 }
139
140 /**
141 * Writes elements to XML.
142 *
143 * @param writer The writer
144 * @throws Exception the exception
145 */
146 @Override
147 public void writeElementsToXml(EwsServiceXmlWriter writer)
148 throws Exception {
149 super.writeElementsToXml(writer);
150
151 writer.writeElementValue(XmlNamespace.Types, XmlElementNames.OofState,
152 this.getState());
153
154 writer.writeElementValue(XmlNamespace.Types,
155 XmlElementNames.ExternalAudience, this.getExternalAudience());
156
157 if (this.getDuration() != null && this.getState() == OofState.Scheduled) {
158 this.getDuration().writeToXml(writer, XmlElementNames.Duration);
159 }
160
161 this.serializeOofReply(this.getInternalReply(), writer,
162 XmlElementNames.InternalReply);
163 this.serializeOofReply(this.getExternalReply(), writer,
164 XmlElementNames.ExternalReply);
165 }
166
167 /**
168 * Gets the user's OOF state.
169 *
170 * @return The user's OOF state.
171 */
172 public OofState getState() {
173 return state;
174 }
175
176 /**
177 * Sets the user's OOF state.
178 *
179 * @param state the new state
180 */
181 public void setState(OofState state) {
182 this.state = state;
183 }
184
185 /**
186 * Gets a value indicating who should receive external OOF messages.
187 *
188 * @return the external audience
189 */
190 public OofExternalAudience getExternalAudience() {
191 return externalAudience;
192 }
193
194 /**
195 * Sets a value indicating who should receive external OOF messages.
196 *
197 * @param externalAudience the new external audience
198 */
199 public void setExternalAudience(OofExternalAudience externalAudience) {
200 this.externalAudience = externalAudience;
201 }
202
203 /**
204 * Gets the duration of the OOF status when State is set to
205 * OofState.Scheduled.
206 *
207 * @return the duration
208 */
209 public TimeWindow getDuration() {
210 return duration;
211 }
212
213 /**
214 * Sets the duration of the OOF status when State is set to
215 * OofState.Scheduled.
216 *
217 * @param duration the new duration
218 */
219 public void setDuration(TimeWindow duration) {
220 this.duration = duration;
221 }
222
223 /**
224 * Gets the OOF response sent other users in the user's domain or trusted
225 * domain.
226 *
227 * @return the internal reply
228 */
229 public OofReply getInternalReply() {
230 return internalReply;
231 }
232
233 /**
234 * Sets the OOF response sent other users in the user's domain or trusted
235 * domain.
236 *
237 * @param internalReply the new internal reply
238 */
239 public void setInternalReply(OofReply internalReply) {
240 this.internalReply = internalReply;
241 }
242
243 /**
244 * Gets the OOF response sent to addresses outside the user's domain or
245 * trusted domain.
246 *
247 * @return the external reply
248 */
249 public OofReply getExternalReply() {
250 return externalReply;
251 }
252
253 /**
254 * Sets the OOF response sent to addresses outside the user's domain or
255 * trusted domain.
256 *
257 * @param externalReply the new external reply
258 */
259 public void setExternalReply(OofReply externalReply) {
260 this.externalReply = externalReply;
261 }
262
263 /**
264 * Gets a value indicating the authorized external OOF notification.
265 *
266 * @return the allow external oof
267 */
268 public OofExternalAudience getAllowExternalOof() {
269 return allowExternalOof;
270 }
271
272 /**
273 * Sets a value indicating the authorized external OOF notification.
274 *
275 * @param allowExternalOof the new allow external oof
276 */
277 public void setAllowExternalOof(OofExternalAudience allowExternalOof) {
278 this.allowExternalOof = allowExternalOof;
279 }
280
281 /**
282 * Validates this instance.
283 *
284 * @throws Exception the exception
285 */
286 @Override
287 public void validate() throws Exception {
288 if (this.getState() == OofState.Scheduled) {
289 if (this.getDuration() == null) {
290 throw new ArgumentException("Duration must be specified when State is equal to Scheduled.");
291 }
292
293 EwsUtilities.validateParam(this.getDuration(), "Duration");
294 }
295 }
296
297 }