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.misc.availability; 025 026import microsoft.exchange.webservices.data.ISelfValidate; 027import microsoft.exchange.webservices.data.core.EwsServiceXmlReader; 028import microsoft.exchange.webservices.data.core.EwsServiceXmlWriter; 029import microsoft.exchange.webservices.data.core.XmlElementNames; 030import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace; 031import microsoft.exchange.webservices.data.core.exception.service.local.ServiceXmlSerializationException; 032 033import javax.xml.stream.XMLStreamException; 034 035import java.text.DateFormat; 036import java.text.SimpleDateFormat; 037import java.util.Date; 038import java.util.TimeZone; 039 040/** 041 * Represents a time period. 042 */ 043public class TimeWindow implements ISelfValidate { 044 045 /** 046 * The start time. 047 */ 048 private Date startTime; 049 050 /** 051 * The end time. 052 */ 053 private Date endTime; 054 055 /** 056 * Initializes a new instance of the "TimeWindow" class. 057 */ 058 public TimeWindow() { 059 } 060 061 /** 062 * Initializes a new instance of the "TimeWindow" class. 063 * 064 * @param startTime the start time 065 * @param endTime the end time 066 */ 067 public TimeWindow(Date startTime, Date endTime) { 068 this(); 069 this.startTime = startTime; 070 this.endTime = endTime; 071 } 072 073 /** 074 * Gets the start time. 075 * 076 * @return the start time 077 */ 078 public Date getStartTime() { 079 return startTime; 080 } 081 082 /** 083 * Sets the start time. 084 * 085 * @param startTime the new start time 086 */ 087 public void setStartTime(Date startTime) { 088 this.startTime = startTime; 089 } 090 091 /** 092 * Gets the end time. 093 * 094 * @return the end time 095 */ 096 public Date getEndTime() { 097 return endTime; 098 } 099 100 /** 101 * Sets the end time. 102 * 103 * @param endTime the new end time 104 */ 105 public void setEndTime(Date endTime) { 106 this.endTime = endTime; 107 } 108 109 /** 110 * Loads from XML. 111 * 112 * @param reader the reader 113 * @throws Exception the exception 114 */ 115 public void loadFromXml(EwsServiceXmlReader reader) throws Exception { 116 reader.ensureCurrentNodeIsStartElement(XmlNamespace.Types, 117 XmlElementNames.Duration); 118 119 this.startTime = reader.readElementValueAsDateTime(XmlNamespace.Types, 120 XmlElementNames.StartTime); 121 this.endTime = reader.readElementValueAsDateTime(XmlNamespace.Types, 122 XmlElementNames.EndTime); 123 124 reader.readEndElement(XmlNamespace.Types, XmlElementNames.Duration); 125 } 126 127 /** 128 * Writes to XML. 129 * 130 * @param writer the writer 131 * @param xmlElementName the xml element name 132 * @param startTime the start time 133 * @param endTime the end time 134 * @throws XMLStreamException the XML stream exception 135 * @throws ServiceXmlSerializationException the service xml serialization exception 136 */ 137 private static void writeToXml(EwsServiceXmlWriter writer, 138 String xmlElementName, Object startTime, Object endTime) 139 throws XMLStreamException, ServiceXmlSerializationException { 140 writer.writeStartElement(XmlNamespace.Types, xmlElementName); 141 142 writer.writeElementValue(XmlNamespace.Types, XmlElementNames.StartTime, 143 startTime); 144 145 writer.writeElementValue(XmlNamespace.Types, XmlElementNames.EndTime, 146 endTime); 147 148 writer.writeEndElement(); // xmlElementName 149 } 150 151 /** 152 * Writes to XML without scoping the dates and without emitting times. 153 * 154 * @param writer the writer 155 * @param xmlElementName the xml element name 156 * @throws XMLStreamException the XML stream exception 157 * @throws ServiceXmlSerializationException the service xml serialization exception 158 */ 159 protected void writeToXmlUnscopedDatesOnly(EwsServiceXmlWriter writer, 160 String xmlElementName) throws XMLStreamException, ServiceXmlSerializationException { 161 final String DateOnlyFormat = "yyyy-MM-dd'T'00:00:00"; 162 163 DateFormat formatter = new SimpleDateFormat(DateOnlyFormat); 164 formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 165 166 String start = formatter.format(this.startTime); 167 String end = formatter.format(this.endTime); 168 TimeWindow.writeToXml(writer, xmlElementName, start, end); 169 } 170 171 /** 172 * Writes to XML. 173 * 174 * @param writer the writer 175 * @param xmlElementName the xml element name 176 * @throws XMLStreamException the XML stream exception 177 * @throws ServiceXmlSerializationException the service xml serialization exception 178 */ 179 public void writeToXml(EwsServiceXmlWriter writer, String xmlElementName) 180 throws XMLStreamException, ServiceXmlSerializationException { 181 TimeWindow.writeToXml(writer, xmlElementName, startTime, endTime); 182 } 183 184 /** 185 * Gets the duration. 186 * 187 * @return the duration 188 */ 189 public long getDuration() { 190 return this.endTime.getTime() - this.startTime.getTime(); 191 } 192 193 /** 194 * Validates this instance. 195 */ 196 public void validate() { 197 } 198}