[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