public static SetCalendarItemParseResult parseSetAppointmentRequest( Element request, ZimbraSoapContext zsc, OperationContext octxt, Folder folder, MailItem.Type type, boolean parseIds) throws ServiceException { Account acct = getRequestedAccount(zsc); Mailbox mbox = getRequestedMailbox(zsc); SetCalendarItemParseResult result = new SetCalendarItemParseResult(); ArrayList<SetCalendarItemData> exceptions = new ArrayList<SetCalendarItemData>(); Invite defInv = null; // First, the <default> { Element e = request.getOptionalElement(MailConstants.A_DEFAULT); if (e != null) { result.defaultInv = getSetCalendarItemData( zsc, octxt, acct, mbox, e, new SetCalendarItemInviteParser(false, false, folder, type)); defInv = result.defaultInv.invite; } } // for each <except> for (Element e : request.listElements(MailConstants.E_CAL_EXCEPT)) { SetCalendarItemData exDat = getSetCalendarItemData( zsc, octxt, acct, mbox, e, new SetCalendarItemInviteParser(true, false, folder, type)); exceptions.add(exDat); if (defInv == null) { defInv = exDat.invite; } } // for each <cancel> for (Element e : request.listElements(MailConstants.E_CAL_CANCEL)) { SetCalendarItemData exDat = getSetCalendarItemData( zsc, octxt, acct, mbox, e, new SetCalendarItemInviteParser(true, true, folder, type)); exceptions.add(exDat); if (defInv == null) { defInv = exDat.invite; } } if (exceptions.size() > 0) { result.exceptions = new SetCalendarItemData[exceptions.size()]; exceptions.toArray(result.exceptions); } else { if (result.defaultInv == null) throw ServiceException.INVALID_REQUEST("No default/except/cancel specified", null); } // <replies> Element repliesElem = request.getOptionalElement(MailConstants.E_CAL_REPLIES); if (repliesElem != null) result.replies = CalendarUtils.parseReplyList(repliesElem, defInv.getTimeZoneMap()); result.isTodo = defInv != null && defInv.isTodo(); boolean noNextAlarm = request.getAttributeBool(MailConstants.A_CAL_NO_NEXT_ALARM, false); if (noNextAlarm) result.nextAlarm = CalendarItem.NEXT_ALARM_ALL_DISMISSED; else result.nextAlarm = request.getAttributeLong( MailConstants.A_CAL_NEXT_ALARM, CalendarItem.NEXT_ALARM_KEEP_CURRENT); return result; }