You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by jv...@apache.org on 2001/07/10 14:02:10 UTC

cvs commit: jakarta-turbine/src/adapter/org/apache/turbine/util DateSelector.java

jvanzyl     01/07/10 05:02:10

  Added:       src/adapter/org/apache/turbine/util DateSelector.java
  Log:
  - moving DataSelector into the adapter tree.
  
  Revision  Changes    Path
  1.1                  jakarta-turbine/src/adapter/org/apache/turbine/util/DateSelector.java
  
  Index: DateSelector.java
  ===================================================================
  package org.apache.turbine.util;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and 
   *    "Apache Turbine" must not be used to endorse or promote products 
   *    derived from this software without prior written permission. For 
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Turbine", nor may "Apache" appear in their name, without 
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  import java.text.DateFormatSymbols;
  import java.util.Calendar;
  import java.util.Date;
  import org.apache.ecs.ConcreteElement;
  import org.apache.ecs.Element;
  import org.apache.ecs.ElementContainer;
  import org.apache.ecs.GenericElement;
  import org.apache.ecs.html.Comment;
  import org.apache.ecs.html.Input;
  import org.apache.ecs.html.Option;
  import org.apache.ecs.html.Select;
  
  /**
   * DateSelector is a utility class to handle the creation of a set of
   * date popup menus.  The code is broken into a set of static methods
   * for quick and easy access to the individual select objects:
   *
   *  <pre>
   *  ElementContainer ec dateSelect = new ElementContainer();
   *  String myName = "mydate";
   *  ec.addElement(DateSelector.getMonthSelector(myName));
   *  ec.addElement(DateSelector.getDaySelector(myName));
   *  ec.addElement(DateSelector.getYearSelector(myName));
   *  </pre>
   *
   * There are also methods which will use attributes to build a
   * complete month,day,year selector:
   *
   *  <pre>
   *  DateSelector ds = new DateSelector(myName);
   *  dateSelect = ds.ecsOutput();
   *  </pre>
   *
   * The above element container would use the onChange setting and may
   * hide the selected day if set via showDays().<br>
   *
   * @author <a href="mailto:ekkerbj@netscape.net">Jeffrey D. Brekke</a>
   * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
   * @author <a href="mailto:leon@clearink.com">Leon Atkinson</a>
   * @version $Id: DateSelector.java,v 1.1 2001/07/10 12:02:08 jvanzyl Exp $
   */
  public class DateSelector
  {
      /** Prefix for date names. */
      public static final String DEFAULT_PREFIX   = "DateSelector";
  
      /** Suffix for day parameter. */
      public static final String DAY_SUFFIX   = "_day";
  
      /** Suffix for month parameter. */
      public static final String MONTH_SUFFIX = "_month";
  
      /** Suffix for year parameter. */
      public static final String YEAR_SUFFIX  = "_year";
  
      private Calendar useDate = null;
      private String selName = null;
      private static final String[] monthName = 
          new DateFormatSymbols().getMonths();
      private String onChange = null;
      private boolean onChangeSet = false;
      private boolean showDays = true;
      private int setDay = 0;
      private boolean useYears = false;
      private int firstYear = 0;
      private int lastYear = 0;
      private int selectedYear = 0;
  
      /**
       * Constructor defaults to current date and uses the default
       * prefix: <pre>DateSelector.DEFAULT</pre>
       */
      public DateSelector( )
      {
          this.selName = DEFAULT_PREFIX;
          this.useDate = Calendar.getInstance();
          this.useDate.setTime ( new Date() );
      }
  
      /**
       * Constructor, uses the date set in a calendar that has been
       * already passed in (with the date set correctly).
       *
       * @param selName A String with the selector name.
       * @param useDate A Calendar with a date.
       */
      public DateSelector( String selName, Calendar useDate )
      {
          this.useDate = useDate;
          this.selName = selName;
      }
  
      /**
       * Constructor defaults to current date.
       *
       * @param selName A String with the selector name.
       */
      public DateSelector( String selName )
      {
          this.selName = selName;
          this.useDate = Calendar.getInstance();
          this.useDate.setTime ( new Date() );
      }
  
      /**
       * Adds the onChange to all of <SELECT> tags.  This is limited to
       * one function for all three popups and is only used when the
       * output() methods are used.  Individual getMonth, getDay,
       * getYear static methods will not use this setting.
       *
       * @param string A String to use for onChange attribute.  If null,
       * then nothing will be set.
       * @return A DateSelector (self).
       */
      public DateSelector setOnChange ( String onChange )
      {
          if (onChange != null)
          {
              this.onChange = onChange;
              this.onChangeSet = true;
          }
          else
          {
              this.onChange = null;
              this.onChangeSet = false;
          }
          return this;
      }
  
      /**
       * Select the day to be selected if the showDays(false) behavior
       * is used.  Individual getMonth, getDay, getYear static methods
       * will not use this setting.
       *
       * @param day The day.
       * @return A DateSelector (self).
       */
      public DateSelector setDay( int day )
      {
          this.setDay = day;
          this.showDays = false;
          return this;
      }
  
      /**
       * Whether or not to show the days as a popup menu.  The days will
       * be a hidden parameter and the value set with setDay is used.
       * Individual getMonth, getDay, getYear static methods will not
       * use this setting.
       *
       * @param show True if the day should be shown.
       * @return A DateSelector (self).
       */
      public DateSelector setShowDay ( boolean show )
      {
          this.showDays = false;
          return this;
      }
  
      /**
       * Set the selector name prefix.  Individual getMonth, getDay,
       * getYear static methods will not use this setting.
       *
       * @param selname A String with the select name prefix.
       */
      public void setSelName( String selName )
      {
          this.selName = selName;
      }
  
      /**
       * Get the selector name prefix.
       *
       * @return A String with the select name prefix.
       */
      public String getSelName()
      {
          return selName;
      }
  
      /**
       * Return a month selector.
       *
       * @param name The name to use for the selected month.
       * @return A select object with all the months.
       */
      public static Select getMonthSelector(String name)
      {
          return(getMonthSelector(name, Calendar.getInstance()));
      }
  
      /**
       * Return a month selector.
       *
       * Note: The values of the month placed into the select list are
       * the month integers starting at 0 (ie: if the user selects
       * February, the selected value will be 1).
       *
       * @param name The name to use for the selected month.
       * @param now Calendar to start with.
       * @return A select object with all the months.
       */
      public static Select getMonthSelector(String name,
                                            Calendar now)
      {
          Select monthSelect = new Select().setName(name);
  
          for (int curMonth = 0;curMonth <= 11; curMonth++)
          {
              Option o = new Option();
              o.addElement(monthName[curMonth]);
              o.setValue(curMonth);
              if ((now.get(Calendar.MONTH)) == curMonth)
              {
                  o.setSelected(true);
              }
              monthSelect.addElement(o);
          }
          return(monthSelect);
      }
  
      /**
       * Return a day selector.
       *
       * @param name The name to use for the selected day.
       * @return A select object with all the days in a month.
       */
      public static Select getDaySelector(String name)
      {
          return(getDaySelector(name, Calendar.getInstance()));
      }
  
      /**
       * Return a day selector.
       *
       * @param name The name to use for the selected day.
       * @param now Calendar to start with.
       * @return A select object with all the days in a month.
       */
      public static Select getDaySelector(String name,
                                          Calendar now)
      {
          Select daySelect = new Select().setName(name);
  
          for(int currentDay=1; currentDay <= 31; currentDay++)
          {
              Option o = new Option();
              o.addElement(Integer.toString(currentDay));
              o.setValue(currentDay);
              if (now.get(Calendar.DAY_OF_MONTH) == currentDay)
              {
                  o.setSelected(true);
              }
              daySelect.addElement(o);
          }
          return(daySelect);
      }
  
      /**
       * Return a year selector.
       *
       * @param name The name to use for the selected year.
       * @return A select object with all the years starting five years
       * from now and five years before this year.
       */
      public static Select getYearSelector(String name)
      {
          return(getYearSelector(name, Calendar.getInstance()));
      }
  
      /**
       * Return a year selector.
       *
       * @param name The name to use for the selected year.
       * @param now Calendar to start with.
       * @return A select object with all the years starting five years
       * from now and five years before this year.
       */
      public static Select getYearSelector(String name,
                                           Calendar now)
      {
          int startYear = now.get(Calendar.YEAR);
          return(getYearSelector(name, startYear-5, startYear+5, startYear));
      }
  
      /**
       * Return a year selector.
       *
       * @param name The name to use for the selected year.
       * @param firstYear the first (earliest) year in the selector.
       * @param lastYear the last (latest) year in the selector.
       * @param selectedYear the year initially selected in the Select html.
       * @return A select object with all the years from firstyear
       * to lastyear..
       */
      public static Select getYearSelector(String name,
                                           int firstYear, int lastYear,
                                           int selectedYear )
      {
          Select yearSelect = new Select().setName(name);
  
          for(int currentYear = firstYear;
              currentYear <= lastYear;
              currentYear++)
          {
              Option o = new Option();
              o.addElement(Integer.toString(currentYear));
              o.setValue(currentYear);
              if (currentYear == selectedYear)
              {
                  o.setSelected(true);
              }
              yearSelect.addElement(o);
          }
          return(yearSelect);
      }
  
  
      /**
       * Select the day to be selected if the showDays(false) behavior
       * is used.  Individual getMonth, getDay, getYear static methods
       * will not use this setting.
       *
       * @param day The day.
       * @return A DateSelector (self).
       */
      public boolean setYear( int firstYear, int lastYear, int selectedYear )
      {
          if (firstYear <= lastYear && firstYear <= selectedYear
              && selectedYear <= lastYear)
          {
              this.useYears = true;
              this.firstYear = firstYear;
              this.lastYear = lastYear;
              this.selectedYear = selectedYear;
              return true;
          }
          else
          {
              return false;
          }
      }
  
      /**
       * Used to build the popupmenu in HTML.  The properties set in the
       * object are used to generate the correct HTML.  The selName
       * attribute is used to seed the names of the select lists.  The
       * names will be generated as follows:
       *
       * <ul>
       *  <li>selName + "_month"</li>
       *  <li>selName + "_day"</li>
       *  <li>selName + "_year"</li>
       * </ul>
       *
       * If onChange was set it is also used in the generation of the
       * output.  The output HTML will list the select lists in the
       * following order: month day year.
       *
       * @return A String with the correct HTML for the date selector.
       */
      public String output()
      {
          return(ecsOutput().toString());
      }
  
      /**
       * Used to build the popupmenu in HTML.  The properties set in the
       * object are used to generate the correct HTML.  The selName
       * attribute is used to seed the names of the select lists.  The
       * names will be generated as follows:
       *
       * <ul>
       *  <li>selName + "_month"</li>
       *  <li>selName + "_day"</li>
       *  <li>selName + "_year"</li>
       * </ul>
       *
       * The output HTML will list the select lists in the following
       * order: month day year.
       *
       * @return A String with the correct HTML for the date selector.
       */
      public String toString()
      {
          return(ecsOutput().toString());
      }
  
      /*
       * Return an ECS container with the month, day, and year select
       * objects inside.
       *
       * @return An ECS container.
       */
      public ElementContainer ecsOutput()
      {
          if ( this.useDate == null )
          {
              this.useDate.setTime ( new Date() );
          }
  
          Select monthSelect = getMonthSelector(selName + MONTH_SUFFIX, useDate);
          ConcreteElement daySelect = null;
          if (!showDays)
          {
              daySelect = new Input(Input.hidden,
                                    selName + DAY_SUFFIX,
                                    setDay);
          }
          else
          {
              Select tmp = getDaySelector(selName + DAY_SUFFIX, useDate);
              if (onChangeSet)
                  tmp.setOnChange(onChange);
              daySelect = tmp;
          }
          Select yearSelect = null;
          if (useYears)
          {
              yearSelect = getYearSelector(selName + YEAR_SUFFIX, 
                              firstYear, lastYear, selectedYear);
          }
          else
          {
              yearSelect = getYearSelector(selName + YEAR_SUFFIX, useDate);
          }
          if (onChangeSet)
          {
              monthSelect.setOnChange(onChange);
              yearSelect.setOnChange(onChange);
          }
          ElementContainer ec = new ElementContainer();
          // ec.addElement(new Comment("== BEGIN org.apache.turbine.util.DateSelector.ecsOutput() =="));
          ec.addElement(monthSelect);
          ec.addElement(daySelect);
          ec.addElement(yearSelect);
          // ec.addElement(new Comment("== END org.apache.turbine.util.DateSelector.ecsOutput() =="));
          return (ec);
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org