Search in sources :

Example 1 with UpdateResult

use of org.bedework.calfacade.svc.EventInfo.UpdateResult in project bw-calendar-engine by Bedework.

the class Events method update.

@Override
public UpdateResult update(final EventInfo ei, final boolean noInvites, final String fromAttUri, final boolean alwaysWrite) throws CalFacadeException {
    try {
        final BwEvent event = ei.getEvent();
        final UpdateResult updResult = ei.getUpdResult();
        updateEntities(updResult, event);
        final BwCalendar cal = validate(event, false, false, false);
        adjustEntities(ei);
        final RealiasResult raResp = reAlias(event);
        if (raResp.getStatus() != ok) {
            throw new CalFacadeException(CalFacadeException.badRequest, "Status: " + raResp.getStatus() + " message: " + raResp.getMessage());
        }
        boolean organizerSchedulingObject = false;
        boolean attendeeSchedulingObject = false;
        if (cal.getCollectionInfo().scheduling) {
            organizerSchedulingObject = event.getOrganizerSchedulingObject();
            attendeeSchedulingObject = event.getAttendeeSchedulingObject();
        }
        boolean schedulingObject = organizerSchedulingObject || attendeeSchedulingObject;
        if (event.getSignificantChange() && schedulingObject) {
            event.updateStag(getCurrentTimestamp());
        }
        boolean changed = alwaysWrite || checkChanges(ei, organizerSchedulingObject, attendeeSchedulingObject) || ei.getOverridesChanged();
        boolean sequenceChange = ei.getUpdResult().sequenceChange;
        /* TODO - this is wrong.
         At the very least we should only reschedule the override that changed.
         However adding an override looks like a change for all the fields
         copied in. There should only be a change if the value is different
       */
        boolean doReschedule = ei.getUpdResult().doReschedule;
        if (ei.getNumOverrides() > 0) {
            for (final EventInfo oei : ei.getOverrides()) {
                setScheduleState(oei.getEvent(), false, false);
                if (cal.getCollectionInfo().scheduling && oei.getEvent().getAttendeeSchedulingObject()) {
                    schedulingObject = true;
                    attendeeSchedulingObject = true;
                // Shouldn't need to check organizer - it's set in the master even
                // if suppressed.
                }
                if (checkChanges(oei, organizerSchedulingObject, attendeeSchedulingObject)) {
                    changed = true;
                    if (oei.getUpdResult().sequenceChange) {
                        sequenceChange = true;
                    }
                }
                if (schedulingObject) {
                    oei.getEvent().updateStag(getCurrentTimestamp());
                }
                doReschedule = doReschedule || oei.getUpdResult().doReschedule;
            }
        }
        if (!changed) {
            if (debug) {
                trace("No changes to event: returning");
            }
            return ei.getUpdResult();
        }
        event.setDtstamps(getCurrentTimestamp());
        if (organizerSchedulingObject && sequenceChange) {
            event.setSequence(event.getSequence() + 1);
        }
        final UpdateEventResult uer = getCal().updateEvent(ei);
        updResult.addedInstances = uer.added;
        updResult.updatedInstances = uer.updated;
        updResult.deletedInstances = uer.deleted;
        updResult.fromAttUri = fromAttUri;
        if (!noInvites && schedulingObject) {
            if (organizerSchedulingObject) {
                // Set RSVP on all attendees with PARTSTAT = NEEDS_ACTION
                for (final BwAttendee att : event.getAttendees()) {
                    if (att.getPartstat().equals(IcalDefs.partstatValNeedsAction)) {
                        att.setRsvp(true);
                    }
                }
            }
            boolean sendit = organizerSchedulingObject || updResult.reply;
            if (!sendit) {
                if (!Util.isEmpty(ei.getOverrides())) {
                    for (final EventInfo oei : ei.getOverrides()) {
                        if (oei.getUpdResult().reply) {
                            sendit = true;
                            break;
                        }
                    }
                }
            }
            if (sendit) {
                final SchedulingIntf sched = (SchedulingIntf) getSvc().getScheduler();
                sched.implicitSchedule(ei, false);
            /* We assume we don't need to update again to set attendee status
           * Trying to do an update results in duplicate key errors.
           *
           * If it turns out the scgedule status is not getting persisted in the
           * calendar entry then we need to find a way to set just that value in
           * already persisted entity.
           */
            }
        }
        return updResult;
    } catch (final Throwable t) {
        getSvc().rollbackTransaction();
        if (t instanceof CalFacadeException) {
            throw (CalFacadeException) t;
        }
        throw new CalFacadeException(t);
    }
}
Also used : CoreEventInfo(org.bedework.calcorei.CoreEventInfo) EventInfo(org.bedework.calfacade.svc.EventInfo) BwEvent(org.bedework.calfacade.BwEvent) SchedulingIntf(org.bedework.calsvc.scheduling.SchedulingIntf) BwCalendar(org.bedework.calfacade.BwCalendar) BwAttendee(org.bedework.calfacade.BwAttendee) UpdateResult(org.bedework.calfacade.svc.EventInfo.UpdateResult) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException) UpdateEventResult(org.bedework.calcorei.CoreEventsI.UpdateEventResult)

Example 2 with UpdateResult

use of org.bedework.calfacade.svc.EventInfo.UpdateResult in project bw-calendar-engine by Bedework.

the class Events method add.

@Override
public UpdateResult add(final EventInfo ei, final boolean noInvites, final boolean schedulingInbox, final boolean autoCreateCollection, final boolean rollbackOnError) throws CalFacadeException {
    try {
        if (getPrincipalInfo().getSubscriptionsOnly()) {
            throw new CalFacadeForbidden("User has read only access");
        }
        final UpdateResult updResult = ei.getUpdResult();
        updResult.adding = true;
        updResult.hasChanged = true;
        final BwEvent event = ei.getEvent();
        adjustEntities(ei);
        final BwPreferences prefs = getSvc().getPrefsHandler().get();
        if (prefs != null) {
            final Collection<BwCategory> cats = getSvc().getCategoriesHandler().get(prefs.getDefaultCategoryUids());
            for (final BwCategory cat : cats) {
                event.addCategory(cat);
            }
        }
        final RealiasResult raResp = reAlias(event);
        if (raResp.getStatus() != ok) {
            throw new CalFacadeException(CalFacadeException.badRequest, "Status: " + raResp.getStatus() + " message: " + raResp.getMessage());
        }
        // Or just validate?
        assignGuid(event);
        updateEntities(updResult, event);
        BwCalendar cal = validate(event, true, schedulingInbox, autoCreateCollection);
        BwEventProxy proxy = null;
        BwEvent override = null;
        if (event instanceof BwEventProxy) {
            proxy = (BwEventProxy) event;
            override = proxy.getRef();
            setupSharableEntity(override, getPrincipal().getPrincipalRef());
        } else {
            setupSharableEntity(event, getPrincipal().getPrincipalRef());
            if (ei.getNumContainedItems() > 0) {
                for (final EventInfo aei : ei.getContainedItems()) {
                    final BwEvent av = aei.getEvent();
                    av.setParent(event);
                    setupSharableEntity(av, getPrincipal().getPrincipalRef());
                }
            }
        }
        final BwCalendar undereffedCal = cal;
        if (cal.getInternalAlias()) {
            /* Resolve the alias and put the event in it's proper place */
            // XXX This is probably OK for non-public admin
            final boolean setCats = getSvc().getPars().getPublicAdmin();
            if (!setCats) {
                cal = getCols().resolveAlias(cal, true, false);
            } else {
                while (true) {
                    final Set<BwCategory> cats = cal.getCategories();
                    for (final BwCategory cat : cats) {
                        event.addCategory(cat);
                    }
                    if (!cal.getInternalAlias()) {
                        break;
                    }
                    cal = getCols().resolveAlias(cal, false, false);
                }
            }
            event.setColPath(cal.getPath());
        }
        if (!cal.getCalendarCollection()) {
            throw new CalFacadeAccessException();
        }
        if (!event.getPublick() && Util.isEmpty(event.getAlarms())) {
            setDefaultAlarms(ei, undereffedCal);
        }
        boolean schedulingObject = false;
        if (cal.getCollectionInfo().scheduling && (event.getOrganizerSchedulingObject() || event.getAttendeeSchedulingObject())) {
            schedulingObject = true;
        }
        final Integer maxAttendees = getSvc().getAuthProperties().getMaxAttendeesPerInstance();
        if ((maxAttendees != null) && !Util.isEmpty(event.getAttendees()) && (event.getAttendees().size() > maxAttendees)) {
            throw new CalFacadeException(CalFacadeException.schedulingTooManyAttendees);
        }
        event.setDtstamps(getCurrentTimestamp());
        if (schedulingObject) {
            event.updateStag(getCurrentTimestamp());
        }
        /* All Overrides go in same calendar and have same name */
        final Collection<BwEventProxy> overrides = ei.getOverrideProxies();
        if (overrides != null) {
            for (final BwEventProxy ovei : overrides) {
                setScheduleState(ovei, true, schedulingInbox);
                if ((maxAttendees != null) && !Util.isEmpty(ovei.getAttendees()) && (ovei.getAttendees().size() > maxAttendees)) {
                    throw new CalFacadeException(CalFacadeException.schedulingTooManyAttendees);
                }
                ovei.setDtstamps(getCurrentTimestamp());
                if (cal.getCollectionInfo().scheduling && (ovei.getOrganizerSchedulingObject() || ovei.getAttendeeSchedulingObject())) {
                    schedulingObject = true;
                }
                if (schedulingObject) {
                    ovei.updateStag(getCurrentTimestamp());
                }
                final BwEventAnnotation ann = ovei.getRef();
                ann.setColPath(event.getColPath());
                ann.setName(event.getName());
            }
        }
        if (event.getOrganizerSchedulingObject()) {
            // Set RSVP on all attendees with PARTSTAT = NEEDS_ACTION
            for (final BwAttendee att : event.getAttendees()) {
                if (att.getPartstat() == IcalDefs.partstatValNeedsAction) {
                    att.setRsvp(true);
                }
            }
        }
        UpdateEventResult uer = getCal().addEvent(ei, schedulingInbox, rollbackOnError);
        if (ei.getNumContainedItems() > 0) {
            for (final EventInfo oei : ei.getContainedItems()) {
                oei.getEvent().setName(event.getName());
                final UpdateEventResult auer = getCal().addEvent(oei, schedulingInbox, rollbackOnError);
                if (auer.errorCode != null) {
                // ?
                }
            }
        }
        updResult.failedOverrides = uer.failedOverrides;
        if (!noInvites) {
            if (event.getAttendeeSchedulingObject()) {
                // Attendee replying?
                updResult.reply = true;
            }
            if (cal.getCollectionInfo().scheduling && schedulingObject) {
                final SchedulingIntf sched = (SchedulingIntf) getSvc().getScheduler();
                sched.implicitSchedule(ei, false);
            /* We assume we don't need to update again to set attendee status
           * Trying to do an update results in duplicate key errors.
           *
           * If it turns out the scgedule status is not getting persisted in the
           * calendar entry then we need to find a way to set just that value in
           * already persisted entity.
           */
            }
        }
        return updResult;
    } catch (final Throwable t) {
        if (debug) {
            error(t);
        }
        getSvc().rollbackTransaction();
        if (t instanceof CalFacadeException) {
            throw (CalFacadeException) t;
        }
        throw new CalFacadeException(t);
    }
}
Also used : BwPreferences(org.bedework.calfacade.svc.BwPreferences) CoreEventInfo(org.bedework.calcorei.CoreEventInfo) EventInfo(org.bedework.calfacade.svc.EventInfo) BwCategory(org.bedework.calfacade.BwCategory) CalFacadeForbidden(org.bedework.calfacade.exc.CalFacadeForbidden) BwEvent(org.bedework.calfacade.BwEvent) SchedulingIntf(org.bedework.calsvc.scheduling.SchedulingIntf) BwCalendar(org.bedework.calfacade.BwCalendar) BwEventProxy(org.bedework.calfacade.BwEventProxy) CalFacadeAccessException(org.bedework.calfacade.exc.CalFacadeAccessException) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException) BwEventAnnotation(org.bedework.calfacade.BwEventAnnotation) BwAttendee(org.bedework.calfacade.BwAttendee) UpdateResult(org.bedework.calfacade.svc.EventInfo.UpdateResult) UpdateEventResult(org.bedework.calcorei.CoreEventsI.UpdateEventResult)

Example 3 with UpdateResult

use of org.bedework.calfacade.svc.EventInfo.UpdateResult in project bw-calendar-engine by Bedework.

the class ImplicitSchedulingHandler method implicitSchedule.

@Override
public void implicitSchedule(final EventInfo ei, final boolean noInvites) throws CalFacadeException {
    UpdateResult uer = ei.getUpdResult();
    if (debug) {
        dump(uer);
    }
    BwEvent ev = ei.getEvent();
    boolean organizerSchedulingObject = ev.getOrganizerSchedulingObject();
    boolean attendeeSchedulingObject = ev.getAttendeeSchedulingObject();
    if (ev.getSuppressed()) {
        if (!Util.isEmpty(ei.getOverrides())) {
            for (EventInfo oei : ei.getOverrides()) {
                uer = oei.getUpdResult();
                if (debug) {
                    dump(uer);
                }
                BwEvent oev = oei.getEvent();
                if (oev.getOrganizerSchedulingObject()) {
                    organizerSchedulingObject = true;
                }
                if (oev.getAttendeeSchedulingObject()) {
                    attendeeSchedulingObject = true;
                }
            }
        }
    }
    if (!organizerSchedulingObject && !attendeeSchedulingObject) {
        // Not a scheduling event
        if (debug) {
            trace("No a scheduling object: just return");
        }
        return;
    }
    if (ev.getOrganizer() == null) {
        throw new CalFacadeBadRequest(CalFacadeException.missingEventProperty);
    }
    if (ev.getOriginator() == null) {
        ev.setOriginator(ev.getOrganizer().getOrganizerUri());
    }
    if (uer.reply) {
        int meth;
        if (ei.getReplyAttendeeURI() != null) {
            meth = ScheduleMethods.methodTypeRefresh;
        } else {
            meth = ScheduleMethods.methodTypeReply;
        }
        ev.setScheduleMethod(meth);
        uer.schedulingResult = attendeeRespond(ei, meth);
        return;
    }
    if (uer.deleting) {
        if (organizerSchedulingObject) {
            // if (schedMethod == Icalendar.methodTypeCancel) {
            // /* We already canceled this one */
            // return;
            // }
            ev.setScheduleMethod(ScheduleMethods.methodTypeCancel);
        } else {
            // Reply from attendee setting partstat
            ev.setScheduleMethod(ScheduleMethods.methodTypeReply);
        }
    } else {
        ev.setScheduleMethod(ScheduleMethods.methodTypeRequest);
    }
    if (!noInvites) {
        uer.schedulingResult = schedule(ei, ei.getReplyAttendeeURI(), uer.fromAttUri, false);
    }
    if (!uer.adding && !Util.isEmpty(uer.deletedAttendees)) {
        /* Send cancel to removed attendees */
        for (BwAttendee att : uer.deletedAttendees) {
            if (Util.compareStrings(att.getPartstat(), IcalDefs.partstats[IcalDefs.partstatDeclined]) == 0) {
                // Already declined - send nothing
                continue;
            }
            /* Clone is adequate here. For a CANCEL we just send either the master
         * or the particular instance.
         */
            BwEvent cncl = (BwEvent) ev.clone();
            cncl.setAttendees(null);
            cncl.addAttendee((BwAttendee) att.clone());
            cncl.setRecipients(null);
            cncl.addRecipient(att.getAttendeeUri());
            cncl.setScheduleMethod(ScheduleMethods.methodTypeCancel);
            cncl.setOrganizerSchedulingObject(true);
            cncl.setAttendeeSchedulingObject(false);
            EventInfo cei = new EventInfo(cncl);
            ScheduleResult cnclr = schedule(cei, null, null, false);
            if (debug) {
                trace(cnclr.toString());
            }
        }
    }
    if (ei.getInboxEventName() != null) {
        // Delete the given event from the inbox.
        EventsI events = getSvc().getEventsHandler();
        BwCalendar inbox = getSvc().getCalendarsHandler().getSpecial(BwCalendar.calTypeInbox, true);
        final EventInfo inboxei = events.get(inbox.getPath(), ei.getInboxEventName());
        if (inboxei != null) {
            events.delete(inboxei, false);
        }
    }
}
Also used : CalFacadeBadRequest(org.bedework.calfacade.exc.CalFacadeBadRequest) ScheduleResult(org.bedework.calfacade.ScheduleResult) EventInfo(org.bedework.calfacade.svc.EventInfo) BwEvent(org.bedework.calfacade.BwEvent) BwCalendar(org.bedework.calfacade.BwCalendar) EventsI(org.bedework.calsvci.EventsI) BwAttendee(org.bedework.calfacade.BwAttendee) UpdateResult(org.bedework.calfacade.svc.EventInfo.UpdateResult)

Example 4 with UpdateResult

use of org.bedework.calfacade.svc.EventInfo.UpdateResult in project bw-calendar-engine by Bedework.

the class Events method checkChanges.

@SuppressWarnings("unchecked")
private boolean checkChanges(final EventInfo ei, final boolean organizerSchedulingObject, final boolean attendeeSchedulingObject) throws CalFacadeException {
    final UpdateResult updResult = ei.getUpdResult();
    if (ei.getChangeset(getPrincipalHref()).isEmpty()) {
        // Forced update?
        updResult.hasChanged = true;
        if (attendeeSchedulingObject) {
            // Attendee replying?
            /* XXX We should really check to see if the value changed here -
         */
            updResult.reply = true;
        }
        return true;
    }
    if (debug) {
        ei.getChangeset(getPrincipalHref()).dumpEntries();
    }
    final ChangeTable ct = ei.getChangeset(getPrincipalHref());
    final Collection<ChangeTableEntry> ctes = ct.getEntries();
    updResult.sequenceChange = ct.getSequenceChangeNeeded();
    for (final ChangeTableEntry cte : ctes) {
        if (!cte.getChanged()) {
            continue;
        }
        updResult.hasChanged = true;
        final PropertyInfoIndex pi = cte.getIndex();
        if (!organizerSchedulingObject && pi.equals(PropertyInfoIndex.ORGANIZER)) {
            final BwOrganizer oldOrg = (BwOrganizer) cte.getOldVal();
            final BwOrganizer newOrg = (BwOrganizer) cte.getNewVal();
            if ((oldOrg == null) || (newOrg == null) || !oldOrg.getOrganizerUri().equals(newOrg.getOrganizerUri())) {
                // Never valid
                throw new CalFacadeForbidden(CaldavTags.attendeeAllowed, "Cannot change organizer");
            }
        }
        if (pi.equals(PropertyInfoIndex.ATTENDEE) || pi.equals(PropertyInfoIndex.VOTER)) {
            updResult.addedAttendees = cte.getAddedValues();
            updResult.deletedAttendees = cte.getRemovedValues();
            if (attendeeSchedulingObject) {
                // Attendee replying?
                /* XXX We should really check to see if the value changed here -
           */
                updResult.reply = true;
            } else {
                if (!Util.isEmpty(updResult.deletedAttendees)) {
                    // Bump sequence as we are sending out cancels
                    updResult.sequenceChange = true;
                }
            }
        }
        if (pi.equals(PropertyInfoIndex.POLL_WINNER)) {
            if (!attendeeSchedulingObject) {
                // Attendee replying?
                /* XXX We should really check to see if the value changed here -
           */
                updResult.pollWinner = ei.getEvent().getPollWinner();
            }
        }
        if (pi.equals(PropertyInfoIndex.POLL_ITEM)) {
            if (attendeeSchedulingObject) {
                // Attendee replying?
                /* XXX We should really check to see if the value changed here -
           */
                updResult.reply = true;
            }
        }
        if (organizerSchedulingObject) {
            final BwIcalPropertyInfoEntry pie = BwIcalPropertyInfo.getPinfo(cte.getIndex());
            if (pie.getReschedule()) {
                updResult.doReschedule = true;
            }
        }
    }
    return updResult.hasChanged;
}
Also used : PropertyInfoIndex(org.bedework.util.calendar.PropertyIndex.PropertyInfoIndex) BwIcalPropertyInfoEntry(org.bedework.calfacade.ical.BwIcalPropertyInfo.BwIcalPropertyInfoEntry) ChangeTable(org.bedework.calfacade.util.ChangeTable) CalFacadeForbidden(org.bedework.calfacade.exc.CalFacadeForbidden) ChangeTableEntry(org.bedework.calfacade.util.ChangeTableEntry) UpdateResult(org.bedework.calfacade.svc.EventInfo.UpdateResult) BwOrganizer(org.bedework.calfacade.BwOrganizer)

Example 5 with UpdateResult

use of org.bedework.calfacade.svc.EventInfo.UpdateResult in project bw-calendar-engine by Bedework.

the class InRequest method process.

/**
 * @param ei
 * @return ScheduleResult
 * @throws CalFacadeException
 */
@Override
public ProcessResult process(final EventInfo ei) throws CalFacadeException {
    /* We are acting as an attendee getting a request from the organizer, either
     * a first invitation or an update
     */
    ProcessResult pr = new ProcessResult();
    BwPreferences prefs = getSvc().getPrefsHandler().get();
    BwEvent ev = ei.getEvent();
    String owner = ev.getOwnerHref();
    boolean schedAssistant = ev.isSchedulingAssistant();
    if (debug) {
        trace("InSchedule schedAssistant = " + schedAssistant);
    }
    /* First we save or update the event in the users default scheduling calendar
     */
    SchedulingIntf sched = (SchedulingIntf) getSvc().getScheduler();
    String uri = getSvc().getDirectories().principalToCaladdr(getSvc().getPrincipal());
    String colPath = null;
    EventInfo ourCopy = null;
    boolean adding = false;
    ev.setAttendeeSchedulingObject(true);
    ev.setOrganizerSchedulingObject(false);
    check: {
        ourCopy = sched.getStoredMeeting(ev);
        if (ourCopy != null) {
            if (debug) {
                trace("InSchedule update for " + owner);
            }
            colPath = ourCopy.getEvent().getColPath();
            final boolean vpoll = ev.getEntityType() == IcalDefs.entityTypeVpoll;
            if (vpoll) {
                if (!updateAttendeePollCopy(ourCopy, ei, uri)) {
                    break check;
                }
            } else if (!updateAttendeeCopy(ourCopy, ei, uri)) {
                break check;
            }
            pr.removeInboxEntry = !anySignificantChange(ourCopy);
        } else {
            /* New invitation - Save in default */
            adding = true;
            if (debug) {
                trace("InSchedule add for " + owner);
            }
            String prefSched = getSvc().getCalendarsHandler().getPreferred(IcalDefs.entityTypeIcalNames[ev.getEntityType()]);
            if (prefSched == null) {
                // SCHED - status = no default collection
                if (debug) {
                    trace("InSchedule - no default collection for " + owner);
                }
                // XXX set error code in request status
                pr.removeInboxEntry = true;
                return pr;
            }
            ourCopy = newAttendeeCopy(getSvc(), prefSched, ei, uri);
            if (ourCopy == null) {
                if (debug) {
                    trace("InSchedule - unable to add to calendar for " + owner);
                }
                // XXX set error code in request status
                pr.removeInboxEntry = true;
                return pr;
            }
            ev.addXproperty(new BwXproperty(BwXproperty.bedeworkSchedulingNew, null, "true"));
            pr.removeInboxEntry = false;
        }
    }
    if (schedAssistant) {
        // Don't need the notification
        pr.removeInboxEntry = true;
    }
    ev.addXproperty(new BwXproperty(BwXproperty.bedeworkSchedulingEntityPath, null, colPath));
    /* We've saved it in the users calendar - now see if they want to auto
     * respond.
     */
    boolean noInvites = true;
    boolean doAutoRespond = !pr.removeInboxEntry && !schedAssistant && prefs.getScheduleAutoRespond();
    if (doAutoRespond) {
        if (debug) {
            trace("InSchedule - auto responding for " + owner);
        }
        noInvites = !autoRespond(getSvc(), ourCopy, ei, prefs.getScheduleDoubleBook(), uri);
    }
    if (adding) {
        final String namePrefix = ourCopy.getEvent().getUid();
        pr.sr.errorCode = sched.addEvent(ourCopy, namePrefix, BwCalendar.calTypeCalendarCollection, noInvites);
        if (pr.sr.errorCode != null) {
            if (debug) {
                trace("Schedule - error " + pr.sr.errorCode + " adding event for " + owner);
            }
            return pr;
        }
    } else {
        final UpdateResult ur = getSvc().getEventsHandler().update(ourCopy, noInvites, null);
        if (debug) {
            trace("Schedule - update result " + pr.sr + " for event" + ourCopy.getEvent());
        }
        if (ur.schedulingResult != null) {
            pr.sr = ur.schedulingResult;
        }
    }
    pr.attendeeAccepting = !Util.isEmpty(ev.getXproperties(BwXproperty.bedeworkSchedulingReplyUpdate));
    return pr;
}
Also used : BwPreferences(org.bedework.calfacade.svc.BwPreferences) EventInfo(org.bedework.calfacade.svc.EventInfo) BwXproperty(org.bedework.calfacade.BwXproperty) BwEvent(org.bedework.calfacade.BwEvent) SchedulingIntf(org.bedework.calsvc.scheduling.SchedulingIntf) BwString(org.bedework.calfacade.BwString) UpdateResult(org.bedework.calfacade.svc.EventInfo.UpdateResult)

Aggregations

UpdateResult (org.bedework.calfacade.svc.EventInfo.UpdateResult)5 BwEvent (org.bedework.calfacade.BwEvent)4 EventInfo (org.bedework.calfacade.svc.EventInfo)4 BwAttendee (org.bedework.calfacade.BwAttendee)3 BwCalendar (org.bedework.calfacade.BwCalendar)3 SchedulingIntf (org.bedework.calsvc.scheduling.SchedulingIntf)3 CoreEventInfo (org.bedework.calcorei.CoreEventInfo)2 UpdateEventResult (org.bedework.calcorei.CoreEventsI.UpdateEventResult)2 CalFacadeException (org.bedework.calfacade.exc.CalFacadeException)2 CalFacadeForbidden (org.bedework.calfacade.exc.CalFacadeForbidden)2 BwPreferences (org.bedework.calfacade.svc.BwPreferences)2 BwCategory (org.bedework.calfacade.BwCategory)1 BwEventAnnotation (org.bedework.calfacade.BwEventAnnotation)1 BwEventProxy (org.bedework.calfacade.BwEventProxy)1 BwOrganizer (org.bedework.calfacade.BwOrganizer)1 BwString (org.bedework.calfacade.BwString)1 BwXproperty (org.bedework.calfacade.BwXproperty)1 ScheduleResult (org.bedework.calfacade.ScheduleResult)1 CalFacadeAccessException (org.bedework.calfacade.exc.CalFacadeAccessException)1 CalFacadeBadRequest (org.bedework.calfacade.exc.CalFacadeBadRequest)1