Search in sources :

Example 91 with Invite

use of com.zimbra.cs.mailbox.calendar.Invite in project zm-mailbox by Zimbra.

the class CalendarItem method isPublic.

/**
     * Returns true if all invites in the calendar item have CLASS:PUBLIC.
     * @return
     */
public boolean isPublic() {
    boolean result = true;
    Invite[] invs = getInvites();
    if (invs != null && invs.length > 0) {
        for (Invite i : invs) {
            if (!i.isPublic()) {
                result = false;
                break;
            }
        }
    }
    return result;
}
Also used : Invite(com.zimbra.cs.mailbox.calendar.Invite)

Example 92 with Invite

use of com.zimbra.cs.mailbox.calendar.Invite in project zm-mailbox by Zimbra.

the class CalendarItem method getNextAlarm.

private AlarmData getNextAlarm(long nextAlarm, boolean skipAlarmDefChangeCheck, AlarmData currentNextAlarmData, boolean dismissed, boolean forEmailAction) throws ServiceException {
    if (nextAlarm == NEXT_ALARM_ALL_DISMISSED || !hasAlarm()) {
        return null;
    }
    long now = getMailbox().getOperationTimestampMillis();
    // Chosen alarm must be at or after this time.
    long atOrAfter;
    long snoozeUntil;
    if (nextAlarm == NEXT_ALARM_KEEP_CURRENT) {
        // special case to preserve current next alarm trigger time
        if (currentNextAlarmData != null) {
            atOrAfter = currentNextAlarmData.getNextAtBase();
            snoozeUntil = currentNextAlarmData.getSnoozeUntil();
        } else {
            // no existing alarm; pick the first alarm in the future
            atOrAfter = snoozeUntil = now;
        }
    } else if (nextAlarm == NEXT_ALARM_FROM_NOW) {
        // another special case to mean starting from "now"; pick the first alarm in the future
        atOrAfter = snoozeUntil = now;
    } else if (!dismissed && currentNextAlarmData != null) {
        // if not dismissing previous alarm, keep it as the base trigger time.  nextAlarm has snoozed re-trigger time
        atOrAfter = currentNextAlarmData.getNextAtBase();
        snoozeUntil = nextAlarm;
    } else {
        // else we just use the nextAlarm value that was passed in
        atOrAfter = snoozeUntil = nextAlarm;
    }
    if (atOrAfter <= 0) {
        // sanity check
        atOrAfter = snoozeUntil = now;
    }
    if (snoozeUntil != AlarmData.NO_SNOOZE && snoozeUntil < atOrAfter) {
        snoozeUntil = atOrAfter;
    }
    // startTime and endTime limit the time range for meeting instances to be examined.
    // All instances that ended before startTime are ignored, and by extension the alarms for them.
    // endTime limit is set to avoid examining too many instances, for performance reason.
    long startTime = atOrAfter;
    if (startTime > now) {
        // Handle the case when appointment is brought back in time such that the new start time
        // is earlier than previously set alarm trigger time.
        startTime = now;
    }
    long endTime = getNextAlarmRecurrenceExpansionLimit();
    Collection<Instance> instances = expandInstances(startTime, endTime, false);
    // Special handling for modified alarm definition
    if (atOrAfter > 0 && !skipAlarmDefChangeCheck) {
        // Let's see if alarm definition has changed.  It changed if there is no alarm to go off at
        // previously saved nextAlarm time.
        boolean alarmDefChanged = true;
        long savedNextInstStart = currentNextAlarmData != null ? currentNextAlarmData.getNextInstanceStart() : 0;
        for (Instance inst : instances) {
            long instStart = inst.getStart();
            long instEnd = inst.getEnd();
            if (inst.hasStart() && inst.hasEnd()) {
                // Ignore instances that ended already.
                if (instEnd <= startTime)
                    continue;
                // For appointments (but not tasks), ignore instances whose start time has come and gone.
                if (instStart < startTime && (this instanceof Appointment))
                    continue;
                // definition.
                if (instStart > savedNextInstStart)
                    break;
            }
            InviteInfo invId = inst.getInviteInfo();
            Invite inv = getInvite(invId.getMsgId(), invId.getComponentId());
            Iterator<Alarm> alarmsIter = inv.alarmsIterator();
            for (; alarmsIter.hasNext(); ) {
                Alarm alarm = alarmsIter.next();
                long currTrigger = alarm.getTriggerTime(instStart, instEnd);
                if (currTrigger == atOrAfter) {
                    // Detected alarm definition change.  Reset atOrAfter to 0 to force the next loop
                    // to choose the earliest alarm from an earliest instance at or after old nextAlarm time.
                    alarmDefChanged = false;
                    break;
                }
            }
            // no need to look at later instances
            break;
        }
        if (alarmDefChanged) {
            // If alarm definition changed, just pick the earliest alarm from now.  Without this,
            // we can't change alarm definition to an earlier trigger time, e.g. from 5 minutes before
            // to 10 minutes before. (bug 28630)
            atOrAfter = snoozeUntil = now;
        }
    }
    AlarmData alarmData = getNextAlarmHelper(atOrAfter, snoozeUntil, instances, startTime, forEmailAction);
    if (alarmData == null && this instanceof Task) {
        // special handling for Tasks
        return getNextAlarmHelperForTasks(atOrAfter, snoozeUntil, forEmailAction);
    } else {
        return alarmData;
    }
}
Also used : InviteInfo(com.zimbra.cs.mailbox.calendar.InviteInfo) Alarm(com.zimbra.cs.mailbox.calendar.Alarm) Invite(com.zimbra.cs.mailbox.calendar.Invite)

Example 93 with Invite

use of com.zimbra.cs.mailbox.calendar.Invite in project zm-mailbox by Zimbra.

the class GetMsgTest method testHandle.

@Test
public void testHandle() throws Exception {
    Account acct1 = Provisioning.getInstance().get(Key.AccountBy.name, "test@zimbra.com");
    Account acct2 = Provisioning.getInstance().get(Key.AccountBy.name, "test2@zimbra.com");
    Mailbox mbox1 = MailboxManager.getInstance().getMailboxByAccount(acct1);
    Folder calendarFolder = mbox1.getCalendarFolders(null, SortBy.NONE).get(0);
    String fragment = "Some message";
    ZVCalendar calendar = new ZVCalendar();
    calendar.addDescription(desc, null);
    ZComponent comp = new ZComponent("VEVENT");
    calendar.addComponent(comp);
    Invite invite = MailboxTestUtil.generateInvite(acct1, fragment, calendar);
    ICalTimeZone ical = invite.getTimeZoneMap().getLocalTimeZone();
    long utc = 5 * 60 * 60 * 1000;
    ParsedDateTime s = ParsedDateTime.fromUTCTime(System.currentTimeMillis() + utc, ical);
    ParsedDateTime e = ParsedDateTime.fromUTCTime(System.currentTimeMillis() + (30 * 60 * 1000) + utc, ical);
    invite.setDtStart(s);
    invite.setDtEnd(e);
    invite.setPriority("5");
    invite.setClassProp("PRI");
    invite.setOrganizer(new ZOrganizer("test@zimbra.com", null));
    invite.setUid(UUID.randomUUID().toString());
    invite.setMethod("REQUEST");
    invite.setName("Testing");
    invite.setFreeBusy("B");
    invite.setIsOrganizer(true);
    invite.setItemType(MailItem.Type.APPOINTMENT);
    invite.setUid(UUID.randomUUID().toString());
    AddInviteData inviteData = mbox1.addInvite(null, invite, calendarFolder.getId());
    calendarFolder = mbox1.getCalendarFolders(null, SortBy.NONE).get(0);
    Element request = new Element.XMLElement("GetCalendarItem");
    Element action = request.addElement(MailConstants.E_MSG);
    action.addAttribute(MailConstants.A_ID, acct1.getId() + ":" + inviteData.calItemId + "-" + inviteData.invId);
    action.addAttribute(MailConstants.A_WANT_HTML, "1");
    action.addAttribute(MailConstants.A_NEED_EXP, "1");
    Element response = new GetMsg().handle(request, ServiceTestUtil.getRequestContext(acct1));
    Element organizer = response.getElement("m").getElement("inv").getElement("comp").getElement("or");
    String organizerString = organizer.prettyPrint();
    assertTrue(organizerString.contains("a=\"test@zimbra.com\" url=\"test@zimbra.com\""));
    mbox1.grantAccess(null, 10, acct2.getId(), ACL.GRANTEE_USER, ACL.RIGHT_READ, null);
    request = new Element.XMLElement("CreateMountPoint");
    Element link = request.addElement("link");
    link.addAttribute("f", "#");
    link.addAttribute("reminder", 0);
    link.addAttribute("name", "sharedcal");
    link.addAttribute("path", "/Calendar");
    link.addAttribute("owner", "test@zimbra.com");
    link.addAttribute("l", 10);
    link.addAttribute("view", "appoinment");
    response = new CreateMountpoint().handle(request, ServiceTestUtil.getRequestContext(acct2));
    String mptId = response.getElement("link").getAttribute("id");
    request = new Element.XMLElement("GetMsgRequest");
    action = request.addElement(MailConstants.E_MSG);
    action.addAttribute(MailConstants.A_ID, acct1.getId() + ":" + inviteData.calItemId + "-" + mptId);
    action.addAttribute(MailConstants.A_WANT_HTML, "1");
    action.addAttribute(MailConstants.A_NEED_EXP, "1");
    response = new GetMsg().handle(request, ServiceTestUtil.getRequestContext(acct2, acct1));
    organizerString = response.getElement("m").prettyPrint();
    assertTrue(!organizerString.contains("a=\"test@zimbra.com\" url=\"test@zimbra.com\""));
    request = new Element.XMLElement("FolderAction");
    action = request.addElement("action");
    action.addAttribute("id", mptId);
    action.addAttribute("op", "delete");
    response = new FolderAction().handle(request, ServiceTestUtil.getRequestContext(acct2));
    mbox1.revokeAccess(null, 10, acct2.getId());
}
Also used : Account(com.zimbra.cs.account.Account) AddInviteData(com.zimbra.cs.mailbox.Mailbox.AddInviteData) Element(com.zimbra.common.soap.Element) ZOrganizer(com.zimbra.cs.mailbox.calendar.ZOrganizer) Folder(com.zimbra.cs.mailbox.Folder) ZComponent(com.zimbra.common.calendar.ZCalendar.ZComponent) ZVCalendar(com.zimbra.common.calendar.ZCalendar.ZVCalendar) Mailbox(com.zimbra.cs.mailbox.Mailbox) ParsedDateTime(com.zimbra.common.calendar.ParsedDateTime) Invite(com.zimbra.cs.mailbox.calendar.Invite) ICalTimeZone(com.zimbra.common.calendar.ICalTimeZone) Test(org.junit.Test)

Example 94 with Invite

use of com.zimbra.cs.mailbox.calendar.Invite in project zm-mailbox by Zimbra.

the class TaskHit method getCompletionPercentage.

public int getCompletionPercentage() throws ServiceException {
    Task task = (Task) getCalendarItem();
    Invite inv = task.getDefaultInviteOrNull();
    if (inv != null) {
        String compPerc = inv.getPercentComplete();
        if (compPerc != null) {
            try {
                int toRet = Integer.parseInt(compPerc);
                return toRet;
            } catch (Exception e) {
                return 0;
            }
        }
    }
    return 0;
}
Also used : Task(com.zimbra.cs.mailbox.Task) Invite(com.zimbra.cs.mailbox.calendar.Invite) ServiceException(com.zimbra.common.service.ServiceException)

Example 95 with Invite

use of com.zimbra.cs.mailbox.calendar.Invite in project zm-mailbox by Zimbra.

the class TaskHit method getStatus.

public Status getStatus() throws ServiceException {
    Task task = (Task) getCalendarItem();
    Invite inv = task.getDefaultInviteOrNull();
    if (inv != null) {
        String status = inv.getStatus();
        try {
            Status s = Status.valueOf(status.toUpperCase());
            return s;
        } catch (IllegalArgumentException e) {
            ZimbraLog.index.debug("Unknown Task Status value: " + status.toUpperCase());
        }
    }
    return Status.DEFERRED;
}
Also used : Task(com.zimbra.cs.mailbox.Task) Invite(com.zimbra.cs.mailbox.calendar.Invite)

Aggregations

Invite (com.zimbra.cs.mailbox.calendar.Invite)103 Account (com.zimbra.cs.account.Account)30 Element (com.zimbra.common.soap.Element)26 ServiceException (com.zimbra.common.service.ServiceException)23 CalendarItem (com.zimbra.cs.mailbox.CalendarItem)23 Mailbox (com.zimbra.cs.mailbox.Mailbox)23 MimeMessage (javax.mail.internet.MimeMessage)23 ZVCalendar (com.zimbra.common.calendar.ZCalendar.ZVCalendar)22 ParsedDateTime (com.zimbra.common.calendar.ParsedDateTime)20 ItemId (com.zimbra.cs.service.util.ItemId)20 ArrayList (java.util.ArrayList)19 IOException (java.io.IOException)18 ZOrganizer (com.zimbra.cs.mailbox.calendar.ZOrganizer)16 TimeZoneMap (com.zimbra.common.calendar.TimeZoneMap)15 ZAttendee (com.zimbra.cs.mailbox.calendar.ZAttendee)15 OperationContext (com.zimbra.cs.mailbox.OperationContext)14 RecurId (com.zimbra.cs.mailbox.calendar.RecurId)14 MessagingException (javax.mail.MessagingException)12 MailServiceException (com.zimbra.cs.mailbox.MailServiceException)11 ParsedMessage (com.zimbra.cs.mime.ParsedMessage)11