[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