[Bedework-commit] caldav r127 - trunk/server/src/org/bedework/caldav/server

svnadmin at bedework.org svnadmin at bedework.org
Thu Mar 15 21:36:43 EDT 2007


Author: douglm
Date: 2007-03-15 21:36:41 -0400 (Thu, 15 Mar 2007)
New Revision: 127

Modified:
   trunk/server/src/org/bedework/caldav/server/CaldavBWIntf.java
   trunk/server/src/org/bedework/caldav/server/CaldavBwNode.java
   trunk/server/src/org/bedework/caldav/server/CaldavCalNode.java
   trunk/server/src/org/bedework/caldav/server/CaldavReportMethod.java
   trunk/server/src/org/bedework/caldav/server/SysIntf.java
Log:
Partial fixes to enable storing of freebusy information

Modified: trunk/server/src/org/bedework/caldav/server/CaldavBWIntf.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavBWIntf.java	2007-03-15 03:16:47 UTC (rev 126)
+++ trunk/server/src/org/bedework/caldav/server/CaldavBWIntf.java	2007-03-16 01:36:41 UTC (rev 127)
@@ -95,6 +95,7 @@
 import edu.rpi.cmt.access.WhoDefs;
 import edu.rpi.cmt.access.Acl.CurrentAccess;
 import edu.rpi.sss.util.xml.QName;
+import edu.rpi.sss.util.xml.XmlEmit;
 
 import net.fortuna.ical4j.model.TimeZone;
 
@@ -254,8 +255,11 @@
     return true;
   }
 
-  public void addNamespace() throws WebdavException {
-    super.addNamespace();
+  /* (non-Javadoc)
+   * @see edu.rpi.cct.webdav.servlet.shared.WebdavNsIntf#addNamespace(edu.rpi.sss.util.xml.XmlEmit)
+   */
+  public void addNamespace(XmlEmit xml) throws WebdavException {
+    super.addNamespace(xml);
 
     try {
       xml.addNs(CaldavDefs.caldavNamespace);
@@ -567,67 +571,24 @@
       pcr.created = create;
 
       CaldavComponentNode bwnode = (CaldavComponentNode)getBwnode(node);
-      String entityName = bwnode.getEntityName();
       BwCalendar cal = bwnode.getCalendar();
 
       Icalendar ic = sysi.fromIcal(cal, new MyReader(contentRdr));
 
       /** We can only put a single resource - that resource will be an ics file
-       * containing an event and possible overrides. The calendar may contain
-       * timezones which we can ignore.
+       * containing freebusy information or an event or todo and possible overrides.
+       * The calendar may contain timezones which we can ignore.
        */
 
       Iterator it = ic.iterator();
-      String guid = null;
       boolean fail = false;
 
       while (it.hasNext()) {
         Object o = it.next();
 
         if (o instanceof EventInfo) {
-          EventInfo evinfo = (EventInfo)o;
-          BwEvent ev = evinfo.getEvent();
-
-          if (guid == null) {
-            guid = ev.getUid();
-          } else if (!guid.equals(ev.getUid())) {
-            fail = true;
-            break;
-          }
-
-          if (debug) {
-            debugMsg("putContent: intf has event with name " + entityName +
-                     " and summary " + ev.getSummary());
-          }
-
-          if (evinfo.getNewEvent()) {
-            pcr.created = true;
-            ev.setName(entityName);
-
-            /* Collection<BwEventProxy>failedOverrides = */
-              sysi.addEvent(cal, ev, evinfo.getOverrideProxies(), true);
-
-            /*StringBuffer sb = new StringBuffer(cdUri.getPath());
-            sb.append("/");
-            sb.append(entityName);
-            if (!entityName.toLowerCase().endsWith(".ics")) {
-              sb.append(".ics");
-            }*/
-
-            bwnode.setEventInfo(evinfo);
-          } else {
-            if (!entityName.equals(ev.getName())) {
-              throw new WebdavBadRequest("Mismatched names");
-            }
-
-            /* XXX check calendar not changed */
-
-            if (debug) {
-              debugMsg("putContent: update event " + ev);
-            }
-            sysi.updateEvent(ev, evinfo.getOverrideProxies(),
-                             evinfo.getChangeset());
-          }
+          pcr.created = putEvent(bwnode, (EventInfo)o);
+        } else if (o instanceof BwFreeBusy) {
         } else {
           fail = true;
           break;
@@ -648,6 +609,49 @@
     }
   }
 
+  private boolean putEvent(CaldavComponentNode bwnode,
+                           EventInfo evinfo) throws WebdavException {
+    BwEvent ev = evinfo.getEvent();
+    String entityName = bwnode.getEntityName();
+    BwCalendar cal = bwnode.getCalendar();
+    boolean created = false;
+
+    if (debug) {
+      debugMsg("putContent: intf has event with name " + entityName +
+               " and summary " + ev.getSummary());
+    }
+
+    if (evinfo.getNewEvent()) {
+      created = true;
+      ev.setName(entityName);
+
+      /* Collection<BwEventProxy>failedOverrides = */
+        sysi.addEvent(cal, ev, evinfo.getOverrideProxies(), true);
+
+      /*StringBuffer sb = new StringBuffer(cdUri.getPath());
+      sb.append("/");
+      sb.append(entityName);
+      if (!entityName.toLowerCase().endsWith(".ics")) {
+        sb.append(".ics");
+      }*/
+
+      bwnode.setEventInfo(evinfo);
+    } else {
+      if (!entityName.equals(ev.getName())) {
+        throw new WebdavBadRequest("Mismatched names");
+      }
+
+      /* XXX check calendar not changed */
+
+      if (debug) {
+        debugMsg("putContent: update event " + ev);
+      }
+      sysi.updateEvent(ev, evinfo.getOverrideProxies(), evinfo.getChangeset());
+    }
+
+    return created;
+  }
+
   /* (non-Javadoc)
    * @see edu.rpi.cct.webdav.servlet.shared.WebdavNsIntf#create(edu.rpi.cct.webdav.servlet.shared.WebdavNsNode)
    */

Modified: trunk/server/src/org/bedework/caldav/server/CaldavBwNode.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavBwNode.java	2007-03-15 03:16:47 UTC (rev 126)
+++ trunk/server/src/org/bedework/caldav/server/CaldavBwNode.java	2007-03-16 01:36:41 UTC (rev 127)
@@ -63,6 +63,13 @@
     }
   }
 
+  CaldavBwNode(boolean collection, SysIntf sysi, boolean debug) {
+    super(sysi.getUrlPrefix(), null, collection, debug);
+
+    //this.cdURI = cdURI;
+    this.sysi = sysi;
+  }
+
   /* ====================================================================
    *                         Public methods
    * ==================================================================== */

Modified: trunk/server/src/org/bedework/caldav/server/CaldavCalNode.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavCalNode.java	2007-03-15 03:16:47 UTC (rev 126)
+++ trunk/server/src/org/bedework/caldav/server/CaldavCalNode.java	2007-03-16 01:36:41 UTC (rev 127)
@@ -118,12 +118,13 @@
 
   /** Place holder for status
    *
+   * @param sysi
    * @param status
    * @param uri
    * @param debug
    */
-  public CaldavCalNode(int status, String uri, boolean debug) {
-    super(null, null, debug);
+  public CaldavCalNode(SysIntf sysi, int status, String uri, boolean debug) {
+    super(true, sysi, debug);
     setStatus(status);
     this.uri = uri;
   }

Modified: trunk/server/src/org/bedework/caldav/server/CaldavReportMethod.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavReportMethod.java	2007-03-15 03:16:47 UTC (rev 126)
+++ trunk/server/src/org/bedework/caldav/server/CaldavReportMethod.java	2007-03-16 01:36:41 UTC (rev 127)
@@ -393,7 +393,8 @@
                                    WebdavNsIntf.existanceMust,
                                    WebdavNsIntf.nodeTypeUnknown));
           } catch (WebdavException we) {
-            nodes.add((WebdavNsNode)new CaldavCalNode(we.getStatusCode(),
+            nodes.add((WebdavNsNode)new CaldavCalNode(intf.getSysi(),
+                                                      we.getStatusCode(),
                                                       intf.getUri(hr), debug));
           }
         }

Modified: trunk/server/src/org/bedework/caldav/server/SysIntf.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/SysIntf.java	2007-03-15 03:16:47 UTC (rev 126)
+++ trunk/server/src/org/bedework/caldav/server/SysIntf.java	2007-03-16 01:36:41 UTC (rev 127)
@@ -325,7 +325,8 @@
                           ChangeTable changes) throws WebdavException;
 
   /** Return the events for the current user in the given calendar within the
-   * given date and time range.
+   * given date and time range. Stored freebusy objects are returned as BwEvent
+   * objects with the appropriate entity type.
    *
    * <p>We flag the desired entity types.
    *
@@ -380,7 +381,9 @@
   public ScheduleResult requestFreeBusy(BwFreeBusy val)
           throws WebdavException;
 
-  /**
+  /** Generate a free busy object for the given time period which reflects
+   * the state of the given calendar.
+   *
    * @param cal
    * @param account
    * @param start



More information about the Bedework-commit mailing list