|
From: <be...@us...> - 2010-03-13 00:49:48
|
Revision: 298
http://objectlabkit.svn.sourceforge.net/objectlabkit/?rev=298&view=rev
Author: benoitx
Date: 2010-03-13 00:49:41 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
A few changes following Sonar's discoveries of assigned parameters and use of static SDF.
Marcin, I have left the JDK package to you... :-)
Modified Paths:
--------------
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DefaultHolidayCalendar.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Tenor.java
trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Utils.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/JodaWorkingWeek.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateIMMDateCalculator.java
trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedFollowingHandler.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/YearMonthDayModifiedFollowingHandler.java
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DefaultHolidayCalendar.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DefaultHolidayCalendar.java 2010-03-12 20:59:12 UTC (rev 297)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/DefaultHolidayCalendar.java 2010-03-13 00:49:41 UTC (rev 298)
@@ -36,6 +36,7 @@
import static java.util.Calendar.MONTH;
import static java.util.Calendar.YEAR;
+import java.io.Serializable;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
@@ -54,32 +55,33 @@
*
*/
public class DefaultHolidayCalendar<E> implements HolidayCalendar<E> {
-
- private Comparator<Calendar> calCmp = new Comparator<Calendar>() {
- public int compare(Calendar cal1, Calendar cal2) {
- return
- (cal1.get(YEAR) - cal2.get(YEAR)) * 10000
- +
- (cal1.get(MONTH) - cal2.get(MONTH)) * 100
- +
- (cal1.get(DAY_OF_MONTH) - cal2.get(DAY_OF_MONTH));
- }
- };
-
- private Comparator<Date> dateCmp = new Comparator<Date>() {
- public int compare(Date date1, Date date2) {
-
- Calendar cal1 = Calendar.getInstance();
+ private static final long serialVersionUID = -8558686840806739645L;
+
+ private static final class DateComp implements Comparator<Date>, Serializable {
+ private static final long serialVersionUID = 9079672835911375957L;
+
+ public int compare(final Date date1, final Date date2) {
+
+ final Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
- Calendar cal2 = Calendar.getInstance();
+ final Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
-
- return calCmp.compare(cal1, cal2);
+
+ return CALENDAR_COMP.compare(cal1, cal2);
}
- };
-
- private static final long serialVersionUID = -8558686840806739645L;
+ }
+ private static final class CalendarComp implements Comparator<Calendar>, Serializable {
+ private static final long serialVersionUID = 4783236154150397685L;
+
+ public int compare(final Calendar cal1, final Calendar cal2) {
+ return (cal1.get(YEAR) - cal2.get(YEAR)) * 10000 + (cal1.get(MONTH) - cal2.get(MONTH)) * 100 + (cal1.get(DAY_OF_MONTH) - cal2.get(DAY_OF_MONTH));
+ }
+ }
+
+ private static final CalendarComp CALENDAR_COMP = new CalendarComp();
+ private static final DateComp DATE_COMP = new DateComp();
+
private Set<E> holidays;
private E earlyBoundary = null;
@@ -146,32 +148,32 @@
* @see net.objectlab.kit.datecalc.common.HolidayCalendar#setHolidays(java.util.Set)
*/
@SuppressWarnings("unchecked")
- public void setHolidays(final Set<E> holidays) {
-
+ public final void setHolidays(final Set<E> holidays) {
+
if (holidays == null) {
this.holidays = Collections.emptySet();
return;
}
-
+
Set<E> newSet = null;
// this 'hack' is for Date/Calendar objects to be
// 'equal' on the same day even if time fields differ
- Iterator<E> it = holidays.iterator();
+ final Iterator<E> it = holidays.iterator();
if (it.hasNext()) {
- E obj = it.next();
-
+ final E obj = it.next();
+
if (obj instanceof Date) {
- newSet = new TreeSet(dateCmp);
+ newSet = new TreeSet(DATE_COMP);
} else if (obj instanceof Calendar) {
- newSet = new TreeSet(calCmp);
- }
+ newSet = new TreeSet(CALENDAR_COMP);
+ }
}
-
+
if (newSet == null) {
newSet = new HashSet<E>();
}
-
+
newSet.addAll(holidays);
this.holidays = Collections.unmodifiableSet(newSet);
}
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Tenor.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Tenor.java 2010-03-12 20:59:12 UTC (rev 297)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Tenor.java 2010-03-13 00:49:41 UTC (rev 298)
@@ -91,20 +91,8 @@
boolean invalid = false;
final int size = tenor.length();
- for (int i = 0; i < size && !invalid; i++) {
- final char c = tenor.charAt(i);
+ parseCode(tenor, unitsBuf, codeBuf, invalid, size);
- if (c >= '0' && c <= '9') {
- if (codeBuf.length() != 0) {
- throw new IllegalArgumentException("[" + tenor + "] is not a valid tenor");
- } else {
- unitsBuf.append(c);
- }
- } else {
- codeBuf.append(c);
- }
- }
-
int parsedUnits = 0;
if (unitsBuf.length() > 0) {
parsedUnits = Integer.parseInt(unitsBuf.toString());
@@ -125,6 +113,22 @@
return new Tenor(parsedUnits, parsedCode);
}
+ private static void parseCode(final String tenor, final StringBuffer unitsBuf, final StringBuffer codeBuf, boolean invalid, final int size) {
+ for (int i = 0; i < size && !invalid; i++) {
+ final char c = tenor.charAt(i);
+
+ if (c >= '0' && c <= '9') {
+ if (codeBuf.length() != 0) {
+ throw new IllegalArgumentException("[" + tenor + "] is not a valid tenor");
+ } else {
+ unitsBuf.append(c);
+ }
+ } else {
+ codeBuf.append(c);
+ }
+ }
+ }
+
@Override
public int hashCode() {
final int prime = 31;
Modified: trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Utils.java
===================================================================
--- trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Utils.java 2010-03-12 20:59:12 UTC (rev 297)
+++ trunk/datecalc-common/src/main/java/net/objectlab/kit/datecalc/common/Utils.java 2010-03-13 00:49:41 UTC (rev 298)
@@ -50,11 +50,8 @@
*
*/
public final class Utils {
-
private static final String DATE_PATTERN = "yyyy-MM-dd";
- private static final SimpleDateFormat SDF = new SimpleDateFormat(DATE_PATTERN);
-
private Utils() {
}
@@ -116,11 +113,10 @@
public static Calendar getCal(final String dateStr) {
try {
- final Date date = SDF.parse(dateStr);
- final Calendar cal = getCal(date);
- return cal;
+ final Date date = new SimpleDateFormat(DATE_PATTERN).parse(dateStr);
+ return getCal(date);
} catch (final ParseException e) {
- throw new IllegalArgumentException("\"" + dateStr + "\"" + " is an invalid date, the pattern is : " + DATE_PATTERN);
+ throw new IllegalArgumentException("\"" + dateStr + "\"" + " is an invalid date, the pattern is : " + DATE_PATTERN, e);
}
}
Modified: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/JodaWorkingWeek.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/JodaWorkingWeek.java 2010-03-12 20:59:12 UTC (rev 297)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/JodaWorkingWeek.java 2010-03-13 00:49:41 UTC (rev 298)
@@ -41,7 +41,8 @@
*
* @author Benoit Xhenseval
* @author $LastChangedBy$
- * @version $Revision$ $Date$
+ * @version $Revision$ $Date: 2006-10-11 13:53:07 +0100 (Wed, 11 Oct 2006)
+ * $
*
*/
public class JodaWorkingWeek extends WorkingWeek {
@@ -64,13 +65,13 @@
// -----------------------------------------------------------------------
//
- // ObjectLab, world leaders in the design and development of bespoke
- // applications for the securities financing markets.
- // www.ObjectLab.co.uk
+ // ObjectLab, world leaders in the design and development of bespoke
+ // applications for the securities financing markets.
+ // www.ObjectLab.co.uk
//
// -----------------------------------------------------------------------
- public boolean isWorkingDay(final LocalDate date) {
+ public boolean isWorkingDay(final LocalDate date) {
final int dayOfWeek = jodaToCalendarDayConstant(date.getDayOfWeek());
return isWorkingDayFromCalendar(dayOfWeek);
}
@@ -83,8 +84,8 @@
* @param dayOfWeek
* e.g. DateTimeConstants.MONDAY, DateTimeConstants.TUESDAY, etc
*/
- public JodaWorkingWeek withWorkingDayFromDateTimeConstant(final boolean working, int dayOfWeek) {
- dayOfWeek = jodaToCalendarDayConstant(dayOfWeek);
+ public JodaWorkingWeek withWorkingDayFromDateTimeConstant(final boolean working, int givenDayOfWeek) {
+ int dayOfWeek = jodaToCalendarDayConstant(givenDayOfWeek);
return new JodaWorkingWeek(super.withWorkingDayFromCalendar(working, dayOfWeek));
}
@@ -92,8 +93,8 @@
return isWorkingDayFromCalendar(jodaToCalendarDayConstant(dayOfWeek));
}
- public int jodaToCalendarDayConstant(int dayOfWeek) {
- dayOfWeek++;
+ public int jodaToCalendarDayConstant(final int givenDayOfWeek) {
+ int dayOfWeek = givenDayOfWeek + 1;
return (dayOfWeek <= MAX_WEEKDAY_INDEX ? dayOfWeek : dayOfWeek % MAX_WEEKDAY_INDEX);
}
}
@@ -101,16 +102,13 @@
/*
* ObjectLab, http://www.objectlab.co.uk/open is sponsoring the ObjectLab Kit.
*
- * Based in London, we are world leaders in the design and development
- * of bespoke applications for the securities financing markets.
+ * Based in London, we are world leaders in the design and development of
+ * bespoke applications for the securities financing markets.
*
- * <a href="http://www.objectlab.co.uk/open">Click here to learn more about us</a>
- * ___ _ _ _ _ _
- * / _ \| |__ (_) ___ ___| |_| | __ _| |__
- * | | | | '_ \| |/ _ \/ __| __| | / _` | '_ \
- * | |_| | |_) | | __/ (__| |_| |__| (_| | |_) |
- * \___/|_.__// |\___|\___|\__|_____\__,_|_.__/
- * |__/
- *
- * www.ObjectLab.co.uk
+ * <a href="http://www.objectlab.co.uk/open">Click here to learn more about
+ * us</a> ___ _ _ _ _ _ / _ \| |__ (_) ___ ___| |_| | __ _| |__ | | | | '_ \| |/
+ * _ \/ __| __| | / _` | '_ \ | |_| | |_) | | __/ (__| |_| |__| (_| | |_) |
+ * \___/|_.__// |\___|\___|\__|_____\__,_|_.__/ |__/
+ *
+ * www.ObjectLab.co.uk
*/
Modified: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateIMMDateCalculator.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateIMMDateCalculator.java 2010-03-12 20:59:12 UTC (rev 297)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateIMMDateCalculator.java 2010-03-13 00:49:41 UTC (rev 298)
@@ -44,7 +44,6 @@
import net.objectlab.kit.datecalc.common.AbstractIMMDateCalculator;
import net.objectlab.kit.datecalc.common.IMMPeriod;
-import org.joda.time.DateTimeConstants;
import org.joda.time.LocalDate;
/**
@@ -140,9 +139,9 @@
//
// -----------------------------------------------------------------------
- private LocalDate calculateIMMMonth(final boolean requestNextIMM, LocalDate date, final int month) {
+ private LocalDate calculateIMMMonth(final boolean requestNextIMM, final LocalDate startDate, final int month) {
int monthOffset = 0;
-
+ LocalDate date = startDate;
switch (month) {
case MARCH:
case JUNE:
Modified: 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 2010-03-12 20:59:12 UTC (rev 297)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDateModifiedFollowingHandler.java 2010-03-13 00:49:41 UTC (rev 298)
@@ -70,15 +70,16 @@
//
// -----------------------------------------------------------------------
- protected LocalDate move(final DateCalculator<LocalDate> calculator, int step) {
+ protected LocalDate move(final DateCalculator<LocalDate> calculator, final int step) {
LocalDate date = calculator.getCurrentBusinessDate();
final int month = date.getMonthOfYear();
+ int stepToUse = step;
while (calculator.isNonWorkingDay(date)) {
- date = date.plusDays(step);
+ date = date.plusDays(stepToUse);
if (date.getMonthOfYear() != month) {
// flick to backward
- step *= -1;
- date = date.plusDays(step);
+ stepToUse *= -1;
+ date = date.plusDays(stepToUse);
}
}
return date;
Modified: trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDatePeriodCountCalculator.java
===================================================================
--- trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDatePeriodCountCalculator.java 2010-03-12 20:59:12 UTC (rev 297)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/LocalDatePeriodCountCalculator.java 2010-03-13 00:49:41 UTC (rev 298)
@@ -52,49 +52,20 @@
public int dayDiff(final LocalDate start, final LocalDate end, final PeriodCountBasis basis) {
int diff = 0;
- int dayStart;
- int dayEnd;
+ // int dayStart;
+ // int dayEnd;
switch (basis) {
case CONV_30_360:
- dayStart = start.getDayOfMonth();
- 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;
+ diff = diffConv30v360(start, end);
break;
case CONV_360E_ISDA:
- dayStart = start.getDayOfMonth();
- 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;
+ diff = diff360EIsda(start, end);
break;
case CONV_360E_ISMA:
- dayStart = start.getDayOfMonth();
- 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;
+ diff = diff360EIsma(start, end);
break;
default:
final Period p = new Period(start, end, PeriodType.days());
@@ -104,6 +75,44 @@
return diff;
}
+ private int diff360EIsma(final LocalDate start, final LocalDate end) {
+ 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;
+ }
+ return (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS + dayEnd - dayStart;
+ }
+
+ private int diff360EIsda(final LocalDate start, final LocalDate end) {
+ 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;
+ }
+
+ return (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS + dayEnd - dayStart;
+ }
+
+ private int diffConv30v360(final LocalDate start, final LocalDate end) {
+ 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;
+ }
+ return (end.getYear() - start.getYear()) * YEAR_360 + (end.getMonthOfYear() - start.getMonthOfYear()) * MONTH_30_DAYS + dayEnd - dayStart;
+ }
+
// -----------------------------------------------------------------------
//
// ObjectLab, world leaders in the design and development of bespoke
@@ -140,7 +149,7 @@
case ACT_360:
diff = (dayDiff(start, end, basis)) / YEAR_360_0;
break;
-
+
case ACT_365:
case END_365:
diff = (dayDiff(start, end, basis)) / YEAR_365_0;
Modified: 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 2010-03-12 20:59:12 UTC (rev 297)
+++ trunk/datecalc-joda/src/main/java/net/objectlab/kit/datecalc/joda/YearMonthDayModifiedFollowingHandler.java 2010-03-13 00:49:41 UTC (rev 298)
@@ -79,15 +79,16 @@
//
// -----------------------------------------------------------------------
- protected YearMonthDay move(final DateCalculator<YearMonthDay> calculator, int step) {
+ protected YearMonthDay move(final DateCalculator<YearMonthDay> calculator, final int step) {
YearMonthDay date = calculator.getCurrentBusinessDate();
final int month = date.getMonthOfYear();
+ int stepToUse = step;
while (calculator.isNonWorkingDay(date)) {
- date = date.plusDays(step);
+ date = date.plusDays(stepToUse);
if (date.getMonthOfYear() != month) {
// flick to backward
- step *= -1;
- date = date.plusDays(step);
+ stepToUse *= -1;
+ date = date.plusDays(stepToUse);
}
}
return date;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|