|
From: <be...@us...> - 2006-09-06 12:29:07
|
Revision: 119
http://svn.sourceforge.net/objectlabkit/?rev=119&view=rev
Author: benoitx
Date: 2006-09-06 05:28:21 -0700 (Wed, 06 Sep 2006)
Log Message:
-----------
Separated the IMM calculator from the main DateCalendar, as suggested by Marcin (not everyone would use this).
It is implemented in similar fashion to the PeriodCountCalculator.
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/AbstractDateCalculatorFactory.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/DateCalculatorFactory.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/PeriodCountCalculator.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/StandardTenor.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/TenorCode.java
trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractIMMDateTest.java
trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/TenorTest.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkDateCalculatorFactory.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarBaseDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkDateBaseDateCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDateCalculatorFactory.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultYearMonthDayCalculatorFactory.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/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/LocalDateIMMDateTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/YearMonthDayIMMDateTest.java
Added Paths:
-----------
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractIMMDateCalculator.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/IMMDateCalculator.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Version.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkCalendarCalculatorFactory.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarCalculatorFactory.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarIMMDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarPeriodCountCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkDateIMMDateCalculator.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkCalendarIMMDateTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkDateIMMDateTest.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateIMMDateCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayIMMDateCalculator.java
Removed Paths:
-------------
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/IMMDateTest.java
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 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculator.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -19,7 +19,6 @@
import java.util.Collections;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
/**
@@ -36,9 +35,9 @@
*/
public abstract class AbstractDateCalculator<E> implements DateCalculator<E> {
- protected static final int MONTHS_IN_QUARTER = 3;
+// protected static final int MONTHS_IN_QUARTER = 3;
- protected static final int MONTH_IN_YEAR = 12;
+// protected static final int MONTH_IN_YEAR = 12;
protected static final int DAYS_IN_WEEK = 7;
@@ -111,9 +110,6 @@
return moveByDays(tenor.getUnits());
case WEEK:
return moveByDays(tenor.getUnits() * DAYS_IN_WEEK);
- case IMM:
- setCurrentBusinessDate(getNextIMMDate());
- return this;
default:
throw new UnsupportedOperationException("Sorry not yet...");
}
@@ -212,57 +208,6 @@
return cal;
}
- /**
- * @return the next IMMDate based on current date.
- */
- public E getNextIMMDate() {
- return getNextIMMDate(true, currentBusinessDate, IMMPeriod.QUARTERLY);
- }
-
- /**
- * @param period
- * specify when the "next" IMM is, if quarterly then it is the
- * conventional algorithm.
- * @return the next IMMDate based on current date.
- */
- public E getNextIMMDate(final IMMPeriod period) {
- return getNextIMMDate(true, currentBusinessDate, period);
- }
-
- /**
- * @return the previous IMMDate based on current date.
- */
- public E getPreviousIMMDate() {
- return getNextIMMDate(false, currentBusinessDate, IMMPeriod.QUARTERLY);
- }
-
- /**
- * @param period
- * specify when the "previous" IMM is, if quarterly then it is
- * the conventional algorithm.
- * @return the previous IMMDate based on current date.
- */
- public E getPreviousIMMDate(final IMMPeriod period) {
- return getNextIMMDate(false, currentBusinessDate, period);
- }
-
- /**
- * Returns a list of IMM dates between 2 dates, it will exclude the start
- * date if it is an IMM date but would include the end date if it is an IMM
- * (same as IMMPeriod.QUARTERLY).
- *
- * @param start
- * start of the interval, excluded
- * @param end
- * end of the interval, may be included.
- * @return list of IMM dates
- */
- public List<E> getIMMDates(final E start, final E end) {
- return getIMMDates(start, end, IMMPeriod.QUARTERLY);
- }
-
- protected abstract E getNextIMMDate(final boolean requestNextIMM, final E theStartDate, final IMMPeriod period);
-
protected abstract DateCalculator<E> createNewCalcultaor(String calcName, E theStartDate, Set<E> holidays,
HolidayHandler<E> handler);
}
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculatorFactory.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculatorFactory.java 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculatorFactory.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -33,9 +33,9 @@
protected final ConcurrentMap<String, Set<E>> holidays = new ConcurrentHashMap<String, Set<E>>();
- public abstract DateCalculator<E> getDateCalculator(String name, String holidayHandlerType);
+// public abstract DateCalculator<E> getDateCalculator(String name, String holidayHandlerType);
- public abstract PeriodCountCalculator<E> getPeriodCountCalculator();
+// public abstract PeriodCountCalculator<E> getPeriodCountCalculator();
/**
* Use this method to register a set of holidays for a given calendar, it
@@ -51,5 +51,4 @@
public void registerHolidays(final String name, final Set<E> holidaysSet) {
this.holidays.put(name, holidaysSet);
}
-
}
Added: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractIMMDateCalculator.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractIMMDateCalculator.java (rev 0)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractIMMDateCalculator.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -0,0 +1,96 @@
+/*
+ * $Id: AbstractDateCalculator.java 108 2006-09-05 10:13:01Z benoitx $
+ *
+ * Copyright 2006 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package net.objectlab.kit.datecalc.common;
+
+import java.util.List;
+
+/**
+ * Abstract implementation in order to encapsulate all the common functionality
+ * between Jdk and Joda implementations. It is parametrized on <code><E></code>
+ * but basically <code>Date</code> and <code>LocalDate</code> are the only
+ * viable values for it for now.
+ *
+ * @author Marcin Jekot
+ * @author $LastChangedBy: benoitx $
+ * @version $Revision: 108 $ $Date: 2006-09-05 11:13:01 +0100 (Tue, 05 Sep 2006) $
+ *
+ * @param <E>
+ */
+public abstract class AbstractIMMDateCalculator<E> implements IMMDateCalculator<E> {
+
+ protected static final int MONTHS_IN_QUARTER = 3;
+
+ protected static final int MONTH_IN_YEAR = 12;
+
+ protected static final int DAYS_IN_WEEK = 7;
+
+ /**
+ * @param startDate
+ * @return the next IMMDate based on current date.
+ */
+ public E getNextIMMDate(final E startDate) {
+ return getNextIMMDate(true, startDate, IMMPeriod.QUARTERLY);
+ }
+
+ /**
+ * @param startDate
+ * @param period
+ * specify when the "next" IMM is, if quarterly then it is the
+ * conventional algorithm.
+ * @return the next IMMDate based on current date.
+ */
+ public E getNextIMMDate(final E startDate, final IMMPeriod period) {
+ return getNextIMMDate(true, startDate, period);
+ }
+
+ /**
+ * @param startDate
+ * @return the previous IMMDate based on current date.
+ */
+ public E getPreviousIMMDate(final E startDate) {
+ return getNextIMMDate(false, startDate, IMMPeriod.QUARTERLY);
+ }
+
+ /**
+ * @param startDate
+ * @param period
+ * specify when the "previous" IMM is, if quarterly then it is
+ * the conventional algorithm.
+ * @return the previous IMMDate based on current date.
+ */
+ public E getPreviousIMMDate(final E startDate, final IMMPeriod period) {
+ return getNextIMMDate(false, startDate, period);
+ }
+
+ /**
+ * Returns a list of IMM dates between 2 dates, it will exclude the start
+ * date if it is an IMM date but would include the end date if it is an IMM
+ * (same as IMMPeriod.QUARTERLY).
+ *
+ * @param start
+ * start of the interval, excluded
+ * @param end
+ * end of the interval, may be included.
+ * @return list of IMM dates
+ */
+ public List<E> getIMMDates(final E start, final E end) {
+ return getIMMDates(start, end, IMMPeriod.QUARTERLY);
+ }
+
+ protected abstract E getNextIMMDate(final boolean requestNextIMM, final E theStartDate, final IMMPeriod period);
+}
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 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculator.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -17,7 +17,6 @@
*/
package net.objectlab.kit.datecalc.common;
-import java.util.List;
import java.util.Set;
/**
@@ -193,81 +192,4 @@
* calendar.moveByTenor(StandardTenor.T_2M).getCurrentBusinessDate();)
*/
DateCalculator<E> moveByTenor(final Tenor tenor);
-
- /**
- * Checks if a given date is an official IMM Date (3rd Wednesdays of
- * March/June/Sept/Dec.
- *
- * @param date
- * @return true if that date is an IMM date.
- */
- boolean isIMMDate(E date);
-
- /**
- * Starting from the current business date, it will return the next IMM
- * Date, even if the current business date is an IMM date (same as calling
- * getNextIMMDate(IMMPeriod.QUARTERLY)).
- *
- * @return the next IMMDate based on current business date.
- */
- E getNextIMMDate();
-
- /**
- * Starting from the current business date, it will return the next IMM Date
- * based on the IMMPeriod, even if the current business date is an IMM date.
- *
- * @param period
- * specify when the "next" IMM is, if quarterly then it is the
- * conventional algorithm.
- * @return the next IMMDate based on current date.
- */
- E getNextIMMDate(IMMPeriod period);
-
- /**
- * Starting from the current business date, it will return the previous IMM
- * Date, even if the current business date is an IMM date.
- *
- * @return the previous IMMDate based on current date.
- */
- E getPreviousIMMDate();
-
- /**
- * Starting from the current business date, it will return the previous IMM
- * Date based on the IMMPeriod, even if the current business date is an IMM
- * date.
- *
- * @param period
- * specify when the "previous" IMM is, if quarterly then it is
- * the conventional algorithm.
- * @return the previous IMMDate based on current date.
- */
- E getPreviousIMMDate(IMMPeriod period);
-
- /**
- * Returns a list of IMM dates between 2 dates, it will exclude the start
- * date if it is an IMM date but would include the end date if it is an IMM
- * (same as as calling getIMMDates(start,end,IMMPeriod.QUARTERLY)).
- *
- * @param start
- * start of the interval, excluded
- * @param end
- * end of the interval, may be included.
- * @return list of IMM dates
- */
- List<E> getIMMDates(final E start, final E end);
-
- /**
- * Returns a list of IMM dates between 2 dates, it will exclude the start
- * date if it is an IMM date but would include the end date if it is an IMM.
- *
- * @param start
- * start of the interval, excluded
- * @param end
- * end of the interval, may be included.
- * @param period
- * specify when the "next" IMM is, if quarterly then it is the
- * conventional algorithm.
- * @return list of IMM dates
- */
- List<E> getIMMDates(final E start, final E end, final IMMPeriod period);
}
\ No newline at end of file
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculatorFactory.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculatorFactory.java 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculatorFactory.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -60,4 +60,9 @@
* @return a PeriodCountCalculator
*/
PeriodCountCalculator<E> getPeriodCountCalculator();
+
+ /**
+ * @return an IMMDateCalculator
+ */
+ IMMDateCalculator<E> getIMMDateCalculator();
}
Added: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/IMMDateCalculator.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/IMMDateCalculator.java (rev 0)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/IMMDateCalculator.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -0,0 +1,109 @@
+/*
+ * $Id: DateCalculator.java 109 2006-09-05 11:16:39Z benoitx $
+ *
+ * Copyright 2006 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package net.objectlab.kit.datecalc.common;
+
+import java.util.List;
+
+/**
+ * The IMMDates are defined
+ *
+ * @author Benoit Xhenseval
+ * @author $LastChangedBy: benoitx $
+ * @version $Revision: 109 $ $Date: 2006-09-05 12:16:39 +0100 (Tue, 05 Sep 2006) $
+ */
+public interface IMMDateCalculator<E> {
+ /**
+ * Checks if a given date is an official IMM Date (3rd Wednesdays of
+ * March/June/Sept/Dec.
+ *
+ * @param date
+ * @return true if that date is an IMM date.
+ */
+ boolean isIMMDate(final E date);
+
+ /**
+ * Starting from the current business date, it will return the next IMM
+ * Date, even if the current business date is an IMM date (same as calling
+ * getNextIMMDate(IMMPeriod.QUARTERLY)).
+ *
+ * @param startDate
+ * @return the next IMMDate based on current business date.
+ */
+ E getNextIMMDate(final E startDate);
+
+ /**
+ * Starting from the current business date, it will return the next IMM Date
+ * based on the IMMPeriod, even if the current business date is an IMM date.
+ *
+ * @param startDate
+ * @param period
+ * specify when the "next" IMM is, if quarterly then it is the
+ * conventional algorithm.
+ * @return the next IMMDate based on current date.
+ */
+ E getNextIMMDate(final E startDate, final IMMPeriod period);
+
+ /**
+ * Starting from the current business date, it will return the previous IMM
+ * Date, even if the current business date is an IMM date.
+ *
+ * @param startDate
+ * @return the previous IMMDate based on current date.
+ */
+ E getPreviousIMMDate(final E startDate);
+
+ /**
+ * Starting from the current business date, it will return the previous IMM
+ * Date based on the IMMPeriod, even if the current business date is an IMM
+ * date.
+ *
+ * @param period
+ * specify when the "previous" IMM is, if quarterly then it is
+ * the conventional algorithm.
+ * @return the previous IMMDate based on current date.
+ */
+ E getPreviousIMMDate(final E startDate, final IMMPeriod period);
+
+ /**
+ * Returns a list of IMM dates between 2 dates, it will exclude the start
+ * date if it is an IMM date but would include the end date if it is an IMM
+ * (same as as calling getIMMDates(start,end,IMMPeriod.QUARTERLY)).
+ *
+ * @param start
+ * start of the interval, excluded
+ * @param end
+ * end of the interval, may be included.
+ * @return list of IMM dates
+ */
+ List<E> getIMMDates(final E start, final E end);
+
+ /**
+ * Returns a list of IMM dates between 2 dates, it will exclude the start
+ * date if it is an IMM date but would include the end date if it is an IMM.
+ *
+ * @param start
+ * start of the interval, excluded
+ * @param end
+ * end of the interval, may be included.
+ * @param period
+ * specify when the "next" IMM is, if quarterly then it is the
+ * conventional algorithm.
+ * @return list of IMM dates
+ */
+ List<E> getIMMDates(final E start, final E end, final IMMPeriod period);
+}
\ No newline at end of file
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/PeriodCountCalculator.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/PeriodCountCalculator.java 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/PeriodCountCalculator.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -28,17 +28,17 @@
*/
public interface PeriodCountCalculator<E> {
- final int YEAR_360 = 360;
+ int YEAR_360 = 360;
- final int MONTHS_IN_YEAR = 12;
+ int MONTHS_IN_YEAR = 12;
- final double YEAR_365_0 = 365.0;
+ double YEAR_365_0 = 365.0;
- final double YEAR_360_0 = 360.0;
+ double YEAR_360_0 = 360.0;
- final int MONTH_31_DAYS = 31;
+ int MONTH_31_DAYS = 31;
- final int MONTH_30_DAYS = 30;
+ int MONTH_30_DAYS = 30;
int dayDiff(final E start, final E end, PeriodCountBasis basis);
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 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/StandardTenor.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -69,6 +69,4 @@
public static final Tenor T_30Y = new Tenor(30, TenorCode.YEAR);
public static final Tenor T_50Y = new Tenor(50, TenorCode.YEAR);
-
- public static final Tenor IMM = new Tenor(0, TenorCode.IMM);
}
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/TenorCode.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/TenorCode.java 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/TenorCode.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -17,7 +17,7 @@
public enum TenorCode {
OVERNIGHT("ON", false), TOMNEXT("TN", false), SPOT("SP", false), SPOTNEXT("SN", false), SPOTWEEK("SW", false), DAY("D", true), WEEK(
- "W", true), MONTH("M", true), YEAR("Y", true), IMM("IMM", false);
+ "W", true), MONTH("M", true), YEAR("Y", true);
private final String code;
Added: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Version.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Version.java (rev 0)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Version.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -0,0 +1,68 @@
+/*
+ * $Id: org.eclipse.jdt.ui.prefs 99 2006-09-04 20:30:25Z marchy $
+ *
+ * Copyright 2006 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package net.objectlab.kit.datecalc.common;
+
+
+import java.io.*;
+
+/**
+ *
+ * @author xhensevb
+ * @author $LastChangedBy: marchy $
+ * @version $Revision: 99 $ $Date: 2006-09-04 21:30:25 +0100 (Mon, 04 Sep 2006) $
+ *
+ */
+public class Version {
+ public static void main(String[] args) throws Exception {
+ if (args.length != 1) {
+ System.err.println("Usage: java version <.class file>");
+ System.exit(1);
+ }
+
+ if (!new File(args[0]).exists()) {
+ System.err.println(args[0] + " does not exist!");
+ System.exit(2);
+ }
+
+ DataInputStream dis = new DataInputStream(new FileInputStream(args[0]));
+ int magic = dis.readInt();
+ if (magic != 0xcafebabe) {
+ System.err.println(args[0] + " is not a .class file");
+ System.exit(3);
+ }
+
+ int minor = dis.readShort();
+ int major = dis.readShort();
+ System.out.println("class file version is " + major + "." + minor);
+
+ String version = null;
+
+ if (major < 48) {
+ version = "1.3.1";
+ } else if (major == 48) {
+ version = "1.4.2";
+ } else if (major == 49) {
+ version = "1.5";
+ } else if (major == 50) {
+ version = "6";
+ } else {
+ version = "7";
+ }
+ System.out.println("You need to use JDK " + version + " or above");
+ }
+}
\ No newline at end of file
Modified: trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractIMMDateTest.java
===================================================================
--- trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractIMMDateTest.java 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractIMMDateTest.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -7,145 +7,135 @@
public abstract class AbstractIMMDateTest<E> extends TestCase {
- private DateCalculator<E> cal;
+ private IMMDateCalculator<E> cal;
public void setUp() {
cal = getDateCalculator("bla");
}
- protected abstract DateCalculator<E> getDateCalculator(String name);
+ protected abstract IMMDateCalculator<E> getDateCalculator(String name);
protected abstract E parseDate(String string);
- private void checkImm(final DateCalculator<E> cal, final E date, final boolean expected) {
+ private void checkImm(final IMMDateCalculator<E> cal, final E date, final boolean expected) {
assertEquals("check " + date, expected, cal.isIMMDate(date));
}
- public void testSanityCheck() {
- Assert.assertEquals("Name", "bla", cal.getName());
- Assert.assertEquals("Holidays size", 0, cal.getNonWorkingDays().size());
- }
-
public void testNextIMM() {
- final E startDate = parseDate("2006-08-01");
- cal.setStartDate(startDate);
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getNextIMMDate());
+ E startDate = parseDate("2006-08-01");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-01-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-02-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-03-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getNextIMMDate());
+ startDate = parseDate("2006-01-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-02-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-03-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-04-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-05-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-06-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getNextIMMDate());
+ startDate = parseDate("2006-04-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-05-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-06-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-07-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-08-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-09-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getNextIMMDate());
+ startDate = parseDate("2006-07-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-08-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-09-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-10-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-12-20"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-11-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-12-20"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-12-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-12-20"), cal.getNextIMMDate());
+ startDate = parseDate("2006-10-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-11-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-12-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-03-14"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-03-15"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-03-16"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getNextIMMDate());
+ startDate = parseDate("2006-03-14");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-03-15");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-03-16");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-06-20"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-06-21"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-06-22"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getNextIMMDate());
+ startDate = parseDate("2006-06-20");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-06-21");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-06-22");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-09-19"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-09-20"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-12-20"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-09-21"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-12-20"), cal.getNextIMMDate());
+ startDate = parseDate("2006-09-19");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-09-20");
+ Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-09-21");
+ Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-12-19"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-12-20"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-12-20"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2007-03-21"), cal.getNextIMMDate());
- cal.setStartDate(parseDate("2006-12-21"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2007-03-21"), cal.getNextIMMDate());
+ startDate = parseDate("2006-12-19");
+ Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-12-20");
+ Assert.assertEquals("From " + startDate, parseDate("2007-03-21"), cal.getNextIMMDate(startDate));
+ startDate = parseDate("2006-12-21");
+ Assert.assertEquals("From " + startDate, parseDate("2007-03-21"), cal.getNextIMMDate(startDate));
- cal.setStartDate(parseDate("2006-03-15"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getNextIMMDate());
+ startDate = parseDate("2006-03-15");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getNextIMMDate(startDate));
}
public void testNextIMMWithPeriod() {
- final E startDate = parseDate("2006-08-01");
- cal.setStartDate(startDate);
+ E startDate = parseDate("2006-08-01");
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getNextIMMDate());
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getNextIMMDate(startDate));
IMMPeriod period = IMMPeriod.QUARTERLY;
- cal.setStartDate(parseDate("2006-01-09"));
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-03-15"), cal
- .getNextIMMDate(period));
+ startDate = parseDate("2006-01-09");
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-03-15"), cal.getNextIMMDate(startDate,
+ period));
period = IMMPeriod.BI_ANNUALY_JUN_DEC;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-06-21"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate,
+ period));
period = IMMPeriod.BI_ANNUALY_MAR_SEP;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-03-15"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-03-15"), cal.getNextIMMDate(startDate,
+ period));
period = IMMPeriod.ANNUALLY;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2007-03-21"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2007-03-21"), cal.getNextIMMDate(startDate,
+ period));
- cal.setStartDate(parseDate("2006-03-20"));
+ startDate = parseDate("2006-03-20");
period = IMMPeriod.QUARTERLY;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-06-21"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate,
+ period));
period = IMMPeriod.BI_ANNUALY_JUN_DEC;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-06-21"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate,
+ period));
period = IMMPeriod.BI_ANNUALY_MAR_SEP;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-09-20"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-09-20"), cal.getNextIMMDate(startDate,
+ period));
period = IMMPeriod.ANNUALLY;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2007-06-20"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2007-06-20"), cal.getNextIMMDate(startDate,
+ period));
- cal.setStartDate(parseDate("2006-03-15"));
+ startDate = parseDate("2006-03-15");
period = IMMPeriod.QUARTERLY;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-06-21"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate,
+ period));
period = IMMPeriod.BI_ANNUALY_JUN_DEC;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-06-21"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-06-21"), cal.getNextIMMDate(startDate,
+ period));
period = IMMPeriod.BI_ANNUALY_MAR_SEP;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2006-09-20"), cal
- .getNextIMMDate(period));
- cal.setStartDate(parseDate("2006-03-15"));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2006-09-20"), cal.getNextIMMDate(startDate,
+ period));
+ startDate = parseDate("2006-03-15");
period = IMMPeriod.ANNUALLY;
- Assert.assertEquals("From " + cal.getStartDate() + " period:" + period, parseDate("2007-06-20"), cal
- .getNextIMMDate(period));
+ Assert.assertEquals("From " + startDate + " period:" + period, parseDate("2007-06-20"), cal.getNextIMMDate(startDate,
+ period));
}
public void testIfIMMDate() {
- final E startDate = parseDate("2006-08-01");
- cal.setStartDate(startDate);
-
checkImm(cal, parseDate("2006-08-01"), false);
checkImm(cal, parseDate("2006-03-14"), false);
@@ -165,89 +155,69 @@
checkImm(cal, parseDate("2006-12-21"), false);
}
- public void testMoveByIMMTenor() {
- final E startDate = parseDate("2006-04-01");
- cal.setStartDate(startDate);
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.moveByTenor(StandardTenor.IMM)
- .getCurrentBusinessDate());
- }
-
- public void testMoveByNullTenor() {
- final E startDate = parseDate("2006-04-01");
- cal.setStartDate(startDate);
-
- try {
- cal.moveByTenor(null);
- Assert.fail("Should have thrown IllegalArgumentException");
- } catch (final IllegalArgumentException e) {
- // ok
- }
- }
-
public void testPreviousIMM() {
- final E startDate = parseDate("2006-08-01");
- cal.setStartDate(startDate);
+ E startDate = parseDate("2006-08-01");
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getPreviousIMMDate());
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate));
- cal.setStartDate(parseDate("2006-01-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2005-12-21"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-02-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2005-12-21"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-03-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2005-12-21"), cal.getPreviousIMMDate());
+ startDate = parseDate("2006-01-09");
+ Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-02-09");
+ Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-03-09");
+ Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate));
- cal.setStartDate(parseDate("2006-04-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-05-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-06-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getPreviousIMMDate());
+ startDate = parseDate("2006-04-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-05-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-06-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate));
- cal.setStartDate(parseDate("2006-07-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-08-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-09-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getPreviousIMMDate());
+ startDate = parseDate("2006-07-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-08-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-09-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate));
- cal.setStartDate(parseDate("2006-10-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-11-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-12-09"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getPreviousIMMDate());
+ startDate = parseDate("2006-10-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-11-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-12-09");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate));
// close to dates
- cal.setStartDate(parseDate("2006-03-14"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2005-12-21"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-03-15"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2005-12-21"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-03-16"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getPreviousIMMDate());
+ startDate = parseDate("2006-03-14");
+ Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-03-15");
+ Assert.assertEquals("From " + startDate, parseDate("2005-12-21"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-03-16");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate));
- cal.setStartDate(parseDate("2006-06-20"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-06-21"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-03-15"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-06-22"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getPreviousIMMDate());
+ startDate = parseDate("2006-06-20");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-06-21");
+ Assert.assertEquals("From " + startDate, parseDate("2006-03-15"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-06-22");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate));
- cal.setStartDate(parseDate("2006-09-19"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-09-20"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-06-21"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-09-21"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getPreviousIMMDate());
+ startDate = parseDate("2006-09-19");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-09-20");
+ Assert.assertEquals("From " + startDate, parseDate("2006-06-21"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-09-21");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate));
- cal.setStartDate(parseDate("2006-12-19"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-12-20"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-09-20"), cal.getPreviousIMMDate());
- cal.setStartDate(parseDate("2006-12-21"));
- Assert.assertEquals("From " + cal.getStartDate(), parseDate("2006-12-20"), cal.getPreviousIMMDate());
+ startDate = parseDate("2006-12-19");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-12-20");
+ Assert.assertEquals("From " + startDate, parseDate("2006-09-20"), cal.getPreviousIMMDate(startDate));
+ startDate = parseDate("2006-12-21");
+ Assert.assertEquals("From " + startDate, parseDate("2006-12-20"), cal.getPreviousIMMDate(startDate));
}
public void testIMMLists() {
Modified: trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/TenorTest.java
===================================================================
--- trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/TenorTest.java 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/TenorTest.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -50,7 +50,6 @@
checkValidTenor("ON", false, TenorCode.OVERNIGHT, 0);
checkValidTenor("SW", false, TenorCode.SPOTWEEK, 0);
checkValidTenor("SN", false, TenorCode.SPOTNEXT, 0);
- checkValidTenor("IMM", false, TenorCode.IMM, 0);
checkValidTenor("TN", false, TenorCode.TOMNEXT, 0);
checkValidTenor("1D", true, TenorCode.DAY, 1);
@@ -79,7 +78,6 @@
checkToString("ON");
checkToString("SW");
checkToString("SN");
- checkToString("IMM");
checkToString("TN");
checkToString("1D");
checkToString("1W");
Added: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkCalendarCalculatorFactory.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkCalendarCalculatorFactory.java (rev 0)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkCalendarCalculatorFactory.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -0,0 +1,89 @@
+/*
+ * $Id: DefaultJdkDateCalculatorFactory.java 96 2006-09-04 15:01:20Z benoitx $
+ *
+ * Copyright 2006 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package net.objectlab.kit.datecalc.jdk;
+
+import java.util.Calendar;
+
+import net.objectlab.kit.datecalc.common.AbstractDateCalculatorFactory;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+import net.objectlab.kit.datecalc.common.IMMDateCalculator;
+
+/**
+ * TODO add javadoc
+ *
+ * @author Benoit Xhenseval
+ * @author $LastChangedBy: benoitx $
+ * @version $Revision: 96 $ $Date: 2006-09-04 16:01:20 +0100 (Mon, 04 Sep 2006) $
+ *
+ */
+public class DefaultJdkCalendarCalculatorFactory extends AbstractDateCalculatorFactory<Calendar> implements JdkCalendarCalculatorFactory {
+
+ private static final DefaultJdkCalendarCalculatorFactory DEFAULT = new DefaultJdkCalendarCalculatorFactory();
+
+ private static final CalendarPeriodCountCalculator PCC = new CalendarPeriodCountCalculator();
+
+ private static final JdkCalendarIMMDateCalculator IMMDC = new JdkCalendarIMMDateCalculator();
+
+ public static JdkCalendarCalculatorFactory getDefaultInstance() {
+ return DEFAULT;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getDateCalculator(java.lang.String,
+ * java.lang.String)
+ */
+ public JdkCalendarDateCalculator getDateCalculator(final String name, final String holidayHandlerType) {
+ final JdkCalendarBaseDateCalculator cal = new JdkCalendarBaseDateCalculator();
+ cal.setName(name);
+ if (holidays.containsKey(name)) {
+ cal.setNonWorkingDays(holidays.get(name));
+ }
+
+ if (holidayHandlerType == null) {
+ return cal;
+ } else if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new ForwardHandler());
+ } else if (HolidayHandlerType.BACKWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new BackwardHandler());
+ } else if (HolidayHandlerType.MODIFIED_FOLLLOWING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new ModifiedFollowingHandler());
+ } else if (HolidayHandlerType.MODIFIED_PRECEEDING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new ModifiedPreceedingHandler());
+ } else {
+ throw new UnsupportedOperationException("Unsupported HolidayHandler: " + holidayHandlerType);
+ }
+
+ return cal;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getPeriodCountCalculator()
+ */
+ public CalendarPeriodCountCalculator getPeriodCountCalculator() {
+ return PCC;
+ }
+
+ public IMMDateCalculator<Calendar> getIMMDateCalculator() {
+ return IMMDC;
+ }
+
+}
Modified: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkDateCalculatorFactory.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkDateCalculatorFactory.java 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkDateCalculatorFactory.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -21,6 +21,7 @@
import net.objectlab.kit.datecalc.common.AbstractDateCalculatorFactory;
import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+import net.objectlab.kit.datecalc.common.IMMDateCalculator;
/**
* TODO add javadoc
@@ -36,6 +37,8 @@
private static final JdkDatePeriodCountCalculator PCC = new DatePeriodCountCalculator();
+ private static final JdkDateIMMDateCalculator IMMDC = new JdkDateIMMDateCalculator();
+
public static JdkDateCalculatorFactory getDefaultInstance() {
return DEFAULT;
}
@@ -46,7 +49,6 @@
* @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getDateCalculator(java.lang.String,
* java.lang.String)
*/
- @Override
public JdkDateCalculator getDateCalculator(final String name, final String holidayHandlerType) {
final JdkDateBaseDateCalculator cal = new JdkDateBaseDateCalculator();
cal.setName(name);
@@ -76,9 +78,12 @@
*
* @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getPeriodCountCalculator()
*/
- @Override
public JdkDatePeriodCountCalculator getPeriodCountCalculator() {
return PCC;
}
+ public IMMDateCalculator<Date> getIMMDateCalculator() {
+ return IMMDC;
+ }
+
}
Modified: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarBaseDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarBaseDateCalculator.java 2006-09-06 09:58:04 UTC (rev 118)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarBaseDateCalculator.java 2006-09-06 12:28:21 UTC (rev 119)
@@ -17,16 +17,13 @@
*/
package net.objectlab.kit.datecalc.jdk;
-import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
-import java.util.List;
import java.util.Set;
import net.objectlab.kit.datecalc.common.AbstractDateCalculator;
import net.objectlab.kit.datecalc.common.DateCalculator;
import net.objectlab.kit.datecalc.common.HolidayHandler;
-import net.objectlab.kit.datecalc.common.IMMPeriod;
import net.objectlab.kit.datecalc.common.Tenor;
import net.objectlab.kit.datecalc.common.WorkingWeek;
@@ -93,123 +90,7 @@
return new JdkCalendarBaseDateCalculator(name, startDate, holidays, handler);
}
- /**
- * Returns a list of IMM dates between 2 dates, it will exclude the start
- * date if it is an IMM date but would include the end date if it is an IMM.
- *
- * @param start
- * start of the interval, excluded
- * @param end
- * end of the interval, may be included.
- * @param period
- * specify when the "next" IMM is, if quarterly then it is the
- * conventional algorithm.
- * @return list of IMM dates
- */
- public List<Calendar> getIMMDates(final Calendar start, final Calendar end, final IMMPeriod period) {
-
- final List<Calendar> dates = new ArrayList<Calendar>();
- Calendar cal = (Calendar) start.clone();
- while (true) {
- cal = getNextIMMDate(true, cal, period);
- if (!cal.after(end)) {
- dates.add(cal);
- } else {
- break;
- }
- }
-
- return dates;
- }
-
@Override
- protected Calendar getNextIMMDate(final boolean requestNextIMM, final Calendar startDate, final IMMPeriod period) {
-
- Calendar cal = (Calendar) startDate.clone();
-
- if (isIMMMonth(cal)) {
- moveToIMMDay(cal);
- // TODO simplify this if condition
-// if (forward ^ cal.getTime().before(startDate) ||
-// cal.getTime().equals(startDate)) {
- if ((requestNextIMM && cal.after(startDate)) || (!requestNextIMM && cal.before(startDate))) {
- return cal;
- }
- }
-
- final int delta = (requestNextIMM ? 1 : -1);
- do {
- cal.add(Calendar.MONTH, delta);
- } while (!isIMMMonth(cal));
-
- moveToIMMDay(cal);
-
- final int month = cal.get(Calendar.MONTH);
- if ( (period == IMMPeriod.BI_ANNUALY_JUN_DEC
- && (Calendar.MARCH == month || Calendar.SEPTEMBER==month) )
- ||
- ( period == IMMPeriod.BI_ANNUALY_MAR_SEP
- && (Calendar.JUNE == month || Calendar.DECEMBER==month) ) ) {
- // need to move to the next one.
- cal = getNextIMMDate(requestNextIMM, cal, period);
- } else if (period == IMMPeriod.ANNUALLY) {
- // second jump
- cal = getNextIMMDate(requestNextIMM, cal, IMMPeriod.QUARTERLY);
- // third jump
- cal = getNextIMMDate(requestNextIMM, cal, IMMPeriod.QUARTERLY);
- // fourth jump
- cal = getNextIMMDate(requestNextIMM, cal, IMMPeriod.QUARTERLY);
- // fifth jump
- cal = getNextIMMDate(requestNextIMM, cal, IMMPeriod.QUARTERLY);
- }
-
-
- return cal;
- }
-
- private boolean isIMMMonth(final Calendar cal) {
- final int month = cal.get(Calendar.MONTH);
-
- switch (month) {
- case Calendar.MARCH:
- case Calendar.JUNE:
- case Calendar.SEPTEMBER:
- case Calendar.DECEMBER:
- return true;
- }
-
- return false;
- }
-
- /**
- * Assumes that the month is correct, get the day for the 3rd wednesday.
- *
- * @param first
- * @return
- */
- private void moveToIMMDay(final Calendar cal) {
- cal.set(Calendar.DAY_OF_MONTH, 1);
-
- // go to 1st wed
- final int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
- if (dayOfWeek < Calendar.WEDNESDAY) {
- cal.add(Calendar.DA...
[truncated message content] |