[Bedework-commit] caldav r466 - in trunk: server/src/org/bedework/caldav/server server/src/org/bedework/caldav/server/calquery server/src/org/bedework/caldav/server/get server/src/org/bedework/caldav/server/sysinterface util/src/org/bedework/caldav/util

svnadmin at bedework.org svnadmin at bedework.org
Wed Sep 15 11:05:11 EDT 2010


Author: douglm
Date: 2010-09-15 11:05:09 -0400 (Wed, 15 Sep 2010)
New Revision: 466

Modified:
   trunk/server/src/org/bedework/caldav/server/CaldavBWIntf.java
   trunk/server/src/org/bedework/caldav/server/CaldavCalNode.java
   trunk/server/src/org/bedework/caldav/server/CaldavComponentNode.java
   trunk/server/src/org/bedework/caldav/server/CaldavReportMethod.java
   trunk/server/src/org/bedework/caldav/server/CaldavResourceNode.java
   trunk/server/src/org/bedework/caldav/server/PostMethod.java
   trunk/server/src/org/bedework/caldav/server/calquery/CalendarData.java
   trunk/server/src/org/bedework/caldav/server/calquery/FreeBusyQuery.java
   trunk/server/src/org/bedework/caldav/server/get/WebcalGetHandler.java
   trunk/server/src/org/bedework/caldav/server/sysinterface/SysIntf.java
   trunk/util/src/org/bedework/caldav/util/CalDAVConfig.java
Log:
Pay some attention to the ACCEPT values or the data type in the calendar-data element. Allow for different default content-types for caldav and web service.

Implement generation of XML and produce that when appropriate

Modified: trunk/server/src/org/bedework/caldav/server/CaldavBWIntf.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavBWIntf.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/CaldavBWIntf.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -626,7 +626,7 @@
 
       /* ===================  Try for calendar fetch ======================= */
 
-      if ((accept != null) &&
+      if (node.isCollection() && (accept != null) &&
           "text/calendar".equals(accept.trim())) {
         GetHandler handler = new WebcalGetHandler(this);
         RequestPars pars = new RequestPars(req, this, getResourceUri(req));
@@ -651,10 +651,9 @@
       }
 
       Content c = new Content();
+      c.written = true;
 
-      c.rdr = node.getContent();
-      c.contentType = node.getContentType();
-      c.contentLength = node.getContentLen();
+      node.writeContent(null, resp.getWriter(), accept);
 
       return c;
     } catch (WebdavException we) {
@@ -1030,7 +1029,7 @@
           xml.newline();
           xml.value("       "); // Just to indent
           xml.attribute("href", cn.getUrlValue());
-          xml.endTag();
+          xml.endOpeningTag();
           xml.newline();
 
           for (PropertyTagXrdEntry pxe: node.getXrdNames()) {
@@ -1409,7 +1408,6 @@
         }
 
         CalendarData caldata = (CalendarData)pr;
-        String content = null;
 
         if (debug) {
           trace("do CalendarData for " + node.getUri());
@@ -1417,24 +1415,21 @@
 
         int status = HttpServletResponse.SC_OK;
         try {
-          content = caldata.process(node);
+          /* Output the (transformed) node.
+           */
+
+          xml.openTagNoNewline(CaldavTags.calendarData);
+          caldata.process(node, xml);
+          xml.closeTagNoblanks(CaldavTags.calendarData);
+
+          return true;
         } catch (WebdavException wde) {
           status = wde.getStatusCode();
           if (debug && (status != HttpServletResponse.SC_NOT_FOUND)) {
             error(wde);
           }
-        }
-
-        if (status != HttpServletResponse.SC_OK) {
-          // XXX should be passing status back
           return false;
         }
-
-        /* Output the (transformed) node.
-         */
-
-        xml.cdataProperty(CaldavTags.calendarData, content);
-        return true;
       }
 
       if (tag.equals(CaldavTags.maxAttendeesPerInstance)) {

Modified: trunk/server/src/org/bedework/caldav/server/CaldavCalNode.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavCalNode.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/CaldavCalNode.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -28,6 +28,7 @@
 
 import org.bedework.caldav.server.sysinterface.CalPrincipalInfo;
 import org.bedework.caldav.server.sysinterface.SysIntf;
+import org.bedework.caldav.server.sysinterface.SysIntf.MethodEmitted;
 
 import edu.rpi.cct.webdav.servlet.shared.WdEntity;
 import edu.rpi.cct.webdav.servlet.shared.WebdavBadRequest;
@@ -46,10 +47,9 @@
 import edu.rpi.sss.util.xml.tagdefs.CaldavTags;
 import edu.rpi.sss.util.xml.tagdefs.WebdavTags;
 
-import net.fortuna.ical4j.model.Calendar;
-
 import org.w3c.dom.Element;
 
+import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -62,12 +62,10 @@
  *   @author Mike Douglass   douglm at rpi.edu
  */
 public class CaldavCalNode extends CaldavBwNode {
-  private Calendar ical;
+  private CalDAVEvent ical;
 
   private AccessPrincipal owner;
 
-  private String vfreeBusyString;
-
   private CurrentAccess currentAccess;
 
   private final static HashMap<QName, PropertyTagEntry> propertyNames =
@@ -270,16 +268,10 @@
    * @param fbcal
    * @throws WebdavException
    */
-  public void setFreeBusy(final Calendar fbcal) throws WebdavException {
+  public void setFreeBusy(final CalDAVEvent fbcal) throws WebdavException {
     try {
       ical = fbcal;
 
-      if (ical != null) {
-        vfreeBusyString = ical.toString();
-      } else {
-        vfreeBusyString = null;
-      }
-
       allowsGet = true;
     } catch (Throwable t) {
       if (debug) {
@@ -289,6 +281,29 @@
     }
   }
 
+  @Override
+  public boolean writeContent(final XmlEmit xml,
+                              final Writer wtr,
+                              final String contentType) throws WebdavException {
+    try {
+      Collection<CalDAVEvent> evs = new ArrayList<CalDAVEvent>();
+
+      evs.add(ical);
+
+      getSysi().writeCalendar(evs,
+                              MethodEmitted.noMethod,
+                              xml,
+                              wtr,
+                              contentType);
+    } catch (WebdavException we) {
+      throw we;
+    } catch (Throwable t) {
+      throw new WebdavException(t);
+    }
+
+    return true;
+  }
+
   /* (non-Javadoc)
    * @see edu.rpi.cct.webdav.servlet.shared.WebdavNsNode#getContentString()
    */
@@ -300,7 +315,7 @@
       return null;
     }
 
-    return vfreeBusyString;
+    return ical.toString();
   }
 
   /* (non-Javadoc)
@@ -331,11 +346,13 @@
    */
   @Override
   public long getContentLen() throws WebdavException {
-    if (vfreeBusyString != null) {
-      return vfreeBusyString.length();
+    String s = getContentString();
+
+    if (s == null) {
+      return 0;
     }
 
-    return 0;
+    return s.getBytes().length;
   }
 
   /* (non-Javadoc)
@@ -343,7 +360,7 @@
    */
   @Override
   public String getContentType() throws WebdavException {
-    if (vfreeBusyString != null) {
+    if (ical != null) {
       return "text/calendar; charset=UTF-8";
     }
 

Modified: trunk/server/src/org/bedework/caldav/server/CaldavComponentNode.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavComponentNode.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/CaldavComponentNode.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -26,6 +26,7 @@
 package org.bedework.caldav.server;
 
 import org.bedework.caldav.server.sysinterface.SysIntf;
+import org.bedework.caldav.server.sysinterface.SysIntf.MethodEmitted;
 
 import edu.rpi.cct.webdav.servlet.shared.WebdavException;
 import edu.rpi.cct.webdav.servlet.shared.WebdavNsIntf;
@@ -44,6 +45,7 @@
 
 import org.w3c.dom.Element;
 
+import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -441,6 +443,38 @@
   */
 
   @Override
+  public boolean writeContent(final XmlEmit xml,
+                              final Writer wtr,
+                              final String contentType) throws WebdavException {
+    try {
+      Collection<CalDAVEvent> evs = new ArrayList<CalDAVEvent>();
+
+      evs.add(event);
+
+      MethodEmitted method;
+
+      if ((col.getCalType() == CalDAVCollection.calTypeInbox) ||
+      (col.getCalType() == CalDAVCollection.calTypeOutbox)) {
+        method = MethodEmitted.eventMethod;
+      } else {
+        method = MethodEmitted.noMethod;
+      }
+
+      getSysi().writeCalendar(evs,
+                              method,
+                              xml,
+                              wtr,
+                              contentType);
+    } catch (WebdavException we) {
+      throw we;
+    } catch (Throwable t) {
+      throw new WebdavException(t);
+    }
+
+    return true;
+  }
+
+  @Override
   public String getContentString() throws WebdavException {
     getIcal(); // init content
 

Modified: trunk/server/src/org/bedework/caldav/server/CaldavReportMethod.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavReportMethod.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/CaldavReportMethod.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -44,7 +44,6 @@
 import edu.rpi.cct.webdav.servlet.shared.WebdavNsNode;
 import edu.rpi.cct.webdav.servlet.shared.WebdavProperty;
 import edu.rpi.cct.webdav.servlet.shared.WebdavStatusCode;
-import edu.rpi.cct.webdav.servlet.shared.WebdavNsIntf.Content;
 import edu.rpi.sss.util.Util;
 import edu.rpi.sss.util.xml.XmlUtil;
 import edu.rpi.sss.util.xml.tagdefs.CaldavTags;
@@ -55,9 +54,7 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import java.io.Reader;
 import java.io.StringReader;
-import java.io.Writer;
 import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -580,8 +577,17 @@
       throw new WebdavBadRequest();
     }
 
-    intf.getFreeBusy((CaldavCalNode)node, freeBusy, defaultDepth(depth, 0));
+    CaldavCalNode cnode = (CaldavCalNode)node;
+    intf.getFreeBusy(cnode, freeBusy, defaultDepth(depth, 0));
+    resp.setContentLength(-1);
 
+    try {
+      cnode.writeContent(null, resp.getWriter(), "text/calendar");
+    } catch (Throwable t) {
+      throw new WebdavException(t);
+    }
+
+    /*
     Writer out;
     try {
       out = resp.getWriter();
@@ -590,7 +596,7 @@
     }
 
     /** Get the content now to set up length, type etc.
-     */
+     * /
     Content c = getNsIntf().getContent(req, resp, node);
     if ((c == null) || (c.rdr == null)) {
       if (debug) {
@@ -607,12 +613,13 @@
 
       writeContent(c.rdr, out);
     }
+    */
   }
 
   // XXX Make the following part of the interface.
 
   /** size of buffer used for copying content to response.
-   */
+   * /
   private static final int bufferSize = 4096;
 
   private void writeContent(final Reader in, final Writer out)
@@ -640,6 +647,6 @@
         out.close();
       } catch (Throwable t) {}
     }
-  }
+  }*/
 }
 

Modified: trunk/server/src/org/bedework/caldav/server/CaldavResourceNode.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/CaldavResourceNode.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/CaldavResourceNode.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -32,10 +32,12 @@
 import edu.rpi.cmt.access.PrivilegeDefs;
 import edu.rpi.cmt.access.Acl.CurrentAccess;
 import edu.rpi.sss.util.DateTimeUtil;
+import edu.rpi.sss.util.xml.XmlEmit;
 
 import org.w3c.dom.Element;
 
 import java.io.InputStream;
+import java.io.Writer;
 
 import javax.xml.namespace.QName;
 
@@ -277,6 +279,13 @@
    *                   Required webdav properties
    * ==================================================================== */
 
+  @Override
+  public boolean writeContent(final XmlEmit xml,
+                              final Writer wtr,
+                              final String contentType) throws WebdavException {
+    return false;
+  }
+
   /* (non-Javadoc)
    * @see edu.rpi.cct.webdav.servlet.shared.WebdavNsNode#getContentBinary()
    */

Modified: trunk/server/src/org/bedework/caldav/server/PostMethod.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/PostMethod.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/PostMethod.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -41,6 +41,7 @@
 import edu.rpi.cmt.calendar.IcalDefs.IcalComponentType;
 import edu.rpi.sss.util.xml.tagdefs.CaldavTags;
 import edu.rpi.sss.util.xml.tagdefs.WebdavTags;
+import edu.rpi.sss.util.xml.tagdefs.XcalTags;
 
 import java.io.Reader;
 import java.util.Collection;
@@ -72,9 +73,15 @@
     /** */
     public String resourceUri;
 
+    /** from accept header */
+    public String acceptType;
+
+    /** type of request body */
     String contentType;
-    String[] contentTypePars;
 
+    /** Broken out content type */
+    public String[] contentTypePars;
+
     /** value of the Originator header */
     public String originator;
 
@@ -117,6 +124,8 @@
 
       CalDAVConfig conf = intf.getConfig();
 
+      acceptType = req.getHeader("ACCEPT");
+
       contentType = req.getContentType();
 
       if (contentType != null) {
@@ -456,7 +465,8 @@
       */
 
       /* (CALDAV:supported-calendar-data) */
-      if (!pars.contentTypePars[0].equals("text/calendar")) {
+      if (!pars.contentTypePars[0].equals("text/calendar") &&
+          !pars.contentTypePars[0].equals(XcalTags.mimetype)) {
         if (debug) {
           debugMsg("Bad content type: " + pars.contentType);
         }

Modified: trunk/server/src/org/bedework/caldav/server/calquery/CalendarData.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/calquery/CalendarData.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/calquery/CalendarData.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -32,27 +32,29 @@
 import edu.rpi.cct.webdav.servlet.shared.WebdavException;
 import edu.rpi.cct.webdav.servlet.shared.WebdavNsNode;
 import edu.rpi.cct.webdav.servlet.shared.WebdavProperty;
+import edu.rpi.sss.util.xml.XmlEmit;
 import edu.rpi.sss.util.xml.XmlUtil;
 import edu.rpi.sss.util.xml.tagdefs.CaldavTags;
 
-
-import java.util.Collection;
-import java.util.Iterator;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.namespace.QName;
-
 import net.fortuna.ical4j.model.Calendar;
 import net.fortuna.ical4j.model.Component;
 import net.fortuna.ical4j.model.ComponentList;
-import net.fortuna.ical4j.model.component.VEvent;
 import net.fortuna.ical4j.model.Property;
 import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.component.VEvent;
 
 import org.apache.log4j.Logger;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
+
 /** Class to represent a calendar-query calendar-data element
  *
  *   @author Mike Douglass   douglm at rpi.edu
@@ -152,8 +154,8 @@
    * @param tag  QName name
    * @param debug
    */
-  public CalendarData(QName tag,
-                      boolean debug) {
+  public CalendarData(final QName tag,
+                      final boolean debug) {
     super(tag, null);
     this.debug = debug;
   }
@@ -198,7 +200,7 @@
    * @param nd
    * @throws WebdavException
    */
-  public void parse(Node nd) throws WebdavException {
+  public void parse(final Node nd) throws WebdavException {
     /* Either empty - show everything or
               comp + optional (expand-recurrence-set or
                                limit-recurrence-set)
@@ -272,18 +274,20 @@
   /** Given the CaldavBwNode, returns the transformed content.
    *
    * @param wdnode
-   * @return String content
+   * @param xml
    * @throws WebdavException
    */
-  public String process(WebdavNsNode wdnode) throws WebdavException {
+  public void process(final WebdavNsNode wdnode,
+                      final XmlEmit xml) throws WebdavException {
     if (!(wdnode instanceof CaldavComponentNode)) {
-      return null;
+      return;
     }
 
     CaldavComponentNode node = (CaldavComponentNode)wdnode;
 
     if (comp == null) {
-      return node.getContentString();
+      node.writeContent(xml, null, returnContentType);
+      return;
     }
 
     /** Ensure node exists */
@@ -298,7 +302,8 @@
     }
 
     if (comp.getAllcomp()) {
-      return node.getContentString();
+      node.writeContent(xml, null, returnContentType);
+      return;
     }
 
     // Assume all properties for that level.
@@ -313,23 +318,29 @@
 
       if ("VEVENT".equals(subcomp.getName())) {
         if (subcomp.getAllprop()) {
-          return node.getContentString();
+          node.writeContent(xml, null, returnContentType);
+          return;
         }
 
-        return transformVevent(node.getIcal(), subcomp.getProps());
+        try {
+          xml.cdataValue(transformVevent(node.getIcal(), subcomp.getProps()));
+        } catch (IOException ioe) {
+          throw new WebdavException(ioe);
+        }
+        return;
       }
     }
 
     // No special instructions.
 
-    return node.getContentString();
+    node.writeContent(xml, null, returnContentType);
   }
 
   /* Transform one or more VEVENT objects based on a list of required
    * properties.
    */
-  private String transformVevent(Calendar ical,
-                                 Collection<Prop> props)  throws WebdavException {
+  private String transformVevent(final Calendar ical,
+                                 final Collection<Prop> props)  throws WebdavException {
     try {
       Calendar nical = new Calendar();
       PropertyList pl = ical.getProperties();
@@ -384,7 +395,7 @@
    *                   Private parsing methods
    * ==================================================================== */
 
-  private Comp parseComp(Node nd) throws WebdavException {
+  private Comp parseComp(final Node nd) throws WebdavException {
     /* Either allcomp + (either allprop or 0 or more prop) or
               0 or more comp + (either allprop or 0 or more prop)
      */
@@ -443,7 +454,7 @@
     return c;
   }
 
-  private Prop parseProp(Node nd) throws WebdavException {
+  private Prop parseProp(final Node nd) throws WebdavException {
     NamedNodeMap nnm = nd.getAttributes();
 
     if ((nnm == null) || (nnm.getLength() == 0)) {
@@ -476,7 +487,7 @@
     return pr;
   }
 
-  private Element[] getChildren(Node nd) throws WebdavException {
+  private Element[] getChildren(final Node nd) throws WebdavException {
     try {
       return XmlUtil.getElementsArray(nd);
     } catch (Throwable t) {
@@ -523,7 +534,7 @@
    * @return String
    * @throws WebdavException
    */
-  public String getOnlyAttrVal(Node nd, String name) throws WebdavException {
+  public String getOnlyAttrVal(final Node nd, final String name) throws WebdavException {
     NamedNodeMap nnm = nd.getAttributes();
 
     if ((nnm == null) || (nnm.getLength() != 1)) {
@@ -579,15 +590,15 @@
     return log;
   }
 
-  protected void debugMsg(String msg) {
+  protected void debugMsg(final String msg) {
     getLogger().debug(msg);
   }
 
-  protected void logIt(String msg) {
+  protected void logIt(final String msg) {
     getLogger().info(msg);
   }
 
-  protected void trace(String msg) {
+  protected void trace(final String msg) {
     getLogger().debug(msg);
   }
 }

Modified: trunk/server/src/org/bedework/caldav/server/calquery/FreeBusyQuery.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/calquery/FreeBusyQuery.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/calquery/FreeBusyQuery.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -26,6 +26,7 @@
 package org.bedework.caldav.server.calquery;
 
 import org.bedework.caldav.server.CalDAVCollection;
+import org.bedework.caldav.server.CalDAVEvent;
 import org.bedework.caldav.server.sysinterface.SysIntf;
 import org.bedework.caldav.util.ParseUtil;
 import org.bedework.caldav.util.TimeRange;
@@ -35,8 +36,6 @@
 import edu.rpi.sss.util.xml.XmlUtil;
 import edu.rpi.sss.util.xml.tagdefs.CaldavTags;
 
-import net.fortuna.ical4j.model.Calendar;
-
 import org.apache.log4j.Logger;
 import org.w3c.dom.Node;
 
@@ -93,8 +92,8 @@
    * @return BwEvent
    * @throws WebdavException
    */
-  public Calendar getFreeBusy(final SysIntf sysi, final CalDAVCollection col,
-                             final int depth) throws WebdavException {
+  public CalDAVEvent getFreeBusy(final SysIntf sysi, final CalDAVCollection col,
+                                 final int depth) throws WebdavException {
     try {
       return sysi.getFreeBusy(col, depth, timeRange);
     } catch (WebdavException wde) {

Modified: trunk/server/src/org/bedework/caldav/server/get/WebcalGetHandler.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/get/WebcalGetHandler.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/get/WebcalGetHandler.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -30,13 +30,14 @@
 import org.bedework.caldav.server.CaldavComponentNode;
 import org.bedework.caldav.server.PostMethod.RequestPars;
 import org.bedework.caldav.server.sysinterface.SystemProperties;
+import org.bedework.caldav.server.sysinterface.SysIntf.MethodEmitted;
 import org.bedework.caldav.util.ParseUtil;
 import org.bedework.caldav.util.TimeRange;
 
 import edu.rpi.cct.webdav.servlet.shared.WebdavException;
 import edu.rpi.cct.webdav.servlet.shared.WebdavNsIntf;
 import edu.rpi.cct.webdav.servlet.shared.WebdavNsNode;
-import edu.rpi.cmt.calendar.ScheduleMethods;
+import edu.rpi.sss.util.xml.tagdefs.XcalTags;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -115,13 +116,29 @@
       }
 
 
+      String suffix;
+      String acceptType = pars.acceptType;
+      if (acceptType == null) {
+        acceptType = getSysi().getDefaultContentType();
+      }
+
+      if (acceptType.equals(XcalTags.mimetype)) {
+        // No charset
+        resp.setContentType(acceptType);
+        suffix = ".xcs";
+      } else {
+        resp.setContentType(acceptType + "; charset=UTF-8");
+        suffix = ".ics";
+      }
+
       resp.setHeader("Content-Disposition",
                      "Attachment; Filename=\"" +
-                     node.getDisplayname() + ".ics\"");
-      resp.setContentType("text/calendar; charset=UTF-8");
+                     node.getDisplayname() + suffix + "\"");
 
-      getSysi().writeCalendar(evs, ScheduleMethods.methodTypePublish,
-                              resp.getWriter());
+      getSysi().writeCalendar(evs, MethodEmitted.publish,
+                              null,
+                              resp.getWriter(),
+                              acceptType);
     } catch (WebdavException wde) {
       throw wde;
     } catch (Throwable t) {

Modified: trunk/server/src/org/bedework/caldav/server/sysinterface/SysIntf.java
===================================================================
--- trunk/server/src/org/bedework/caldav/server/sysinterface/SysIntf.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/server/src/org/bedework/caldav/server/sysinterface/SysIntf.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -44,6 +44,7 @@
 import edu.rpi.cmt.access.Acl;
 import edu.rpi.cmt.access.Acl.CurrentAccess;
 import edu.rpi.cmt.calendar.ScheduleStates;
+import edu.rpi.sss.util.xml.XmlEmit;
 
 import net.fortuna.ical4j.model.Calendar;
 
@@ -85,6 +86,13 @@
    */
   public SystemProperties getSystemProperties() throws WebdavException;
 
+  /** Return default content type for this service.
+   *
+   * @return String - never null.
+   * @throws WebdavException
+   */
+  public String getDefaultContentType() throws WebdavException;
+
   /** Return the current principal
    *
    * @return String
@@ -384,12 +392,12 @@
    * @param col
    * @param depth
    * @param timeRange
-   * @return Calendar
+   * @return CalDAVEvent - as a freebusy entity
    * @throws WebdavException
    */
-  public Calendar getFreeBusy(final CalDAVCollection col,
-                              final int depth,
-                              final TimeRange timeRange) throws WebdavException;
+  public CalDAVEvent getFreeBusy(final CalDAVCollection col,
+                                 final int depth,
+                                 final TimeRange timeRange) throws WebdavException;
 
   /** Check the access for the given entity. Returns the current access
    * or null or optionally throws a no access exception.
@@ -612,16 +620,32 @@
    */
   public String toIcalString(Calendar cal) throws WebdavException;
 
+  /** What method do we want emitted */
+  public static enum MethodEmitted {
+    /** No method for calendar */
+    noMethod,
+
+    /** Method from event */
+    eventMethod,
+
+    /** It's a publish */
+    publish
+  }
+
   /** Write a collection of events as an ical calendar.
    *
    * @param evs
-   * @param method
-   * @param wtr
+   * @param method - what scheduling method?
+   * @param xml - if this is embedded in an xml stream
+   * @param wtr - if standalone output or no xml stream initialized.
+   * @param contentType
    * @throws WebdavException
    */
   public void writeCalendar(Collection<CalDAVEvent> evs,
-                            int method,
-                            Writer wtr) throws WebdavException;
+                            MethodEmitted method,
+                            XmlEmit xml,
+                            Writer wtr,
+                            String contentType) throws WebdavException;
 
   /** Expected result type */
   public enum IcalResultType {

Modified: trunk/util/src/org/bedework/caldav/util/CalDAVConfig.java
===================================================================
--- trunk/util/src/org/bedework/caldav/util/CalDAVConfig.java	2010-09-09 14:24:11 UTC (rev 465)
+++ trunk/util/src/org/bedework/caldav/util/CalDAVConfig.java	2010-09-15 15:05:09 UTC (rev 466)
@@ -54,6 +54,8 @@
   /* Set at server init */
   private boolean calWS;
 
+  private boolean timezonesByReference;
+
   /**
    * @param val
    */
@@ -168,6 +170,10 @@
    */
   public void setCalWS(final boolean val) {
     calWS = val;
+
+    if (val) {
+      setTimezonesByReference(true);
+    }
   }
 
   /**
@@ -176,4 +182,18 @@
   public boolean getCalWS() {
     return calWS;
   }
+
+  /**
+   * @param val boolean true if we are not including the full tz specification..
+   */
+  public void setTimezonesByReference(final boolean val) {
+    timezonesByReference = val;
+  }
+
+  /**
+   * @return true if we are not including the full tz specification
+   */
+  public boolean getTimezonesByReference() {
+    return timezonesByReference;
+  }
 }



More information about the Bedework-commit mailing list