[Bedework-commit] caldavimpl r111 - trunk/bwcaldav/src/org/bedework/caldav/bwserver

svnadmin at bedework.org svnadmin at bedework.org
Tue Jul 26 09:42:27 EDT 2011


Author: douglm
Date: 2011-07-26 09:42:26 -0400 (Tue, 26 Jul 2011)
New Revision: 111

Modified:
   trunk/bwcaldav/src/org/bedework/caldav/bwserver/BwSysIntfImpl.java
   trunk/bwcaldav/src/org/bedework/caldav/bwserver/BwUpdates.java
   trunk/bwcaldav/src/org/bedework/caldav/bwserver/PropertyUpdater.java
Log:
Fix category updates via SOAP. Requires a callback to allow creation of category entities.

Modified: trunk/bwcaldav/src/org/bedework/caldav/bwserver/BwSysIntfImpl.java
===================================================================
--- trunk/bwcaldav/src/org/bedework/caldav/bwserver/BwSysIntfImpl.java	2011-07-25 17:19:50 UTC (rev 110)
+++ trunk/bwcaldav/src/org/bedework/caldav/bwserver/BwSysIntfImpl.java	2011-07-26 13:42:26 UTC (rev 111)
@@ -24,9 +24,9 @@
 import org.bedework.caldav.server.CalDavHeaders;
 import org.bedework.caldav.server.Organizer;
 import org.bedework.caldav.server.PropertyHandler;
+import org.bedework.caldav.server.PropertyHandler.PropertyType;
 import org.bedework.caldav.server.SysIntfReader;
 import org.bedework.caldav.server.SysiIcalendar;
-import org.bedework.caldav.server.PropertyHandler.PropertyType;
 import org.bedework.caldav.server.sysinterface.CalPrincipalInfo;
 import org.bedework.caldav.server.sysinterface.RetrievalMode;
 import org.bedework.caldav.server.sysinterface.SysIntf;
@@ -45,8 +45,8 @@
 import org.bedework.calfacade.BwSystem;
 import org.bedework.calfacade.BwUser;
 import org.bedework.calfacade.RecurringRetrievalMode;
+import org.bedework.calfacade.RecurringRetrievalMode.Rmode;
 import org.bedework.calfacade.ScheduleResult;
-import org.bedework.calfacade.RecurringRetrievalMode.Rmode;
 import org.bedework.calfacade.ScheduleResult.ScheduleRecipientResult;
 import org.bedework.calfacade.configs.DbConfig;
 import org.bedework.calfacade.exc.CalFacadeAccessException;
@@ -61,8 +61,8 @@
 import org.bedework.icalendar.IcalMalformedException;
 import org.bedework.icalendar.IcalTranslator;
 import org.bedework.icalendar.Icalendar;
+import org.bedework.icalendar.Icalendar.TimeZoneInfo;
 import org.bedework.icalendar.VFreeUtil;
-import org.bedework.icalendar.Icalendar.TimeZoneInfo;
 import org.bedework.sysevents.events.HttpEvent;
 import org.bedework.sysevents.events.HttpOutEvent;
 import org.bedework.sysevents.events.SysEvent.SysCode;
@@ -74,14 +74,14 @@
 import edu.rpi.cct.webdav.servlet.shared.WebdavException;
 import edu.rpi.cct.webdav.servlet.shared.WebdavForbidden;
 import edu.rpi.cct.webdav.servlet.shared.WebdavNotFound;
+import edu.rpi.cct.webdav.servlet.shared.WebdavNsNode.PropertyTagEntry;
 import edu.rpi.cct.webdav.servlet.shared.WebdavProperty;
-import edu.rpi.cct.webdav.servlet.shared.WebdavNsNode.PropertyTagEntry;
 import edu.rpi.cmt.access.AccessPrincipal;
 import edu.rpi.cmt.access.Acl;
 import edu.rpi.cmt.access.Acl.CurrentAccess;
 import edu.rpi.cmt.calendar.IcalDefs;
+import edu.rpi.cmt.calendar.IcalDefs.IcalComponentType;
 import edu.rpi.cmt.calendar.XcalUtil;
-import edu.rpi.cmt.calendar.IcalDefs.IcalComponentType;
 import edu.rpi.sss.util.xml.XmlEmit;
 import edu.rpi.sss.util.xml.XmlUtil;
 import edu.rpi.sss.util.xml.tagdefs.CaldavTags;
@@ -636,7 +636,8 @@
         return new UpdateResult("No updates");
       }
 
-      UpdateResult ur = new BwUpdates().updateEvent(ei, updates);
+      UpdateResult ur = new BwUpdates().updateEvent(ei, updates,
+                                                    getSvci().getIcalCallback());
       if (!ur.getOk()) {
         getSvci().rollbackTransaction();
         return ur;

Modified: trunk/bwcaldav/src/org/bedework/caldav/bwserver/BwUpdates.java
===================================================================
--- trunk/bwcaldav/src/org/bedework/caldav/bwserver/BwUpdates.java	2011-07-25 17:19:50 UTC (rev 110)
+++ trunk/bwcaldav/src/org/bedework/caldav/bwserver/BwUpdates.java	2011-07-26 13:42:26 UTC (rev 111)
@@ -26,6 +26,7 @@
 import org.bedework.calfacade.exc.CalFacadeException;
 import org.bedework.calfacade.svc.EventInfo;
 import org.bedework.calfacade.util.ChangeTable;
+import org.bedework.icalendar.IcalCallback;
 
 import edu.rpi.cct.webdav.servlet.shared.WebdavException;
 import edu.rpi.cmt.calendar.IcalDefs;
@@ -69,6 +70,8 @@
 
   protected transient Logger log;
 
+  protected IcalCallback cb;
+
   private static Map<QName, Integer> entTypes = new HashMap<QName, Integer>();
 
   static {
@@ -173,7 +176,10 @@
    * @throws WebdavException
    */
   public UpdateResult updateEvent(final EventInfo ei,
-                                  final List<SelectElementType> updates) throws WebdavException {
+                                  final List<SelectElementType> updates,
+                                  final IcalCallback cb) throws WebdavException {
+    this.cb = cb;
+
     try {
       if (updates == null) {
         return new UpdateResult("No updates");
@@ -446,7 +452,7 @@
 
       for (JAXBElement<? extends BaseUpdateType> el: chSel.getBaseUpdate()) {
         UpdateInfo ui = new UpdateInfo();
-        UpdateResult ur = ui.setUpdate(el.getValue(), pname);
+        UpdateResult ur = ui.setUpdate(el.getValue(), pname,cb);
 
         if (ur != null) {
           return ur;
@@ -484,7 +490,7 @@
       }
 
       UpdateInfo ui = new UpdateInfo();
-      UpdateResult ur = ui.setUpdate(but, pname);
+      UpdateResult ur = ui.setUpdate(but, pname, cb);
 
       if (ur != null) {
         return ur;
@@ -496,6 +502,12 @@
       }
     }
 
+    try {
+      chg.processChanges(ei.getEvent(), true);
+    } catch (CalFacadeException cfe) {
+      throw new WebdavException(cfe);
+    }
+
     return UpdateResult.getOkResult();
   }
 
@@ -526,12 +538,16 @@
 
     private QName propName;
 
+    private IcalCallback cb;
+
     UpdateInfo() {
     }
 
     UpdateResult setUpdate(final BaseUpdateType but,
-                                  final QName pname) {
+                           final QName pname,
+                           final IcalCallback cb) {
       propName = pname;
+      this.cb = cb;
 
       if (but instanceof AddType) {
         add = true;
@@ -592,6 +608,10 @@
     public QName getPropName() {
       return propName;
     }
+
+    public IcalCallback getIcalCallback() {
+      return cb;
+    }
   }
 
   /**
@@ -691,7 +711,7 @@
   private static class CategoryPropUpdater implements PropertyUpdater {
     public UpdateResult applyUpdate(final EventInfo ei,
                                     final UpdateInfo ui,
-                                    final ChangeTable chg) {
+                                    final ChangeTable chg) throws WebdavException {
       BwEvent ev = ei.getEvent();
       TextListPropertyType cats = (TextListPropertyType)ui.getUpdprop();
       List<String> ss = cats.getText();
@@ -714,6 +734,12 @@
         if (cat == null) {
           cat = BwCategory.makeCategory();
           cat.setWord(key);
+
+          try {
+            ui.getIcalCallback().addCategory(cat);
+          } catch (CalFacadeException cfe) {
+            throw new WebdavException(cfe);
+          }
         }
 
         chg.addValue(ui.getPropName().getLocalPart(), cat);

Modified: trunk/bwcaldav/src/org/bedework/caldav/bwserver/PropertyUpdater.java
===================================================================
--- trunk/bwcaldav/src/org/bedework/caldav/bwserver/PropertyUpdater.java	2011-07-25 17:19:50 UTC (rev 110)
+++ trunk/bwcaldav/src/org/bedework/caldav/bwserver/PropertyUpdater.java	2011-07-26 13:42:26 UTC (rev 111)
@@ -21,7 +21,10 @@
 import org.bedework.caldav.server.sysinterface.SysIntf.UpdateResult;
 import org.bedework.calfacade.svc.EventInfo;
 import org.bedework.calfacade.util.ChangeTable;
+import org.bedework.icalendar.IcalCallback;
 
+import edu.rpi.cct.webdav.servlet.shared.WebdavException;
+
 import org.oasis_open.docs.ns.wscal.calws_soap.NewValueType;
 
 import ietf.params.xml.ns.icalendar_2.BasePropertyType;
@@ -66,15 +69,22 @@
      */
     public BasePropertyType getUpdprop();
 
-    /**
+    /** The returned value may be null if the change is to parameters for
+     * instance or we are deleting the selected value
+     *
      * @return newValue
      */
     public NewValueType getNewValue();
 
     /**
-     * @return QName for proeprty being updated
+     * @return QName for property being updated
      */
     public QName getPropName();
+
+    /**
+     * @return object allowing callbacktoapi
+     */
+    public IcalCallback getIcalCallback();
   }
 
   /** Update the property in the given calendar object from the information
@@ -84,9 +94,10 @@
    * @param ui - update information
    * @param chg - change table
    * @return UpdateResult - success or failure
+   * @throws WebdavException
    */
   UpdateResult applyUpdate(final EventInfo ei,
                            final UpdateInfo ui,
-                           final ChangeTable chg);
+                           final ChangeTable chg) throws WebdavException;
 
 }



More information about the Bedework-commit mailing list