[Bedework-commit] calendarapi r231 - in trunk: calFacade/src/org/bedework/calfacade icalendar/src/org/bedework/icalendar

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


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

Modified:
   trunk/calFacade/src/org/bedework/calfacade/BwEvent.java
   trunk/calFacade/src/org/bedework/calfacade/BwFreeBusy.java
   trunk/calFacade/src/org/bedework/calfacade/CalFacadeDefs.java
   trunk/icalendar/src/org/bedework/icalendar/BwEventUtil.java
   trunk/icalendar/src/org/bedework/icalendar/IcalTranslator.java
   trunk/icalendar/src/org/bedework/icalendar/Icalendar.java
   trunk/icalendar/src/org/bedework/icalendar/VAlarmUtil.java
   trunk/icalendar/src/org/bedework/icalendar/VEventUtil.java
Log:
Partial fixes to enable storing of freebusy information

Modified: trunk/calFacade/src/org/bedework/calfacade/BwEvent.java
===================================================================
--- trunk/calFacade/src/org/bedework/calfacade/BwEvent.java	2007-03-15 03:16:42 UTC (rev 230)
+++ trunk/calFacade/src/org/bedework/calfacade/BwEvent.java	2007-03-16 01:36:34 UTC (rev 231)
@@ -72,6 +72,7 @@
 import net.fortuna.ical4j.model.property.DtStamp;
 import net.fortuna.ical4j.model.property.LastModified;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.TreeSet;
@@ -470,6 +471,19 @@
 
   private BwRelatedTo relatedTo;
 
+  /* ---------------------------- Temp --------------------------------
+   * As a quick fix we will store freebusy information in one of these.
+   * It avoids many changes to the searching but is not too efficient
+   * space wise.
+   *
+   * Longer term we probably ought to base all the different types of a
+   * single master class.
+   */
+
+  /** Collection of BwFreeBusyComponent
+   */
+  private Collection<BwFreeBusyComponent> freeBusyPeriods;
+
   /** Constructor
    */
   protected BwEvent() {
@@ -1982,9 +1996,44 @@
   }
 
   /* ====================================================================
-   *                   Conveniece methods
+   *                   Free and busy methods
    * ==================================================================== */
 
+  /** set the free busy periods
+   *
+   * @param val     Collection    of BwFreeBusyComponent
+   */
+  public void setFreeBusyPeriods(Collection<BwFreeBusyComponent> val) {
+    freeBusyPeriods = val;
+  }
+
+  /** Get the free busy times
+   *
+   * @return Collection    of BwFreeBusyComponent
+   */
+  public Collection<BwFreeBusyComponent> getFreeBusyPeriods() {
+    return freeBusyPeriods;
+  }
+
+  /** Add a free/busy component
+   *
+   * @param val
+   */
+  public void addFreeBusyPeriod(BwFreeBusyComponent val) {
+    Collection<BwFreeBusyComponent> fbps = getFreeBusyPeriods();
+
+    if (fbps == null) {
+      fbps = new ArrayList<BwFreeBusyComponent>();
+      setFreeBusyPeriods(fbps);
+    }
+
+    fbps.add(val);
+  }
+
+  /* ====================================================================
+   *                   Convenience methods
+   * ==================================================================== */
+
   /** Can this event be moved into the trash or does it have to be deleted?
    *
    * @return boolean

Modified: trunk/calFacade/src/org/bedework/calfacade/BwFreeBusy.java
===================================================================
--- trunk/calFacade/src/org/bedework/calfacade/BwFreeBusy.java	2007-03-15 03:16:42 UTC (rev 230)
+++ trunk/calFacade/src/org/bedework/calfacade/BwFreeBusy.java	2007-03-16 01:36:34 UTC (rev 231)
@@ -57,6 +57,8 @@
 import org.bedework.calfacade.base.CommentedEntity;
 import org.bedework.calfacade.base.ContactedEntity;
 import org.bedework.calfacade.base.StartEndComponent;
+import org.bedework.calfacade.exc.CalFacadeException;
+import org.bedework.calfacade.timezones.CalTimezones;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -112,6 +114,10 @@
 
   private int scheduleState;
 
+  /* ----------------- Not stored in the database ------------------- */
+
+  private boolean newObject;
+
   /** Constructor
    *
    */
@@ -686,6 +692,102 @@
   }
 
   /* ====================================================================
+   *                        Non-db methods
+   * ==================================================================== */
+
+  /** Set the newObject flag
+   *
+   *  @param  val    boolean true if a new object
+   */
+  public void setNewObject(boolean val) {
+    newObject = val;
+  }
+
+  /** Is the object new?
+   *
+   *  @return boolean    true if the object is new
+   */
+  public boolean getNewObject() {
+    return newObject;
+  }
+
+  /* ====================================================================
+   *                        Factory methods
+   * ==================================================================== */
+
+  /** Make a BwEvent object from this object.
+   *
+   * Currently this is not a database object so we can just copy fields into the
+   * new event.
+   *
+   * @param timezones
+   * @return BwEvent
+   * @throws CalFacadeException
+   */
+  public BwEvent fromFreeBusy(CalTimezones timezones) throws CalFacadeException {
+    BwEvent ev = new BwEvent();
+
+    ev.setDtstart(getDtstart());
+    ev.setDtstart(getDtend());
+    ev.setDuration(BwDateTime.makeDuration(getDtstart(), getDtend(),
+                                           timezones).toString());
+
+    ev.setDtstamp(getDtstamp());
+    ev.setUid(getUid());
+
+    ev.setContacts(getContacts());
+
+    ev.setOrganizer(getOrganizer());
+
+    ev.setAttendees(getAttendees());
+
+    ev.setComments(getComments());
+
+    ev.setFreeBusyPeriods(getTimes());
+
+    ev.setScheduleMethod(getScheduleMethod());
+    ev.setOriginator(getOriginator());
+
+    ev.setRecipients(getRecipients()) ;
+
+    ev.setScheduleState(getScheduleState());
+
+    return ev;
+  }
+
+  /** Populate this object from the given event.
+   *
+   * @param ev
+   * @return this object
+   */
+  public BwFreeBusy makeFreeBusy(BwEvent ev) {
+    setDtstart(ev.getDtstart());
+    setDtstart(ev.getDtend());
+
+    setDtstamp(ev.getDtstamp());
+    setUid(ev.getUid());
+
+    setContacts(ev.getContacts());
+
+    setOrganizer(ev.getOrganizer());
+
+    setAttendees(ev.getAttendees());
+
+    setComments(ev.getComments());
+
+    setTimes(ev.getFreeBusyPeriods());
+
+    setScheduleMethod(ev.getScheduleMethod());
+    setOriginator(ev.getOriginator());
+
+    setRecipients(ev.getRecipients()) ;
+
+    setScheduleState(ev.getScheduleState());
+
+    return this;
+  }
+
+  /* ====================================================================
    *                        Object methods
    * ==================================================================== */
 

Modified: trunk/calFacade/src/org/bedework/calfacade/CalFacadeDefs.java
===================================================================
--- trunk/calFacade/src/org/bedework/calfacade/CalFacadeDefs.java	2007-03-15 03:16:42 UTC (rev 230)
+++ trunk/calFacade/src/org/bedework/calfacade/CalFacadeDefs.java	2007-03-16 01:36:34 UTC (rev 231)
@@ -74,6 +74,9 @@
   /** */
   public static final int entityTypeJournal = 3;
 
+  /** */
+  public static final int entityTypeFreeAndBusy = 4;
+
   /** Any object with this key is considered unsaved
    */
   public static final int unsavedItemKey = -1;

Modified: trunk/icalendar/src/org/bedework/icalendar/BwEventUtil.java
===================================================================
--- trunk/icalendar/src/org/bedework/icalendar/BwEventUtil.java	2007-03-15 03:16:42 UTC (rev 230)
+++ trunk/icalendar/src/org/bedework/icalendar/BwEventUtil.java	2007-03-16 01:36:34 UTC (rev 231)
@@ -60,6 +60,7 @@
 import org.bedework.calfacade.BwEvent;
 import org.bedework.calfacade.BwEventObj;
 import org.bedework.calfacade.BwEventProxy;
+import org.bedework.calfacade.BwFreeBusyComponent;
 import org.bedework.calfacade.BwGeo;
 import org.bedework.calfacade.BwLocation;
 import org.bedework.calfacade.BwOrganizer;
@@ -80,14 +81,18 @@
 import net.fortuna.ical4j.model.Dur;
 import net.fortuna.ical4j.model.CategoryList;
 import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Period;
+import net.fortuna.ical4j.model.PeriodList;
 import net.fortuna.ical4j.model.ResourceList;
 import net.fortuna.ical4j.model.component.CalendarComponent;
 import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.component.VFreeBusy;
 import net.fortuna.ical4j.model.component.VJournal;
 import net.fortuna.ical4j.model.component.VToDo;
 import net.fortuna.ical4j.model.Parameter;
 import net.fortuna.ical4j.model.Property;
 import net.fortuna.ical4j.model.parameter.AltRep;
+import net.fortuna.ical4j.model.parameter.FbType;
 import net.fortuna.ical4j.model.parameter.Value;
 import net.fortuna.ical4j.model.property.Attendee;
 import net.fortuna.ical4j.model.property.Categories;
@@ -105,6 +110,7 @@
 import net.fortuna.ical4j.model.property.Duration;
 import net.fortuna.ical4j.model.property.ExDate;
 import net.fortuna.ical4j.model.property.ExRule;
+import net.fortuna.ical4j.model.property.FreeBusy;
 import net.fortuna.ical4j.model.property.Geo;
 import net.fortuna.ical4j.model.property.LastModified;
 import net.fortuna.ical4j.model.property.Location;
@@ -189,6 +195,8 @@
         entityType = CalFacadeDefs.entityTypeTodo;
       } else if (val instanceof VJournal) {
         entityType = CalFacadeDefs.entityTypeJournal;
+      } else if (val instanceof VFreeBusy) {
+        entityType = CalFacadeDefs.entityTypeFreeAndBusy;
       } else {
         throw new CalFacadeException("org.bedework.invalid.component.type",
                                      val.getName());
@@ -468,6 +476,44 @@
           /* ------------------- ExRule -------------------- */
 
           chg.addValue(prop.getName(), pval);
+        } else if (prop instanceof FreeBusy) {
+          /* ------------------- freebusy -------------------- */
+
+          FreeBusy fbusy = (FreeBusy)prop;
+          PeriodList perpl = fbusy.getPeriods();
+          Parameter par = getParameter(fbusy, "FBTYPE");
+          int fbtype;
+
+          if (par == null) {
+            fbtype = BwFreeBusyComponent.typeBusy;
+          } else if (par.equals(FbType.BUSY)) {
+            fbtype = BwFreeBusyComponent.typeBusy;
+          } else if (par.equals(FbType.BUSY_TENTATIVE)) {
+            fbtype = BwFreeBusyComponent.typeBusyTentative;
+          } else if (par.equals(FbType.BUSY_UNAVAILABLE)) {
+            fbtype = BwFreeBusyComponent.typeBusyUnavailable;
+          } else if (par.equals(FbType.FREE)) {
+            fbtype = BwFreeBusyComponent.typeFree;
+          } else {
+            if (debug) {
+              debugMsg("Unsupported parameter " + par.getName());
+            }
+
+            throw new IcalMalformedException("parameter " + par.getName());
+          }
+
+          BwFreeBusyComponent fbc = new BwFreeBusyComponent();
+
+          fbc.setType(fbtype);
+
+          Iterator perit = perpl.iterator();
+          while (perit.hasNext()) {
+            Period per = (Period)perit.next();
+
+            fbc.addPeriod(per);
+          }
+
+          ev.addFreeBusyPeriod(fbc);
         } else if (prop instanceof Geo) {
           /* ------------------- Geo -------------------- */
 

Modified: trunk/icalendar/src/org/bedework/icalendar/IcalTranslator.java
===================================================================
--- trunk/icalendar/src/org/bedework/icalendar/IcalTranslator.java	2007-03-15 03:16:42 UTC (rev 230)
+++ trunk/icalendar/src/org/bedework/icalendar/IcalTranslator.java	2007-03-16 01:36:34 UTC (rev 231)
@@ -55,7 +55,6 @@
 
 import org.bedework.calfacade.BwCalendar;
 import org.bedework.calfacade.BwEvent;
-import org.bedework.calfacade.BwFreeBusy;
 import org.bedework.calfacade.BwUser;
 import org.bedework.calfacade.exc.CalFacadeException;
 import org.bedework.calfacade.svc.EventInfo;
@@ -409,6 +408,7 @@
     Collection<CalendarComponent> clist = orderedComponents(val.getComponents());
     for (CalendarComponent comp: clist) {
       if (comp instanceof VFreeBusy) {
+        /*
         BwFreeBusy fb = BwFreeBusyUtil.toFreeBusy(cb,
                                                   (VFreeBusy)comp,
                                                   debug);
@@ -416,6 +416,12 @@
         if (fb != null) {
           ic.addComponent(fb);
         }
+        */
+        EventInfo ev = BwEventUtil.toEvent(cb, cal, ic, comp, debug);
+
+        if (ev != null) {
+          ic.addComponent(ev);
+        }
       } else if (comp instanceof VTimeZone) {
         ic.addTimeZone(doTimeZone((VTimeZone)comp));
       } else if (comp instanceof VVenue) {

Modified: trunk/icalendar/src/org/bedework/icalendar/Icalendar.java
===================================================================
--- trunk/icalendar/src/org/bedework/icalendar/Icalendar.java	2007-03-15 03:16:42 UTC (rev 230)
+++ trunk/icalendar/src/org/bedework/icalendar/Icalendar.java	2007-03-16 01:36:34 UTC (rev 231)
@@ -347,6 +347,8 @@
         setComponentType(ComponentType.todo);
       } else if (ev.getEntityType() == CalFacadeDefs.entityTypeJournal) {
         setComponentType(ComponentType.journal);
+      } else if (ev.getEntityType() == CalFacadeDefs.entityTypeFreeAndBusy) {
+        setComponentType(ComponentType.freebusy);
       } else {
         throw new RuntimeException("org.bedework.bad.entitytype");
       }

Modified: trunk/icalendar/src/org/bedework/icalendar/VAlarmUtil.java
===================================================================
--- trunk/icalendar/src/org/bedework/icalendar/VAlarmUtil.java	2007-03-15 03:16:42 UTC (rev 230)
+++ trunk/icalendar/src/org/bedework/icalendar/VAlarmUtil.java	2007-03-16 01:36:34 UTC (rev 231)
@@ -105,8 +105,7 @@
       } else if (val instanceof VToDo) {
         als = ((VToDo)val).getAlarms();
       } else {
-        throw new CalFacadeException("org.bedework.invalid.component.type",
-                                     val.getName());
+        return;
       }
 
       if ((als == null) || als.isEmpty()) {

Modified: trunk/icalendar/src/org/bedework/icalendar/VEventUtil.java
===================================================================
--- trunk/icalendar/src/org/bedework/icalendar/VEventUtil.java	2007-03-15 03:16:42 UTC (rev 230)
+++ trunk/icalendar/src/org/bedework/icalendar/VEventUtil.java	2007-03-16 01:36:34 UTC (rev 231)
@@ -58,6 +58,7 @@
 import org.bedework.calfacade.BwCategory;
 import org.bedework.calfacade.BwDateTime;
 import org.bedework.calfacade.BwEvent;
+import org.bedework.calfacade.BwFreeBusyComponent;
 import org.bedework.calfacade.BwGeo;
 import org.bedework.calfacade.BwLocation;
 import org.bedework.calfacade.BwOrganizer;
@@ -71,14 +72,18 @@
 import net.fortuna.ical4j.model.CategoryList;
 import net.fortuna.ical4j.model.component.CalendarComponent;
 import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.component.VFreeBusy;
 import net.fortuna.ical4j.model.component.VJournal;
 import net.fortuna.ical4j.model.component.VToDo;
 import net.fortuna.ical4j.model.DateList;
 import net.fortuna.ical4j.model.DateTime;
 import net.fortuna.ical4j.model.Dur;
 import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.Period;
+import net.fortuna.ical4j.model.PeriodList;
 import net.fortuna.ical4j.model.ResourceList;
 import net.fortuna.ical4j.model.parameter.AltRep;
+import net.fortuna.ical4j.model.parameter.FbType;
 import net.fortuna.ical4j.model.parameter.TzId;
 import net.fortuna.ical4j.model.parameter.Value;
 import net.fortuna.ical4j.model.parameter.XParameter;
@@ -94,6 +99,7 @@
 import net.fortuna.ical4j.model.property.Duration;
 import net.fortuna.ical4j.model.property.ExDate;
 import net.fortuna.ical4j.model.property.ExRule;
+import net.fortuna.ical4j.model.property.FreeBusy;
 import net.fortuna.ical4j.model.property.LastModified;
 import net.fortuna.ical4j.model.property.Location;
 import net.fortuna.ical4j.model.property.Priority;
@@ -145,6 +151,8 @@
         comp = new VToDo(pl);
       } else if (entityType == CalFacadeDefs.entityTypeJournal) {
         comp = new VJournal(pl);
+      } else if (entityType == CalFacadeDefs.entityTypeFreeAndBusy) {
+        comp = new VFreeBusy(pl);
       } else {
         throw new CalFacadeException("org.bedework.invalid.entity.type",
                                      String.valueOf(entityType));
@@ -253,6 +261,38 @@
       /* ------------------- ExDate --below------------ */
       /* ------------------- ExRule --below------------- */
 
+      if (entityType == CalFacadeDefs.entityTypeFreeAndBusy) {
+        Collection<BwFreeBusyComponent> fbps = val.getFreeBusyPeriods();
+
+        if (fbps != null) {
+          for (BwFreeBusyComponent fbc: fbps) {
+            FreeBusy fb = new FreeBusy();
+
+            int type = fbc.getType();
+            if (type == BwFreeBusyComponent.typeBusy) {
+              addParameter(fb, FbType.BUSY);
+            } else if (type == BwFreeBusyComponent.typeFree) {
+              addParameter(fb, FbType.FREE);
+            } else if (type == BwFreeBusyComponent.typeBusyUnavailable) {
+              addParameter(fb, FbType.BUSY_UNAVAILABLE);
+            } else if (type == BwFreeBusyComponent.typeBusyTentative) {
+              addParameter(fb, FbType.BUSY_TENTATIVE);
+            } else {
+              throw new CalFacadeException("Bad free-busy type " + type);
+            }
+
+            PeriodList pdl =  fb.getPeriods();
+
+            for (Period p: fbc.getPeriods()) {
+              pdl.add(p);
+            }
+
+            pl.add(fb);
+          }
+        }
+
+      }
+
       /* ------------------- Geo -------------------- */
 
       BwGeo geo = val.getGeo();



More information about the Bedework-commit mailing list