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.core.response; 025 026import microsoft.exchange.webservices.data.core.EwsServiceXmlReader; 027import microsoft.exchange.webservices.data.core.XmlElementNames; 028import microsoft.exchange.webservices.data.core.enumeration.availability.FreeBusyViewType; 029import microsoft.exchange.webservices.data.core.enumeration.property.LegacyFreeBusyStatus; 030import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace; 031import microsoft.exchange.webservices.data.property.complex.availability.CalendarEvent; 032import microsoft.exchange.webservices.data.property.complex.availability.WorkingHours; 033 034import java.util.ArrayList; 035import java.util.Collection; 036 037/** 038 * Represents the availability of an individual attendee. 039 */ 040public final class AttendeeAvailability extends ServiceResponse { 041 042 /** 043 * The calendar events. 044 */ 045 private Collection<CalendarEvent> calendarEvents = 046 new ArrayList<CalendarEvent>(); 047 048 /** 049 * The merged free busy status. 050 */ 051 private Collection<LegacyFreeBusyStatus> mergedFreeBusyStatus = 052 new ArrayList<LegacyFreeBusyStatus>(); 053 054 /** 055 * The view type. 056 */ 057 private FreeBusyViewType viewType; 058 059 /** 060 * The working hours. 061 */ 062 private WorkingHours workingHours; 063 064 /** 065 * Initializes a new instance of the AttendeeAvailability class. 066 */ 067 public AttendeeAvailability() { 068 super(); 069 } 070 071 /** 072 * Loads the free busy view from XML. 073 * 074 * @param reader the reader 075 * @param viewType the view type 076 * @throws Exception the exception 077 */ 078 public void loadFreeBusyViewFromXml(EwsServiceXmlReader reader, FreeBusyViewType viewType) throws Exception { 079 reader.readStartElement(XmlNamespace.Messages, 080 XmlElementNames.FreeBusyView); 081 082 String viewTypeString = reader.readElementValue(XmlNamespace.Types, 083 XmlElementNames.FreeBusyViewType); 084 085 for (Object o : FreeBusyViewType.class.getEnumConstants()) { 086 if (o.toString().equals(viewTypeString)) { 087 this.viewType = (FreeBusyViewType) o; 088 break; 089 } 090 } 091 do { 092 reader.read(); 093 094 if (reader.isStartElement()) { 095 if (reader.getLocalName() 096 .equals(XmlElementNames.MergedFreeBusy)) { 097 String mergedFreeBusy = reader.readElementValue(); 098 099 for (int i = 0; i < mergedFreeBusy.length(); i++) { 100 101 Byte b = Byte.parseByte(mergedFreeBusy.charAt(i) + ""); 102 for (LegacyFreeBusyStatus legacyStatus : LegacyFreeBusyStatus.values()) { 103 if (b == legacyStatus.getBusyStatus()) { 104 this.mergedFreeBusyStatus.add(legacyStatus); 105 break; 106 } 107 } 108 109 } 110 111 } else if (reader.getLocalName().equals( 112 XmlElementNames.CalendarEventArray)) { 113 do { 114 reader.read(); 115 116 if (reader.isStartElement(XmlNamespace.Types, 117 XmlElementNames.CalendarEvent)) { 118 CalendarEvent calendarEvent = new CalendarEvent(); 119 120 calendarEvent.loadFromXml(reader, 121 XmlElementNames.CalendarEvent); 122 123 this.calendarEvents.add(calendarEvent); 124 } 125 } while (!reader.isEndElement(XmlNamespace.Types, 126 XmlElementNames.CalendarEventArray)); 127 128 } else if (reader.getLocalName().equals( 129 XmlElementNames.WorkingHours)) { 130 this.workingHours = new WorkingHours(); 131 this.workingHours 132 .loadFromXml(reader, reader.getLocalName()); 133 134 break; 135 } 136 } 137 } while (!reader.isEndElement(XmlNamespace.Messages, 138 XmlElementNames.FreeBusyView)); 139 } 140 141 /** 142 * Gets a collection of calendar events for the attendee. 143 * 144 * @return the calendar events 145 */ 146 public Collection<CalendarEvent> getCalendarEvents() { 147 return this.calendarEvents; 148 } 149 150 /** 151 * Gets a collection of merged free/busy status for the attendee. 152 * 153 * @return the merged free busy status 154 */ 155 public Collection<LegacyFreeBusyStatus> getMergedFreeBusyStatus() { 156 return mergedFreeBusyStatus; 157 } 158 159 /** 160 * Gets the free/busy view type that wes retrieved for the attendee. 161 * 162 * @return the view type 163 */ 164 public FreeBusyViewType getViewType() { 165 return viewType; 166 } 167 168 /** 169 * Gets the working hours of the attendee. 170 * 171 * @return the working hours 172 */ 173 public WorkingHours getWorkingHours() { 174 return workingHours; 175 } 176 177}