[jboss-cvs] jboss-mail/src/calendar/calendarejb/src/java/org/jboss/mail/calendar/util/availability ...
Aron Sogor
bigman at gmail.com
Mon Jul 10 19:45:40 EDT 2006
User: asogor
Date: 06/07/10 19:45:40
Modified: src/calendar/calendarejb/src/java/org/jboss/mail/calendar/util/availability
AvailabilityCalculator.java
Log:
unit test and fixes for the availaiblity calculator
Revision Changes Path
1.3 +168 -159 jboss-mail/src/calendar/calendarejb/src/java/org/jboss/mail/calendar/util/availability/AvailabilityCalculator.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: AvailabilityCalculator.java
===================================================================
RCS file: /cvsroot/jboss/jboss-mail/src/calendar/calendarejb/src/java/org/jboss/mail/calendar/util/availability/AvailabilityCalculator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- AvailabilityCalculator.java 10 Jul 2006 05:28:44 -0000 1.2
+++ AvailabilityCalculator.java 10 Jul 2006 23:45:40 -0000 1.3
@@ -1,8 +1,6 @@
package org.jboss.mail.calendar.util.availability;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
import java.util.Date;
import org.apache.commons.logging.Log;
@@ -10,8 +8,6 @@
import org.jboss.mail.calendar.data.CalendarEvent;
import org.jboss.mail.calendar.data.Invite;
-import com.sun.tools.javac.tree.Tree.Assert;
-
/**
* AvailabilityCalculator is a utility to figure out possible timeslots for a
* meeting
@@ -57,7 +53,7 @@
return new CalendarEvent[0];
}
- double segmentTotal = Math.ceil((startTime.getTime() - endTime
+ double segmentTotal = Math.ceil((endTime.getTime() - startTime
.getTime())
/ (60000 * incrementSize));
@@ -67,14 +63,15 @@
segmentTotal, (60000 * incrementSize));
// check each segment as valid
Segment cursor = firstSegment;
- while (cursor!=null) {
- if(cursor.isFree(numberOfunits))
- {
+ while (cursor != null) {
+ if (cursor.isFree(numberOfunits)) {
CalendarEvent event = new CalendarEvent();
event.setStartDate(cursor.getStartTime());
- event.setEndDate(new Date(cursor.getStartTime().getTime() + (60000 * incrementSize)));
+ event.setEndDate(new Date(cursor.getStartTime().getTime()
+ + (60000 * incrementSize * numberOfunits)));
result.add(event);
}
+ cursor = cursor.getNextSegment();
}
return (CalendarEvent[]) result.toArray(new CalendarEvent[0]);
}
@@ -88,30 +85,37 @@
for (int segmentCnt = 0; segmentCnt < segmentTotal; segmentCnt++) {
if (currentSegment == null) {
currentSegment = new Segment(new Date(segmentStart.getTime()),
- new Date(startTime.getTime() + increment), false);
+ new Date(segmentStart.getTime() + increment), false);
firstSegment = currentSegment;
} else {
currentSegment.setNextSegment(new Segment(new Date(segmentStart
- .getTime()), new Date(startTime.getTime() + increment),
- false));
+ .getTime()), new Date(segmentStart.getTime()
+ + increment), false));
currentSegment = currentSegment.getNextSegment();
}
- evaluateSegmentFreeBusy(invites,currentSegment);
+ evaluateSegmentFreeBusy(invites, currentSegment);
segmentStart.setTime(currentSegment.getEndTime().getTime());
+ log.debug("Created segment "
+ + currentSegment.getStartTime() + " end:"
+ + currentSegment.getEndTime() + " status:"
+ + currentSegment.isBusy());
}
return firstSegment;
}
private void evaluateSegmentFreeBusy(Invite[] invites, Segment segment) {
- for (int i = 0; ((i < invites.length)&&(!segment.isBusy)); i++) {
- segment.setBusy(((segment.getStartTime().getTime() <= invites[i]
- .getEvent().getStartDate().getTime()) && (segment
- .getEndTime().getTime() >= invites[i].getEvent()
- .getStartDate().getTime()))
- || ((segment.getStartTime().getTime() <= invites[i]
- .getEvent().getEndDate().getTime()) && (segment
- .getEndTime().getTime() >= invites[i].getEvent()
- .getEndDate().getTime())));
+ long segStart,segEnd,eventStart,eventEnd = 0;
+ for (int i = 0; ((i < invites.length) && (!segment.isBusy)); i++) {
+ segStart = segment.getStartTime().getTime();
+ segEnd = segment.getEndTime().getTime();
+ eventStart = invites[i].getEvent().getStartDate().getTime();
+ eventEnd = invites[i].getEvent().getEndDate().getTime();
+
+ //by default busy is false
+ //busy true IF- eventStart <= segStart < eventEnd
+ segment.setBusy((eventStart <= segStart)&&(segStart < eventEnd));
+ //busy true IF- eventStart < segEnd <= eventEnd
+ segment.setBusy((eventStart < segEnd)&&(segEnd <= eventEnd));
}
}
@@ -164,16 +168,21 @@
this.isBusy = isBusy;
}
- public boolean isFree(int depth)
- {
+ public boolean isFree(int depth) {
// busy, cut the chain
- if(isBusy) return false;
+ if (isBusy)
+ return false;
// last element, must be true but if I am wrong:)
- if(depth == 1) {assert(isBusy==true);return true;}
+ if (depth == 1) {
+ assert (isBusy == true);
+ return true;
+ }
// not enough "time" at the end of the list
- if(nextSegment == null) return false;
- //call next
- return nextSegment.isFree(depth--);
+ if (nextSegment == null)
+ return false;
+ // call next
+ depth--;
+ return nextSegment.isFree(depth);
}
}
}
More information about the jboss-cvs-commits
mailing list