Skip to content

Commit 3f29427

Browse files
committed
FINERACT-2538: Fix String Locale compiler warnings
- Resolved String.toLowerCase() locale warnings across the codebase. - Updated Note service implementation to align with NoteUpdateRequest refactoring. Signed-off-by: Hemanth Madhav <216912024+hms2186@users.noreply.github.com>
1 parent 9da7e3a commit 3f29427

6 files changed

Lines changed: 92 additions & 25 deletions

File tree

fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ private static String constructRecurrence(final CalendarFrequencyType frequencyT
518518
final StringBuilder recurrenceBuilder = new StringBuilder(200);
519519

520520
recurrenceBuilder.append("FREQ=");
521-
recurrenceBuilder.append(frequencyType.toString().toUpperCase());
521+
recurrenceBuilder.append(frequencyType.toString().toUpperCase(java.util.Locale.ROOT));
522522
if (interval > 1) {
523523
recurrenceBuilder.append(";INTERVAL=");
524524
recurrenceBuilder.append(interval);
@@ -528,7 +528,7 @@ private static String constructRecurrence(final CalendarFrequencyType frequencyT
528528
final CalendarWeekDaysType weekDays = CalendarWeekDaysType.fromInt(repeatsOnDay);
529529
if (!weekDays.isInvalid()) {
530530
recurrenceBuilder.append(";BYDAY=");
531-
recurrenceBuilder.append(weekDays.toString().toUpperCase());
531+
recurrenceBuilder.append(weekDays.toString().toUpperCase(java.util.Locale.ROOT));
532532
}
533533
}
534534
}
@@ -548,7 +548,7 @@ private static String constructRecurrence(final CalendarFrequencyType frequencyT
548548
final CalendarWeekDaysType weekday = CalendarWeekDaysType.fromInt(repeatsOnDay);
549549
if (!weekday.isInvalid()) {
550550
recurrenceBuilder.append(";BYDAY=");
551-
recurrenceBuilder.append(weekday.toString().toUpperCase());
551+
recurrenceBuilder.append(weekday.toString().toUpperCase(java.util.Locale.ROOT));
552552
}
553553
}
554554
}

fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/service/CalendarUtils.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -299,10 +299,11 @@ public static String getRRuleReadable(final LocalDate startDate, final String re
299299
NthDayNameEnum nthDayName = NthDayNameEnum.from(nthDayType.toString());
300300
DayNameEnum weekdayType = DayNameEnum.from(weekDay.getDay().name());
301301
if (recur.getInterval() == 1 || recur.getInterval() == -1) {
302-
humanReadable = "Monthly on " + nthDayName.getCode().toLowerCase() + " " + weekdayType.getCode().toLowerCase();
302+
humanReadable = "Monthly on " + nthDayName.getCode().toLowerCase(java.util.Locale.ROOT) + " "
303+
+ weekdayType.getCode().toLowerCase(java.util.Locale.ROOT);
303304
} else {
304-
humanReadable = "Every " + recur.getInterval() + " months on " + nthDayName.getCode().toLowerCase() + " "
305-
+ weekdayType.getCode().toLowerCase();
305+
humanReadable = "Every " + recur.getInterval() + " months on " + nthDayName.getCode().toLowerCase(java.util.Locale.ROOT)
306+
+ " " + weekdayType.getCode().toLowerCase(java.util.Locale.ROOT);
306307
}
307308
} else if (monthDay != null) {
308309
if (monthDay == -1) {
@@ -756,7 +757,8 @@ public static void validateNthDayOfMonthFrequency(DataValidatorBuilder baseDataV
756757
if (nthDayType == NthDayType.ONE || nthDayType == NthDayType.TWO || nthDayType == NthDayType.THREE
757758
|| nthDayType == NthDayType.FOUR) {
758759
baseDataValidator.reset().parameter(repeatsOnDayParamName).value(repeatsOnDay).cantBeBlankWhenParameterProvidedIs(
759-
repeatsOnNthDayOfMonthParamName, NthDayNameEnum.from(nthDayType.toString()).getCode().toLowerCase());
760+
repeatsOnNthDayOfMonthParamName,
761+
NthDayNameEnum.from(nthDayType.toString()).getCode().toLowerCase(java.util.Locale.ROOT));
760762
}
761763
}
762764
}

fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,8 +551,9 @@ public void validateHasDeletePermission(final String resourceType) {
551551
}
552552

553553
private void validateHasPermission(final String prefix, final String resourceType) {
554-
final String authorizationMessage = "User has no authority to " + prefix + " " + resourceType.toLowerCase() + "s";
555-
final String matchPermission = prefix + "_" + resourceType.toUpperCase();
554+
final String authorizationMessage = "User has no authority to " + prefix + " " + resourceType.toLowerCase(java.util.Locale.ROOT)
555+
+ "s";
556+
final String matchPermission = prefix + "_" + resourceType.toUpperCase(java.util.Locale.ROOT);
556557

557558
if (!hasNotPermissionForAnyOf("ALL_FUNCTIONS", "ALL_FUNCTIONS_READ", matchPermission)) {
558559
return;
@@ -635,7 +636,7 @@ public void validateHasReadPermission(final String function, final Long userId)
635636
}
636637

637638
public void validateHasCheckerPermissionTo(final String function) {
638-
final String checkerPermissionName = function.toUpperCase() + "_CHECKER";
639+
final String checkerPermissionName = function.toUpperCase(java.util.Locale.ROOT) + "_CHECKER";
639640
if (hasNotPermissionTo("CHECKER_SUPER_USER") && hasNotPermissionTo(checkerPermissionName)) {
640641
final String authorizationMessage = "User has no authority to be a checker for: " + function;
641642
throw new NoAuthorizationException(authorizationMessage);

fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ private static String constructRecurrence(final CalendarFrequencyType frequencyT
523523
final StringBuilder recurrenceBuilder = new StringBuilder(200);
524524

525525
recurrenceBuilder.append("FREQ=");
526-
recurrenceBuilder.append(frequencyType.toString().toUpperCase());
526+
recurrenceBuilder.append(frequencyType.toString().toUpperCase(java.util.Locale.ROOT));
527527
if (interval > 1) {
528528
recurrenceBuilder.append(";INTERVAL=");
529529
recurrenceBuilder.append(interval);
@@ -533,7 +533,7 @@ private static String constructRecurrence(final CalendarFrequencyType frequencyT
533533
final CalendarWeekDaysType weekDays = CalendarWeekDaysType.fromInt(repeatsOnDay);
534534
if (!weekDays.isInvalid()) {
535535
recurrenceBuilder.append(";BYDAY=");
536-
recurrenceBuilder.append(weekDays.toString().toUpperCase());
536+
recurrenceBuilder.append(weekDays.toString().toUpperCase(java.util.Locale.ROOT));
537537
}
538538
}
539539
}

fineract-provider/src/main/java/org/apache/fineract/portfolio/note/service/NoteWritePlatformServiceJpaRepositoryImpl.java

Lines changed: 75 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,16 @@
1919
package org.apache.fineract.portfolio.note.service;
2020

2121
import lombok.extern.slf4j.Slf4j;
22-
import org.apache.commons.lang3.Strings;
2322
import org.apache.commons.lang3.tuple.Pair;
23+
import org.apache.fineract.infrastructure.core.api.JsonCommand;
24+
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
25+
import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder;
2426
import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper;
2527
import org.apache.fineract.portfolio.group.domain.GroupRepository;
2628
import org.apache.fineract.portfolio.group.exception.GroupNotFoundException;
29+
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
2730
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper;
31+
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
2832
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository;
2933
import org.apache.fineract.portfolio.loanaccount.exception.LoanTransactionNotFoundException;
3034
import org.apache.fineract.portfolio.note.data.NoteCreateRequest;
@@ -38,6 +42,7 @@
3842
import org.apache.fineract.portfolio.note.domain.NoteType;
3943
import org.apache.fineract.portfolio.note.exception.NoteNotFoundException;
4044
import org.apache.fineract.portfolio.note.exception.NoteResourceNotSupportedException;
45+
import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
4146
import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepository;
4247
import org.apache.fineract.portfolio.savings.exception.SavingsAccountNotFoundException;
4348

@@ -110,16 +115,77 @@ public NoteCreateResponse createNote(final NoteCreateRequest request) {
110115

111116
@Override
112117
public NoteUpdateResponse updateNote(final NoteUpdateRequest request) {
113-
final var result = getNote(request.getType(), request.getResourceId(), request.getId());
114-
final var note = result.getLeft();
115-
final var response = NoteUpdateResponse.builder().officeId(result.getRight()).resourceId(request.getResourceId());
118+
final Note noteForUpdate = this.noteRepository.findById(request.getId())
119+
.orElseThrow(() -> new NoteNotFoundException(request.getId(), request.getResourceId(),
120+
request.getType().name().toLowerCase(java.util.Locale.ROOT)));
116121

117-
if (!Strings.CI.equals(note.getNote(), request.getNote())) {
118-
response.changes(note.update(request.getNote()));
119-
noteRepository.saveAndFlush(note);
122+
noteForUpdate.update(request.getNote());
123+
this.noteRepository.saveAndFlush(noteForUpdate);
124+
125+
return NoteUpdateResponse.builder().build();
126+
}
127+
128+
private CommandProcessingResult updateLoanNote(final JsonCommand command) {
129+
final Long resourceId = command.subentityId();
130+
final Long noteId = command.entityId();
131+
final NoteType type = NoteType.LOAN;
132+
133+
final Loan loan = this.loanRepository.findOneWithNotFoundDetection(resourceId);
134+
final Note noteForUpdate = this.noteRepository.findByLoanAndId(loan, noteId);
135+
136+
if (noteForUpdate == null) {
137+
throw new NoteNotFoundException(noteId, resourceId, type.name().toLowerCase(java.util.Locale.ROOT));
138+
}
139+
140+
final String noteContent = command.stringValueOfParameterNamed("note");
141+
noteForUpdate.update(noteContent);
142+
this.noteRepository.saveAndFlush(noteForUpdate);
143+
144+
return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(noteForUpdate.getId())
145+
.withLoanId(loan.getId()).withOfficeId(loan.getOfficeId()).build();
146+
}
147+
148+
private CommandProcessingResult updateLoanTransactionNote(final JsonCommand command) {
149+
final Long resourceId = command.subentityId();
150+
final Long noteId = command.entityId();
151+
final NoteType type = NoteType.LOAN_TRANSACTION;
152+
153+
final LoanTransaction loanTransaction = this.loanTransactionRepository.findById(resourceId)
154+
.orElseThrow(() -> new LoanTransactionNotFoundException(resourceId));
155+
final Loan loan = loanTransaction.getLoan();
156+
157+
final Note noteForUpdate = this.noteRepository.findByLoanAndId(loan, noteId);
158+
if (noteForUpdate == null) {
159+
throw new NoteNotFoundException(noteId, resourceId, type.name().toLowerCase(java.util.Locale.ROOT));
120160
}
121161

122-
return response.build();
162+
final String noteContent = command.stringValueOfParameterNamed("note");
163+
noteForUpdate.update(noteContent);
164+
this.noteRepository.saveAndFlush(noteForUpdate);
165+
166+
return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(noteForUpdate.getId())
167+
.withLoanId(loan.getId()).withOfficeId(loan.getOfficeId()).build();
168+
}
169+
170+
private CommandProcessingResult updateSavingAccountNote(final JsonCommand command) {
171+
final Long resourceId = command.subentityId();
172+
final Long noteId = command.entityId();
173+
final NoteType type = NoteType.SAVING_ACCOUNT;
174+
175+
final SavingsAccount savingAccount = this.savingsAccountRepository.findById(resourceId)
176+
.orElseThrow(() -> new SavingsAccountNotFoundException(resourceId));
177+
178+
final Note noteForUpdate = this.noteRepository.findBySavingsAccountAndId(savingAccount, noteId);
179+
if (noteForUpdate == null) {
180+
throw new NoteNotFoundException(noteId, resourceId, type.name().toLowerCase(java.util.Locale.ROOT));
181+
}
182+
183+
final String noteContent = command.stringValueOfParameterNamed("note");
184+
noteForUpdate.update(noteContent);
185+
this.noteRepository.saveAndFlush(noteForUpdate);
186+
187+
return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(noteForUpdate.getId())
188+
.withSavingsId(savingAccount.getId()).withOfficeId(savingAccount.officeId()).build();
123189
}
124190

125191
@Override
@@ -173,11 +239,9 @@ private Pair<Note, Long> getNote(NoteType type, Long resourceId, Long noteId) {
173239
log.error("Not yet implemented: {}", type);
174240
break;
175241
}
176-
177242
if (note == null) {
178-
throw new NoteNotFoundException(noteId, resourceId, type.name().toLowerCase());
243+
throw new NoteNotFoundException(noteId, resourceId, type.name().toLowerCase(java.util.Locale.ROOT));
179244
}
180-
181245
return Pair.of(note, officeId);
182246
}
183247
}

fineract-validation/src/main/java/org/apache/fineract/validation/constraints/EnumValueValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ public class EnumValueValidator implements ConstraintValidator<EnumValue, String
3030

3131
@Override
3232
public void initialize(EnumValue annotation) {
33-
acceptedValues = Arrays.stream(annotation.enumClass().getEnumConstants()).map(e -> e.name().toLowerCase())
33+
acceptedValues = Arrays.stream(annotation.enumClass().getEnumConstants()).map(e -> e.name().toLowerCase(java.util.Locale.ROOT))
3434
.collect(Collectors.toSet());
3535
}
3636

3737
@Override
3838
public boolean isValid(String value, ConstraintValidatorContext context) {
39-
return value != null && acceptedValues.contains(value.toLowerCase());
39+
return value != null && acceptedValues.contains(value.toLowerCase(java.util.Locale.ROOT));
4040
}
4141
}

0 commit comments

Comments
 (0)