/** * See the NOTICE file distributed with this work * for additional information regarding copyright ownership. * Board of Regents of the University of Wisconsin System * licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a * copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package com.microsoft.exchange.impl; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.xml.bind.JAXBElement; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.util.CollectionUtils; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import com.microsoft.exchange.ExchangeResponseUtils; import com.microsoft.exchange.exception.ExchangeCannotDeleteRuntimeException; import com.microsoft.exchange.exception.ExchangeExceededFindCountLimitRuntimeException; import com.microsoft.exchange.exception.ExchangeItemNotFoundRuntimeException; import com.microsoft.exchange.exception.ExchangeRuntimeException; import com.microsoft.exchange.exception.ExchangeTimeoutRuntimeException; import com.microsoft.exchange.messages.ArrayOfFreeBusyResponse; import com.microsoft.exchange.messages.ArrayOfResponseMessagesType; import com.microsoft.exchange.messages.BaseResponseMessageType; import com.microsoft.exchange.messages.CreateFolderResponse; import com.microsoft.exchange.messages.CreateItemResponse; import com.microsoft.exchange.messages.DeleteFolderResponse; import com.microsoft.exchange.messages.EmptyFolderResponse; import com.microsoft.exchange.messages.FindFolderResponse; import com.microsoft.exchange.messages.FindFolderResponseMessageType; import com.microsoft.exchange.messages.FindItemResponse; import com.microsoft.exchange.messages.FindItemResponseMessageType; import com.microsoft.exchange.messages.FolderInfoResponseMessageType; import com.microsoft.exchange.messages.FreeBusyResponseType; import com.microsoft.exchange.messages.GetFolderResponse; import com.microsoft.exchange.messages.GetItemResponse; import com.microsoft.exchange.messages.GetServerTimeZonesResponse; import com.microsoft.exchange.messages.GetServerTimeZonesResponseMessageType; import com.microsoft.exchange.messages.GetUserAvailabilityResponse; import com.microsoft.exchange.messages.ItemInfoResponseMessageType; import com.microsoft.exchange.messages.ResolveNamesResponse; import com.microsoft.exchange.messages.ResolveNamesResponseMessageType; import com.microsoft.exchange.messages.ResponseCodeType; import com.microsoft.exchange.messages.ResponseMessageType; import com.microsoft.exchange.messages.ResponseMessageType.MessageXml; import com.microsoft.exchange.messages.SuggestionsResponseType; import com.microsoft.exchange.messages.UpdateFolderResponse; import com.microsoft.exchange.types.ArrayOfFoldersType; import com.microsoft.exchange.types.ArrayOfRealItemsType; import com.microsoft.exchange.types.ArrayOfResolutionType; import com.microsoft.exchange.types.ArrayOfSuggestionDayResult; import com.microsoft.exchange.types.ArrayOfTimeZoneDefinitionType; import com.microsoft.exchange.types.BaseFolderType; import com.microsoft.exchange.types.ContactItemType; import com.microsoft.exchange.types.EmailAddressDictionaryEntryType; import com.microsoft.exchange.types.EmailAddressDictionaryType; import com.microsoft.exchange.types.FindFolderParentType; import com.microsoft.exchange.types.FindItemParentType; import com.microsoft.exchange.types.FolderIdType; import com.microsoft.exchange.types.FreeBusyView; import com.microsoft.exchange.types.ItemIdType; import com.microsoft.exchange.types.ItemType; import com.microsoft.exchange.types.ResolutionType; import com.microsoft.exchange.types.ResponseClassType; import com.microsoft.exchange.types.SuggestionDayResult; import com.microsoft.exchange.types.TimeZoneDefinitionType; public class ExchangeResponseUtilsImpl implements ExchangeResponseUtils { protected final Log log = LogFactory.getLog(this.getClass()); /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseCreateFolderResponse(com.microsoft.exchange.messages.CreateFolderResponse) */ @Override public Set<FolderIdType> parseCreateFolderResponse(CreateFolderResponse response) { return parseFolderResponse(response); } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseUpdateFolderResponse(com.microsoft.exchange.messages.UpdateFolderResponse) */ @Override public Set<FolderIdType> parseUpdateFolderResponse(UpdateFolderResponse response){ return parseFolderResponse(response); } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseGetItemResponse(com.microsoft.exchange.messages.GetItemResponse) */ @Override public Set<ItemType> parseGetItemResponse(GetItemResponse response) { Set<ItemType> items = new HashSet<ItemType>(); confirmSuccess(response); ArrayOfResponseMessagesType responseMessages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> getItemResponseMessages = responseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> responseMessageElement : getItemResponseMessages) { ItemInfoResponseMessageType itemType = (ItemInfoResponseMessageType) responseMessageElement.getValue(); ArrayOfRealItemsType itemsArray = itemType.getItems(); items.addAll(itemsArray.getItemsAndMessagesAndCalendarItems()); } return items; } protected Set<FolderIdType> parseFolderResponse(BaseResponseMessageType response){ confirmSuccess(response); Set<FolderIdType> folderIds = new HashSet<FolderIdType>(); ArrayOfResponseMessagesType responseMessages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> createItemResponseMessages = responseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> responeElement : createItemResponseMessages) { FolderInfoResponseMessageType itemInfo = (FolderInfoResponseMessageType) responeElement.getValue(); ArrayOfFoldersType folders = itemInfo.getFolders(); if(null != folders && !CollectionUtils.isEmpty(folders.getFoldersAndCalendarFoldersAndContactsFolders())) { List<BaseFolderType> foldersAndCalendarFoldersAndContactsFolders = folders.getFoldersAndCalendarFoldersAndContactsFolders(); for(BaseFolderType bFolderIdType : foldersAndCalendarFoldersAndContactsFolders) { FolderIdType folderId = bFolderIdType.getFolderId(); log.trace(" folderName= "+bFolderIdType.getDisplayName()+", folderId="+folderId); folderIds.add(folderId); } }else { log.error("No folders returned"); } } return folderIds; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseGetFolderResponse(com.microsoft.exchange.messages.GetFolderResponse) */ @Override public Set<BaseFolderType> parseGetFolderResponse(GetFolderResponse getFolderResponse) { confirmSuccess(getFolderResponse); Set<BaseFolderType> folders = new HashSet<BaseFolderType>(); ArrayOfResponseMessagesType responseMessages = getFolderResponse.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> getFolderResponseMessages = responseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> responseMessage: getFolderResponseMessages) { FolderInfoResponseMessageType folderInfo = (FolderInfoResponseMessageType) responseMessage.getValue(); List<BaseFolderType> f = folderInfo.getFolders().getFoldersAndCalendarFoldersAndContactsFolders(); if(!CollectionUtils.isEmpty(f)) { folders.addAll(f); } } return folders; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#confirmSuccess(com.microsoft.exchange.messages.BaseResponseMessageType) */ @Override public boolean confirmSuccess(BaseResponseMessageType response) { Boolean success = null; ArrayOfResponseMessagesType messages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> inner = messages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> innerResponse : inner){ if(success == null){ success = ResponseCodeType.NO_ERROR.equals(innerResponse.getValue().getResponseCode()); }else{ success = success && ResponseCodeType.NO_ERROR.equals(innerResponse.getValue().getResponseCode()); } if(!success || !ResponseCodeType.NO_ERROR.equals(innerResponse.getValue().getResponseCode())){ ResponseCodeType responseCode = innerResponse.getValue().getResponseCode(); String err = parseInnerResponse(innerResponse); if(ResponseCodeType.ERROR_INTERNAL_SERVER_ERROR.equals(responseCode) || ResponseCodeType.ERROR_INTERNAL_SERVER_TRANSIENT_ERROR.equals(responseCode)) { //TODO recover (switch Credentials) } if(ResponseCodeType.ERROR_TIMEOUT_EXPIRED.equals(responseCode)){ throw new ExchangeTimeoutRuntimeException(err); } if(ResponseCodeType.ERROR_CANNOT_DELETE_OBJECT.equals(responseCode)) { throw new ExchangeCannotDeleteRuntimeException(err); } if(ResponseCodeType.ERROR_ITEM_NOT_FOUND.equals(responseCode)) { throw new ExchangeItemNotFoundRuntimeException(err); } if(ResponseCodeType.ERROR_EXCEEDED_FIND_COUNT_LIMIT.equals(responseCode)) { throw new ExchangeExceededFindCountLimitRuntimeException(err); } throw new ExchangeRuntimeException(err); } } return success; } private boolean confirmSuccessInternal(ResponseMessageType responseMessage){ boolean success =false; if(null != responseMessage){ success = ResponseCodeType.NO_ERROR.equals(responseMessage.getResponseCode()); } return success; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#confirmSuccessOrWarning(com.microsoft.exchange.messages.BaseResponseMessageType) */ @Override public boolean confirmSuccessOrWarning(BaseResponseMessageType response) { List<String> errors = new ArrayList<String>(); List<String> warnings = new ArrayList<String>(); ArrayOfResponseMessagesType messages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> inner = messages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> innerResponse : inner){ if(innerResponse != null && innerResponse.getValue() != null) { String parsedMsg = parseInnerResponse(innerResponse); ResponseMessageType innerResponseValue = innerResponse.getValue(); ResponseClassType responseClass = innerResponseValue.getResponseClass(); switch (responseClass) { case WARNING: log.warn(parsedMsg); warnings.add(parsedMsg); break; case ERROR: log.error(parsedMsg); errors.add(parsedMsg); break; default: break; } } } if(CollectionUtils.isEmpty(errors)) { return true; }else { return false; } } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseFindFolderResponse(com.microsoft.exchange.messages.FindFolderResponse) */ @Override public List<BaseFolderType> parseFindFolderResponse(FindFolderResponse findFolderResponse) { ArrayOfResponseMessagesType findFolderResponseMessages = findFolderResponse.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> folderItemResponseMessages = findFolderResponseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> responseElement: folderItemResponseMessages) { FindFolderResponseMessageType itemType = (FindFolderResponseMessageType) responseElement.getValue(); if(null != itemType && null != itemType.getRootFolder() && null != itemType.getRootFolder().getFolders() && null != itemType.getRootFolder().getFolders().getFoldersAndCalendarFoldersAndContactsFolders()) { FindFolderParentType rootFolder = itemType.getRootFolder(); ArrayOfFoldersType folders = rootFolder.getFolders(); return folders.getFoldersAndCalendarFoldersAndContactsFolders(); } } return null; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#getCreatedItemIds(com.microsoft.exchange.messages.CreateItemResponse) */ @Override public Set<ItemIdType> getCreatedItemIds(CreateItemResponse response){ Set<ItemIdType> successfulItems = new HashSet<ItemIdType>(); if(null == response) { return successfulItems; } ArrayOfResponseMessagesType messages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> inner = messages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> innerResponse : inner){ ResponseCodeType responseCode = innerResponse.getValue().getResponseCode(); String err = parseInnerResponse(innerResponse); if(ResponseCodeType.NO_ERROR.equals(responseCode)){ ItemInfoResponseMessageType itemInfo = (ItemInfoResponseMessageType) innerResponse.getValue(); ArrayOfRealItemsType items = itemInfo.getItems(); List<ItemType> calendarItems = items.getItemsAndMessagesAndCalendarItems(); for(ItemType itemType : calendarItems) { successfulItems.add(itemType.getItemId()); } }else { log.trace("Failed to create item, "+err); } } return successfulItems; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#getCreateItemErrors(com.microsoft.exchange.messages.CreateItemResponse) */ @Override public List<String> getCreateItemErrors(CreateItemResponse response){ List<String> errs = new ArrayList<String>(); if(null == response || null == response.getResponseMessages()) { errs.add("NO RESPONSE"); return errs; } ArrayOfResponseMessagesType messages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> inner = messages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> innerResponse : inner){ ResponseCodeType responseCode = innerResponse.getValue().getResponseCode(); String err = parseInnerResponse(innerResponse); if(!ResponseCodeType.NO_ERROR.equals(responseCode)){ errs.add(err); } } return errs; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseCreateItemResponse(com.microsoft.exchange.messages.CreateItemResponse) */ @Override public List<ItemIdType> parseCreateItemResponse(CreateItemResponse response) { confirmSuccess(response); List<ItemIdType> itemIds = new ArrayList<ItemIdType>(); ArrayOfResponseMessagesType responseMessages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> createItemResponseMessages = responseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> responeElement : createItemResponseMessages) { ItemInfoResponseMessageType itemInfo = (ItemInfoResponseMessageType) responeElement.getValue(); ArrayOfRealItemsType items = itemInfo.getItems(); List<ItemType> calendarItems = items.getItemsAndMessagesAndCalendarItems(); for(ItemType itemType : calendarItems) { itemIds.add(itemType.getItemId()); } } return itemIds; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseFindItemIdResponseNoOffset(com.microsoft.exchange.messages.FindItemResponse) */ @Override @Deprecated public Set<ItemIdType> parseFindItemIdResponseNoOffset(FindItemResponse response) { Pair<Set<ItemIdType>, Integer> pair = parseFindItemIdResponse(response); return pair.getLeft(); } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseFindItemIdResponse(com.microsoft.exchange.messages.FindItemResponse) */ @Override public Pair<Set<ItemIdType>, Integer> parseFindItemIdResponse(FindItemResponse response){ confirmSuccess(response); Set<ItemIdType> foundItemIds = new HashSet<ItemIdType>(); Integer nextOffset = -1; ArrayOfResponseMessagesType findItemResponseMessages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> itemResponseMessages = findItemResponseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> element : itemResponseMessages) { FindItemResponseMessageType itemType = (FindItemResponseMessageType) element.getValue(); FindItemParentType rootFolder = itemType.getRootFolder(); Boolean includesLastItemInRange = rootFolder.isIncludesLastItemInRange(); Integer totalItemsInView = rootFolder.getTotalItemsInView(); if(!includesLastItemInRange){ nextOffset = rootFolder.getIndexedPagingOffset(); } ArrayOfRealItemsType items = rootFolder.getItems(); List<ItemType> calendarItems = items.getItemsAndMessagesAndCalendarItems(); for(ItemType it: calendarItems) { foundItemIds.add(it.getItemId()); } log.info("parseFindItemIdResponse: foundItems="+foundItemIds.size()+", totalItemsInview="+totalItemsInView+" , nextOffset"+nextOffset+", includesLast="+includesLastItemInRange ); } Pair<Set<ItemIdType>, Integer> pair = Pair.of(foundItemIds, nextOffset); return pair; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseFindItemResponse(com.microsoft.exchange.messages.FindItemResponse) */ @Override public Set<ItemType> parseFindItemResponse(FindItemResponse response) { confirmSuccess(response); Set<ItemType> calendarItems = new HashSet<ItemType>(); ArrayOfResponseMessagesType findItemResponseMessages = response .getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> itemResponseMessages = findItemResponseMessages .getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for (JAXBElement<? extends ResponseMessageType> element : itemResponseMessages) { FindItemResponseMessageType itemType = (FindItemResponseMessageType) element .getValue(); FindItemParentType rootFolder = itemType.getRootFolder(); ArrayOfRealItemsType items = rootFolder.getItems(); calendarItems.addAll(items.getItemsAndMessagesAndCalendarItems()); } return calendarItems; } private String parseInnerResponse(JAXBElement<? extends ResponseMessageType> innerResponse) { ResponseMessageType responseMessage = innerResponse.getValue(); return parseInnerResponse(responseMessage); } private String parseInnerResponse(ResponseMessageType responseMessage){ StringBuilder responseBuilder = new StringBuilder("Response["); ResponseCodeType responseCode = responseMessage.getResponseCode(); if(null != responseCode) { responseBuilder.append("code="+responseCode+", "); } ResponseClassType responseClass = responseMessage.getResponseClass(); if(null != responseClass) { responseBuilder.append("class="+responseClass+", "); } String messageText = responseMessage.getMessageText(); if(StringUtils.isNotBlank(messageText)) { responseBuilder.append("txt="+messageText+", "); } MessageXml messageXml = responseMessage.getMessageXml(); if(null != messageXml) { StringBuilder xmlStringBuilder=new StringBuilder("messageXml="); List<Element> anies = messageXml.getAnies(); if(!CollectionUtils.isEmpty(anies)) { for (Element element : anies) { String elementNameString=element.getNodeName(); String elementValueString=element.getNodeValue(); xmlStringBuilder.append(elementNameString+"="+elementValueString+";"); if(null != element.getAttributes()) { NamedNodeMap attributes = element.getAttributes(); for (int i = 0; i < attributes.getLength(); i++) { Node item = attributes.item(i); String nodeName = item.getNodeName(); String nodeValue = item.getNodeValue(); xmlStringBuilder.append(nodeName+"="+nodeValue+","); } } } } responseBuilder.append("xml="+xmlStringBuilder.toString()+", "); } Integer descriptiveLinkKey = responseMessage.getDescriptiveLinkKey(); if(null != descriptiveLinkKey) { responseBuilder.append("link="+descriptiveLinkKey); } responseBuilder.append("]"); return responseBuilder.toString(); } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseEmptyFolderResponse(com.microsoft.exchange.messages.EmptyFolderResponse) */ @Override public boolean parseEmptyFolderResponse(EmptyFolderResponse response) { if(confirmSuccess(response)){ ArrayOfResponseMessagesType responseMessages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> messages = responseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> message : messages) { ResponseMessageType value = message.getValue(); //TODO parse response value(s) appropriately return true; } } return false; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseResolveNamesResponse(com.microsoft.exchange.messages.ResolveNamesResponse) */ @Override public Set<String> parseResolveNamesResponse(ResolveNamesResponse response) { Set<String> addresses = new HashSet<String>(); if(confirmSuccessOrWarning(response)) { ArrayOfResponseMessagesType arrayOfResponseMessagesType = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> responseMessagesList = arrayOfResponseMessagesType.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> element: responseMessagesList) { ResolveNamesResponseMessageType rnrmt = (ResolveNamesResponseMessageType) element.getValue(); ArrayOfResolutionType arrayOfResolutionType = rnrmt.getResolutionSet(); List<ResolutionType> resolutions = arrayOfResolutionType.getResolutions(); for(ResolutionType resolution: resolutions) { ContactItemType contact = resolution.getContact(); EmailAddressDictionaryType emailAddresses = contact.getEmailAddresses(); List<EmailAddressDictionaryEntryType> entries = emailAddresses.getEntries(); for(EmailAddressDictionaryEntryType entry: entries) { String value = entry.getValue(); if(StringUtils.isNotBlank(value)) { value = value.toLowerCase(); value = StringUtils.removeStartIgnoreCase(value, "smtp:"); addresses.add(value); } } } } } return addresses; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseGetServerTimeZonesResponse(com.microsoft.exchange.messages.GetServerTimeZonesResponse) */ @Override public List<TimeZoneDefinitionType> parseGetServerTimeZonesResponse(GetServerTimeZonesResponse response){ List<TimeZoneDefinitionType> zones = new ArrayList<TimeZoneDefinitionType>(); if(confirmSuccess(response)){ ArrayOfResponseMessagesType responseMessages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> tzResponseMessages = responseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> message: tzResponseMessages){ ResponseMessageType r = message.getValue(); GetServerTimeZonesResponseMessageType itemInfo = (GetServerTimeZonesResponseMessageType) r; ArrayOfTimeZoneDefinitionType timeZoneDefinitions = itemInfo.getTimeZoneDefinitions(); List<TimeZoneDefinitionType> timeZoneDefinitionsList = timeZoneDefinitions.getTimeZoneDefinitions(); zones = timeZoneDefinitionsList; } } return zones; } /* (non-Javadoc) * @see com.microsoft.exchange.ExchangeResponseUtils#parseDeleteFolderResponse(com.microsoft.exchange.messages.DeleteFolderResponse) */ @Override public boolean parseDeleteFolderResponse(DeleteFolderResponse response){ if(confirmSuccess(response)){ ArrayOfResponseMessagesType arrayOfResponseMessages = response.getResponseMessages(); List<JAXBElement<? extends ResponseMessageType>> deleteFolderResponseMessages = arrayOfResponseMessages.getCreateItemResponseMessagesAndDeleteItemResponseMessagesAndGetItemResponseMessages(); for(JAXBElement<? extends ResponseMessageType> message: deleteFolderResponseMessages){ ResponseMessageType value = message.getValue(); return value.getResponseClass().equals(ResponseClassType.SUCCESS) && value.getResponseCode().equals(ResponseCodeType.NO_ERROR); } } return false; } public FreeBusyView parseFreeBusyResponse(GetUserAvailabilityResponse response){ FreeBusyView freeBusyView = null; if(null != response){ ArrayOfFreeBusyResponse freeBusyResponseArray = response.getFreeBusyResponseArray(); if(null != freeBusyResponseArray){ List<FreeBusyResponseType> freeBusyResponses = freeBusyResponseArray.getFreeBusyResponses(); if(!CollectionUtils.isEmpty(freeBusyResponses)){ for(FreeBusyResponseType fbrt : freeBusyResponses){ ResponseMessageType responseMessage = fbrt.getResponseMessage(); if(confirmSuccessInternal(responseMessage)){ freeBusyView = fbrt.getFreeBusyView(); }else{ String failMsg = parseInnerResponse(responseMessage); log.warn("FreeBusyResponseType Failure: "+failMsg); } } }else{ log.debug("freeBusyResponses are empty"); } }else{ log.debug("ArrayOfFreeBusyResponse is null"); } } return freeBusyView; } public ArrayOfSuggestionDayResult parseSuggestionDayResult(GetUserAvailabilityResponse response){ ArrayOfSuggestionDayResult suggestionResult = null; if(null != response){ SuggestionsResponseType suggestionsResponse = response.getSuggestionsResponse(); if(null != suggestionsResponse){ ResponseMessageType responseMessage = suggestionsResponse.getResponseMessage(); if(confirmSuccessInternal(responseMessage)){ suggestionResult = suggestionsResponse.getSuggestionDayResultArray(); }else{ String failMsg = parseInnerResponse(responseMessage); log.warn("SuggestionsResponseType Failure: "+failMsg); } }else{ log.debug("SuggestionsResponseType is null"); } } return suggestionResult; } }