Search in sources :

Example 6 with UpdateResult

use of org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult in project bw-calendar-engine by Bedework.

the class DtStartPropUpdater method applyUpdate.

@Override
public UpdateResult applyUpdate(final UpdateInfo ui) throws WebdavException {
    try {
        BwEvent ev = ui.getEvent();
        boolean scheduleReply = ev.getScheduleMethod() == ScheduleMethods.methodTypeReply;
        // No dates valid for reply
        DtstartPropType dt = (DtstartPropType) ui.getProp();
        DatesState ds = (DatesState) ui.getState(DatesState.stateName);
        if (ds == null) {
            ds = new DatesState(ev);
            ui.saveState(DatesState.stateName, ds);
        }
        ChangeTableEntry cte = ui.getCte();
        if (ui.isRemove()) {
            if (!scheduleReply && (ev.getEntityType() != IcalDefs.entityTypeTodo)) {
                return new UpdateResult("Entity requires start date");
            }
            cte.setDeleted(ev.getDtstart());
            ds.start = null;
            return UpdateResult.getOkResult();
        }
        if (ui.isAdd()) {
            if (!ev.getNoStart()) {
                return new UpdateResult("Entity already has start date - cannot add");
            }
            ds.start = BwDateTime.makeBwDateTime(dt);
            cte.setAdded(ds.start);
            return UpdateResult.getOkResult();
        }
        /* Changing dtstart - either value or parameters */
        if (ev.getNoStart()) {
            return new UpdateResult("Entity has no start date - cannot change");
        }
        Holder<BwDateTime> resdt = new Holder<BwDateTime>();
        UpdateResult ur = makeDt(ev.getDtstart(), resdt, ui);
        if (!ur.getOk()) {
            return ur;
        }
        if (resdt.value != null) {
            cte.setChanged(ev.getDtstart(), resdt.value);
            ds.start = resdt.value;
        }
        return UpdateResult.getOkResult();
    } catch (CalFacadeException cfe) {
        throw new WebdavException(cfe);
    }
}
Also used : BwDateTime(org.bedework.calfacade.BwDateTime) Holder(javax.xml.ws.Holder) WebdavException(org.bedework.webdav.servlet.shared.WebdavException) BwEvent(org.bedework.calfacade.BwEvent) ChangeTableEntry(org.bedework.calfacade.util.ChangeTableEntry) DtstartPropType(ietf.params.xml.ns.icalendar_2.DtstartPropType) UpdateResult(org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException)

Example 7 with UpdateResult

use of org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult in project bw-calendar-engine by Bedework.

the class LocationPropUpdater method applyUpdate.

@Override
public UpdateResult applyUpdate(final UpdateInfo ui) throws WebdavException {
    try {
        final BwEvent ev = ui.getEvent();
        final ChangeTableEntry cte = ui.getCte();
        BwString val = new BwString(UpdaterUtil.getLang(ui.getProp()), ((TextPropertyType) ui.getProp()).getText());
        final BwLocation evLoc = ev.getLocation();
        BwString evVal = null;
        if (evLoc != null) {
            evVal = evLoc.getAddress();
        }
        if (ui.isRemove()) {
            if (evVal == null) {
                return new UpdateResult("Entity has no " + ui.getPropName() + " property - cannot remove");
            }
            val = null;
        } else if (ui.isAdd()) {
            if (evVal != null) {
                return new UpdateResult("Entity already has " + ui.getPropName() + " property - cannot add");
            }
        } else if (!ui.isChange()) {
            final ParameterUpdater.UpdateInfo langUpd = UpdaterUtil.findLangUpdate(ui.getParamUpdates());
            if (langUpd == null) {
                return new UpdateResult("No update specified for " + ui.getPropName());
            }
            String lang = val.getLang();
            if (langUpd.isRemove()) {
                lang = null;
            } else if (langUpd.isAdd()) {
                lang = ((TextParameterType) langUpd.getParam()).getText();
            } else if (langUpd.getUpdparam() != null) {
                lang = ((TextParameterType) langUpd.getUpdparam()).getText();
            }
            if (!Util.equalsString(lang, val.getLang())) {
                val = new BwString(lang, val.getValue());
            }
        } else {
            if (!val.equals(evVal)) {
                return new UpdateResult("Values don't match for update to " + ui.getPropName());
            }
            val = new BwString(UpdaterUtil.getLang(ui.getUpdprop()), ((TextPropertyType) ui.getUpdprop()).getText());
        }
        if (val == null) {
            cte.setDeleted(ev.getLocation());
            ev.setLocation(null);
        } else if (Util.cmpObjval(val, evVal) != 0) {
            BwLocation loc = ui.getIcalCallback().findLocation(val);
            if (loc == null) {
                loc = BwLocation.makeLocation();
                loc.setAddress(val);
                ui.getIcalCallback().addLocation(loc);
            }
            if (cte.setChanged(evLoc, loc)) {
                ev.setLocation(loc);
            }
        }
        return UpdateResult.getOkResult();
    } catch (final CalFacadeException cfe) {
        throw new WebdavException(cfe);
    }
}
Also used : BwLocation(org.bedework.calfacade.BwLocation) TextParameterType(ietf.params.xml.ns.icalendar_2.TextParameterType) WebdavException(org.bedework.webdav.servlet.shared.WebdavException) BwEvent(org.bedework.calfacade.BwEvent) ChangeTableEntry(org.bedework.calfacade.util.ChangeTableEntry) BwString(org.bedework.calfacade.BwString) BwString(org.bedework.calfacade.BwString) TextPropertyType(ietf.params.xml.ns.icalendar_2.TextPropertyType) ParameterUpdater(org.bedework.caldav.bwserver.ParameterUpdater) UpdateResult(org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException)

Example 8 with UpdateResult

use of org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult in project bw-calendar-engine by Bedework.

the class PriorityPropUpdater method applyUpdate.

@Override
public UpdateResult applyUpdate(final UpdateInfo ui) throws WebdavException {
    BwEvent ev = ui.getEvent();
    PriorityPropType pr = (PriorityPropType) ui.getProp();
    ChangeTableEntry cte = ui.getCte();
    BigInteger val = pr.getInteger();
    BigInteger evVal = null;
    if (ev.getPriority() != null) {
        evVal = BigInteger.valueOf(ev.getPriority());
    }
    if (ui.isRemove()) {
        if (evVal == null) {
            return new UpdateResult("Entity has no " + ui.getPropName() + " property - cannot remove");
        }
        val = null;
    } else if (ui.isAdd()) {
        if (evVal != null) {
            return new UpdateResult("Entity already has " + ui.getPropName() + " property - cannot add");
        }
    } else if (!ui.isChange()) {
        return new UpdateResult("No update specified for " + ui.getPropName());
    } else {
        if (!val.equals(evVal)) {
            return new UpdateResult("Values don't match for update to " + ui.getPropName());
        }
        val = ((PriorityPropType) ui.getUpdprop()).getInteger();
    }
    if (val != null) {
        int ival = val.intValue();
        if ((ival < 0) || (ival > 9)) {
            return new UpdateResult("Value for " + ui.getPropName() + " must be >= 0 and <= 9 ");
        }
    }
    if (Util.cmpObjval(val, evVal) != 0) {
        cte.setChanged(evVal, val);
        ev.setPriority(val.intValue());
    }
    return UpdateResult.getOkResult();
}
Also used : BigInteger(java.math.BigInteger) BwEvent(org.bedework.calfacade.BwEvent) PriorityPropType(ietf.params.xml.ns.icalendar_2.PriorityPropType) ChangeTableEntry(org.bedework.calfacade.util.ChangeTableEntry) UpdateResult(org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult)

Example 9 with UpdateResult

use of org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult in project bw-calendar-engine by Bedework.

the class CompletedPropUpdater method applyUpdate.

@Override
public UpdateResult applyUpdate(final UpdateInfo ui) throws WebdavException {
    BwEvent ev = ui.getEvent();
    CompletedPropType pr = (CompletedPropType) ui.getProp();
    ChangeTableEntry cte = ui.getCte();
    String val = XcalUtil.getIcalFormatDateTime(pr.getUtcDateTime());
    String evVal = null;
    if (ev.getCompleted() != null) {
        evVal = ev.getCompleted();
    }
    if (ui.isRemove()) {
        if (evVal == null) {
            return new UpdateResult("Entity has no " + ui.getPropName() + " property - cannot remove");
        }
        val = null;
    } else if (ui.isAdd()) {
        if (evVal != null) {
            return new UpdateResult("Entity already has " + ui.getPropName() + " property - cannot add");
        }
    } else if (!ui.isChange()) {
        return new UpdateResult("No update specified for " + ui.getPropName());
    } else {
        if (!val.equals(evVal)) {
            return new UpdateResult("Values don't match for update to " + ui.getPropName());
        }
        val = XcalUtil.getIcalFormatDateTime(((CompletedPropType) ui.getUpdprop()).getUtcDateTime());
    }
    if (Util.cmpObjval(val, evVal) != 0) {
        cte.setChanged(evVal, val);
        ev.setCompleted(val);
    }
    return UpdateResult.getOkResult();
}
Also used : CompletedPropType(ietf.params.xml.ns.icalendar_2.CompletedPropType) BwEvent(org.bedework.calfacade.BwEvent) ChangeTableEntry(org.bedework.calfacade.util.ChangeTableEntry) UpdateResult(org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult)

Example 10 with UpdateResult

use of org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult in project bw-calendar-engine by Bedework.

the class DateDatetimePropUpdater method makeDt.

protected UpdateResult makeDt(final BwDateTime evdt, final Holder<BwDateTime> resdt, final UpdateInfo ui) throws WebdavException {
    try {
        String tzid = evdt.getTzid();
        String dtval = evdt.getDtval();
        boolean dateOnly = evdt.getDateType();
        BwDateTime newdt = null;
        /* New or changed tzid? */
        for (ParameterUpdater.UpdateInfo parui : ui.getParamUpdates()) {
            if (parui.getParam() instanceof TzidParamType) {
                if (parui.isRemove()) {
                    tzid = null;
                    break;
                }
                if (parui.isAdd()) {
                    if (tzid != null) {
                        return new UpdateResult(ui.getPropName().toString() + " already has tzid");
                    }
                    tzid = ((TzidParamType) parui.getParam()).getText();
                    break;
                }
                if (tzid == null) {
                    return new UpdateResult(ui.getPropName().toString() + " has no tzid to change");
                }
                tzid = ((TzidParamType) parui.getUpdparam()).getText();
                break;
            }
        }
        if (ui.getUpdprop() != null) {
            // Has new value
            DateDatetimePropertyType newdts = (DateDatetimePropertyType) ui.getUpdprop();
            dateOnly = newdts.getDate() != null;
            newdt = BwDateTime.makeBwDateTime(newdts, tzid);
        }
        if ((newdt == null) && (!Util.equalsString(tzid, evdt.getTzid()))) {
            // Tzid changed
            newdt = BwDateTime.makeBwDateTime(dateOnly, dtval, tzid);
        }
        if (newdt != null) {
            // Validate
            int res = newdt.validate();
            if (res == BwDateTime.dtBadDtval) {
                return new UpdateResult("Bad date value for " + ui.getPropName());
            }
            if (res == BwDateTime.dtBadTz) {
                return new UpdateResult("Bad tzid for " + ui.getPropName());
            }
        }
        resdt.value = newdt;
        return UpdateResult.getOkResult();
    } catch (CalFacadeException cfe) {
        throw new WebdavException(cfe);
    }
}
Also used : BwDateTime(org.bedework.calfacade.BwDateTime) DateDatetimePropertyType(ietf.params.xml.ns.icalendar_2.DateDatetimePropertyType) WebdavException(org.bedework.webdav.servlet.shared.WebdavException) TzidParamType(ietf.params.xml.ns.icalendar_2.TzidParamType) ParameterUpdater(org.bedework.caldav.bwserver.ParameterUpdater) UpdateResult(org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException)

Aggregations

UpdateResult (org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult)31 BwEvent (org.bedework.calfacade.BwEvent)23 ChangeTableEntry (org.bedework.calfacade.util.ChangeTableEntry)20 CalFacadeException (org.bedework.calfacade.exc.CalFacadeException)11 WebdavException (org.bedework.webdav.servlet.shared.WebdavException)11 BwString (org.bedework.calfacade.BwString)6 TextPropertyType (ietf.params.xml.ns.icalendar_2.TextPropertyType)4 BwAlarm (org.bedework.calfacade.BwAlarm)4 BwDateTime (org.bedework.calfacade.BwDateTime)4 BwXproperty (org.bedework.calfacade.BwXproperty)4 BaseComponentType (ietf.params.xml.ns.icalendar_2.BaseComponentType)2 BasePropertyType (ietf.params.xml.ns.icalendar_2.BasePropertyType)2 DateDatetimePropertyType (ietf.params.xml.ns.icalendar_2.DateDatetimePropertyType)2 DurationPropType (ietf.params.xml.ns.icalendar_2.DurationPropType)2 BigInteger (java.math.BigInteger)2 QName (javax.xml.namespace.QName)2 Holder (javax.xml.ws.Holder)2 ParameterUpdater (org.bedework.caldav.bwserver.ParameterUpdater)2 BwContact (org.bedework.calfacade.BwContact)2 BwLocation (org.bedework.calfacade.BwLocation)2