|
From: <ma...@us...> - 2006-09-08 15:18:32
|
Revision: 132
http://svn.sourceforge.net/objectlabkit/?rev=132&view=rev
Author: marchy
Date: 2006-09-08 08:16:33 -0700 (Fri, 08 Sep 2006)
Log Message:
-----------
refactored the factory names to include the new KitCalculatorsFactory convention. I'm still not sure about the "Kit" in the name, I think we should just drop the kit.
also, dropped the Default, Base, and Jdk out of any implementation classes.
Modified Paths:
--------------
trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractDateTestCase.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/DateCalculatorFactoryTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkCalendarBackwardDateCalculatorTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkCalendarCalculatorFactoryTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkCalendarDateCalculatorCombinationTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkCalendarForwardDateCalculatorTest.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/JdkCalendarModifiedFollowingDateCalculatorTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkCalendarModifiedPreceedingDateCalculatorTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkCalendarPeriodCountCalculatorTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkDateBackwardDateCalculatorTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkDateDateCalculatorCombinationTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkDateForwardDateCalculatorTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkDateIMMDateTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkDateModifiedFollowingDateCalculatorTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkDateModifiedPreceedingDateCalculatorTest.java
trunk/datecalc-jdk/src/test/java/net/objectlab/kit/datecalc/jdk/JdkDatePeriodCountCalculatorTest.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/LocalDateCalculatorFactoryTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/LocalDateDateCalculatorCombinationTest.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/LocalDateIMMDateTest.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/LocalDatePeriodCountCalculatorTest.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/YearMonthDayCalculatorFactoryTest.java
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/YearMonthDayDateCalculatorCombinationTest.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/YearMonthDayIMMDateTest.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
trunk/datecalc-joda/src/test/java/net/objectlab/kit/datecalc/joda/YearMonthDayPeriodCountCalculatorTest.java
Added Paths:
-----------
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractKitCalculatorsFactory.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/KitCalculatorsFactory.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarIMMDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarKitCalculatorsFactory.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateIMMDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateKitCalculatorsFactory.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateKitCalculatorsFactory.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDatePeriodCountCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayKitCalculatorsFactory.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayPeriodCountCalculator.java
Removed Paths:
-------------
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculatorFactory.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculatorFactory.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/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/JdkCalendarIMMDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkDateBaseDateCalculator.java
trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkDateIMMDateCalculator.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/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
Deleted: 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-08 14:59:22 UTC (rev 131)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractDateCalculatorFactory.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -1,56 +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.common;
-
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * TODO javadoc
- *
- * @author marchi
- * @author $LastChangedBy$
- * @version $Revision$ $Date$
- *
- */
-public abstract class AbstractDateCalculatorFactory<E> implements DateCalculatorFactory<E> {
-
- private final ConcurrentMap<String, Set<E>> holidays = new ConcurrentHashMap<String, Set<E>>();
-
- /**
- * Use this method to register a set of holidays for a given calendar, it
- * will replace any existing set. It won't update any existing
- * DateCalculator as these should not be amended whilst in existence (we
- * could otherwise get inconsistent results).
- *
- * @param name
- * the calendar name to register these holidays under.
- * @param holidays
- * the set of holidays (non-working days).
- */
- public void registerHolidays(final String name, final Set<E> holidaysSet) {
- this.holidays.put(name, holidaysSet);
- }
-
- protected void setHolidays(final String name, final DateCalculator<E> dc) {
- if (holidays.containsKey(name)) {
- dc.setNonWorkingDays(holidays.get(name));
- }
- }
-}
Added: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractKitCalculatorsFactory.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractKitCalculatorsFactory.java (rev 0)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/AbstractKitCalculatorsFactory.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -0,0 +1,56 @@
+/*
+ * $Id: AbstractDateCalculatorFactory.java 125 2006-09-07 17:24: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.common;
+
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * TODO javadoc
+ *
+ * @author marchi
+ * @author $LastChangedBy: benoitx $
+ * @version $Revision: 125 $ $Date: 2006-09-07 19:24:20 +0200 (Thu, 07 Sep 2006) $
+ *
+ */
+public abstract class AbstractKitCalculatorsFactory<E> implements KitCalculatorsFactory<E> {
+
+ private final ConcurrentMap<String, Set<E>> holidays = new ConcurrentHashMap<String, Set<E>>();
+
+ /**
+ * Use this method to register a set of holidays for a given calendar, it
+ * will replace any existing set. It won't update any existing
+ * DateCalculator as these should not be amended whilst in existence (we
+ * could otherwise get inconsistent results).
+ *
+ * @param name
+ * the calendar name to register these holidays under.
+ * @param holidays
+ * the set of holidays (non-working days).
+ */
+ public void registerHolidays(final String name, final Set<E> holidaysSet) {
+ this.holidays.put(name, holidaysSet);
+ }
+
+ protected void setHolidays(final String name, final DateCalculator<E> dc) {
+ if (holidays.containsKey(name)) {
+ dc.setNonWorkingDays(holidays.get(name));
+ }
+ }
+}
Deleted: 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-08 14:59:22 UTC (rev 131)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DateCalculatorFactory.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -1,78 +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.common;
-
-import java.util.Set;
-
-/**
- * Factory will create new instances of calculators, these are lightweight, each
- * thread should use the factory as a given calculator should NOT be shared
- * across thread (unless you know what you're doing) as the startDate, current
- * date and working week would be shared. Once created, the set of holidays will
- * NOT change even if a new set is registered; one needs to get a new
- * DateCalculator to get the new set.
- *
- * @param E
- * a representation of a date, typically JDK: Date, Calendar;
- * Joda:LocalDate, YearMonthDay
- *
- * @author Benoit Xhenseval
- * @author $LastChangedBy$
- * @version $Revision$ $Date$
- */
-public interface DateCalculatorFactory<E> {
-
- /**
- * 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 or null.
- * @return a new DateCalculator
- * @exception IllegalArgumentException
- * if the type is not null or a valid value.
- */
- DateCalculator<E> getDateCalculator(final String name, final String holidayHandlerType);
-
- /**
- * Use this method to register a set of holidays for a given calendar.
- *
- * @param name
- * the calendar name to register these holidays under.
- * @param holidays
- * the set of holidays (non-working days).
- */
- void registerHolidays(final String name, Set<E> holidays);
-
- /**
- * Create a new PeriodCountCalculator.
- *
- * @return a PeriodCountCalculator
- */
- PeriodCountCalculator<E> getPeriodCountCalculator();
-
- /**
- * Create a new IMMDateCalculator.
- *
- * @return an IMMDateCalculator
- */
- IMMDateCalculator<E> getIMMDateCalculator();
-}
Added: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/KitCalculatorsFactory.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/KitCalculatorsFactory.java (rev 0)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/KitCalculatorsFactory.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -0,0 +1,78 @@
+/*
+ * $Id: DateCalculatorFactory.java 125 2006-09-07 17:24: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.common;
+
+import java.util.Set;
+
+/**
+ * Factory will create new instances of calculators, these are lightweight, each
+ * thread should use the factory as a given calculator should NOT be shared
+ * across thread (unless you know what you're doing) as the startDate, current
+ * date and working week would be shared. Once created, the set of holidays will
+ * NOT change even if a new set is registered; one needs to get a new
+ * DateCalculator to get the new set.
+ *
+ * @param E
+ * a representation of a date, typically JDK: Date, Calendar;
+ * Joda:LocalDate, YearMonthDay
+ *
+ * @author Benoit Xhenseval
+ * @author $LastChangedBy: benoitx $
+ * @version $Revision: 125 $ $Date: 2006-09-07 19:24:20 +0200 (Thu, 07 Sep 2006) $
+ */
+public interface KitCalculatorsFactory<E> {
+
+ /**
+ * 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 or null.
+ * @return a new DateCalculator
+ * @exception IllegalArgumentException
+ * if the type is not null or a valid value.
+ */
+ DateCalculator<E> getDateCalculator(final String name, final String holidayHandlerType);
+
+ /**
+ * Use this method to register a set of holidays for a given calendar.
+ *
+ * @param name
+ * the calendar name to register these holidays under.
+ * @param holidays
+ * the set of holidays (non-working days).
+ */
+ void registerHolidays(final String name, Set<E> holidays);
+
+ /**
+ * Create a new PeriodCountCalculator.
+ *
+ * @return a PeriodCountCalculator
+ */
+ PeriodCountCalculator<E> getPeriodCountCalculator();
+
+ /**
+ * Create a new IMMDateCalculator.
+ *
+ * @return an IMMDateCalculator
+ */
+ IMMDateCalculator<E> getIMMDateCalculator();
+}
Modified: trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractDateTestCase.java
===================================================================
--- trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractDateTestCase.java 2006-09-08 14:59:22 UTC (rev 131)
+++ trunk/datecalc-common/src/test/java/net/objectlab/kit/datecalc/common/AbstractDateTestCase.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -9,7 +9,7 @@
public abstract class AbstractDateTestCase<E> extends TestCase {
protected abstract E newDate(final String date);
- protected abstract DateCalculatorFactory<E> getDateCalculatorFactory();
+ protected abstract KitCalculatorsFactory<E> getDateCalculatorFactory();
protected void checkDate(final String string, final DateCalculator<E> calendar, final String string2) {
Assert.assertEquals(string, newDate(string2), calendar.getCurrentBusinessDate());
Added: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarDateCalculator.java (rev 0)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarDateCalculator.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -0,0 +1,111 @@
+/*
+ * $Id: JdkCalendarBaseDateCalculator.java 128 2006-09-08 13:14:46Z 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 java.util.Collections;
+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.Utils;
+import net.objectlab.kit.datecalc.common.WorkingWeek;
+
+/**
+ * This class is used via the DateCalculator interface, it enables the handling
+ * of different HolidayHandler, if no HolidayHandler is defined, the calendar
+ * will NOT move a date, even if it falls on a holiday or weekend.
+ *
+ * @author Marcin Jekot
+ * @author $LastModifiedBy$
+ * @version $Revision: 128 $ $Date: 2006-09-08 15:14:46 +0200 (Fri, 08 Sep 2006) $
+ */
+public class CalendarDateCalculator extends AbstractDateCalculator<Calendar> {
+
+ private WorkingWeek workingWeek = WorkingWeek.DEFAULT;
+
+ @SuppressWarnings("unchecked")
+ public CalendarDateCalculator() {
+ this(null, null, Collections.EMPTY_SET, null);
+ }
+
+ public CalendarDateCalculator(final String name, final Calendar startDate, final Set<Calendar> nonWorkingDays,
+ final HolidayHandler<Calendar> holidayHandler) {
+ super(name, nonWorkingDays, holidayHandler);
+ Calendar date = startDate;
+ if (date == null) {
+ date = getToday();
+ }
+ setStartDate(date);
+ }
+
+ public void setWorkingWeek(final WorkingWeek week) {
+ workingWeek = week;
+ }
+
+ /**
+ * is the date a non-working day according to the WorkingWeek?
+ */
+ public boolean isWeekend(final Calendar date) {
+ assert workingWeek != null;
+ return !workingWeek.isWorkingDay(date);
+ }
+
+ public CalendarDateCalculator moveByDays(final int days) {
+ if (getCurrentBusinessDate() == null) {
+ initialise();
+ }
+ getCurrentBusinessDate().add(Calendar.DAY_OF_MONTH, days);
+
+ if (getHolidayHandler() != null) {
+ setCurrentBusinessDate(getHolidayHandler().moveCurrentDate(this));
+ }
+
+ return this;
+ }
+
+ private void initialise() {
+ if (getStartDate() == null) {
+ setStartDate(Calendar.getInstance());
+ } else if (getCurrentBusinessDate() == null) {
+ setCurrentBusinessDate(Calendar.getInstance());
+ }
+ }
+
+ @Override
+ protected DateCalculator<Calendar> createNewCalculator(final String name, final Calendar startDate, final Set<Calendar> holidays,
+ final HolidayHandler<Calendar> handler) {
+ return new CalendarDateCalculator(name, startDate, holidays, handler);
+ }
+/*
+ * @Override public JdkCalendarBaseDateCalculator combine(final DateCalculator<Calendar>
+ * calendar) { return (JdkCalendarBaseDateCalculator) super.combine(calendar); }
+ *
+ * @Override public JdkCalendarBaseDateCalculator moveByTenor(final Tenor tenor) {
+ * return (JdkCalendarBaseDateCalculator) super.moveByTenor(tenor); }
+ *
+ * @Override public JdkCalendarBaseDateCalculator moveByBusinessDays(final int
+ * businessDays) { return (JdkCalendarBaseDateCalculator)
+ * super.moveByBusinessDays(businessDays); }
+ */
+ @Override
+ protected Calendar getToday() {
+ return Utils.blastTime(Calendar.getInstance());
+ }
+}
Added: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarIMMDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarIMMDateCalculator.java (rev 0)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarIMMDateCalculator.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -0,0 +1,124 @@
+package net.objectlab.kit.datecalc.jdk;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+import net.objectlab.kit.datecalc.common.AbstractIMMDateCalculator;
+import net.objectlab.kit.datecalc.common.IMMPeriod;
+
+public class CalendarIMMDateCalculator extends AbstractIMMDateCalculator<Calendar> {
+ private static final int NUMBER_DAYS_IN_WEEK = 7;
+
+ /**
+ * 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;
+ default:
+ 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.DAY_OF_MONTH, Calendar.WEDNESDAY - dayOfWeek);
+ } else if (dayOfWeek > Calendar.WEDNESDAY) {
+ cal.add(Calendar.DAY_OF_MONTH, (Calendar.WEDNESDAY + NUMBER_DAYS_IN_WEEK) - dayOfWeek);
+ }
+
+ // go to 3rd wednesday - i.e. move 2 weeks forward
+ cal.add(Calendar.DAY_OF_MONTH, NUMBER_DAYS_IN_WEEK * 2);
+ }
+
+ public boolean isIMMDate(final Calendar date) {
+ // TODO a slightly crude implementation - revisit
+ final Calendar cal = (Calendar) date.clone();
+ moveToIMMDay(cal);
+ return cal.equals(date);
+ }
+}
Added: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarKitCalculatorsFactory.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarKitCalculatorsFactory.java (rev 0)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/CalendarKitCalculatorsFactory.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -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.AbstractKitCalculatorsFactory;
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+import net.objectlab.kit.datecalc.common.IMMDateCalculator;
+import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
+
+/**
+ * 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 CalendarKitCalculatorsFactory extends AbstractKitCalculatorsFactory<Calendar> {
+
+ private static final CalendarKitCalculatorsFactory DEFAULT = new CalendarKitCalculatorsFactory();
+
+ private static final PeriodCountCalculator<Calendar> PCC = new CalendarPeriodCountCalculator();
+
+ private static final CalendarIMMDateCalculator IMMDC = new CalendarIMMDateCalculator();
+
+ public static CalendarKitCalculatorsFactory getDefaultInstance() {
+ return DEFAULT;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getDateCalculator(java.lang.String,
+ * java.lang.String)
+ */
+ public DateCalculator<Calendar> getDateCalculator(final String name, final String holidayHandlerType) {
+ final CalendarDateCalculator cal = new CalendarDateCalculator();
+ cal.setName(name);
+ setHolidays(name, cal);
+
+ if (holidayHandlerType == null) {
+ return cal;
+ } else if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new CalendarForwardHandler());
+ } else if (HolidayHandlerType.BACKWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new CalendarBackwardHandler());
+ } else if (HolidayHandlerType.MODIFIED_FOLLLOWING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new CalendarModifiedFollowingHandler());
+ } else if (HolidayHandlerType.MODIFIED_PRECEEDING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new CalendarModifiedPreceedingHandler());
+ } else {
+ throw new IllegalArgumentException("Unsupported HolidayHandler: " + holidayHandlerType);
+ }
+
+ return cal;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getPeriodCountCalculator()
+ */
+ public PeriodCountCalculator<Calendar> getPeriodCountCalculator() {
+ return PCC;
+ }
+
+ public IMMDateCalculator<Calendar> getIMMDateCalculator() {
+ return IMMDC;
+ }
+
+}
Added: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateDateCalculator.java (rev 0)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateDateCalculator.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -0,0 +1,104 @@
+/*
+ * $Id: JdkDateBaseDateCalculator.java 125 2006-09-07 17:24: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 java.util.Collections;
+import java.util.Date;
+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.Utils;
+import net.objectlab.kit.datecalc.common.WorkingWeek;
+
+/**
+ * This class is used via the DateCalculator interface, it enables the handling
+ * of different HolidayHandler, if no HolidayHandler is defined, the calendar
+ * will NOT move a date, even if it falls on a holiday or weekend.
+ *
+ * @author Marcin Jekot
+ * @author $LastModifiedBy$
+ * @version $Revision: 125 $ $Date: 2006-09-07 19:24:20 +0200 (Thu, 07 Sep 2006) $
+ */
+public class DateDateCalculator extends AbstractDateCalculator<Date> {
+
+ private CalendarDateCalculator delegate;
+
+ @SuppressWarnings("unchecked")
+ public DateDateCalculator() {
+ this(null, null, Collections.EMPTY_SET, null);
+ }
+
+ public DateDateCalculator(final String name, final Date startDate, final Set<Date> nonWorkingDays,
+ final HolidayHandler<Date> holidayHandler) {
+ super(name, nonWorkingDays, holidayHandler);
+ Date date = startDate;
+ final HolidayHandler<Calendar> locDate = new HolidayHandlerDateWrapper(holidayHandler, this);
+
+ final Set<Calendar> nonWorkingCalendars = Utils.toCalendarSet(nonWorkingDays);
+ if (date == null) {
+ date = getToday();
+ }
+
+ delegate = new CalendarDateCalculator(name, Utils.getCal(date), nonWorkingCalendars, locDate);
+ delegate.setStartDate(Utils.getCal(date));
+ setStartDate(date);
+ }
+
+ // TODO throw an exception if the type is incorrect
+ public void setWorkingWeek(final WorkingWeek week) {
+ delegate.setWorkingWeek(week);
+ }
+
+ /**
+ * is the date a non-working day according to the WorkingWeek?
+ */
+ public boolean isWeekend(final Date date) {
+ if (date != null && delegate != null) {
+ return delegate.isWeekend(Utils.getCal(date));
+ }
+ return false;
+ }
+
+ public DateCalculator<Date> moveByDays(final int days) {
+ delegate.setCurrentBusinessDate(Utils.getCal(getCurrentBusinessDate()));
+ setCurrentBusinessDate(delegate.moveByDays(days).getCurrentBusinessDate().getTime());
+ return this;
+ }
+
+ @Override
+ protected DateCalculator<Date> createNewCalculator(final String name, final Date startDate, final Set<Date> holidays,
+ final HolidayHandler<Date> handler) {
+ return new DateDateCalculator(name, startDate, holidays, handler);
+ }
+
+ @Override
+ public void setStartDate(final Date startDate) {
+ if (delegate != null) {
+ delegate.setStartDate(startDate != null ? Utils.getCal(startDate) : null);
+ }
+ super.setStartDate(startDate);
+ }
+
+ @Override
+ protected Date getToday() {
+ return Utils.blastTime(Calendar.getInstance()).getTime();
+ }
+}
Added: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateIMMDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateIMMDateCalculator.java (rev 0)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateIMMDateCalculator.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -0,0 +1,36 @@
+package net.objectlab.kit.datecalc.jdk;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import net.objectlab.kit.datecalc.common.AbstractIMMDateCalculator;
+import net.objectlab.kit.datecalc.common.IMMPeriod;
+import net.objectlab.kit.datecalc.common.Utils;
+
+public class DateIMMDateCalculator extends AbstractIMMDateCalculator<Date> {
+
+ private static final CalendarIMMDateCalculator DELEGATE = new CalendarIMMDateCalculator();
+
+ @Override
+ protected Date getNextIMMDate(final boolean requestNextIMM, final Date theStartDate, final IMMPeriod period) {
+ return DELEGATE.getNextIMMDate(requestNextIMM, Utils.getCal(theStartDate), period).getTime();
+ }
+
+ public List<Date> getIMMDates(final Date start, final Date end, final IMMPeriod period) {
+ return buildList(DELEGATE.getIMMDates(Utils.getCal(start), Utils.getCal(end), period));
+ }
+
+ public boolean isIMMDate(final Date date) {
+ return DELEGATE.isIMMDate(Utils.getCal(date));
+ }
+
+ private List<Date> buildList(final List<Calendar> dates) {
+ final List<Date> imms = new ArrayList<Date>();
+ for (final Calendar date : dates) {
+ imms.add(date.getTime());
+ }
+ return imms;
+ }
+}
Added: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateKitCalculatorsFactory.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateKitCalculatorsFactory.java (rev 0)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DateKitCalculatorsFactory.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -0,0 +1,89 @@
+/*
+ * $Id: DefaultJdkDateCalculatorFactory.java 127 2006-09-08 11:22:24Z 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.Date;
+
+import net.objectlab.kit.datecalc.common.AbstractKitCalculatorsFactory;
+import net.objectlab.kit.datecalc.common.DateCalculator;
+import net.objectlab.kit.datecalc.common.HolidayHandlerType;
+import net.objectlab.kit.datecalc.common.IMMDateCalculator;
+import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
+
+/**
+ * TODO add javadoc
+ *
+ * @author Benoit Xhenseval
+ * @author $LastChangedBy: benoitx $
+ * @version $Revision: 127 $ $Date: 2006-09-08 13:22:24 +0200 (Fri, 08 Sep 2006) $
+ *
+ */
+public class DateKitCalculatorsFactory extends AbstractKitCalculatorsFactory<Date> {
+
+ private static final DateKitCalculatorsFactory DEFAULT = new DateKitCalculatorsFactory();
+
+ private static final PeriodCountCalculator<Date> PCC = new DatePeriodCountCalculator();
+
+ private static final DateIMMDateCalculator IMMDC = new DateIMMDateCalculator();
+
+ public static DateKitCalculatorsFactory getDefaultInstance() {
+ return DEFAULT;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getDateCalculator(java.lang.String,
+ * java.lang.String)
+ */
+ public DateCalculator<Date> getDateCalculator(final String name, final String holidayHandlerType) {
+ final DateDateCalculator cal = new DateDateCalculator();
+ cal.setName(name);
+ setHolidays(name, cal);
+
+ if (holidayHandlerType == null) {
+ return cal;
+ } else if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new DateForwardHandler());
+ } else if (HolidayHandlerType.BACKWARD.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new DateBackwardHandler());
+ } else if (HolidayHandlerType.MODIFIED_FOLLLOWING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new DateModifiedFollowingHandler());
+ } else if (HolidayHandlerType.MODIFIED_PRECEEDING.equals(holidayHandlerType)) {
+ cal.setHolidayHandler(new DateModifiedPreceedingHandler());
+ } else {
+ throw new IllegalArgumentException("Unsupported HolidayHandler: " + holidayHandlerType);
+ }
+
+ return cal;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getPeriodCountCalculator()
+ */
+ public PeriodCountCalculator<Date> getPeriodCountCalculator() {
+ return PCC;
+ }
+
+ public IMMDateCalculator<Date> getIMMDateCalculator() {
+ return IMMDC;
+ }
+
+}
Deleted: 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 2006-09-08 14:59:22 UTC (rev 131)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkCalendarCalculatorFactory.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -1,89 +0,0 @@
-/*
- * $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.DateCalculator;
-import net.objectlab.kit.datecalc.common.HolidayHandlerType;
-import net.objectlab.kit.datecalc.common.IMMDateCalculator;
-import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
-
-/**
- * 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> {
-
- private static final DefaultJdkCalendarCalculatorFactory DEFAULT = new DefaultJdkCalendarCalculatorFactory();
-
- private static final PeriodCountCalculator<Calendar> PCC = new CalendarPeriodCountCalculator();
-
- private static final JdkCalendarIMMDateCalculator IMMDC = new JdkCalendarIMMDateCalculator();
-
- public static DefaultJdkCalendarCalculatorFactory getDefaultInstance() {
- return DEFAULT;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getDateCalculator(java.lang.String,
- * java.lang.String)
- */
- public DateCalculator<Calendar> getDateCalculator(final String name, final String holidayHandlerType) {
- final JdkCalendarBaseDateCalculator cal = new JdkCalendarBaseDateCalculator();
- cal.setName(name);
- setHolidays(name, cal);
-
- if (holidayHandlerType == null) {
- return cal;
- } else if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
- cal.setHolidayHandler(new CalendarForwardHandler());
- } else if (HolidayHandlerType.BACKWARD.equals(holidayHandlerType)) {
- cal.setHolidayHandler(new CalendarBackwardHandler());
- } else if (HolidayHandlerType.MODIFIED_FOLLLOWING.equals(holidayHandlerType)) {
- cal.setHolidayHandler(new CalendarModifiedFollowingHandler());
- } else if (HolidayHandlerType.MODIFIED_PRECEEDING.equals(holidayHandlerType)) {
- cal.setHolidayHandler(new CalendarModifiedPreceedingHandler());
- } else {
- throw new IllegalArgumentException("Unsupported HolidayHandler: " + holidayHandlerType);
- }
-
- return cal;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getPeriodCountCalculator()
- */
- public PeriodCountCalculator<Calendar> getPeriodCountCalculator() {
- return PCC;
- }
-
- public IMMDateCalculator<Calendar> getIMMDateCalculator() {
- return IMMDC;
- }
-
-}
Deleted: 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-08 14:59:22 UTC (rev 131)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/DefaultJdkDateCalculatorFactory.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -1,89 +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.jdk;
-
-import java.util.Date;
-
-import net.objectlab.kit.datecalc.common.AbstractDateCalculatorFactory;
-import net.objectlab.kit.datecalc.common.DateCalculator;
-import net.objectlab.kit.datecalc.common.HolidayHandlerType;
-import net.objectlab.kit.datecalc.common.IMMDateCalculator;
-import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
-
-/**
- * TODO add javadoc
- *
- * @author Benoit Xhenseval
- * @author $LastChangedBy$
- * @version $Revision$ $Date$
- *
- */
-public class DefaultJdkDateCalculatorFactory extends AbstractDateCalculatorFactory<Date> {
-
- private static final DefaultJdkDateCalculatorFactory DEFAULT = new DefaultJdkDateCalculatorFactory();
-
- private static final PeriodCountCalculator<Date> PCC = new DatePeriodCountCalculator();
-
- private static final JdkDateIMMDateCalculator IMMDC = new JdkDateIMMDateCalculator();
-
- public static DefaultJdkDateCalculatorFactory getDefaultInstance() {
- return DEFAULT;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getDateCalculator(java.lang.String,
- * java.lang.String)
- */
- public DateCalculator<Date> getDateCalculator(final String name, final String holidayHandlerType) {
- final JdkDateBaseDateCalculator cal = new JdkDateBaseDateCalculator();
- cal.setName(name);
- setHolidays(name, cal);
-
- if (holidayHandlerType == null) {
- return cal;
- } else if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
- cal.setHolidayHandler(new DateForwardHandler());
- } else if (HolidayHandlerType.BACKWARD.equals(holidayHandlerType)) {
- cal.setHolidayHandler(new DateBackwardHandler());
- } else if (HolidayHandlerType.MODIFIED_FOLLLOWING.equals(holidayHandlerType)) {
- cal.setHolidayHandler(new DateModifiedFollowingHandler());
- } else if (HolidayHandlerType.MODIFIED_PRECEEDING.equals(holidayHandlerType)) {
- cal.setHolidayHandler(new DateModifiedPreceedingHandler());
- } else {
- throw new IllegalArgumentException("Unsupported HolidayHandler: " + holidayHandlerType);
- }
-
- return cal;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see net.objectlab.kit.datecalc.jdk.JdkDateCalculatorFactory#getPeriodCountCalculator()
- */
- public PeriodCountCalculator<Date> getPeriodCountCalculator() {
- return PCC;
- }
-
- public IMMDateCalculator<Date> getIMMDateCalculator() {
- return IMMDC;
- }
-
-}
Deleted: 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-08 14:59:22 UTC (rev 131)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarBaseDateCalculator.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -1,111 +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.jdk;
-
-import java.util.Calendar;
-import java.util.Collections;
-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.Utils;
-import net.objectlab.kit.datecalc.common.WorkingWeek;
-
-/**
- * This class is used via the DateCalculator interface, it enables the handling
- * of different HolidayHandler, if no HolidayHandler is defined, the calendar
- * will NOT move a date, even if it falls on a holiday or weekend.
- *
- * @author Marcin Jekot
- * @author $LastModifiedBy$
- * @version $Revision$ $Date$
- */
-public class JdkCalendarBaseDateCalculator extends AbstractDateCalculator<Calendar> {
-
- private WorkingWeek workingWeek = WorkingWeek.DEFAULT;
-
- @SuppressWarnings("unchecked")
- public JdkCalendarBaseDateCalculator() {
- this(null, null, Collections.EMPTY_SET, null);
- }
-
- public JdkCalendarBaseDateCalculator(final String name, final Calendar startDate, final Set<Calendar> nonWorkingDays,
- final HolidayHandler<Calendar> holidayHandler) {
- super(name, nonWorkingDays, holidayHandler);
- Calendar date = startDate;
- if (date == null) {
- date = getToday();
- }
- setStartDate(date);
- }
-
- public void setWorkingWeek(final WorkingWeek week) {
- workingWeek = week;
- }
-
- /**
- * is the date a non-working day according to the WorkingWeek?
- */
- public boolean isWeekend(final Calendar date) {
- assert workingWeek != null;
- return !workingWeek.isWorkingDay(date);
- }
-
- public JdkCalendarBaseDateCalculator moveByDays(final int days) {
- if (getCurrentBusinessDate() == null) {
- initialise();
- }
- getCurrentBusinessDate().add(Calendar.DAY_OF_MONTH, days);
-
- if (getHolidayHandler() != null) {
- setCurrentBusinessDate(getHolidayHandler().moveCurrentDate(this));
- }
-
- return this;
- }
-
- private void initialise() {
- if (getStartDate() == null) {
- setStartDate(Calendar.getInstance());
- } else if (getCurrentBusinessDate() == null) {
- setCurrentBusinessDate(Calendar.getInstance());
- }
- }
-
- @Override
- protected DateCalculator<Calendar> createNewCalculator(final String name, final Calendar startDate, final Set<Calendar> holidays,
- final HolidayHandler<Calendar> handler) {
- return new JdkCalendarBaseDateCalculator(name, startDate, holidays, handler);
- }
-/*
- * @Override public JdkCalendarBaseDateCalculator combine(final DateCalculator<Calendar>
- * calendar) { return (JdkCalendarBaseDateCalculator) super.combine(calendar); }
- *
- * @Override public JdkCalendarBaseDateCalculator moveByTenor(final Tenor tenor) {
- * return (JdkCalendarBaseDateCalculator) super.moveByTenor(tenor); }
- *
- * @Override public JdkCalendarBaseDateCalculator moveByBusinessDays(final int
- * businessDays) { return (JdkCalendarBaseDateCalculator)
- * super.moveByBusinessDays(businessDays); }
- */
- @Override
- protected Calendar getToday() {
- return Utils.blastTime(Calendar.getInstance());
- }
-}
Deleted: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarIMMDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarIMMDateCalculator.java 2006-09-08 14:59:22 UTC (rev 131)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkCalendarIMMDateCalculator.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -1,124 +0,0 @@
-package net.objectlab.kit.datecalc.jdk;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-
-import net.objectlab.kit.datecalc.common.AbstractIMMDateCalculator;
-import net.objectlab.kit.datecalc.common.IMMPeriod;
-
-public class JdkCalendarIMMDateCalculator extends AbstractIMMDateCalculator<Calendar> {
- private static final int NUMBER_DAYS_IN_WEEK = 7;
-
- /**
- * 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;
- default:
- 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.DAY_OF_MONTH, Calendar.WEDNESDAY - dayOfWeek);
- } else if (dayOfWeek > Calendar.WEDNESDAY) {
- cal.add(Calendar.DAY_OF_MONTH, (Calendar.WEDNESDAY + NUMBER_DAYS_IN_WEEK) - dayOfWeek);
- }
-
- // go to 3rd wednesday - i.e. move 2 weeks forward
- cal.add(Calendar.DAY_OF_MONTH, NUMBER_DAYS_IN_WEEK * 2);
- }
-
- public boolean isIMMDate(final Calendar date) {
- // TODO a slightly crude implementation - revisit
- final Calendar cal = (Calendar) date.clone();
- moveToIMMDay(cal);
- return cal.equals(date);
- }
-}
Deleted: trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkDateBaseDateCalculator.java
===================================================================
--- trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkDateBaseDateCalculator.java 2006-09-08 14:59:22 UTC (rev 131)
+++ trunk/datecalc-jdk/src/main/java/net/objectlab/kit/datecalc/jdk/JdkDateBaseDateCalculator.java 2006-09-08 15:16:33 UTC (rev 132)
@@ -1,104 +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.jdk;
-
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Set;
-
-import net.objectlab.kit.datecalc.common.AbstractDateCalculator;
-import net.ob...
[truncated message content] |