|
From: <be...@us...> - 2007-01-05 20:45:34
|
Revision: 238
http://svn.sourceforge.net/objectlabkit/?rev=238&view=rev
Author: benoitx
Date: 2007-01-05 12:45:33 -0800 (Fri, 05 Jan 2007)
Log Message:
-----------
- Added method calculateTenorDates with/without a spot lag to enable calculation of a series of Tenor dates without changing the current business date in the calculator.
- Added method moveByTenor without a spot lag to allow tenor calculation based on the CURRENT date and not the spot lag.
Modified Paths:
--------------
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculator.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculator.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/StandardTenor.java
trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractDateTestCase.java
trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractForwardDateCalculatorTest.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateDateCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayDateCalculator.java
trunk/src/site/changes.xml
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculator.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculator.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculator.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -32,8 +32,10 @@
*/
package net.objectlab.kit.datecalc.common;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
/**
@@ -158,7 +160,7 @@
}
TenorCode tenorCode = tenor.getCode();
- if (tenorCode != TenorCode.OVERNIGHT) {
+ if (tenorCode != TenorCode.OVERNIGHT && spotLag != 0) {
// get to the Spot date first:
moveByBusinessDays(spotLag);
}
@@ -196,6 +198,52 @@
return calc;
}
+ /**
+ * Move the current date by a given tenor, please note that all tenors are
+ * relative to the CURRENT day (and NOT from spot).
+ *
+ * @param tenor
+ * the Tenor to reach.
+ * @return the current DateCalculator
+ * @since 1.1.0
+ */
+ public DateCalculator<E> moveByTenor(final Tenor tenor) {
+ return moveByTenor(tenor, 0);
+ }
+
+ /**
+ * Calculate a series of Tenor codes in one go based on current day,
+ * this does NOT change the current business date.
+ *
+ * @return list of dates in same order as tenors.
+ * @since 1.1.0
+ */
+ public List<E> calculateTenorDates(final List<Tenor> tenors) {
+ return calculateTenorDates(tenors, 0);
+ }
+
+ /**
+ * Calculate a series of Tenor codes in one go based on SPOT day (calculated
+ * with the spot lag), this does NOT change the current business date.
+ *
+ * @return list of dates in same order as tenors.
+ * @since 1.1.0
+ */
+ public List<E> calculateTenorDates(final List<Tenor> tenors, final int spotLag) {
+ List<E> list = new ArrayList<E>();
+
+ if (tenors != null) {
+ final E date = clone(getCurrentBusinessDate());
+ for (Tenor tenor : tenors) {
+ moveByTenor(tenor, spotLag);
+ list.add(getCurrentBusinessDate());
+ setCurrentBusinessDate(date);
+ }
+ }
+
+ return list;
+ }
+
// -----------------------------------------------------------------------
//
// ObjectLab, world leaders in the design and development of bespoke
@@ -357,6 +405,8 @@
public HolidayCalendar<E> getHolidayCalendar() {
return holidayCalendar;
}
+
+ protected abstract E clone(final E date);
}
/*
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculator.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculator.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculator.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -32,6 +32,7 @@
*/
package net.objectlab.kit.datecalc.common;
+import java.util.List;
import java.util.Set;
/**
@@ -247,12 +248,42 @@
* the Tenor to reach.
* @param spotLag
* number of days to "spot" days, this can vary from one market
- * to the other. It is sometimes called "settlement interval".
+ * to the other. It is sometimes called "settlement interval"
+ * or "offset".
* @return the current DateCalculator
*/
DateCalculator<E> moveByTenor(final Tenor tenor, final int spotLag);
+
+ /**
+ * Move the current date by a given tenor, please note that all tenors are
+ * relative to the CURRENT day (and NOT from spot).
+ *
+ * @param tenor
+ * the Tenor to reach.
+ * @return the current DateCalculator
+ * @since 1.1.0
+ */
+ DateCalculator<E> moveByTenor(final Tenor tenor);
/**
+ * Calculate a series of Tenor codes in one go based on current day,
+ * this does NOT change the current business date.
+ *
+ * @return list of dates in same order as tenors.
+ * @since 1.1.0
+ */
+ List<E> calculateTenorDates(final List<Tenor> tenors);
+
+ /**
+ * Calculate a series of Tenor codes in one go based on SPOT day (calculated
+ * with the spot lag), this does NOT change the current business date.
+ *
+ * @return list of dates in same order as tenors.
+ * @since 1.1.0
+ */
+ List<E> calculateTenorDates(final List<Tenor> tenors, final int spotLag);
+
+ /**
* return the current increment in the calculator, this is used by the
* handler.
*/
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/StandardTenor.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/StandardTenor.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/StandardTenor.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -32,6 +32,10 @@
*/
package net.objectlab.kit.datecalc.common;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
/**
* A series of Standard Tenors used by the financial industry.
*
@@ -43,7 +47,9 @@
public final class StandardTenor {
private StandardTenor() {
}
-
+
+ private static final List<Tenor> ALL;
+
public static final Tenor SPOT = new Tenor(0, TenorCode.SPOT);
public static final Tenor OVERNIGHT = new Tenor(0, TenorCode.OVERNIGHT);
@@ -93,6 +99,36 @@
public static final Tenor T_30Y = new Tenor(30, TenorCode.YEAR);
public static final Tenor T_50Y = new Tenor(50, TenorCode.YEAR);
+
+ public static List<Tenor> getAll() {
+ return ALL;
+ }
+
+ static {
+ List<Tenor> list = new ArrayList<Tenor>();
+ list.add(OVERNIGHT);
+ list.add(SPOT);
+ list.add(T_1D);
+ list.add(T_2D);
+ list.add(T_1W);
+ list.add(T_1M);
+ list.add(T_2M);
+ list.add(T_3M);
+ list.add(T_6M);
+ list.add(T_6M);
+ list.add(T_9M);
+ list.add(T_1Y);
+ list.add(T_2Y);
+ list.add(T_3Y);
+ list.add(T_4Y);
+ list.add(T_5Y);
+ list.add(T_7Y);
+ list.add(T_10Y);
+ list.add(T_20Y);
+ list.add(T_30Y);
+ list.add(T_50Y);
+ ALL = Collections.unmodifiableList(list);
+ }
}
/*
Modified: trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractDateTestCase.java
===================================================================
--- trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractDateTestCase.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractDateTestCase.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -129,6 +129,23 @@
checkDate("Move start:" + startDate + " tenor:" + tenor + " daysToSpot:" + spotLag, cal.moveByTenor(tenor, spotLag),
expectedDate);
}
+
+ /**
+ * Based on UK Holidays for Aug 2006.
+ *
+ * @param startDate
+ * @param tenor
+ * @param spotLag
+ * @param expectedDate
+ * @param holidayHandlerType
+ */
+ protected void checkMoveByTenor(final String startDate, final Tenor tenor, final String expectedDate,
+ final String holidayHandlerType) {
+ final DateCalculator<E> cal = newDateCalculator("bla", holidayHandlerType);
+ cal.setHolidayCalendar(createUKHolidayCalendar());
+ cal.setStartDate(newDate(startDate));
+ checkDate("Move start:" + startDate + " tenor:" + tenor, cal.moveByTenor(tenor), expectedDate);
+ }
}
/*
Modified: trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractForwardDateCalculatorTest.java
===================================================================
--- trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractForwardDateCalculatorTest.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractForwardDateCalculatorTest.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -32,7 +32,10 @@
*/
package net.objectlab.kit.datecalc.common;
+import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Iterator;
+import java.util.List;
import junit.framework.Assert;
@@ -231,7 +234,7 @@
}
- public void testMoveByTenorDays() {
+ public void testMoveByTenorDaysZeroDayToSpot() {
checkMoveByTenor("2006-08-08", StandardTenor.T_1D, 0, "2006-08-09", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-08", new Tenor(2, TenorCode.DAY), 0, "2006-08-10", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-08", new Tenor(10, TenorCode.DAY), 0, "2006-08-18", HolidayHandlerType.FORWARD);
@@ -239,6 +242,14 @@
checkMoveByTenor("2006-08-08", new Tenor(12, TenorCode.DAY), 0, "2006-08-21", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-08", new Tenor(13, TenorCode.DAY), 0, "2006-08-21", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-09-26", new Tenor(4, TenorCode.DAY), 0, "2006-10-02", HolidayHandlerType.FORWARD);
+
+ checkMoveByTenor("2006-08-08", StandardTenor.T_1D, 0, "2006-08-09", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(2, TenorCode.DAY), "2006-08-10", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(10, TenorCode.DAY), "2006-08-18", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(11, TenorCode.DAY), "2006-08-21", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(12, TenorCode.DAY), "2006-08-21", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(13, TenorCode.DAY), "2006-08-21", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-09-26", new Tenor(4, TenorCode.DAY), "2006-10-02", HolidayHandlerType.FORWARD);
}
public void testMoveByTenorDaysOneDayToSpot() {
@@ -259,10 +270,14 @@
checkMoveByTenor("2006-08-07", new Tenor(13, TenorCode.DAY), 2, "2006-08-22", HolidayHandlerType.FORWARD);
}
- public void testMoveByTenorWeek() {
+ public void testMoveByTenorWeekZeroDayToSpot() {
checkMoveByTenor("2006-08-08", StandardTenor.T_1W, 0, "2006-08-15", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-08", new Tenor(2, TenorCode.WEEK), 0, "2006-08-22", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-08", new Tenor(4, TenorCode.WEEK), 0, "2006-09-05", HolidayHandlerType.FORWARD);
+
+ checkMoveByTenor("2006-08-08", StandardTenor.T_1W, "2006-08-15", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(2, TenorCode.WEEK), "2006-08-22", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(4, TenorCode.WEEK), "2006-09-05", HolidayHandlerType.FORWARD);
}
public void testMoveByTenorWeekOneDayToSpot() {
@@ -277,7 +292,7 @@
checkMoveByTenor("2006-08-08", new Tenor(4, TenorCode.WEEK), 2, "2006-09-07", HolidayHandlerType.FORWARD);
}
- public void testMoveByTenorMonth() {
+ public void testMoveByTenorMonthZeroDayToSpot() {
checkMoveByTenor("2006-08-31", StandardTenor.T_1M, 0, "2006-10-02", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-31", StandardTenor.T_2M, 0, "2006-10-31", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-01-31", StandardTenor.T_1M, 0, "2006-02-28", HolidayHandlerType.FORWARD);
@@ -287,6 +302,16 @@
checkMoveByTenor("2006-08-09", StandardTenor.T_1M, 0, "2006-09-11", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-08", new Tenor(2, TenorCode.MONTH), 0, "2006-10-09", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-08", new Tenor(5, TenorCode.MONTH), 0, "2007-01-08", HolidayHandlerType.FORWARD);
+
+ checkMoveByTenor("2006-08-31", StandardTenor.T_1M, "2006-10-02", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-31", StandardTenor.T_2M, "2006-10-31", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-01-31", StandardTenor.T_1M, "2006-02-28", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2008-01-31", StandardTenor.T_1M, "2008-02-29", HolidayHandlerType.FORWARD);
+
+ checkMoveByTenor("2006-08-08", StandardTenor.T_1M, "2006-09-08", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-09", StandardTenor.T_1M, "2006-09-11", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(2, TenorCode.MONTH), "2006-10-09", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-08", new Tenor(5, TenorCode.MONTH), "2007-01-08", HolidayHandlerType.FORWARD);
}
public void testMoveByTenorMonthOneDayToSpot() {
@@ -313,11 +338,16 @@
checkMoveByTenor("2006-08-08", new Tenor(5, TenorCode.MONTH), 2, "2007-01-10", HolidayHandlerType.FORWARD);
}
- public void testMoveByTenorYear() {
+ public void testMoveByTenorYearZeroDayToSpot() {
checkMoveByTenor("2006-08-31", StandardTenor.T_1Y, 0, "2007-08-31", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-31", StandardTenor.T_2Y, 0, "2008-09-01", HolidayHandlerType.FORWARD);
checkMoveByTenor("2008-02-29", StandardTenor.T_1Y, 0, "2009-03-02", HolidayHandlerType.FORWARD);
checkMoveByTenor("2008-02-29", StandardTenor.T_4Y, 0, "2012-02-29", HolidayHandlerType.FORWARD);
+
+ checkMoveByTenor("2006-08-31", StandardTenor.T_1Y, "2007-08-31", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-31", StandardTenor.T_2Y, "2008-09-01", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2008-02-29", StandardTenor.T_1Y, "2009-03-02", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2008-02-29", StandardTenor.T_4Y, "2012-02-29", HolidayHandlerType.FORWARD);
}
public void testMoveByTenorYearOneDayToSpot() {
@@ -334,10 +364,14 @@
checkMoveByTenor("2008-02-29", StandardTenor.T_4Y, 2, "2012-03-05", HolidayHandlerType.FORWARD);
}
- public void testMoveByTenorSpot() {
+ public void testMoveByTenorSpotZeroDayToSpot() {
checkMoveByTenor("2006-08-31", StandardTenor.SPOT, 0, "2006-08-31", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-28", StandardTenor.SPOT, 0, "2006-08-29", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-25", StandardTenor.SPOT, 0, "2006-08-25", HolidayHandlerType.FORWARD);
+
+ checkMoveByTenor("2006-08-31", StandardTenor.SPOT, "2006-08-31", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-28", StandardTenor.SPOT, "2006-08-29", HolidayHandlerType.FORWARD);
+ checkMoveByTenor("2006-08-25", StandardTenor.SPOT, "2006-08-25", HolidayHandlerType.FORWARD);
}
public void testMoveByTenorSpotOneDayToSpot() {
@@ -372,6 +406,86 @@
checkMoveByTenor("2006-08-31", StandardTenor.OVERNIGHT, 2, "2006-09-01", HolidayHandlerType.FORWARD);
checkMoveByTenor("2006-08-28", StandardTenor.OVERNIGHT, 2, "2006-08-30", HolidayHandlerType.FORWARD);
}
+
+ public void testCalculateTenorsZeroDaysToSpot() {
+ List<Tenor> list = new ArrayList<Tenor>();
+ list.add(StandardTenor.OVERNIGHT);
+ list.add(StandardTenor.SPOT);
+ list.add(StandardTenor.T_1D);
+ list.add(StandardTenor.T_2D);
+ list.add(StandardTenor.T_1W);
+ list.add(StandardTenor.T_1M);
+ list.add(StandardTenor.T_2M);
+ list.add(StandardTenor.T_3M);
+ list.add(StandardTenor.T_6M);
+ list.add(StandardTenor.T_9M);
+ list.add(StandardTenor.T_1Y);
+
+ final DateCalculator<E> cal = newDateCalculator("bla", HolidayHandlerType.FORWARD);
+ cal.setHolidayCalendar(createUKHolidayCalendar());
+ String startDate = "2006-08-24";
+ cal.setStartDate(newDate(startDate));
+ List<E> expectedResults = new ArrayList<E>();
+ expectedResults.add(newDate("2006-08-25")); // ON
+ expectedResults.add(newDate("2006-08-24")); // SPOT
+ expectedResults.add(newDate("2006-08-25")); // 1D
+ expectedResults.add(newDate("2006-08-29")); // 2D
+ expectedResults.add(newDate("2006-08-31")); // 1W
+ expectedResults.add(newDate("2006-09-25")); // 1M
+ expectedResults.add(newDate("2006-10-24")); // 2M
+ expectedResults.add(newDate("2006-11-24")); // 3M
+ expectedResults.add(newDate("2007-02-26")); // 6M
+ expectedResults.add(newDate("2007-05-24")); // 9M
+ expectedResults.add(newDate("2007-08-24")); // 1Y
+
+ List<E> results = cal.calculateTenorDates(list);
+ assertEquals("Same size as tenor", list.size(), results.size());
+ Iterator<E> it = results.iterator();
+ Iterator<E> expected = expectedResults.iterator();
+ for (Tenor tenor : list) {
+ assertEquals("Move start:" + startDate + " tenor:" + tenor, expected.next(), it.next());
+ }
+ }
+
+ public void testCalculateTenorsTwoDaysToSpot() {
+ List<Tenor> list = new ArrayList<Tenor>();
+ list.add(StandardTenor.OVERNIGHT);
+ list.add(StandardTenor.SPOT);
+ list.add(StandardTenor.T_1D);
+ list.add(StandardTenor.T_2D);
+ list.add(StandardTenor.T_1W);
+ list.add(StandardTenor.T_1M);
+ list.add(StandardTenor.T_2M);
+ list.add(StandardTenor.T_3M);
+ list.add(StandardTenor.T_6M);
+ list.add(StandardTenor.T_9M);
+ list.add(StandardTenor.T_1Y);
+
+ final DateCalculator<E> cal = newDateCalculator("bla", HolidayHandlerType.FORWARD);
+ cal.setHolidayCalendar(createUKHolidayCalendar());
+ String startDate = "2006-08-24";
+ cal.setStartDate(newDate(startDate));
+ List<E> expectedResults = new ArrayList<E>();
+ expectedResults.add(newDate("2006-08-25")); // ON
+ expectedResults.add(newDate("2006-08-29")); // SPOT
+ expectedResults.add(newDate("2006-08-30")); // 1D
+ expectedResults.add(newDate("2006-08-31")); // 2D
+ expectedResults.add(newDate("2006-09-05")); // 1W
+ expectedResults.add(newDate("2006-09-29")); // 1M
+ expectedResults.add(newDate("2006-10-30")); // 2M
+ expectedResults.add(newDate("2006-11-29")); // 3M
+ expectedResults.add(newDate("2007-02-28")); // 6M - is this correct?
+ expectedResults.add(newDate("2007-05-29")); // 9M
+ expectedResults.add(newDate("2007-08-29")); // 1Y
+
+ List<E> results = cal.calculateTenorDates(list, 2);
+ assertEquals("Same size as tenor", list.size(), results.size());
+ Iterator<E> it = results.iterator();
+ Iterator<E> expected = expectedResults.iterator();
+ for (Tenor tenor : list) {
+ assertEquals("Move start:" + startDate + " tenor:" + tenor, expected.next(), it.next());
+ }
+ }
}
/*
Modified: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarDateCalculator.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarDateCalculator.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -166,6 +166,13 @@
throw new IndexOutOfBoundsException(date + " is after the late boundary " + late);
}
}
+
+ @Override
+ protected Calendar clone(Calendar date) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date.getTime());
+ return cal;
+ }
}
/*
Modified: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateDateCalculator.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateDateCalculator.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -175,6 +175,11 @@
throw new IndexOutOfBoundsException(date + " is after the late boundary " + late);
}
}
+
+ @Override
+ protected Date clone(Date date) {
+ return new Date(date.getTime());
+ }
}
/*
Modified: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateCalculator.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateCalculator.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateCalculator.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -171,6 +171,11 @@
throw new IndexOutOfBoundsException(date + " is after the late boundary " + late);
}
}
+
+ @Override
+ protected LocalDate clone(LocalDate date) {
+ return date;
+ }
}
/*
Modified: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayDateCalculator.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayDateCalculator.java 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayDateCalculator.java 2007-01-05 20:45:33 UTC (rev 238)
@@ -181,6 +181,11 @@
throw new IndexOutOfBoundsException(date + " is after the late boundary " + late);
}
}
+
+ @Override
+ protected YearMonthDay clone(YearMonthDay date) {
+ return date;
+ }
}
/*
Modified: trunk/src/site/changes.xml
===================================================================
--- trunk/src/site/changes.xml 2007-01-05 13:59:28 UTC (rev 237)
+++ trunk/src/site/changes.xml 2007-01-05 20:45:33 UTC (rev 238)
@@ -9,6 +9,8 @@
</properties>
<body>
<release version="1.1.0" date="in SVN" description="Maintenance">
+ <action dev="benoitx" type="add">Added method calculateTenorDates with/without a spot lag to enable calculation of a series of Tenor dates without changing the current business date in the calculator.</action>
+ <action dev="benoitx" type="add">Added method moveByTenor without a spot lag to allow tenor calculation based on the CURRENT date and not the spot lag.</action>
<action dev="benoitx" type="add" issue="1575498" due-to="Paul Hill">Valid Range via HolidayCalendar. HolidayCalendar should replace the simple Set<E> of dates
for holidays. A HolidayCalendar MAY contain an eraly and late boundary, if the calculation break a boundary, an exception is thrown, if there are no
boundaries no exception would be thrown. This would ensure that calculations are not going outside the valid set of holidays.</action>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|