|
From: <be...@us...> - 2006-09-01 14:08:37
|
Revision: 71
http://svn.sourceforge.net/objectlabkit/?rev=71&view=rev
Author: benoitx
Date: 2006-09-01 07:07:57 -0700 (Fri, 01 Sep 2006)
Log Message:
-----------
Introduced a whole series of tests for YearMonthDay based on a generic version of LocalDate tests.
Marcin, you should base your tests on these Abstract Test (move them to common). I also fixed some BUGS in the tests.
Modified Paths:
--------------
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/HolidayHandlerYearMonthDayWrapper.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/DateCalculatorCombinationTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/DateCalculatorFactoryTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/IMMDateTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/PeriodCountCalculatorTest.java
Added Paths:
-----------
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDateCalculatorFactory.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDatePeriodCountCalculator.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/DefaultYearMonthDayPeriodCountCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateBackwardHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateForwardHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedFollowingHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedPreceedingHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayBackwardHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayForwardHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedFollowingHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedPreceedingHandler.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/AbstractBackwardDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/AbstractDateTestCase.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/AbstractForwardDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/AbstractModifiedFollowingDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/AbstractModifiedPreceedingDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/LocalDateBackwardDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/LocalDateForwardDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedFollowingDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedPreceedingDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/YearMonthDayBackwardDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/YearMonthDayForwardDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedFollowingDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedPrecedingDateCalculatorTest.java
Removed Paths:
-------------
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/BackwardHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultDateCalculatorFactory.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultPeriodCountCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ForwardHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ModifiedFollowingHandler.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ModifiedPreceedingHandler.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/BackwardDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/ForwardDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/ModifiedFollowingDateCalculatorTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/ModifiedPreceedingDateCalculatorTest.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-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculator.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -51,8 +51,7 @@
private HolidayHandler<E> holidayHandler;
- protected AbstractDateCalculator(final String name,
- final Set<E> nonWorkingDays, final HolidayHandler<E> holidayHandler) {
+ protected AbstractDateCalculator(final String name, final Set<E> nonWorkingDays, final HolidayHandler<E> holidayHandler) {
this.name = name;
this.nonWorkingDays = nonWorkingDays;
this.holidayHandler = holidayHandler;
@@ -152,6 +151,20 @@
}
public DateCalculator<E> moveByBusinessDays(final int businessDays) {
+ if (businessDays > 0
+ && holidayHandler != null
+ && (holidayHandler.getType().equals(HolidayHandlerType.BACKWARD) || holidayHandler.getType().equals(
+ HolidayHandlerType.MODIFIED_PRECEEDING))) {
+ throw new IllegalArgumentException("A " + HolidayHandlerType.MODIFIED_PRECEEDING + " or "
+ + HolidayHandlerType.BACKWARD + " does not allow positive steps for moveByBusinessDays");
+ } else if (businessDays < 0
+ && holidayHandler != null
+ && (holidayHandler.getType().equals(HolidayHandlerType.FORWARD) || holidayHandler.getType().equals(
+ HolidayHandlerType.MODIFIED_FOLLLOWING))) {
+ throw new IllegalArgumentException("A " + HolidayHandlerType.MODIFIED_FOLLLOWING + " or "
+ + HolidayHandlerType.FORWARD + " does not allow negative steps for moveByBusinessDays");
+ }
+
final int numberOfStepsLeft = Math.abs(businessDays);
final int step = (businessDays < 0 ? -1 : 1);
@@ -179,13 +192,9 @@
return this;
}
- if (holidayHandler == null
- && calendar.getHolidayHandlerType() != null
- || holidayHandler != null
- && !holidayHandler.getType().equals(
- calendar.getHolidayHandlerType())) {
- throw new IllegalArgumentException(
- "Combined Calendars cannot have different handler types");
+ if (holidayHandler == null && calendar.getHolidayHandlerType() != null || holidayHandler != null
+ && !holidayHandler.getType().equals(calendar.getHolidayHandlerType())) {
+ throw new IllegalArgumentException("Combined Calendars cannot have different handler types");
}
final Set<E> newSet = new HashSet<E>();
@@ -196,8 +205,8 @@
newSet.addAll(calendar.getNonWorkingDays());
}
- final DateCalculator<E> cal = createNewCalcultaor(getName() + "/"
- + calendar.getName(), getStartDate(), newSet, holidayHandler);
+ final DateCalculator<E> cal = createNewCalcultaor(getName() + "/" + calendar.getName(), getStartDate(), newSet,
+ holidayHandler);
return cal;
}
@@ -216,9 +225,8 @@
return getNextIMMDate(false, currentBusinessDate);
}
- protected abstract E getNextIMMDate(final boolean forward,
- final E theStartDate);
+ protected abstract E getNextIMMDate(final boolean forward, final E theStartDate);
- protected abstract DateCalculator<E> createNewCalcultaor(String calcName,
- E theStartDate, Set<E> holidays, HolidayHandler<E> handler);
+ protected abstract DateCalculator<E> createNewCalcultaor(String calcName, E theStartDate, Set<E> holidays,
+ HolidayHandler<E> handler);
}
Deleted: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/BackwardHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/BackwardHandler.java 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/BackwardHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -1,44 +0,0 @@
-/*
- * 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.joda;
-
-import net.objectlab.kit.datecalc.common.DateCalculator;
-import net.objectlab.kit.datecalc.common.HolidayHandler;
-import net.objectlab.kit.datecalc.common.HolidayHandlerType;
-
-import org.joda.time.LocalDate;
-
-/**
- * A backward handler will move the date backward if it falls on a non working
- * day.
- *
- * @author Benoit Xhenseval
- */
-public class BackwardHandler implements HolidayHandler<LocalDate> {
-
- public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
- LocalDate date = calendar.getCurrentBusinessDate();
- while (calendar.isNonWorkingDay(date)) {
- date = date.minusDays(1);
- }
- return date;
- }
-
- public String getType() {
- return HolidayHandlerType.BACKWARD;
- }
-
-}
Deleted: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultDateCalculatorFactory.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultDateCalculatorFactory.java 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultDateCalculatorFactory.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -1,71 +0,0 @@
-/*
- * 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.joda;
-
-import net.objectlab.kit.datecalc.common.AbstractDateCalculatorFactory;
-import net.objectlab.kit.datecalc.common.DateCalculator;
-import net.objectlab.kit.datecalc.common.DateCalculatorFactory;
-import net.objectlab.kit.datecalc.common.HolidayHandlerType;
-import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
-
-import org.joda.time.LocalDate;
-
-public class DefaultDateCalculatorFactory extends AbstractDateCalculatorFactory<LocalDate>
- implements DateCalculatorFactory<LocalDate> {
-
- private static final DateCalculatorFactory<LocalDate> DEFAULT = new DefaultDateCalculatorFactory();
-
- private static final PeriodCountCalculator<LocalDate> PCC = new DefaultPeriodCountCalculator();
-
- public static DateCalculatorFactory<LocalDate> getDefaultInstance() {
- return DEFAULT;
- }
-
- /**
- * Create a new DateCalculator for a given name and type of handling.
- *
- * @param name
- * calendar name (holidays set interested in). If there is set of
- * holidays with that name, it will return a DateCalculator with
- * an empty holiday set (will work on Weekend only).
- * @param type
- * typically one of the value of HolidayHandlerType
- * @return a new DateCalculator
- */
- public DateCalculator<LocalDate> getDateCalculator(final String name, final String holidayHandlerType) {
- final LocalDateCalculator cal = new LocalDateCalculator();
- cal.setName(name);
- if (holidays.containsKey(name)) {
- cal.setNonWorkingDays(holidays.get(name));
- }
-
- 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());
- }
- return cal;
- }
-
-
- public PeriodCountCalculator<LocalDate> getPeriodCountCalculator() {
- return PCC;
- }
-}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDateCalculatorFactory.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDateCalculatorFactory.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDateCalculatorFactory.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,69 @@
+/*
+ * 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.joda;
+
+import net.objectlab.kit.datecalc.common.AbstractDateCalculatorFactory;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
+
+import org.joda.time.LocalDate;
+
+public class DefaultLocalDateCalculatorFactory extends AbstractDateCalculatorFactory<LocalDate> {
+
+ private static final DefaultLocalDateCalculatorFactory DEFAULT = new DefaultLocalDateCalculatorFactory();
+
+ private static final PeriodCountCalculator<LocalDate> PCC = new DefaultLocalDatePeriodCountCalculator();
+
+ public static DefaultLocalDateCalculatorFactory getDefaultInstance() {
+ return DEFAULT;
+ }
+
+ /**
+ * Create a new DateCalculator for a given name and type of handling.
+ *
+ * @param name
+ * calendar name (holidays set interested in). If there is set of
+ * holidays with that name, it will return a DateCalculator with
+ * an empty holiday set (will work on Weekend only).
+ * @param type
+ * typically one of the value of HolidayHandlerType
+ * @return a new DateCalculator
+ */
+ @Override
+ public LocalDateCalculator getDateCalculator(final String name, final String holidayHandlerType) {
+ final LocalDateCalculator cal = new LocalDateCalculator();
+ cal.setName(name);
+ if (holidays.containsKey(name)) {
+ cal.setNonWorkingDays(holidays.get(name));
+ }
+
+ if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new LocalDateForwardHandler());
+ } else if (HolidayHandlerType.BACKWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new LocalDateBackwardHandler());
+ } else if (HolidayHandlerType.MODIFIED_FOLLLOWING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new LocalDateModifiedFollowingHandler());
+ } else if (HolidayHandlerType.MODIFIED_PRECEEDING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new LocalDateModifiedPreceedingHandler());
+ }
+ return cal;
+ }
+
+ @Override
+ public PeriodCountCalculator<LocalDate> getPeriodCountCalculator() {
+ return PCC;
+ }
+}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDatePeriodCountCalculator.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDatePeriodCountCalculator.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultLocalDatePeriodCountCalculator.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,101 @@
+package net.objectlab.kit.datecalc.joda;
+
+import net.objectlab.kit.datecalc.common.PeriodCountBasis;
+import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
+
+import org.joda.time.LocalDate;
+import org.joda.time.Period;
+import org.joda.time.PeriodType;
+
+public class DefaultLocalDatePeriodCountCalculator implements PeriodCountCalculator<LocalDate> {
+ private static final int YEAR_360 = 360;
+
+ private static final int MONTHS_IN_YEAR = 12;
+
+ private static final double YEAR_365_0 = 365.0;
+
+ private static final double YEAR_360_0 = 360.0;
+
+ private static final int MONTH_31_DAYS = 31;
+
+ private static final int MONTH_30_DAYS = 30;
+
+ public int dayDiff(final LocalDate start, final LocalDate end, final PeriodCountBasis basis) {
+ int diff = 0;
+
+ if (basis == PeriodCountBasis.CONV_30_360) {
+ int dayStart = start.getDayOfMonth();
+ int dayEnd = end.getDayOfMonth();
+ if (dayEnd == MONTH_31_DAYS && dayStart >= MONTH_30_DAYS) {
+ dayEnd = MONTH_30_DAYS;
+ }
+ if (dayStart == MONTH_31_DAYS) {
+ dayStart = MONTH_30_DAYS;
+ }
+ diff = (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS
+ + dayEnd - dayStart;
+
+ } else if (basis == PeriodCountBasis.CONV_360E_ISDA) {
+ int dayStart = start.getDayOfMonth();
+ int dayEnd = end.getDayOfMonth();
+ final int monthStart = start.getMonthOfYear();
+ if ((monthStart == 2 && start.monthOfYear().getMaximumValue() == dayStart) || dayEnd == MONTH_31_DAYS) {
+ dayEnd = MONTH_30_DAYS;
+ }
+ if (dayStart == MONTH_31_DAYS) {
+ dayStart = MONTH_30_DAYS;
+ }
+
+ diff = (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS
+ + dayEnd - dayStart;
+
+ } else if (basis == PeriodCountBasis.CONV_360E_ISMA) {
+ int dayStart = start.getDayOfMonth();
+ int dayEnd = end.getDayOfMonth();
+ if (dayEnd == MONTH_31_DAYS) {
+ dayEnd = MONTH_30_DAYS;
+ }
+ if (dayStart == MONTH_31_DAYS) {
+ dayStart = MONTH_30_DAYS;
+ }
+ diff = (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS
+ + dayEnd - dayStart;
+ } else {
+
+ final Period p = new Period(start, end, PeriodType.days());
+ diff = p.getDays();
+ }
+ return diff;
+ }
+
+ public double monthDiff(final LocalDate start, final LocalDate end, final PeriodCountBasis basis) {
+ return yearDiff(start, end, basis) * MONTHS_IN_YEAR;
+ }
+
+ public double yearDiff(final LocalDate start, final LocalDate end, final PeriodCountBasis basis) {
+ double diff = 0.0;
+ if (basis == PeriodCountBasis.ACT_ACT) {
+ final int startYear = start.getYear();
+ final int endYear = end.getYear();
+ if (startYear != endYear) {
+ final LocalDate endOfStartYear = start.dayOfYear().withMaximumValue();
+ final LocalDate startOfEndYear = end.dayOfYear().setCopy(1);
+
+ final int diff1 = new Period(start, endOfStartYear, PeriodType.days()).getDays();
+ final int diff2 = new Period(startOfEndYear, end, PeriodType.days()).getDays();
+ diff = (diff1 + 1.0) / start.dayOfYear().getMaximumValue() + (endYear - startYear - 1.0) + (diff2)
+ / (double) end.dayOfYear().getMaximumValue();
+ }
+
+ } else if (basis == PeriodCountBasis.CONV_30_360 || basis == PeriodCountBasis.CONV_360E_ISDA
+ || basis == PeriodCountBasis.CONV_360E_ISMA || basis == PeriodCountBasis.ACT_360) {
+ diff = (dayDiff(start, end, basis)) / YEAR_360_0;
+
+ } else if (basis == PeriodCountBasis.ACT_365 || basis == PeriodCountBasis.END_365) {
+ diff = (dayDiff(start, end, basis)) / YEAR_365_0;
+ } else {
+ throw new UnsupportedOperationException("Sorry no ACT_UST yet");
+ }
+ return diff;
+ }
+}
Deleted: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultPeriodCountCalculator.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultPeriodCountCalculator.java 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultPeriodCountCalculator.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -1,101 +0,0 @@
-package net.objectlab.kit.datecalc.joda;
-
-import net.objectlab.kit.datecalc.common.PeriodCountBasis;
-import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
-
-import org.joda.time.LocalDate;
-import org.joda.time.Period;
-import org.joda.time.PeriodType;
-
-public class DefaultPeriodCountCalculator implements PeriodCountCalculator<LocalDate> {
- private static final int YEAR_360 = 360;
-
- private static final int MONTHS_IN_YEAR = 12;
-
- private static final double YEAR_365_0 = 365.0;
-
- private static final double YEAR_360_0 = 360.0;
-
- private static final int MONTH_31_DAYS = 31;
-
- private static final int MONTH_30_DAYS = 30;
-
- public int dayDiff(final LocalDate start, final LocalDate end, final PeriodCountBasis basis) {
- int diff = 0;
-
- if (basis == PeriodCountBasis.CONV_30_360) {
- int dayStart = start.getDayOfMonth();
- int dayEnd = end.getDayOfMonth();
- if (dayEnd == MONTH_31_DAYS && dayStart >= MONTH_30_DAYS) {
- dayEnd = MONTH_30_DAYS;
- }
- if (dayStart == MONTH_31_DAYS) {
- dayStart = MONTH_30_DAYS;
- }
- diff = (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS
- + dayEnd - dayStart;
-
- } else if (basis == PeriodCountBasis.CONV_360E_ISDA) {
- int dayStart = start.getDayOfMonth();
- int dayEnd = end.getDayOfMonth();
- final int monthStart = start.getMonthOfYear();
- if ((monthStart == 2 && start.monthOfYear().getMaximumValue() == dayStart) || dayEnd == MONTH_31_DAYS) {
- dayEnd = MONTH_30_DAYS;
- }
- if (dayStart == MONTH_31_DAYS) {
- dayStart = MONTH_30_DAYS;
- }
-
- diff = (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS
- + dayEnd - dayStart;
-
- } else if (basis == PeriodCountBasis.CONV_360E_ISMA) {
- int dayStart = start.getDayOfMonth();
- int dayEnd = end.getDayOfMonth();
- if (dayEnd == MONTH_31_DAYS) {
- dayEnd = MONTH_30_DAYS;
- }
- if (dayStart == MONTH_31_DAYS) {
- dayStart = MONTH_30_DAYS;
- }
- diff = (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS
- + dayEnd - dayStart;
- } else {
-
- final Period p = new Period(start, end, PeriodType.days());
- diff = p.getDays();
- }
- return diff;
- }
-
- public double monthDiff(final LocalDate start, final LocalDate end, final PeriodCountBasis basis) {
- return yearDiff(start, end, basis) * MONTHS_IN_YEAR;
- }
-
- public double yearDiff(final LocalDate start, final LocalDate end, final PeriodCountBasis basis) {
- double diff = 0.0;
- if (basis == PeriodCountBasis.ACT_ACT) {
- final int startYear = start.getYear();
- final int endYear = end.getYear();
- if (startYear != endYear) {
- final LocalDate endOfStartYear = start.dayOfYear().withMaximumValue();
- final LocalDate startOfEndYear = end.dayOfYear().setCopy(1);
-
- final int diff1 = new Period(start, endOfStartYear, PeriodType.days()).getDays();
- final int diff2 = new Period(startOfEndYear, end, PeriodType.days()).getDays();
- diff = (diff1 + 1.0) / start.dayOfYear().getMaximumValue() + (endYear - startYear - 1.0) + (diff2)
- / (double) end.dayOfYear().getMaximumValue();
- }
-
- } else if (basis == PeriodCountBasis.CONV_30_360 || basis == PeriodCountBasis.CONV_360E_ISDA
- || basis == PeriodCountBasis.CONV_360E_ISMA || basis == PeriodCountBasis.ACT_360) {
- diff = (dayDiff(start, end, basis)) / YEAR_360_0;
-
- } else if (basis == PeriodCountBasis.ACT_365 || basis == PeriodCountBasis.END_365) {
- diff = (dayDiff(start, end, basis)) / YEAR_365_0;
- } else {
- throw new UnsupportedOperationException("Sorry no ACT_UST yet");
- }
- return diff;
- }
-}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultYearMonthDayCalculatorFactory.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultYearMonthDayCalculatorFactory.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultYearMonthDayCalculatorFactory.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,71 @@
+/*
+ * 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.joda;
+
+import net.objectlab.kit.datecalc.common.AbstractDateCalculatorFactory;
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.DateCalculatorFactory;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
+
+import org.joda.time.YearMonthDay;
+
+public class DefaultYearMonthDayCalculatorFactory extends AbstractDateCalculatorFactory<YearMonthDay> {
+
+ private static final DateCalculatorFactory<YearMonthDay> DEFAULT = new DefaultYearMonthDayCalculatorFactory();
+
+ private static final PeriodCountCalculator<YearMonthDay> PCC = new DefaultYearMonthDayPeriodCountCalculator();
+
+ public static DateCalculatorFactory<YearMonthDay> getDefaultInstance() {
+ return DEFAULT;
+ }
+
+ /**
+ * Create a new DateCalculator for a given name and type of handling.
+ *
+ * @param name
+ * calendar name (holidays set interested in). If there is set of
+ * holidays with that name, it will return a DateCalculator with
+ * an empty holiday set (will work on Weekend only).
+ * @param type
+ * typically one of the value of HolidayHandlerType
+ * @return a new DateCalculator
+ */
+ @Override
+ public DateCalculator<YearMonthDay> getDateCalculator(final String name, final String holidayHandlerType) {
+ final YearMonthDayDateCalculator cal = new YearMonthDayDateCalculator();
+ cal.setName(name);
+ if (holidays.containsKey(name)) {
+ cal.setNonWorkingDays(holidays.get(name));
+ }
+
+ if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new YearMonthDayForwardHandler());
+ } else if (HolidayHandlerType.BACKWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new YearMonthDayBackwardHandler());
+ } else if (HolidayHandlerType.MODIFIED_FOLLLOWING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new YearMonthDayModifiedFollowingHandler());
+ } else if (HolidayHandlerType.MODIFIED_PRECEEDING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new YearMonthDayModifiedPreceedingHandler());
+ }
+ return cal;
+ }
+
+ @Override
+ public PeriodCountCalculator<YearMonthDay> getPeriodCountCalculator() {
+ return PCC;
+ }
+}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultYearMonthDayPeriodCountCalculator.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultYearMonthDayPeriodCountCalculator.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/DefaultYearMonthDayPeriodCountCalculator.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,23 @@
+package net.objectlab.kit.datecalc.joda;
+
+import net.objectlab.kit.datecalc.common.PeriodCountBasis;
+import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
+
+import org.joda.time.YearMonthDay;
+
+public class DefaultYearMonthDayPeriodCountCalculator implements PeriodCountCalculator<YearMonthDay> {
+
+ private static final DefaultLocalDatePeriodCountCalculator DELEGATE = new DefaultLocalDatePeriodCountCalculator();
+
+ public int dayDiff(final YearMonthDay start, final YearMonthDay end, final PeriodCountBasis basis) {
+ return DELEGATE.dayDiff(start.toLocalDate(), end.toLocalDate(), basis);
+ }
+
+ public double monthDiff(final YearMonthDay start, final YearMonthDay end, final PeriodCountBasis basis) {
+ return DELEGATE.monthDiff(start.toLocalDate(), end.toLocalDate(), basis);
+ }
+
+ public double yearDiff(final YearMonthDay start, final YearMonthDay end, final PeriodCountBasis basis) {
+ return DELEGATE.monthDiff(start.toLocalDate(), end.toLocalDate(), basis);
+ }
+}
Deleted: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ForwardHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ForwardHandler.java 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ForwardHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -1,43 +0,0 @@
-/*
- * 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.joda;
-
-import net.objectlab.kit.datecalc.common.DateCalculator;
-import net.objectlab.kit.datecalc.common.HolidayHandler;
-import net.objectlab.kit.datecalc.common.HolidayHandlerType;
-
-import org.joda.time.LocalDate;
-
-/**
- * A Forward handler will move the date forward if it falls on a non working
- * day.
- *
- * @author Benoit Xhenseval
- */
-public class ForwardHandler implements HolidayHandler<LocalDate> {
-
- public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
- LocalDate date = calendar.getCurrentBusinessDate();
- while (calendar.isNonWorkingDay(date)) {
- date = date.plusDays(1);
- }
- return date;
- }
-
- public String getType() {
- return HolidayHandlerType.FORWARD;
- }
-}
Modified: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/HolidayHandlerYearMonthDayWrapper.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/HolidayHandlerYearMonthDayWrapper.java 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/HolidayHandlerYearMonthDayWrapper.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -24,34 +24,46 @@
import org.joda.time.YearMonthDay;
/**
- *
+ *
* @author xhensevb
* @author $LastChangedBy: marchy $
* @version $Revision: 59 $ $Date: 2006-08-26 11:06:39 +0200 (Sat, 26 Aug 2006) $
- *
+ *
*/
public class HolidayHandlerYearMonthDayWrapper implements HolidayHandler<LocalDate> {
private HolidayHandler<YearMonthDay> delegate;
+
private DateCalculator<YearMonthDay> calculator;
-
- protected HolidayHandlerYearMonthDayWrapper(HolidayHandler<YearMonthDay> delegate, DateCalculator<YearMonthDay> calculator) {
+
+ public HolidayHandlerYearMonthDayWrapper(final HolidayHandler<YearMonthDay> delegate, final DateCalculator<YearMonthDay> calculator) {
this.delegate = delegate;
this.calculator = calculator;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see net.objectlab.kit.datecalc.common.HolidayHandler#getType()
*/
public String getType() {
return delegate.getType();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see net.objectlab.kit.datecalc.common.HolidayHandler#moveCurrentDate(net.objectlab.kit.datecalc.common.DateCalculator)
*/
- public LocalDate moveCurrentDate(DateCalculator<LocalDate> calendar) {
- return delegate.moveCurrentDate(calculator).toLocalDate();
+ public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
+ LocalDate ret = calendar.getCurrentBusinessDate();
+ if (delegate != null) {
+ final YearMonthDay day = delegate.moveCurrentDate(calculator);
+ if (day != null) {
+ ret = day.toLocalDate();
+ }
+ }
+ return ret;
}
}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateBackwardHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateBackwardHandler.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateBackwardHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,44 @@
+/*
+ * 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.joda;
+
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandler;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+
+import org.joda.time.LocalDate;
+
+/**
+ * A backward handler will move the date backward if it falls on a non working
+ * day.
+ *
+ * @author Benoit Xhenseval
+ */
+public class LocalDateBackwardHandler implements HolidayHandler<LocalDate> {
+
+ public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
+ LocalDate date = calendar.getCurrentBusinessDate();
+ while (calendar.isNonWorkingDay(date)) {
+ date = date.minusDays(1);
+ }
+ return date;
+ }
+
+ public String getType() {
+ return HolidayHandlerType.BACKWARD;
+ }
+
+}
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 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateCalculator.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -77,7 +77,7 @@
return this;
}
- private void initialise() {
+ protected void initialise() {
if (getStartDate() == null) {
setStartDate(new LocalDate());
} else if (getCurrentBusinessDate() == null) {
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateForwardHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateForwardHandler.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateForwardHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,43 @@
+/*
+ * 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.joda;
+
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandler;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+
+import org.joda.time.LocalDate;
+
+/**
+ * A Forward handler will move the date forward if it falls on a non working
+ * day.
+ *
+ * @author Benoit Xhenseval
+ */
+public class LocalDateForwardHandler implements HolidayHandler<LocalDate> {
+
+ public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
+ LocalDate date = calendar.getCurrentBusinessDate();
+ while (calendar.isNonWorkingDay(date)) {
+ date = date.plusDays(1);
+ }
+ return date;
+ }
+
+ public String getType() {
+ return HolidayHandlerType.FORWARD;
+ }
+}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedFollowingHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedFollowingHandler.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedFollowingHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,54 @@
+/*
+ * $Id: LocalDateModifiedFollowingHandler.java 68 2006-08-27 09:46:33Z 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.joda;
+
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandler;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+
+import org.joda.time.LocalDate;
+
+/**
+ * A modified following handler will move the date forward if it falls on a non
+ * working day BUT, if the new date falls into another month, it will revert to
+ * moving backward until it finds a working day.
+ *
+ * @author Benoit Xhenseval
+ */
+public class LocalDateModifiedFollowingHandler implements HolidayHandler<LocalDate> {
+
+ public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
+ LocalDate date = calendar.getCurrentBusinessDate();
+ final int month = date.getMonthOfYear();
+ int step = 1;
+ while (calendar.isNonWorkingDay(date)) {
+ date = date.plusDays(step);
+ if (date.getMonthOfYear() != month) {
+ // flick to backward
+ step = -1;
+ date = date.plusDays(step);
+ }
+ }
+ return date;
+ }
+
+ public String getType() {
+ return HolidayHandlerType.MODIFIED_FOLLLOWING;
+ }
+
+}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedPreceedingHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedPreceedingHandler.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedPreceedingHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,52 @@
+/*
+ * 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.joda;
+
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandler;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+
+import org.joda.time.LocalDate;
+
+/**
+ * A modified preceeding handler will move the date backward if it falls on a
+ * non working day BUT, if the new date falls into another month, it will revert
+ * to moving forward until it finds a working day.
+ *
+ * @author Benoit Xhenseval
+ */
+public class LocalDateModifiedPreceedingHandler implements HolidayHandler<LocalDate> {
+
+ public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
+ LocalDate date = calendar.getCurrentBusinessDate();
+ final int month = date.getMonthOfYear();
+ int step = -1;
+ while (calendar.isNonWorkingDay(date)) {
+ date = date.plusDays(step);
+ if (date.getMonthOfYear() != month) {
+ // flick to backward
+ step = 1;
+ date = date.plusDays(step);
+ }
+ }
+ return date;
+ }
+
+ public String getType() {
+ return HolidayHandlerType.MODIFIED_PRECEEDING;
+ }
+
+}
Deleted: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ModifiedFollowingHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ModifiedFollowingHandler.java 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ModifiedFollowingHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -1,54 +0,0 @@
-/*
- * $Id$
- *
- * 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.joda;
-
-import net.objectlab.kit.datecalc.common.DateCalculator;
-import net.objectlab.kit.datecalc.common.HolidayHandler;
-import net.objectlab.kit.datecalc.common.HolidayHandlerType;
-
-import org.joda.time.LocalDate;
-
-/**
- * A modified following handler will move the date forward if it falls on a non
- * working day BUT, if the new date falls into another month, it will revert to
- * moving backward until it finds a working day.
- *
- * @author Benoit Xhenseval
- */
-public class ModifiedFollowingHandler implements HolidayHandler<LocalDate> {
-
- public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
- LocalDate date = calendar.getCurrentBusinessDate();
- final int month = date.getMonthOfYear();
- int step = 1;
- while (calendar.isNonWorkingDay(date)) {
- date = date.plusDays(step);
- if (date.getMonthOfYear() != month) {
- // flick to backward
- step = -1;
- date = date.plusDays(step);
- }
- }
- return date;
- }
-
- public String getType() {
- return HolidayHandlerType.MODIFIED_FOLLLOWING;
- }
-
-}
Deleted: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ModifiedPreceedingHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ModifiedPreceedingHandler.java 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/ModifiedPreceedingHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -1,52 +0,0 @@
-/*
- * 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.joda;
-
-import net.objectlab.kit.datecalc.common.DateCalculator;
-import net.objectlab.kit.datecalc.common.HolidayHandler;
-import net.objectlab.kit.datecalc.common.HolidayHandlerType;
-
-import org.joda.time.LocalDate;
-
-/**
- * A modified preceeding handler will move the date backward if it falls on a
- * non working day BUT, if the new date falls into another month, it will revert
- * to moving forward until it finds a working day.
- *
- * @author Benoit Xhenseval
- */
-public class ModifiedPreceedingHandler implements HolidayHandler<LocalDate> {
-
- public LocalDate moveCurrentDate(final DateCalculator<LocalDate> calendar) {
- LocalDate date = calendar.getCurrentBusinessDate();
- final int month = date.getMonthOfYear();
- int step = -1;
- while (calendar.isNonWorkingDay(date)) {
- date = date.plusDays(step);
- if (date.getMonthOfYear() != month) {
- // flick to backward
- step = 1;
- date = date.plusDays(step);
- }
- }
- return date;
- }
-
- public String getType() {
- return HolidayHandlerType.MODIFIED_PRECEEDING;
- }
-
-}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayBackwardHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayBackwardHandler.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayBackwardHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,44 @@
+/*
+ * 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.joda;
+
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandler;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+
+import org.joda.time.YearMonthDay;
+
+/**
+ * A backward handler will move the date backward if it falls on a non working
+ * day.
+ *
+ * @author Benoit Xhenseval
+ */
+public class YearMonthDayBackwardHandler implements HolidayHandler<YearMonthDay> {
+
+ public YearMonthDay moveCurrentDate(final DateCalculator<YearMonthDay> calendar) {
+ YearMonthDay date = calendar.getCurrentBusinessDate();
+ while (calendar.isNonWorkingDay(date)) {
+ date = date.minusDays(1);
+ }
+ return date;
+ }
+
+ public String getType() {
+ return HolidayHandlerType.BACKWARD;
+ }
+
+}
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 2006-09-01 12:02:20 UTC (rev 70)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayDateCalculator.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -48,16 +48,16 @@
public YearMonthDayDateCalculator(final String name, final YearMonthDay startDate, final Set<YearMonthDay> nonWorkingDays,
final HolidayHandler<YearMonthDay> holidayHandler) {
super(name, nonWorkingDays, holidayHandler);
- setStartDate(startDate);
- Set<LocalDate> dates = new HashSet<LocalDate>();
- for (YearMonthDay d : nonWorkingDays) {
+ final Set<LocalDate> dates = new HashSet<LocalDate>();
+ for (final YearMonthDay d : nonWorkingDays) {
dates.add(d.toLocalDate());
}
- HolidayHandler<LocalDate> locDate = new HolidayHandlerYearMonthDayWrapper(holidayHandler, this);
+ final HolidayHandler<LocalDate> locDate = new HolidayHandlerYearMonthDayWrapper(holidayHandler, this);
- delegate = new LocalDateCalculator(name, startDate.toLocalDate(), dates, locDate);
+ delegate = new LocalDateCalculator(name, (startDate != null ? startDate.toLocalDate() : null), dates, locDate);
+ setStartDate(startDate);
}
public void setWorkingWeek(final WorkingWeek week) {
@@ -105,7 +105,7 @@
final List<YearMonthDay> dates = new ArrayList<YearMonthDay>();
final List<LocalDate> localDates = delegate.getIMMDates(start.toLocalDate(), end.toLocalDate());
- for (LocalDate d : localDates) {
+ for (final LocalDate d : localDates) {
dates.add(new YearMonthDay(d));
}
@@ -116,4 +116,22 @@
protected YearMonthDay getNextIMMDate(final boolean forward, final YearMonthDay start) {
return new YearMonthDay(delegate.getNextIMMDate(forward, start.toLocalDate()));
}
+
+ // @Override
+ // public YearMonthDay setCurrentBusinessDate(YearMonthDay date) {
+ // if (delegate != null) {
+ // delegate.setCurrentBusinessDate(date != null ? date.toLocalDate() :
+ // null);
+ // }
+ // return super.setCurrentBusinessDate(date);
+ // }
+
+ @Override
+ public void setStartDate(final YearMonthDay startDate) {
+ if (delegate != null) {
+ delegate.setStartDate(startDate != null ? startDate.toLocalDate() : null);
+ }
+ super.setStartDate(startDate);
+ }
+
}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayForwardHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayForwardHandler.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayForwardHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,43 @@
+/*
+ * 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.joda;
+
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandler;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+
+import org.joda.time.YearMonthDay;
+
+/**
+ * A Forward handler will move the date forward if it falls on a non working
+ * day.
+ *
+ * @author Benoit Xhenseval
+ */
+public class YearMonthDayForwardHandler implements HolidayHandler<YearMonthDay> {
+
+ public YearMonthDay moveCurrentDate(final DateCalculator<YearMonthDay> calendar) {
+ YearMonthDay date = calendar.getCurrentBusinessDate();
+ while (calendar.isNonWorkingDay(date)) {
+ date = date.plusDays(1);
+ }
+ return date;
+ }
+
+ public String getType() {
+ return HolidayHandlerType.FORWARD;
+ }
+}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedFollowingHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedFollowingHandler.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedFollowingHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,54 @@
+/*
+ * $Id: LocalDateModifiedFollowingHandler.java 68 2006-08-27 09:46:33Z 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.joda;
+
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandler;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+
+import org.joda.time.YearMonthDay;
+
+/**
+ * A modified following handler will move the date forward if it falls on a non
+ * working day BUT, if the new date falls into another month, it will revert to
+ * moving backward until it finds a working day.
+ *
+ * @author Benoit Xhenseval
+ */
+public class YearMonthDayModifiedFollowingHandler implements HolidayHandler<YearMonthDay> {
+
+ public YearMonthDay moveCurrentDate(final DateCalculator<YearMonthDay> calendar) {
+ YearMonthDay date = calendar.getCurrentBusinessDate();
+ final int month = date.getMonthOfYear();
+ int step = 1;
+ while (calendar.isNonWorkingDay(date)) {
+ date = date.plusDays(step);
+ if (date.getMonthOfYear() != month) {
+ // flick to backward
+ step = -1;
+ date = date.plusDays(step);
+ }
+ }
+ return date;
+ }
+
+ public String getType() {
+ return HolidayHandlerType.MODIFIED_FOLLLOWING;
+ }
+
+}
Added: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedPreceedingHandler.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedPreceedingHandler.java (rev 0)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedPreceedingHandler.java 2006-09-01 14:07:57 UTC (rev 71)
@@ -0,0 +1,52 @@
+/*
+ * 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...
[truncated message content] |