Search in sources :

Example 6 with Xpar

use of org.bedework.calfacade.BwXproperty.Xpar in project bw-calendar-engine by Bedework.

the class XbwLocPropUpdater method applyUpdate.

public UpdateResult applyUpdate(final UpdateInfo ui) throws WebdavException {
    try {
        final ChangeTableEntry cte = ui.getCte();
        final BwEvent ev = ui.getEvent();
        final List<BwXproperty> xlocs = ev.getXproperties(xBedeworkLocation);
        // Should only be one or zero
        final BwXproperty xloc;
        if (Util.isEmpty(xlocs)) {
            xloc = null;
        } else {
            xloc = xlocs.get(0);
        }
        final String lang = UpdaterUtil.getLang(ui.getProp());
        final String xval = ((TextPropertyType) ui.getProp()).getText();
        final BaseParameterType keyParam = XcalUtil.findParam(ui.getProp(), XcalTags.xBedeworkLocationKey);
        final String keyName;
        if (keyParam != null) {
            keyName = ((TextParameterType) keyParam).getText();
        } else {
            keyName = null;
        }
        final BwLocation evLoc = ev.getLocation();
        if (ui.isRemove()) {
            if (xlocs == null) {
                // Nothing to remove
                return UpdateResult.getOkResult();
            }
            // TODO - match values?
            ev.removeXproperty(xloc);
            cte.addRemovedValue(xloc);
            if (evLoc != null) {
                ev.setLocation(null);
                cte.addRemovedValue(evLoc);
            }
            return UpdateResult.getOkResult();
        }
        if (ui.isAdd()) {
            if (xloc != null) {
                return new UpdateResult("Entity already has " + ui.getPropName() + " property - cannot add");
            }
            if (!checkLocation(ui, ev, lang, xval, null)) {
                final BwXproperty xp = makeXprop(lang, xval);
                ev.addXproperty(xp);
                cte.addAddedValue(xp);
            }
            return UpdateResult.getOkResult();
        }
        if (ui.isChange()) {
            if (xloc == null) {
                return new UpdateResult("Entity has no " + ui.getPropName() + " property - cannot change");
            }
            if (CalFacadeUtil.cmpObjval(xval, xloc.getValue()) != 0) {
                return new UpdateResult("Values don't match for update to " + ui.getPropName());
            }
            ev.removeXproperty(xloc);
            cte.addRemovedValue(xloc);
            final String nlang = UpdaterUtil.getLang(ui.getUpdprop());
            final String nxval = ((TextPropertyType) ui.getUpdprop()).getText();
            if (!checkLocation(ui, ev, nlang, nxval, keyName)) {
                final BwXproperty nxp = makeXprop(nlang, nxval);
                if (keyName != null) {
                    nxp.getParameters().add(new Xpar(XcalTags.xBedeworkLocationKey.getLocalPart(), keyName));
                }
                ev.addXproperty(nxp);
                cte.addAddedValue(nxp);
            }
        }
        return UpdateResult.getOkResult();
    } catch (final CalFacadeException cfe) {
        throw new WebdavException(cfe);
    }
}
Also used : Xpar(org.bedework.calfacade.BwXproperty.Xpar) BaseParameterType(ietf.params.xml.ns.icalendar_2.BaseParameterType) BwLocation(org.bedework.calfacade.BwLocation) BwXproperty(org.bedework.calfacade.BwXproperty) WebdavException(org.bedework.webdav.servlet.shared.WebdavException) BwEvent(org.bedework.calfacade.BwEvent) ChangeTableEntry(org.bedework.calfacade.util.ChangeTableEntry) BwString(org.bedework.calfacade.BwString) TextPropertyType(ietf.params.xml.ns.icalendar_2.TextPropertyType) UpdateResult(org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult) CalFacadeException(org.bedework.calfacade.exc.CalFacadeException)

Aggregations

Xpar (org.bedework.calfacade.BwXproperty.Xpar)6 BwXproperty (org.bedework.calfacade.BwXproperty)4 ArrayList (java.util.ArrayList)2 NoDump (org.bedework.calfacade.annotations.NoDump)2 NoProxy (org.bedework.calfacade.annotations.ical.NoProxy)2 ArrayOfParameters (ietf.params.xml.ns.icalendar_2.ArrayOfParameters)1 BaseParameterType (ietf.params.xml.ns.icalendar_2.BaseParameterType)1 TextPropertyType (ietf.params.xml.ns.icalendar_2.TextPropertyType)1 XBedeworkExsynchEndtzidPropType (ietf.params.xml.ns.icalendar_2.XBedeworkExsynchEndtzidPropType)1 XBedeworkExsynchLastmodPropType (ietf.params.xml.ns.icalendar_2.XBedeworkExsynchLastmodPropType)1 XBedeworkExsynchStarttzidPropType (ietf.params.xml.ns.icalendar_2.XBedeworkExsynchStarttzidPropType)1 XBedeworkMaxTicketsPerUserPropType (ietf.params.xml.ns.icalendar_2.XBedeworkMaxTicketsPerUserPropType)1 XBedeworkMaxTicketsPropType (ietf.params.xml.ns.icalendar_2.XBedeworkMaxTicketsPropType)1 XBedeworkRegistrationEndPropType (ietf.params.xml.ns.icalendar_2.XBedeworkRegistrationEndPropType)1 XBedeworkRegistrationStartPropType (ietf.params.xml.ns.icalendar_2.XBedeworkRegistrationStartPropType)1 XBedeworkWaitListLimitPropType (ietf.params.xml.ns.icalendar_2.XBedeworkWaitListLimitPropType)1 XBedeworkWrappedNameParamType (ietf.params.xml.ns.icalendar_2.XBedeworkWrappedNameParamType)1 XBedeworkWrapperPropType (ietf.params.xml.ns.icalendar_2.XBedeworkWrapperPropType)1 XBwCategoriesPropType (ietf.params.xml.ns.icalendar_2.XBwCategoriesPropType)1 XBwContactPropType (ietf.params.xml.ns.icalendar_2.XBwContactPropType)1