Author: bfoster
Date: Thu Dec 16 19:37:59 2010
New Revision: 1050115
URL: http://svn.apache.org/viewvc?rev=1050115&view=rev
Log:
- Added date add dynamic replacement fuction to PathUtils
-----------------
OODT-87
Modified:
oodt/trunk/CHANGES.txt
oodt/trunk/metadata/src/main/java/org/apache/oodt/cas/metadata/util/PathUtils.java
oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/util/TestPathUtils.java
Modified: oodt/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/oodt/trunk/CHANGES.txt?rev=1050115&r1=1050114&r2=1050115&view=diff
==============================================================================
--- oodt/trunk/CHANGES.txt (original)
+++ oodt/trunk/CHANGES.txt Thu Dec 16 19:37:59 2010
@@ -4,6 +4,8 @@ Apache OODT Change Log
Release 0.2 (Current Development)
--------------------------------------------
+* OODT-87 Add date roll dynamic replacement fuction to PathUtils (bfoster)
+
* OODT-63 Use hard coded version numbers in shared component POMs so that MVN
install works (bfoster)
* OODT-85 XML configurator for opendap crashes on null pointer exceptions for
some datasets (Victor Hwang via mattmann)
Modified:
oodt/trunk/metadata/src/main/java/org/apache/oodt/cas/metadata/util/PathUtils.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/metadata/src/main/java/org/apache/oodt/cas/metadata/util/PathUtils.java?rev=1050115&r1=1050114&r2=1050115&view=diff
==============================================================================
---
oodt/trunk/metadata/src/main/java/org/apache/oodt/cas/metadata/util/PathUtils.java
(original)
+++
oodt/trunk/metadata/src/main/java/org/apache/oodt/cas/metadata/util/PathUtils.java
Thu Dec 16 19:37:59 2010
@@ -94,15 +94,17 @@ public final class PathUtils {
public static String doDynamicReplacement(String string, Metadata metadata)
throws Exception {
return PathUtils.replaceEnvVariables(doDynamicDateReplacement(
- doDynamicDateFormatReplacement(
- doDynamicUtcToTaiDateReplacement(
- doDynamicDateToSecsReplacement(
- doDynamicDateToMillisReplacement(
- string, metadata),
+ doDynamicDateRollReplacement(
+ doDynamicDateFormatReplacement(
+ doDynamicUtcToTaiDateReplacement(
+ doDynamicDateToSecsReplacement(
+ doDynamicDateToMillisReplacement(
+ string, metadata),
+ metadata),
metadata),
- metadata),
- metadata),
- metadata),
+ metadata),
+ metadata),
+ metadata),
metadata, true);
}
@@ -166,6 +168,64 @@ public final class PathUtils {
return string;
}
+ /**
+ * usage format: [DATE_ADD(<date>,<date-format>,<add-amount>,<hr | min |
sec | day | mo | yr>)]
+ * example: [DATE_ADD(2009-12-31, yyyy-MM-dd, 1, day)] . . . output will
be: 2010-01-01
+ * - dynamic replacement is allowed for the <date> as well, for example:
+ * [DATE_ADD([DATE.UTC], yyyy-MM-dd'T'HH:mm:ss.SSS'Z', 1, day)] will add
one day to the
+ * current UTC time
+ */
+ public static String doDynamicDateRollReplacement(String string,
+ Metadata metadata) throws Exception {
+ Pattern dateFormatPattern = Pattern
+
.compile("\\[\\s*DATE_ADD\\s*\\(.{1,}?,.{1,}?,.{1,}?,.{1,}?\\)\\s*\\]");
+ Matcher dateFormatMatcher = dateFormatPattern.matcher(string);
+ while (dateFormatMatcher.find()) {
+ String dateFormatString = string.substring(dateFormatMatcher
+ .start(), dateFormatMatcher.end());
+
+ // get arguments
+ Matcher argMatcher = Pattern.compile("\\(.*\\)").matcher(
+ dateFormatString);
+ argMatcher.find();
+ String argsString = dateFormatString.substring(argMatcher.start()
+ 1,
+ argMatcher.end() - 1);
+ argsString = doDynamicReplacement(argsString, metadata);
+ String[] args = argsString.split(",");
+ String dateString = args[0].trim();
+ dateString = doDynamicReplacement(dateString, metadata);
+ String dateFormat = args[1].trim();
+ int addAmount = Integer.parseInt(args[2].trim());
+ String addUnits = args[3].trim().toLowerCase();
+
+ // reformat date
+ Date date = new SimpleDateFormat(dateFormat).parse(dateString);
+ Calendar calendar = (Calendar) Calendar.getInstance().clone();
+ calendar.setTime(date);
+ if (addUnits.equals("hr") || addUnits.equals("hour"))
+ calendar.add(Calendar.HOUR_OF_DAY, addAmount);
+ else if (addUnits.equals("min") || addUnits.equals("minute"))
+ calendar.add(Calendar.MINUTE, addAmount);
+ else if (addUnits.equals("sec") || addUnits.equals("second"))
+ calendar.add(Calendar.SECOND, addAmount);
+ else if (addUnits.equals("day"))
+ calendar.add(Calendar.DAY_OF_YEAR, addAmount);
+ else if (addUnits.equals("mo") || addUnits.equals("month"))
+ calendar.add(Calendar.MONTH, addAmount);
+ else if (addUnits.equals("yr") || addUnits.equals("year"))
+ calendar.add(Calendar.YEAR, addAmount);
+
+ String newDateString = new
SimpleDateFormat(dateFormat).format(calendar.getTime());
+
+ // swap in date string
+ string = StringUtils.replace(string, dateFormatString,
+ newDateString);
+ dateFormatMatcher = dateFormatPattern.matcher(string);
+ }
+
+ return string;
+ }
+
public static String doDynamicDateFormatReplacement(String string,
Metadata metadata) throws Exception {
Pattern dateFormatPattern = Pattern
Modified:
oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/util/TestPathUtils.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/util/TestPathUtils.java?rev=1050115&r1=1050114&r2=1050115&view=diff
==============================================================================
---
oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/util/TestPathUtils.java
(original)
+++
oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/util/TestPathUtils.java
Thu Dec 16 19:37:59 2010
@@ -58,6 +58,7 @@ public class TestPathUtils extends TestC
assertEquals("475000201.000",
PathUtils.doDynamicReplacement(
"[DATE_TO_SECS([UTC_TO_TAI(2008-01-20T16:29:55.000Z)],
TAI_FORMAT, 1993-01-01)]"));
+ assertEquals("2010-01-01",
PathUtils.doDynamicReplacement("[DATE_ADD(2009-12-31, yyyy-MM-dd, 1, day)]"));
}
private void singleValueTest() {