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