You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by vo...@apache.org on 2020/05/21 22:07:45 UTC
[fineract] branch develop updated: Fineract-955 - Upgrade ical4j
from ancient version 1.0.7 to current 3.0.18
This is an automated email from the ASF dual-hosted git repository.
vorburger pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 96452f3 Fineract-955 - Upgrade ical4j from ancient version 1.0.7 to current 3.0.18
96452f3 is described below
commit 96452f3ff4eec4f4f5188ff31ce7e2c9777ec464
Author: nnatarajan <na...@gmail.com>
AuthorDate: Sun May 17 19:22:29 2020 -0600
Fineract-955 - Upgrade ical4j from ancient version 1.0.7 to current 3.0.18
---
fineract-provider/build.gradle | 2 +-
.../core/data/DataValidatorBuilder.java | 2 +-
...gDaysWritePlatformServiceJpaRepositoryImpl.java | 2 +-
.../portfolio/calendar/service/CalendarUtils.java | 122 +++++++++++++--------
4 files changed, 82 insertions(+), 46 deletions(-)
diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle
index 4361564..c733f92 100644
--- a/fineract-provider/build.gradle
+++ b/fineract-provider/build.gradle
@@ -89,7 +89,7 @@ dependencyManagement {
dependency 'org.drizzle.jdbc:drizzle-jdbc:1.4'
dependency 'com.lowagie:itext:2.1.7'
dependency 'com.lowagie:itext-rtf:2.1.7'
- dependency 'org.mnode.ical4j:ical4j:1.0.7'
+ dependency 'org.mnode.ical4j:ical4j:3.0.18'
dependency 'org.flywaydb:flyway-core:6.4.1'
dependency 'org.quartz-scheduler:quartz:+'
dependency 'com.amazonaws:aws-java-sdk-s3:1.11.779'
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java
index 7135a01..9fd67d8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java
@@ -25,8 +25,8 @@ import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import net.fortuna.ical4j.model.ValidationException;
import net.fortuna.ical4j.model.property.RRule;
+import net.fortuna.ical4j.validate.ValidationException;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.LocalDate;
import org.quartz.CronExpression;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/service/WorkingDaysWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/service/WorkingDaysWritePlatformServiceJpaRepositoryImpl.java
index 4521e30..a50fac2 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/service/WorkingDaysWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/service/WorkingDaysWritePlatformServiceJpaRepositoryImpl.java
@@ -20,8 +20,8 @@ package org.apache.fineract.organisation.workingdays.service;
import java.text.ParseException;
import java.util.Map;
-import net.fortuna.ical4j.model.ValidationException;
import net.fortuna.ical4j.model.property.RRule;
+import net.fortuna.ical4j.validate.ValidationException;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java
index f37d2c3..caf13a6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java
@@ -32,11 +32,11 @@ import net.fortuna.ical4j.model.DateList;
import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.NumberList;
import net.fortuna.ical4j.model.Recur;
-import net.fortuna.ical4j.model.ValidationException;
import net.fortuna.ical4j.model.WeekDay;
import net.fortuna.ical4j.model.WeekDayList;
import net.fortuna.ical4j.model.parameter.Value;
import net.fortuna.ical4j.model.property.RRule;
+import net.fortuna.ical4j.validate.ValidationException;
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
@@ -242,13 +242,13 @@ public class CalendarUtils {
if (recur == null) { return humanReadable; }
- if (recur.getFrequency().equals(Recur.DAILY)) {
+ if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
if (recur.getInterval() == 1) {
humanReadable = "Daily";
} else {
humanReadable = "Every " + recur.getInterval() + " days";
}
- } else if (recur.getFrequency().equals(Recur.WEEKLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.WEEKLY)) {
if (recur.getInterval() == 1 || recur.getInterval() == -1) {
humanReadable = "Weekly";
} else {
@@ -261,26 +261,26 @@ public class CalendarUtils {
for (@SuppressWarnings("rawtypes")
final Iterator iterator = weekDayList.iterator(); iterator.hasNext();) {
final WeekDay weekDay = (WeekDay) iterator.next();
- humanReadable += DayNameEnum.from(weekDay.getDay()).getCode();
+ humanReadable += DayNameEnum.from(weekDay.getDay().name()).getCode();
}
- } else if (recur.getFrequency().equals(Recur.MONTHLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.MONTHLY)) {
NumberList nthDays = recur.getSetPosList();
Integer nthDay = null;
if (!nthDays.isEmpty())
- nthDay = (Integer) nthDays.get(0);
+ nthDay = nthDays.get(0);
NumberList monthDays = recur.getMonthDayList();
Integer monthDay = null;
if (!monthDays.isEmpty())
- monthDay = (Integer) monthDays.get(0);
+ monthDay = monthDays.get(0);
WeekDayList weekdays = recur.getDayList();
WeekDay weekDay = null;
if (!weekdays.isEmpty())
- weekDay = (WeekDay) weekdays.get(0);
+ weekDay = weekdays.get(0);
if (nthDay != null && weekDay != null) {
NthDayType nthDayType = NthDayType.fromInt(nthDay);
NthDayNameEnum nthDayName = NthDayNameEnum.from(nthDayType.toString());
- DayNameEnum weekdayType = DayNameEnum.from(weekDay.getDay());
+ DayNameEnum weekdayType = DayNameEnum.from(weekDay.getDay().name());
if (recur.getInterval() == 1 || recur.getInterval() == -1) {
humanReadable = "Monthly on " + nthDayName.getCode().toLowerCase() + " " + weekdayType.getCode().toLowerCase();
} else {
@@ -308,7 +308,7 @@ public class CalendarUtils {
humanReadable = "Every " + recur.getInterval() + " months on day " + startDate.getDayOfMonth();
}
}
- } else if (recur.getFrequency().equals(Recur.YEARLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.YEARLY)) {
if (recur.getInterval() == 1) {
humanReadable = "Annually on " + startDate.toString("MMM") + " " + startDate.getDayOfMonth();
} else {
@@ -420,13 +420,13 @@ public class CalendarUtils {
private static PeriodFrequencyType getMeetingPeriodFrequencyType(final Recur recur) {
PeriodFrequencyType meetingFrequencyType = PeriodFrequencyType.INVALID;
- if (recur.getFrequency().equals(Recur.DAILY)) {
+ if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
meetingFrequencyType = PeriodFrequencyType.DAYS;
- } else if (recur.getFrequency().equals(Recur.WEEKLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.WEEKLY)) {
meetingFrequencyType = PeriodFrequencyType.WEEKS;
- } else if (recur.getFrequency().equals(Recur.MONTHLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.MONTHLY)) {
meetingFrequencyType = PeriodFrequencyType.MONTHS;
- } else if (recur.getFrequency().equals(Recur.YEARLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.YEARLY)) {
meetingFrequencyType = PeriodFrequencyType.YEARS;
}
return meetingFrequencyType;
@@ -435,13 +435,13 @@ public class CalendarUtils {
public static String getMeetingFrequencyFromPeriodFrequencyType(final PeriodFrequencyType periodFrequency) {
String frequency = null;
if (periodFrequency.equals(PeriodFrequencyType.DAYS)) {
- frequency = Recur.DAILY;
+ frequency = Recur.Frequency.DAILY.name();
} else if (periodFrequency.equals(PeriodFrequencyType.WEEKS)) {
- frequency = Recur.WEEKLY;
+ frequency = Recur.Frequency.WEEKLY.name();
} else if (periodFrequency.equals(PeriodFrequencyType.MONTHS)) {
- frequency = Recur.MONTHLY;
+ frequency = Recur.Frequency.MONTHLY.name();
} else if (periodFrequency.equals(PeriodFrequencyType.YEARS)) {
- frequency = Recur.YEARLY;
+ frequency = Recur.Frequency.YEARLY.name();
}
return frequency;
}
@@ -453,7 +453,7 @@ public class CalendarUtils {
public static CalendarFrequencyType getFrequency(final String recurringRule) {
final Recur recur = CalendarUtils.getICalRecur(recurringRule);
- return CalendarFrequencyType.fromString(recur.getFrequency());
+ return CalendarFrequencyType.fromString(recur.getFrequency().name());
}
public static CalendarWeekDaysType getRepeatsOnDay(final String recurringRule) {
@@ -461,8 +461,8 @@ public class CalendarUtils {
final WeekDayList weekDays = recur.getDayList();
if (weekDays.isEmpty()) return CalendarWeekDaysType.INVALID;
// supports only one day
- WeekDay weekDay = (WeekDay) weekDays.get(0);
- return CalendarWeekDaysType.fromString(weekDay.getDay());
+ WeekDay weekDay = weekDays.get(0);
+ return CalendarWeekDaysType.fromString(weekDay.getDay().name());
}
public static NthDayType getRepeatsOnNthDayOfMonth(final String recurringRule) {
final Recur recur = CalendarUtils.getICalRecur(recurringRule);
@@ -473,7 +473,7 @@ public class CalendarUtils {
monthDays = recur.getSetPosList();
if (monthDays.isEmpty()) return NthDayType.INVALID;
if (!recur.getMonthDayList().isEmpty() && recur.getSetPosList().isEmpty()) return NthDayType.ONDAY;
- Integer monthDay = (Integer) monthDays.get(0);
+ Integer monthDay = monthDays.get(0);
return NthDayType.fromInt(monthDay);
}
@@ -484,7 +484,7 @@ public class CalendarUtils {
if (recur == null) { return null; }
LocalDate startDate = disbursementDate;
final LocalDate seedDate = calendar.getStartDateLocalDate();
- if (isValidRedurringDate(calendar.getRecurrence(), seedDate, startDate, isSkipRepaymentOnFirstDayOfMonth, numberOfDays) && !frequency.equals(Recur.DAILY)) {
+ if (isValidRedurringDate(calendar.getRecurrence(), seedDate, startDate, isSkipRepaymentOnFirstDayOfMonth, numberOfDays) && !frequency.equals(Recur.Frequency.DAILY.name())) {
startDate = startDate.plusDays(1);
}
// Recurring dates should follow loanRepaymentInterval.
@@ -493,7 +493,9 @@ public class CalendarUtils {
// where as for loan product with fortnightly frequency interval is 2
// to generate currect set of meeting dates reset interval same as loan
// repayment interval.
- recur.setInterval(loanRepaymentInterval);
+
+ Recur.Builder recurBuilder = getRecurBuilder(recur);
+ recurBuilder = recurBuilder.interval(loanRepaymentInterval);
// Recurring dates should follow loanRepayment frequency.
// e.g.
@@ -501,11 +503,13 @@ public class CalendarUtils {
// frequency type.
// to generate currect set of meeting dates reset frequency same as loan
// repayment frequency.
- if (recur.getFrequency().equals(Recur.DAILY)) {
- recur.setFrequency(frequency);
+
+ if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
+ recurBuilder = recurBuilder.frequency(Recur.Frequency.valueOf(frequency));
}
- final LocalDate firstRepaymentDate = getNextRecurringDate(recur, seedDate, startDate);
+ Recur modifiedRecur = recurBuilder.build();
+ final LocalDate firstRepaymentDate = getNextRecurringDate(modifiedRecur, seedDate, startDate);
if (isSkipRepaymentOnFirstDayOfMonth && firstRepaymentDate.getDayOfMonth() == 1) { return adjustRecurringDate(firstRepaymentDate,
numberOfDays); }
@@ -518,10 +522,10 @@ public class CalendarUtils {
final Recur recur = CalendarUtils.getICalRecur(recurringRule);
if (recur == null) { return null; }
if (isValidRecurringDate(recur, seedDate, oldRepaymentDate, isSkipRepaymentOnFirstDayOfMonth, numberOfDays)) { return oldRepaymentDate; }
- LocalDate nextRapaymentDate = getNextRepaymentMeetingDate(recurringRule, seedDate, oldRepaymentDate, loanRepaymentInterval,
+ LocalDate nextRepaymentDate = getNextRepaymentMeetingDate(recurringRule, seedDate, oldRepaymentDate, loanRepaymentInterval,
frequency, workingDays, isSkipRepaymentOnFirstDayOfMonth, numberOfDays);
- return nextRapaymentDate;
+ return nextRepaymentDate;
}
public static LocalDate getNextRepaymentMeetingDate(final String recurringRule, final LocalDate seedDate,
@@ -541,7 +545,11 @@ public class CalendarUtils {
* with fortnightly frequency will have interval of 2, to generate right
* set of meeting dates reset interval same as loan repayment interval.
*/
- recur.setInterval(loanRepaymentInterval);
+
+ Recur.Builder recurBuilder = getRecurBuilder(recur);
+
+ recurBuilder = recurBuilder.interval(loanRepaymentInterval);
+
/*
* Recurring dates should follow loanRepayment frequency. //e.g. daily
@@ -549,12 +557,16 @@ public class CalendarUtils {
* frequency. to generate right set of meeting dates reset frequency
* same as loan repayment frequency.
*/
- if (recur.getFrequency().equals(Recur.DAILY)) {
- recur.setFrequency(frequency);
+
+
+ if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
+ recurBuilder = recurBuilder.frequency(Recur.Frequency.valueOf(frequency));
}
- LocalDate newRepaymentDate = getNextRecurringDate(recur, seedDate, tmpDate);
- final LocalDate nextRepaymentDate = getNextRecurringDate(recur, seedDate, newRepaymentDate);
+ Recur modifiedRecur = recurBuilder.build();
+
+ LocalDate newRepaymentDate = getNextRecurringDate(modifiedRecur, seedDate, tmpDate);
+ final LocalDate nextRepaymentDate = getNextRecurringDate(modifiedRecur, seedDate, newRepaymentDate);
newRepaymentDate = WorkingDaysUtil.getOffSetDateIfNonWorkingDay(newRepaymentDate, nextRepaymentDate, workingDays);
if (isSkipRepaymentOnFirstDayOfMonth) {
@@ -639,13 +651,13 @@ public class CalendarUtils {
if (isValidRecurringDate(recur, seedDate, currentDate, isSkipMeetingOnFirstDay, numberOfDays)) { return currentDate; }
- if (recur.getFrequency().equals(Recur.DAILY)) {
+ if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
currentDate = currentDate.plusDays(recur.getInterval());
- } else if (recur.getFrequency().equals(Recur.WEEKLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.WEEKLY)) {
currentDate = currentDate.plusWeeks(recur.getInterval());
- } else if (recur.getFrequency().equals(Recur.MONTHLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.MONTHLY)) {
currentDate = currentDate.plusMonths(recur.getInterval());
- } else if (recur.getFrequency().equals(Recur.YEARLY)) {
+ } else if (recur.getFrequency().equals(Recur.Frequency.YEARLY)) {
currentDate = currentDate.plusYears(recur.getInterval());
}
@@ -694,7 +706,7 @@ public class CalendarUtils {
if (getMeetingPeriodFrequencyType(recur).isMonthly()) {
monthDayList = recur.getMonthDayList();
if (!monthDayList.isEmpty()) {
- monthOnDay = (Integer) monthDayList.get(0);
+ monthOnDay = monthDayList.get(0);
}
}
return monthOnDay;
@@ -746,17 +758,22 @@ public class CalendarUtils {
* frequency. to generate right set of meeting dates reset frequency
* same as loan repayment frequency.
*/
- if (recur.getFrequency().equals(Recur.DAILY)) {
- recur.setFrequency(frequency);
+
+ Recur.Builder recurBuilder = getRecurBuilder(recur);
+
+ if (recur.getFrequency().equals(Recur.Frequency.DAILY)) {
+ recurBuilder = recurBuilder.frequency(Recur.Frequency.valueOf(frequency));
}
+ Recur modifiedRecur = recurBuilder.build();
+
/**
* Below code modified as discussed with Pramod N
*/
LocalDate newRepaymentDate = tmpDate;
int newRepayment = rep;
while (newRepayment > 0) {
- newRepaymentDate = getNextRecurringDate(recur, seedDate, newRepaymentDate);
+ newRepaymentDate = getNextRecurringDate(modifiedRecur, seedDate, newRepaymentDate);
newRepayment--;
}
@@ -802,9 +819,28 @@ public class CalendarUtils {
* monthly and meeting frequency is weekly, then generate repayments
* schedule as every 4 weeks
*/
- if (frequency.equals(Recur.MONTHLY) && recur.getFrequency().equals(Recur.WEEKLY)) {
+ if (frequency.equals(Recur.Frequency.MONTHLY.name()) && recur.getFrequency().equals(Recur.Frequency.WEEKLY)) {
repaymentInterval = loanRepaymentInterval*interval;
}
return repaymentInterval;
}
+
+ private static Recur.Builder getRecurBuilder(Recur recur) {
+ Recur.Builder recurBuilder = new Recur.Builder();
+ recurBuilder = recurBuilder.frequency(recur.getFrequency())
+ .until(recur.getUntil())
+ .count(recur.getCount())
+ .interval(recur.getInterval())
+ .secondList(recur.getSecondList())
+ .minuteList(recur.getMinuteList())
+ .hourList(recur.getHourList())
+ .dayList(recur.getDayList())
+ .monthDayList(recur.getMonthDayList())
+ .yearDayList(recur.getYearDayList())
+ .weekNoList(recur.getWeekNoList())
+ .monthList(recur.getMonthList())
+ .setPosList(recur.getSetPosList())
+ .weekStartDay(recur.getWeekStartDay());
+ return recurBuilder;
+ }
}