mbenson     2004/04/07 15:46:51

  Modified:    .        CONTRIBUTORS
               docs/manual/CoreTypes selectors.html
               src/main/org/apache/tools/ant/types/selectors
                        DateSelector.java
  Log:
  Add pattern attribute to DateSelector.  Document granularity attribute.
  Submitted by: David Kavanagh
  
  Revision  Changes    Path
  1.10      +1 -0      ant/CONTRIBUTORS
  
  Index: CONTRIBUTORS
  ===================================================================
  RCS file: /home/cvs/ant/CONTRIBUTORS,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- CONTRIBUTORS      7 Apr 2004 13:30:30 -0000       1.9
  +++ CONTRIBUTORS      7 Apr 2004 22:46:51 -0000       1.10
  @@ -34,6 +34,7 @@
   Danno Ferrin
   Davanum Srinivas
   David A. Herman
  +David Kavanagh
   David Maclean
   David Rees
   Denis Hennessy
  
  
  
  1.21      +24 -5     ant/docs/manual/CoreTypes/selectors.html
  
  Index: selectors.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTypes/selectors.html,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- selectors.html    29 Mar 2004 21:47:04 -0000      1.20
  +++ selectors.html    7 Apr 2004 22:46:51 -0000       1.21
  @@ -133,8 +133,10 @@
         </tr>
         <tr>
           <td valign="top">datetime</td>
  -        <td valign="top">Specifies the date and time to test for using
  -          a string of the format MM/DD/YYYY HH:MM AM_or_PM.
  +        <td valign="top">Specifies the date and time to test for.
  +          Should be in the format MM/DD/YYYY HH:MM AM_or_PM, or
  +          an alternative pattern specified via the <i>pattern</i>
  +          attribute.
           </td>
           <td valign="top" align="center" rowspan="2">At least one of the 
two.</td>
         </tr>
  @@ -159,6 +161,23 @@
             The default is equal.
           <td valign="top" align="center">No</td>
         </tr>
  +      <tr>
  +        <td valign="top">granularity</td>
  +        <td valign="top">The number of milliseconds leeway to use when
  +          comparing file modification times. This is needed because not every
  +          file system supports tracking the last modified time to the
  +          millisecond level. Default is 0 milliseconds, or 2 seconds on DOS 
systems.
  +        </td>
  +        <td valign="top" align="center">No</td>
  +      </tr>
  +      <tr>
  +        <td valign="top">pattern</td>
  +        <td valign="top">The <CODE>SimpleDateFormat</CODE>-compatible pattern
  +          to use when interpreting the <i>datetime</i> attribute.
  +          <i>Since Ant 1.6.2</i>
  +        </td>
  +        <td valign="top" align="center">No</td>
  +      </tr>
       </table>
   
       <p>Here is an example of how to use the Date Selector:</p>
  @@ -686,7 +705,7 @@
       </ul></p>
   
       <table border="1" cellpadding="2" cellspacing="0">
  -      <tr><td colspan="2"><font size="+1"><b> Algorithm´s 
</b></font></td></tr>
  +      <tr><td colspan="2"><font size="+1"><b> Algorithm?s 
</b></font></td></tr>
         <tr>
           <td valign="top"><b>Name</b></td>
           <td valign="top"><b>Description</b></td>
  @@ -709,7 +728,7 @@
             </ul>
           </td>
         </tr>
  -      <tr><td colspan="2"><font size="+1"><b> Cache´s </b></font></td></tr>
  +      <tr><td colspan="2"><font size="+1"><b> Cache?s </b></font></td></tr>
         <tr>
           <td valign="top"> propertyfile </td>
           <td valign="top"> Use the java.util.Properties class and its 
possibility
  @@ -721,7 +740,7 @@
             </ul>
           </td>
         </tr>
  -      <tr><td colspan="2"><font size="+1"><b> Comparator´s 
</b></font></td></tr>
  +      <tr><td colspan="2"><font size="+1"><b> Comparator?s 
</b></font></td></tr>
         <tr>
           <td valign="top"> equal </td>
           <td valign="top"> Very simple object comparison. </td>
  
  
  
  1.13      +43 -22    
ant/src/main/org/apache/tools/ant/types/selectors/DateSelector.java
  
  Index: DateSelector.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/types/selectors/DateSelector.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- DateSelector.java 9 Mar 2004 16:48:47 -0000       1.12
  +++ DateSelector.java 7 Apr 2004 22:46:51 -0000       1.13
  @@ -19,6 +19,7 @@
   
   import java.io.File;
   import java.text.DateFormat;
  +import java.text.SimpleDateFormat;
   import java.text.ParseException;
   import java.util.Locale;
   
  @@ -39,6 +40,7 @@
       private boolean includeDirs = false;
       private int granularity = 0;
       private int cmp = 2;
  +    private String pattern;
       /** Key to used for parameterized custom selector */
       public static final String MILLIS_KEY = "millis";
       /** Key to used for parameterized custom selector */
  @@ -49,6 +51,8 @@
       public static final String GRANULARITY_KEY = "granularity";
       /** Key to used for parameterized custom selector */
       public static final String WHEN_KEY = "when";
  +    /** Key to used for parameterized custom selector */
  +    public static final String PATTERN_KEY = "pattern";
   
       /**
        * Creates a new <code>DateSelector</code> instance.
  @@ -76,6 +80,9 @@
           }
           buf.append(" granularity: ");
           buf.append(granularity);
  +        if (pattern != null) {
  +            buf.append(" pattern: ").append(pattern);
  +        }
           buf.append("}");
           return buf.toString();
       }
  @@ -95,6 +102,9 @@
        * @return the millisecond value
        */
       public long getMillis() {
  +        if (dateTime != null) {
  +            validate();
  +        }
           return millis;
       }
   
  @@ -106,24 +116,6 @@
        */
       public void setDatetime(String dateTime) {
           this.dateTime = dateTime;
  -        if (dateTime != null) {
  -            DateFormat df = DateFormat.getDateTimeInstance(
  -                    DateFormat.SHORT,
  -                    DateFormat.SHORT,
  -                    Locale.US);
  -            try {
  -                setMillis(df.parse(dateTime).getTime());
  -                if (millis < 0) {
  -                    setError("Date of " + dateTime
  -                            + " results in negative milliseconds value 
relative"
  -                            + " to epoch (January 1, 1970, 00:00:00 GMT).");
  -                }
  -            } catch (ParseException pe) {
  -                setError("Date of " + dateTime
  -                        + " Cannot be parsed correctly. It should be in"
  -                        + " MM/DD/YYYY HH:MM AM_PM format.");
  -            }
  -        }
       }
   
       /**
  @@ -155,6 +147,15 @@
       }
   
       /**
  +     * Sets the pattern to be used for the SimpleDateFormat
  +     *
  +     * @param pattern the pattern that defines the date format
  +     */
  +    public void setPattern(String pattern) {
  +        this.pattern = pattern;
  +    }
  +
  +    /**
        * When using this as a custom selector, this method will be called.
        * It translates each parameter into the appropriate setXXX() call.
        *
  @@ -189,6 +190,8 @@
                       TimeComparisons cmp = new TimeComparisons();
                       cmp.setValue(parameters[i].getValue());
                       setWhen(cmp);
  +                } else if (PATTERN_KEY.equalsIgnoreCase(paramname)) {
  +                    setPattern(parameters[i].getValue());
                   } else {
                       setError("Invalid parameter " + paramname);
                   }
  @@ -204,10 +207,26 @@
           if (dateTime == null && millis < 0) {
               setError("You must provide a datetime or the number of "
                       + "milliseconds.");
  -        } else if (millis < 0) {
  -            setError("Date of " + dateTime
  -                    + " results in negative milliseconds value"
  -                    + " relative to epoch (January 1, 1970, 00:00:00 GMT).");
  +        } else if (millis < 0 && dateTime != null) {
  +            // check millis and only set it once.
  +            DateFormat df = ((pattern == null)
  +                ? DateFormat.getDateTimeInstance(
  +                    DateFormat.SHORT, DateFormat.SHORT, Locale.US)
  +                : new SimpleDateFormat(pattern));
  +
  +            try {
  +                setMillis(df.parse(dateTime).getTime());
  +                if (millis < 0) {
  +                    setError("Date of " + dateTime
  +                        + " results in negative milliseconds value"
  +                        + " relative to epoch (January 1, 1970, 00:00:00 
GMT).");
  +                }
  +            } catch (ParseException pe) {
  +                setError("Date of " + dateTime
  +                        + " Cannot be parsed correctly. It should be in"
  +                        + ((pattern == null)
  +                        ? " MM/DD/YYYY HH:MM AM_PM" : pattern) + " format.");
  +            }
           }
       }
   
  @@ -221,7 +240,9 @@
        * @return whether the file should be selected or not
        */
       public boolean isSelected(File basedir, String filename, File file) {
  +
           validate();
  +
           if (file.isDirectory() && (!includeDirs)) {
               return true;
           }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to