Changeset 407

Show
Ignore:
Timestamp:
04/21/06 09:40:26
Author:
douglm
Message:

Freebusy should now allow date and view period navigation

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/calendar3/webclient/src/org/bedework/webclient/BwCalAbstractAction.java

    r24 r407  
    5252    to the maximum extent the law permits. 
    5353*/ 
    54  
    5554package org.bedework.webclient; 
    5655 
     56import org.bedework.appcommon.BedeworkDefs; 
     57import org.bedework.appcommon.MyCalendarVO; 
     58import org.bedework.appcommon.TimeView; 
     59import org.bedework.calfacade.CalFacadeUtil; 
    5760import org.bedework.webcommon.BwAbstractAction; 
    5861import org.bedework.webcommon.BwActionFormBase; 
    5962import org.bedework.webcommon.BwSession; 
     63import org.bedework.webcommon.TimeDateComponents; 
     64 
     65import java.util.Date; 
     66import java.util.Locale; 
    6067 
    6168import javax.servlet.http.HttpServletRequest; 
     
    7582    BwActionForm form = (BwActionForm)frm; 
    7683 
    77     /* Set some options from preferences * / 
    78     form.setAutoCreateSponsors(true); 
    79     form.setAutoCreateLocations(true); 
    80     form.setAutoDeleteSponsors(true); 
    81     form.setAutoDeleteLocations(true); 
    82  
    83     String refreshAction = form.getEnv().getAppOptProperty("app.refresh.action"); 
    84  
    85     if (refreshAction == null) { 
    86       refreshAction = form.getActionPath(); 
    87     } 
    88  
    89     if (refreshAction != null) { 
    90       setRefreshInterval(request, response, 
    91                          form.getEnv().getAppIntProperty("app.refresh.interval"), 
    92                          refreshAction, form); 
    93     } 
    94  
    95     if (debug) { 
    96       log.debug("curTimeView=" + form.getCurTimeView()); 
    97     } 
    98  
    99     String reqpar = request.getParameter("cancelled"); 
    100  
    101     if (reqpar != null) { 
    102       /* * Set the objects to null so we get new ones. 
    103        * / 
    104  
    105       form.getMsg().emit("org.bedework.client.message.cancelled"); 
    106       return "cancelled"; 
    107     }*/ 
    108  
    10984    String forward = doAction(request, form); 
    11085 
     
    12196  public abstract String doAction(HttpServletRequest request, 
    12297                                  BwActionForm form) throws Throwable; 
     98 
     99 
     100  /** Set the current date and/or view. The date may be null indicating we 
     101   * should switch to a new view based on the current date. 
     102   * 
     103   * <p>newViewTypeI may be less than 0 indicating we stay with the current 
     104   * view but switch to a new date. 
     105   * 
     106   * @param action 
     107   * @param form         UWCalActionForm 
     108   * @param date         String yyyymmdd date or null 
     109   * @param newViewTypeI new view index or -1 
     110   * @param debug 
     111   * @throws Throwable 
     112   */ 
     113  protected static void gotoDateView(BwCalAbstractAction action, 
     114                                     BwActionForm form, 
     115                                     String date, 
     116                                     int newViewTypeI, 
     117                                     boolean debug) throws Throwable { 
     118    /* We get a new view if either the date changed or the view changed. 
     119     */ 
     120    boolean newView = false; 
     121 
     122    if (debug) { 
     123      action.logIt("ViewTypeI=" + newViewTypeI); 
     124    } 
     125 
     126    MyCalendarVO dt; 
     127    TimeView tv = form.getCurTimeView(); 
     128    Locale loc = Locale.getDefault();  // XXX Locale 
     129 
     130    if (newViewTypeI == BedeworkDefs.todayView) { 
     131      // dt = new MyCalendarVO(new Date(System.currentTimeMillis())); 
     132      Date jdt = new Date(System.currentTimeMillis()); 
     133      dt = new MyCalendarVO(jdt, loc); 
     134      newView = true; 
     135      newViewTypeI = BedeworkDefs.dayView; 
     136    } else if (date == null) { 
     137      if (newViewTypeI == BedeworkDefs.dayView) { 
     138        // selected specific day to display from personal event entry screen. 
     139 
     140        Date jdt = CalFacadeUtil.getDate(form.getViewStartDate().getDateTime()); 
     141        dt = new MyCalendarVO(jdt, loc); 
     142        newView = true; 
     143      } else { 
     144        if (debug) { 
     145          action.logIt("No date supplied: go with current date"); 
     146        } 
     147 
     148        // Just stay here 
     149        dt = tv.getCurDay(); 
     150      } 
     151    } else { 
     152      if (debug) { 
     153        action.logIt("Date=" + date + ": go with that"); 
     154      } 
     155 
     156      Date jdt = CalFacadeUtil.fromISODate(date); 
     157      dt = new MyCalendarVO(jdt, loc); 
     158      if (!checkDateInRange(form, dt.getYear())) { 
     159        // Set it to today 
     160        jdt = new Date(System.currentTimeMillis()); 
     161        dt = new MyCalendarVO(jdt, loc); 
     162      } 
     163      newView = true; 
     164    } 
     165 
     166    if ((newViewTypeI >= 0) && 
     167        (newViewTypeI != form.getCurViewPeriod())) { 
     168      // Change of view 
     169      newView = true; 
     170    } 
     171 
     172    if (newView && (newViewTypeI < 0)) { 
     173      newViewTypeI = form.getCurViewPeriod(); 
     174      if (newViewTypeI < 0) { 
     175        newViewTypeI = BedeworkDefs.defaultView; 
     176      } 
     177    } 
     178 
     179    TimeDateComponents viewStart = form.getViewStartDate(); 
     180 
     181    if (!newView) { 
     182      /* See if we were given an explicit date as view start date components. 
     183         If so we'll set a new view of the same period as the current. 
     184       */ 
     185      int year = viewStart.getCalYear(); 
     186 
     187      if (checkDateInRange(form, year)) { 
     188        String vsdate = viewStart.getDateTime().getDtval().substring(0, 8); 
     189        if (debug) { 
     190          action.logIt("vsdate=" + vsdate); 
     191        } 
     192 
     193        if (!(vsdate.equals(form.getCurTimeView().getFirstDay().getDateDigits()))) { 
     194          newView = true; 
     195          newViewTypeI = form.getCurViewPeriod(); 
     196          Date jdt = CalFacadeUtil.fromISODate(vsdate); 
     197          dt = new MyCalendarVO(jdt, loc); 
     198        } 
     199      } 
     200    } 
     201 
     202    if (newView) { 
     203      form.setCurViewPeriod(newViewTypeI); 
     204      form.setViewMcDate(dt); 
     205      form.refreshIsNeeded(); 
     206    } 
     207 
     208    tv = form.getCurTimeView(); 
     209    // dt = tv.getCurDay(); 
     210 
     211    /** Set first day, month and year 
     212     */ 
     213 
     214    MyCalendarVO firstDay = tv.getFirstDay(); 
     215 
     216    viewStart.setDay(firstDay.getTwoDigitDay()); 
     217    viewStart.setMonth(firstDay.getTwoDigitMonth()); 
     218    viewStart.setYear(firstDay.getFourDigitYear()); 
     219 
     220    form.getEventStartDate().setDateTime(tv.getCurDay().getTime()); 
     221    form.getEventEndDate().setDateTime(tv.getCurDay().getTime()); 
     222  } 
     223 
     224  private static boolean checkDateInRange(BwActionForm form, 
     225                                   int year) throws Throwable { 
     226    // XXX make system parameters for allowable start/end year 
     227    int thisYear = form.getToday().getYear(); 
     228 
     229    if ((year < thisYear - 10) || (year > thisYear + 10)) { 
     230      form.getErr().emit("org.bedework.client.error.baddate"); 
     231      return false; 
     232    } 
     233 
     234    return true; 
     235  } 
    123236} 
  • trunk/calendar3/webclient/src/org/bedework/webclient/BwFreeBusyAction.java

    r406 r407  
    108108    BwUser user; 
    109109    CalSvcI svci = form.fetchSvci(); 
     110 
     111    gotoDateView(this, form, 
     112                 form.getDate(), 
     113                 form.getViewTypeI(), 
     114                 debug); 
     115 
    110116    String userId = getReqPar(request, "userid"); 
    111117 
  • trunk/calendar3/webclient/src/org/bedework/webclient/BwGoToAction.java

    r257 r407  
    5555package org.bedework.webclient; 
    5656 
    57 import org.bedework.appcommon.MyCalendarVO; 
    58 import org.bedework.appcommon.TimeView; 
    59 import org.bedework.appcommon.BedeworkDefs; 
    60 import org.bedework.calfacade.CalFacadeUtil; 
    61 import org.bedework.webcommon.TimeDateComponents; 
    62  
    63 import java.util.Date; 
    64 import java.util.Locale; 
    65  
    6657import javax.servlet.http.HttpServletRequest; 
    6758 
     
    8778    return "success"; 
    8879  } 
    89  
    90   /** Set the current date and/or view. The date may be null indicating we 
    91    * should switch to a new view based on the current date. 
    92    * 
    93    * <p>newViewTypeI may be less than 0 indicating we stay with the current 
    94    * view but switch to a new date. 
    95    * 
    96    * @param action 
    97    * @param form         UWCalActionForm 
    98    * @param date         String yyyymmdd date or null 
    99    * @param newViewTypeI new view index or -1 
    100    * @param debug 
    101    * @throws Throwable 
    102    */ 
    103   public static void gotoDateView(BwCalAbstractAction action, 
    104                                   BwActionForm form, 
    105                                   String date, 
    106                                   int newViewTypeI, 
    107                                   boolean debug) throws Throwable { 
    108     /* We get a new view if either the date changed or the view changed. 
    109      */ 
    110     boolean newView = false; 
    111  
    112     if (debug) { 
    113       action.logIt("ViewTypeI=" + newViewTypeI); 
    114     } 
    115  
    116     MyCalendarVO dt; 
    117     TimeView tv = form.getCurTimeView(); 
    118     Locale loc = Locale.getDefault();  // XXX Locale 
    119  
    120     if (newViewTypeI == BedeworkDefs.todayView) { 
    121       // dt = new MyCalendarVO(new Date(System.currentTimeMillis())); 
    122       Date jdt = new Date(System.currentTimeMillis()); 
    123       dt = new MyCalendarVO(jdt, loc); 
    124       newView = true; 
    125       newViewTypeI = BedeworkDefs.dayView; 
    126     } else if (date == null) { 
    127       if (newViewTypeI == BedeworkDefs.dayView) { 
    128         // selected specific day to display from personal event entry screen. 
    129          
    130         Date jdt = CalFacadeUtil.getDate(form.getViewStartDate().getDateTime()); 
    131         dt = new MyCalendarVO(jdt, loc); 
    132         newView = true; 
    133       } else { 
    134         if (debug) { 
    135           action.logIt("No date supplied: go with current date"); 
    136         } 
    137  
    138         // Just stay here 
    139         dt = tv.getCurDay(); 
    140       } 
    141     } else { 
    142       if (debug) { 
    143         action.logIt("Date=" + date + ": go with that"); 
    144       } 
    145  
    146       Date jdt = CalFacadeUtil.fromISODate(date); 
    147       dt = new MyCalendarVO(jdt, loc); 
    148       if (!checkDateInRange(form, dt.getYear())) { 
    149         // Set it to today 
    150         jdt = new Date(System.currentTimeMillis()); 
    151         dt = new MyCalendarVO(jdt, loc); 
    152       } 
    153       newView = true; 
    154     } 
    155  
    156     if ((newViewTypeI >= 0) && 
    157         (newViewTypeI != form.getCurViewPeriod())) { 
    158       // Change of view 
    159       newView = true; 
    160     } 
    161  
    162     if (newView && (newViewTypeI < 0)) { 
    163       newViewTypeI = form.getCurViewPeriod(); 
    164       if (newViewTypeI < 0) { 
    165         newViewTypeI = BedeworkDefs.defaultView; 
    166       } 
    167     } 
    168  
    169     TimeDateComponents viewStart = form.getViewStartDate(); 
    170  
    171     if (!newView) { 
    172       /* See if we were given an explicit date as view start date components. 
    173          If so we'll set a new view of the same period as the current. 
    174        */ 
    175       int year = viewStart.getCalYear(); 
    176        
    177       if (checkDateInRange(form, year)) { 
    178         String vsdate = viewStart.getDateTime().getDtval().substring(0, 8); 
    179         if (debug) { 
    180           action.logIt("vsdate=" + vsdate); 
    181         } 
    182          
    183         if (!(vsdate.equals(form.getCurTimeView().getFirstDay().getDateDigits()))) { 
    184           newView = true; 
    185           newViewTypeI = form.getCurViewPeriod(); 
    186           Date jdt = CalFacadeUtil.fromISODate(vsdate); 
    187           dt = new MyCalendarVO(jdt, loc); 
    188         } 
    189       } 
    190     } 
    191  
    192     if (newView) { 
    193       form.setCurViewPeriod(newViewTypeI); 
    194       form.setViewMcDate(dt); 
    195       form.refreshIsNeeded(); 
    196     } 
    197  
    198     tv = form.getCurTimeView(); 
    199     // dt = tv.getCurDay(); 
    200  
    201     /** Set first day, month and year 
    202      */ 
    203  
    204     MyCalendarVO firstDay = tv.getFirstDay(); 
    205  
    206     viewStart.setDay(firstDay.getTwoDigitDay()); 
    207     viewStart.setMonth(firstDay.getTwoDigitMonth()); 
    208     viewStart.setYear(firstDay.getFourDigitYear()); 
    209  
    210     form.getEventStartDate().setDateTime(tv.getCurDay().getTime()); 
    211     form.getEventEndDate().setDateTime(tv.getCurDay().getTime()); 
    212   } 
    213    
    214   private static boolean checkDateInRange(BwActionForm form, 
    215                                    int year) throws Throwable { 
    216     // XXX make system parameters for allowable start/end year 
    217     int thisYear = form.getToday().getYear(); 
    218      
    219     if ((year < thisYear - 10) || (year > thisYear + 10)) { 
    220       form.getErr().emit("org.bedework.client.error.baddate"); 
    221       return false; 
    222     } 
    223      
    224     return true; 
    225   } 
    22680}