Browse Source

Add pattern attribute to DateSelector. Document granularity attribute.

Submitted by: David Kavanagh


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276289 13f79535-47bb-0310-9956-ffa450edef68
master
Matthew Jason Benson 21 years ago
parent
commit
e33f1d105f
3 changed files with 68 additions and 27 deletions
  1. +1
    -0
      CONTRIBUTORS
  2. +24
    -5
      docs/manual/CoreTypes/selectors.html
  3. +43
    -22
      src/main/org/apache/tools/ant/types/selectors/DateSelector.java

+ 1
- 0
CONTRIBUTORS View File

@@ -34,6 +34,7 @@ Daniel Spilker
Danno Ferrin
Davanum Srinivas
David A. Herman
David Kavanagh
David Maclean
David Rees
Denis Hennessy


+ 24
- 5
docs/manual/CoreTypes/selectors.html View File

@@ -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>


+ 43
- 22
src/main/org/apache/tools/ant/types/selectors/DateSelector.java View File

@@ -19,6 +19,7 @@ package org.apache.tools.ant.types.selectors;

import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Locale;

@@ -39,6 +40,7 @@ public class DateSelector extends BaseExtendSelector {
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 class DateSelector extends BaseExtendSelector {
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 @@ public class DateSelector extends BaseExtendSelector {
}
buf.append(" granularity: ");
buf.append(granularity);
if (pattern != null) {
buf.append(" pattern: ").append(pattern);
}
buf.append("}");
return buf.toString();
}
@@ -95,6 +102,9 @@ public class DateSelector extends BaseExtendSelector {
* @return the millisecond value
*/
public long getMillis() {
if (dateTime != null) {
validate();
}
return millis;
}

@@ -106,24 +116,6 @@ public class DateSelector extends BaseExtendSelector {
*/
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.");
}
}
}

/**
@@ -154,6 +146,15 @@ public class DateSelector extends BaseExtendSelector {
this.cmp = cmp.getIndex();
}

/**
* 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 @@ public class DateSelector extends BaseExtendSelector {
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 @@ public class DateSelector extends BaseExtendSelector {
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 @@ public class DateSelector extends BaseExtendSelector {
* @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;
}


Loading…
Cancel
Save