diff --git a/config/pmd/ruleset.xml b/config/pmd/ruleset.xml
index 038df132c5..9b8cc84b0d 100644
--- a/config/pmd/ruleset.xml
+++ b/config/pmd/ruleset.xml
@@ -8,15 +8,11 @@
-
-
-
+
+
+
-
-
-
-
-
+
@@ -25,7 +21,6 @@
-
@@ -36,6 +31,7 @@
+
@@ -68,9 +64,8 @@
-
+
-
@@ -80,7 +75,7 @@
-
+
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/AuditControllerFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/AuditControllerFT.java
index 9b9bd0735b..996ca06e02 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/AuditControllerFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/AuditControllerFT.java
@@ -13,7 +13,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class AuditControllerFT extends FunctionalTestBase {
+class AuditControllerFT extends FunctionalTestBase {
@DisplayName("Should fail to update an audit record as they are immutable")
@Test
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/CaptureSessionControllerFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/CaptureSessionControllerFT.java
index 1441c9750f..5a0a7ec61c 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/CaptureSessionControllerFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/CaptureSessionControllerFT.java
@@ -25,7 +25,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class CaptureSessionControllerFT extends FunctionalTestBase {
+class CaptureSessionControllerFT extends FunctionalTestBase {
@Test
@DisplayName("Scenario: Delete capture session with recordings")
void shouldNotDeleteCaptureSessionWithRecordings() {
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/CourtControllerFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/CourtControllerFT.java
index 1bbb477e5a..1861758c1c 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/CourtControllerFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/CourtControllerFT.java
@@ -7,7 +7,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class CourtControllerFT extends FunctionalTestBase {
+class CourtControllerFT extends FunctionalTestBase {
@DisplayName("Scenario: Create and update a court")
@Test
void createAndUpdateCourt() throws JsonProcessingException {
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/InviteControllerFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/InviteControllerFT.java
index c20cfce725..5efb43ac4f 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/InviteControllerFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/InviteControllerFT.java
@@ -15,7 +15,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class InviteControllerFT extends FunctionalTestBase {
+class InviteControllerFT extends FunctionalTestBase {
@DisplayName("Create a portal invite for new user")
@Test
void createPortalInvite() throws JsonProcessingException {
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/MediaServiceControllerFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/MediaServiceControllerFT.java
index 70172828ad..1bac3b55a1 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/MediaServiceControllerFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/MediaServiceControllerFT.java
@@ -12,7 +12,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class MediaServiceControllerFT extends FunctionalTestBase {
+class MediaServiceControllerFT extends FunctionalTestBase {
private static final String VOD_ENDPOINT = "/media-service/vod";
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/RecordingControllerFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/RecordingControllerFT.java
index 5536d091ae..1139b576b0 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/RecordingControllerFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/RecordingControllerFT.java
@@ -20,7 +20,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class RecordingControllerFT extends FunctionalTestBase {
+class RecordingControllerFT extends FunctionalTestBase {
@DisplayName("Scenario: Restore recording")
@Test
void undeleteRecording() {
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/ReportControllerFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/ReportControllerFT.java
index 0c33a980d0..c8544e467e 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/ReportControllerFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/ReportControllerFT.java
@@ -12,13 +12,13 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class ReportControllerFT extends FunctionalTestBase {
+class ReportControllerFT extends FunctionalTestBase {
private static final String DATE_FORMAT_REGEX = "^\\d{2}/\\d{2}/\\d{4}$";
private static final String TIME_FORMAT_REGEX = "^\\d{2}:\\d{2}:\\d{2}$";
- @DisplayName("Scenario: Should format Duration and date correctly")
@Test
+ @DisplayName("Scenario: Should format Duration and date correctly")
void shouldFormatDurationAndDateCorrectly() throws JsonProcessingException {
var bookingId = doPostRequest("/testing-support/should-delete-recordings-for-booking",
TestingSupportRoles.SUPER_USER)
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/UserControllerFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/UserControllerFT.java
index c40b6019f6..6d3ea30146 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/UserControllerFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/controllers/UserControllerFT.java
@@ -13,7 +13,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class UserControllerFT extends FunctionalTestBase {
+class UserControllerFT extends FunctionalTestBase {
@DisplayName("Scenario: Create/update a user")
@Test
void shouldCreateUser() throws JsonProcessingException {
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/email/GovNotifyFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/email/GovNotifyFT.java
index 0da77f0cde..fa56421b3e 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/email/GovNotifyFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/email/GovNotifyFT.java
@@ -15,13 +15,13 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
-public class GovNotifyFT {
- private final String toEmailAddress = "test@test.com";
- private final String fromEmailAddress = "hmcts.prerecorded.evidence@notifications.service.gov.uk";
- private final String caseReference = "123456";
- private final String courtName = "Court Name";
- private final String userFirstName = "John";
- private final String userLastName = "Doe";
+class GovNotifyFT {
+ private static final String TO_EMAIL_ADDRESS = "test@test.com";
+ private static final String FROM_EMAIL_ADDRESS = "hmcts.prerecorded.evidence@notifications.service.gov.uk";
+ private static final String CASE_REFERENCE = "123456";
+ private static final String COURT_NAME = "Court Name";
+ private static final String USER_FIRST_NAME = "John";
+ private static final String USER_LAST_NAME = "Doe";
@Value("${portal.url")
private String portalUrl;
@@ -31,18 +31,18 @@ public class GovNotifyFT {
private User createUser() {
var user = new User();
- user.setFirstName(userFirstName);
- user.setLastName(userLastName);
- user.setEmail(toEmailAddress);
+ user.setFirstName(USER_FIRST_NAME);
+ user.setLastName(USER_LAST_NAME);
+ user.setEmail(TO_EMAIL_ADDRESS);
return user;
}
private Case createCase() {
var court = new Court();
- court.setName(courtName);
+ court.setName(COURT_NAME);
var forCase = new Case();
forCase.setCourt(court);
- forCase.setReference(caseReference);
+ forCase.setReference(CASE_REFERENCE);
return forCase;
}
@@ -59,7 +59,7 @@ void recordingReady() {
var forCase = createCase();
var response = client.recordingReady(user, forCase);
- assertEquals(fromEmailAddress, response.getFromEmail());
+ assertEquals(FROM_EMAIL_ADDRESS, response.getFromEmail());
assertEquals("[Do Not Reply] HMCTS Pre-recorded Evidence Portal – New Video", response.getSubject());
compareBody(
"""
@@ -86,7 +86,7 @@ void recordingEdited() {
var forCase = createCase();
var response = client.recordingEdited(user, forCase);
- assertEquals(fromEmailAddress, response.getFromEmail());
+ assertEquals(FROM_EMAIL_ADDRESS, response.getFromEmail());
assertEquals("[Do Not Reply] HMCTS Pre-recorded Evidence Portal – Edited Video", response.getSubject());
compareBody(
"""
@@ -112,7 +112,7 @@ void portalInvite() {
var user = createUser();
var response = client.portalInvite(user);
- assertEquals(fromEmailAddress, response.getFromEmail());
+ assertEquals(FROM_EMAIL_ADDRESS, response.getFromEmail());
assertEquals("[Do Not Reply] HMCTS Pre-recorded Evidence Portal Invitation", response.getSubject());
compareBody(
"""
@@ -158,9 +158,9 @@ void casePendingClosure() {
var date = Timestamp.valueOf("2021-01-01 00:00:00.0");
var response = client.casePendingClosure(user, forCase, date);
- assertEquals(fromEmailAddress, response.getFromEmail());
+ assertEquals(FROM_EMAIL_ADDRESS, response.getFromEmail());
assertEquals(
- "[Do Not Reply] Pre-recorded Evidence: Case reference " + caseReference + " access update",
+ "[Do Not Reply] Pre-recorded Evidence: Case reference " + CASE_REFERENCE + " access update",
response.getSubject()
);
compareBody(
@@ -181,9 +181,9 @@ void caseClosed() {
var forCase = createCase();
var response = client.caseClosed(user, forCase);
- assertEquals(fromEmailAddress, response.getFromEmail());
+ assertEquals(FROM_EMAIL_ADDRESS, response.getFromEmail());
assertEquals(
- "[Do Not Reply] Pre-recorded Evidence: Case reference " + caseReference + " access update",
+ "[Do Not Reply] Pre-recorded Evidence: Case reference " + CASE_REFERENCE + " access update",
response.getSubject()
);
compareBody(
@@ -204,9 +204,9 @@ void caseClosureCancelled() {
var forCase = createCase();
var response = client.caseClosureCancelled(user, forCase);
- assertEquals(fromEmailAddress, response.getFromEmail());
+ assertEquals(FROM_EMAIL_ADDRESS, response.getFromEmail());
assertEquals(
- "[Do Not Reply] Pre-recorded Evidence: Case reference " + caseReference + " access update",
+ "[Do Not Reply] Pre-recorded Evidence: Case reference " + CASE_REFERENCE + " access update",
response.getSubject()
);
compareBody(
@@ -221,13 +221,12 @@ void caseClosureCancelled() {
@DisplayName("Should send verify email email")
@Test
- @SuppressWarnings("LineLength")
void verifyEmail() {
var verificationCode = "123456";
- var response = client.emailVerification(toEmailAddress, userFirstName, userLastName, verificationCode);
- assertEquals(fromEmailAddress, response.getFromEmail());
+ var response = client.emailVerification(TO_EMAIL_ADDRESS, USER_FIRST_NAME, USER_LAST_NAME, verificationCode);
+ assertEquals(FROM_EMAIL_ADDRESS, response.getFromEmail());
assertEquals(
"[Do Not Reply] Pre-recorded Evidence: Account Email Verification Code",
response.getSubject()
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/security/XUserIdFilterFT.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/security/XUserIdFilterFT.java
index 2618970c35..bfd31dd3fb 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/security/XUserIdFilterFT.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/security/XUserIdFilterFT.java
@@ -10,7 +10,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import static uk.gov.hmcts.reform.preapi.config.OpenAPIConfiguration.X_USER_ID_HEADER;
-public class XUserIdFilterFT extends FunctionalTestBase {
+class XUserIdFilterFT extends FunctionalTestBase {
private static final String ENDPOINT = "/roles";
diff --git a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/util/FunctionalTestBase.java b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/util/FunctionalTestBase.java
index 49aa0c021e..8323d7fdfc 100644
--- a/src/functionalTest/java/uk/gov/hmcts/reform/preapi/util/FunctionalTestBase.java
+++ b/src/functionalTest/java/uk/gov/hmcts/reform/preapi/util/FunctionalTestBase.java
@@ -47,7 +47,7 @@
import static uk.gov.hmcts.reform.preapi.config.OpenAPIConfiguration.X_USER_ID_HEADER;
@SpringBootTest(classes = { Application.class }, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-@SuppressWarnings("PMD.JUnit5TestShouldBePackagePrivate")
+@SuppressWarnings({"PMD.JUnit5TestShouldBePackagePrivate", "PMD.GodClass"})
public class FunctionalTestBase {
protected static final String CONTENT_TYPE_VALUE = "application/json";
protected static final String COURTS_ENDPOINT = "/courts";
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/AuditTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/AuditTest.java
index ca8ebc1959..e6dca2edfb 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/AuditTest.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/AuditTest.java
@@ -21,7 +21,7 @@ class AuditTest extends IntegrationTestBase {
@Test
@Transactional
- public void testSaveAndRetrieveAudit() throws JsonProcessingException {
+ void testSaveAndRetrieveAudit() throws JsonProcessingException {
Audit audit = new Audit();
audit.setTableName("TestTable");
audit.setTableRecordId(UUID.randomUUID());
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/BookingTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/BookingTest.java
index f9c16bb180..55481631fe 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/BookingTest.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/BookingTest.java
@@ -108,7 +108,6 @@ public void testAuditWithParticipants() {
audit.get().getAuditDetails().get("participants")
.forEach(node -> {
- System.out.println(node);
assertThat(node.asText()).isIn(List.of(
participant1.getId().toString(), participant2.getId().toString()));
});
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/UserTermsAcceptedTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/UserTermsAcceptedTest.java
index 7f982e8a12..d26bd6d416 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/UserTermsAcceptedTest.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/entities/UserTermsAcceptedTest.java
@@ -14,11 +14,11 @@
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(classes = Application.class)
-public class UserTermsAcceptedTest extends IntegrationTestBase {
+class UserTermsAcceptedTest extends IntegrationTestBase {
@Test
@Transactional
- public void testSaveAndRetrieve() {
+ void testSaveAndRetrieve() {
var user = HelperFactory.createDefaultTestUser();
entityManager.persist(user);
entityManager.flush();
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/AuditServiceIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/AuditServiceIT.java
index a787cb5518..19dbb8e25f 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/AuditServiceIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/AuditServiceIT.java
@@ -27,7 +27,7 @@
import java.util.Comparator;
import java.util.UUID;
-public class AuditServiceIT extends IntegrationTestBase {
+class AuditServiceIT extends IntegrationTestBase {
@Autowired
private AuditService auditService;
@@ -108,7 +108,7 @@ private CaptureSession getCaptureSession() {
@Transactional
@Test
- public void testInternalAudit() {
+ void testInternalAudit() {
var court = getCreateCourt();
courtService.upsert(court);
@@ -132,7 +132,7 @@ public void testInternalAudit() {
@Transactional
@Test
- public void testDeleteAuditCase() {
+ void testDeleteAuditCase() {
mockAdminUser();
var caseDTO = getCase();
@@ -158,7 +158,7 @@ public void testDeleteAuditCase() {
@Transactional
@Test
- public void testDeleteAuditBooking() {
+ void testDeleteAuditBooking() {
mockAdminUser();
var caseDTO = getCase();
@@ -187,7 +187,7 @@ public void testDeleteAuditBooking() {
@Transactional
@Test
- public void testDeleteAuditCaptureSession() {
+ void testDeleteAuditCaptureSession() {
mockAdminUser();
var booking = getBooking();
@@ -222,7 +222,7 @@ public void testDeleteAuditCaptureSession() {
@Transactional
@Test
- public void testDeleteAuditRecording() {
+ void testDeleteAuditRecording() {
mockAdminUser();
var captureSession = getCaptureSession();
@@ -243,7 +243,8 @@ public void testDeleteAuditRecording() {
var auditResultsCreated = auditService.getAuditsByTableRecordId(recording.getId());
recordingService.deleteById(recording.getId());
- var auditResults = auditService.getAuditsByTableRecordId(recording.getId());
+ var auditResults = auditService.getAuditsByTableRecordId(recording.getId()).stream()
+ .sorted(Comparator.comparing(Audit::getCreatedAt)).toList();
Assertions.assertEquals(0, auditResultsEmpty.size());
Assertions.assertEquals(1, auditResultsCreated.size());
Assertions.assertEquals(2, auditResults.size());
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/BookingServiceIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/BookingServiceIT.java
index 6326f7e740..902e1db8da 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/BookingServiceIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/BookingServiceIT.java
@@ -397,10 +397,10 @@ void testSearchByCaptureSessionStatus() {
null,
null).getContent();
assertThat(findEitherStandbyOrProcessing).hasSize(2);
- assertThat(findEitherStandbyOrProcessing.stream().map(BookingDTO::getId).anyMatch(b -> b == booking1.getId()))
- .isTrue();
- assertThat(findEitherStandbyOrProcessing.stream().map(BookingDTO::getId).anyMatch(b -> b == booking2.getId()))
- .isTrue();
+ assertThat(findEitherStandbyOrProcessing.stream().map(BookingDTO::getId)
+ .anyMatch(b -> b.equals(booking1.getId()))).isTrue();
+ assertThat(findEitherStandbyOrProcessing.stream().map(BookingDTO::getId)
+ .anyMatch(b -> b.equals(booking2.getId()))).isTrue();
var findOnlyWithNoRecording = bookingService.searchBy(null,
null,
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/CaseServiceIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/CaseServiceIT.java
index 22a02d5e22..21735fd539 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/CaseServiceIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/CaseServiceIT.java
@@ -38,13 +38,13 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public class CaseServiceIT extends IntegrationTestBase {
+class CaseServiceIT extends IntegrationTestBase {
@Autowired
private CaseService caseService;
@Transactional
@Test
- public void searchCasesAsAdmin() {
+ void searchCasesAsAdmin() {
mockAdminUser();
var court = HelperFactory.createCourt(CourtType.CROWN, "Example Court", "1234");
@@ -77,7 +77,7 @@ public void searchCasesAsAdmin() {
@Transactional
@Test
- public void searchCasesAsNonAdmin() {
+ void searchCasesAsNonAdmin() {
mockNonAdminUser();
var court = HelperFactory.createCourt(CourtType.CROWN, "Example Court", "1234");
@@ -112,7 +112,7 @@ public void searchCasesAsNonAdmin() {
@Transactional
@Test
- public void updateCaseParticipants() {
+ void updateCaseParticipants() {
mockAdminUser();
var court = HelperFactory.createCourt(CourtType.CROWN, "Example Court", "1234");
@@ -167,7 +167,7 @@ public void updateCaseParticipants() {
@Transactional
@Test
- public void testCascadeDelete() {
+ void testCascadeDelete() {
mockAdminUser();
var court = HelperFactory.createCourt(CourtType.CROWN, "Example Court", "1234");
@@ -233,7 +233,7 @@ public void testCascadeDelete() {
@Transactional
@Test
- public void undeleteCase() {
+ void undeleteCase() {
mockAdminUser();
var court = HelperFactory.createCourt(CourtType.CROWN, "Example Court", "1234");
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/RecordingServiceIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/RecordingServiceIT.java
index 2a784c6233..2364e0825a 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/RecordingServiceIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/RecordingServiceIT.java
@@ -39,7 +39,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public class RecordingServiceIT extends IntegrationTestBase {
+class RecordingServiceIT extends IntegrationTestBase {
@Autowired
private RecordingService recordingService;
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/TermsAndConditionsServiceIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/TermsAndConditionsServiceIT.java
index e52be44b19..165be7dff6 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/TermsAndConditionsServiceIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/TermsAndConditionsServiceIT.java
@@ -11,7 +11,7 @@
import static org.assertj.core.api.Assertions.assertThat;
-public class TermsAndConditionsServiceIT extends IntegrationTestBase {
+class TermsAndConditionsServiceIT extends IntegrationTestBase {
@Autowired
private TermsAndConditionsService termsAndConditionsService;
@@ -32,7 +32,7 @@ public void setUp() {
@Test
@Transactional
- public void getLatestTermsAndConditionsApp() {
+ void getLatestTermsAndConditionsApp() {
var latestAppTerms1 = termsAndConditionsService.getLatestTermsAndConditions(TermsAndConditionsType.APP);
assertThat(latestAppTerms1.getId()).isEqualTo(termsAndConditionsApp.getId());
@@ -47,7 +47,7 @@ public void getLatestTermsAndConditionsApp() {
@Test
@Transactional
- public void getLatestTermsAndConditionsPortal() {
+ void getLatestTermsAndConditionsPortal() {
var latestPortalTerms1 = termsAndConditionsService.getLatestTermsAndConditions(TermsAndConditionsType.PORTAL);
assertThat(latestPortalTerms1.getId()).isEqualTo(termsAndConditionsPortal.getId());
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserAuthenticationServiceIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserAuthenticationServiceIT.java
index 73ceb46a52..9d0e84b6a1 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserAuthenticationServiceIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserAuthenticationServiceIT.java
@@ -22,7 +22,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public class UserAuthenticationServiceIT extends IntegrationTestBase {
+class UserAuthenticationServiceIT extends IntegrationTestBase {
@Autowired
private UserAuthenticationService userAuthenticationService;
@@ -68,7 +68,7 @@ void setUp() {
@Transactional
@Test
- public void loadAppUserByIdSuccess() {
+ void loadAppUserByIdSuccess() {
var userWithValidId = userAuthenticationService.loadAppUserById(appAccess.getId().toString());
assertEquals(userWithValidId.getUserId(), appAccess.getUser().getId());
assertEquals(userWithValidId.getAppAccess(), appAccess);
@@ -80,7 +80,7 @@ public void loadAppUserByIdSuccess() {
@Transactional
@Test
- public void loadPortalUserByIdSuccess() {
+ void loadPortalUserByIdSuccess() {
var userWithValidId = userAuthenticationService.loadAppUserById(portalAccess.getId().toString());
assertEquals(userWithValidId.getUserId(), portalAccess.getUser().getId());
assertEquals(userWithValidId.getPortalAccess(), portalAccess);
@@ -92,7 +92,7 @@ public void loadPortalUserByIdSuccess() {
@Transactional
@Test
- public void loadUserByIdNotFound() {
+ void loadUserByIdNotFound() {
var id = UUID.randomUUID();
var message = assertThrows(
BadCredentialsException.class,
@@ -104,7 +104,7 @@ public void loadUserByIdNotFound() {
@Transactional
@Test
- public void loadUserByIdNull() {
+ void loadUserByIdNull() {
var message = assertThrows(
BadCredentialsException.class,
() -> userAuthenticationService.loadAppUserById(null)
@@ -116,7 +116,7 @@ public void loadUserByIdNull() {
@Transactional
@Test
- public void loadUserByIdNotUuid() {
+ void loadUserByIdNotUuid() {
var id = "1234567890";
var message = assertThrows(
BadCredentialsException.class,
@@ -128,7 +128,7 @@ public void loadUserByIdNotUuid() {
@Transactional
@Test
- public void loadUserByIdEmpty() {
+ void loadUserByIdEmpty() {
var id = "";
var message = assertThrows(
BadCredentialsException.class,
@@ -140,7 +140,7 @@ public void loadUserByIdEmpty() {
@Test
@Transactional
- public void loadUserByIdAppInactive() {
+ void loadUserByIdAppInactive() {
appAccess.setActive(false);
entityManager.persist(appAccess);
var id = appAccess.getId().toString();
@@ -155,7 +155,7 @@ public void loadUserByIdAppInactive() {
@Test
@Transactional
- public void loadUserByIdAppDeleted() {
+ void loadUserByIdAppDeleted() {
appAccess.setDeletedAt(Timestamp.from(Instant.now()));
entityManager.persist(appAccess);
var id = appAccess.getId().toString();
@@ -170,7 +170,7 @@ public void loadUserByIdAppDeleted() {
@Test
@Transactional
- public void loadUserByIdAppUserDeleted() {
+ void loadUserByIdAppUserDeleted() {
var user = appAccess.getUser();
user.setDeletedAt(Timestamp.from(Instant.now()));
entityManager.persist(user);
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserServiceIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserServiceIT.java
index 0129ac3b31..9612f2c4b7 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserServiceIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserServiceIT.java
@@ -24,7 +24,7 @@
import java.util.Comparator;
import java.util.UUID;
-public class UserServiceIT extends IntegrationTestBase {
+class UserServiceIT extends IntegrationTestBase {
private static User userEntity;
private static User portalUserEntity;
private static User appUserEntity;
@@ -108,7 +108,7 @@ void setUp() {
@Transactional
@Test
- public void searchUsersAsAdmin() {
+ void searchUsersAsAdmin() {
mockAdminUser();
userEntity.setDeletedAt(Timestamp.from(Instant.now()));
entityManager.persist(userEntity);
@@ -155,7 +155,7 @@ public void searchUsersAsNonAdmin() {
@Transactional
@Test
- public void testGetUserByAccessType() {
+ void testGetUserByAccessType() {
var resultApp = userService.findAllBy(
null,
null,
@@ -218,7 +218,7 @@ public void testGetUserByAccessType() {
@Transactional
@Test
- public void deleteUndeleteUserSuccess() {
+ void deleteUndeleteUserSuccess() {
userService.deleteById(userEntity.getId());
entityManager.flush();
entityManager.refresh(userEntity);
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserTermsAcceptedServiceIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserTermsAcceptedServiceIT.java
index 74c539adaa..2c8f1a0120 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserTermsAcceptedServiceIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/services/UserTermsAcceptedServiceIT.java
@@ -19,7 +19,7 @@
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.when;
-public class UserTermsAcceptedServiceIT extends IntegrationTestBase {
+class UserTermsAcceptedServiceIT extends IntegrationTestBase {
@Autowired
private UserTermsAcceptedService userTermsAcceptedService;
@@ -48,7 +48,7 @@ void setUp() {
@Test
@Transactional
- public void acceptTermsAndConditions() {
+ void acceptTermsAndConditions() {
var mockedUser = mockAdminUser();
when(mockedUser.getUserId()).thenReturn(user.getId());
userTermsAcceptedService.acceptTermsAndConditions(termsAndConditions.getId());
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/tasks/AddNROUsersIT.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/tasks/AddNROUsersIT.java
index 2129e95585..f2c0baea8b 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/tasks/AddNROUsersIT.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/tasks/AddNROUsersIT.java
@@ -34,7 +34,7 @@
@Slf4j
@TestPropertySource(properties = "spring.cache.type=none")
-public class AddNROUsersIT extends IntegrationTestBase {
+class AddNROUsersIT extends IntegrationTestBase {
@Autowired
private AppAccessRepository appAccessRepository;
@@ -95,7 +95,7 @@ void setUp() throws Exception {
@DisplayName("Test NRO users listed in a CSV file are successfully uploaded to the DB")
@Transactional
@Test
- public void testRunAddNROUsers() {
+ void testRunAddNROUsers() {
// initialise & run the AddNROUsers test
AddNROUsers addNROUsers = new AddNROUsers(userService,
userAuthenticationService,
@@ -204,7 +204,7 @@ public void testSettersAndToString() {
@Transactional
@Test
- public void testInvalidCSVFile() {
+ void testInvalidCSVFile() {
mockAdminUser();
String falseFileName = "falseFileName";
AddNROUsers addNROUsers = new AddNROUsers(userService,
diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/utils/IntegrationTestBase.java b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/utils/IntegrationTestBase.java
index 460c7a305a..a291145ef0 100644
--- a/src/integrationTest/java/uk/gov/hmcts/reform/preapi/utils/IntegrationTestBase.java
+++ b/src/integrationTest/java/uk/gov/hmcts/reform/preapi/utils/IntegrationTestBase.java
@@ -17,6 +17,7 @@
import static org.mockito.Mockito.when;
@SpringBootTest(classes = Application.class)
+@SuppressWarnings("PMD.AbstractClassWithoutAbstractMethod")
public abstract class IntegrationTestBase {
@MockitoBean
@@ -57,3 +58,4 @@ void tearDown() {
}
}
}
+
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/Application.java b/src/main/java/uk/gov/hmcts/reform/preapi/Application.java
index 6e44b9ac48..63138bf9ce 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/Application.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/Application.java
@@ -24,8 +24,8 @@ public class Application implements CommandLineRunner {
ScheduledTaskRunner taskRunner;
public static void main(final String[] args) {
- final var application = new SpringApplication(Application.class);
- final var instance = application.run(args);
+ final SpringApplication application = new SpringApplication(Application.class);
+ final var instance = application.run(args); //NOPMD - suppressed CloseResource
if (System.getenv("TASK_NAME") != null) {
instance.close();
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/actuator/PreApiHealthIndicator.java b/src/main/java/uk/gov/hmcts/reform/preapi/actuator/PreApiHealthIndicator.java
index c590e89ff0..d98cf85142 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/actuator/PreApiHealthIndicator.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/actuator/PreApiHealthIndicator.java
@@ -8,6 +8,7 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import uk.gov.hmcts.reform.preapi.media.MediaKindAccountsClient;
+import uk.gov.hmcts.reform.preapi.media.dto.MkStorageAccounts;
import java.util.List;
import java.util.Map;
@@ -29,6 +30,8 @@ public class PreApiHealthIndicator implements HealthIndicator {
public final MediaKindAccountsClient mediaKindAccountsClient;
+ private static final String MEDIA_KIND = "MediaKind";
+
@Autowired
public PreApiHealthIndicator(@Lazy MediaKindAccountsClient mediaKindAccountsClient) {
this.mediaKindAccountsClient = mediaKindAccountsClient;
@@ -36,11 +39,11 @@ public PreApiHealthIndicator(@Lazy MediaKindAccountsClient mediaKindAccountsClie
@Override
public Health health() {
- if (!mediaService.equals("MediaKind")) {
+ if (!MEDIA_KIND.equals(mediaService)) {
return Health.up().build();
}
try {
- var details = checkMediaKindConnections();
+ Map details = checkMediaKindConnections();
return Health.up().withDetail("mediakindConnections", details).build();
} catch (Exception e) {
log.error("Encountered an error when attempting to check MK storage account connections: {}",
@@ -51,7 +54,7 @@ public Health health() {
}
private Map checkMediaKindConnections() {
- var storageAccounts = mediaKindAccountsClient.getStorageAccounts();
+ MkStorageAccounts storageAccounts = mediaKindAccountsClient.getStorageAccounts();
if (storageAccounts.getItems().isEmpty()) {
log.error("MediaKind does not have any storage account connections");
return Map.of(
@@ -60,7 +63,7 @@ private Map checkMediaKindConnections() {
);
}
- var expectedStorageAccounts = List.of(ingestStorageAccountName, finalStorageAccountName);
+ List expectedStorageAccounts = List.of(ingestStorageAccountName, finalStorageAccountName);
return expectedStorageAccounts
.stream()
.map(storageAccount ->
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/alerts/SlackClient.java b/src/main/java/uk/gov/hmcts/reform/preapi/alerts/SlackClient.java
index 4129db96d9..8794ef1370 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/alerts/SlackClient.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/alerts/SlackClient.java
@@ -4,6 +4,7 @@
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
+@SuppressWarnings("PMD.ImplicitFunctionalInterface")
@FeignClient(name = "slackClient", url = "${slack.webhook}")
public interface SlackClient {
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/alerts/SlackMessage.java b/src/main/java/uk/gov/hmcts/reform/preapi/alerts/SlackMessage.java
index f9799fec0a..4e5bfbf7f7 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/alerts/SlackMessage.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/alerts/SlackMessage.java
@@ -40,7 +40,7 @@ public String toJson(SlackMessageJsonOptions options) {
boolean showEnvironment = options.showEnvironment();
boolean showIcons = options.showIcons();
- StringBuilder message = new StringBuilder();
+ StringBuilder message = new StringBuilder(78);
if (showEnvironment) {
message.append(":globe_with_meridians: *Environment:* ")
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/ArchiveMetadataXmlExtractor.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/ArchiveMetadataXmlExtractor.java
index d90a950d82..9ee1c5f553 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/ArchiveMetadataXmlExtractor.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/ArchiveMetadataXmlExtractor.java
@@ -17,6 +17,7 @@
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
import java.util.Optional;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
@@ -28,6 +29,7 @@
* It fetches XML files stored in Azure Blob Storage, parses them, and writes the extracted data into a CSV file.
*/
@Service
+@SuppressWarnings("PMD.GodClass")
public class ArchiveMetadataXmlExtractor {
private final AzureVodafoneStorageService azureVodafoneStorageService;
private final MigrationRecordService migrationRecordService;
@@ -48,6 +50,7 @@ public ArchiveMetadataXmlExtractor(final AzureVodafoneStorageService azureVodafo
* @param containerName The Azure Blob container name.
* @param outputDir The directory where the CSV files will be written.
*/
+ @SuppressWarnings("PMD.CognitiveComplexity")
public void extractAndReportArchiveMetadata(
String containerName, String folderPrefix, String outputDir, String filename) {
try {
@@ -69,14 +72,14 @@ public void extractAndReportArchiveMetadata(
loggingService.logDebug("Generating archive metadata report in directory: %s", outputDir);
allArchiveMetadata.sort((a, b) -> {
- String nameA = a.get(1).toLowerCase();
- String nameB = b.get(1).toLowerCase();
+ String nameA = a.get(1).toLowerCase(Locale.UK);
+ String nameB = b.get(1).toLowerCase(Locale.UK);
String versionA = extractVersion(nameA);
String versionB = extractVersion(nameB);
- boolean aIsOrig = Constants.VALID_ORIG_TYPES.contains(versionA.toUpperCase());
- boolean bIsOrig = Constants.VALID_ORIG_TYPES.contains(versionB.toUpperCase());
+ boolean aIsOrig = Constants.VALID_ORIG_TYPES.contains(versionA.toUpperCase(Locale.UK));
+ boolean bIsOrig = Constants.VALID_ORIG_TYPES.contains(versionB.toUpperCase(Locale.UK));
if (aIsOrig && !bIsOrig) {
return -1;
@@ -237,6 +240,7 @@ private List> extractArchiveFileDetails(Document document, String b
* @param duration Recording duration
* @return List of metadata rows for MP4 files
*/
+ @SuppressWarnings("PMD.CognitiveComplexity")
private List> processMP4Files(
Element archiveElement,
String blobPrefix,
@@ -278,12 +282,13 @@ private List> processMP4Files(
return fileRows;
}
+ @SuppressWarnings({"PMD.AvoidLiteralsInIfCondition", "PMD.CognitiveComplexity", "PMD.CyclomaticComplexity"})
private Element selectPreferredMp4File(NodeList mp4Files) {
List files = new ArrayList<>();
for (int i = 0; i < mp4Files.getLength(); i++) {
- Node n = mp4Files.item(i);
- if (n.getNodeType() == Node.ELEMENT_NODE) {
- files.add((Element) n);
+ Node node = mp4Files.item(i);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ files.add((Element) node);
}
}
@@ -295,60 +300,60 @@ private Element selectPreferredMp4File(NodeList mp4Files) {
}
if (files.size() == 2) {
- Element a = files.get(0);
- Element b = files.get(1);
+ Element elementA = files.get(0);
+ Element elementB = files.get(1);
- boolean aWatermarked = getBoolean(a, "watermark");
- boolean bWatermarked = getBoolean(b, "watermark");
+ boolean aWatermarked = getBoolean(elementA, "watermark");
+ boolean bWatermarked = getBoolean(elementB, "watermark");
// (1) Prefer watermark = true when only one has it
if (aWatermarked ^ bWatermarked) {
- return aWatermarked ? a : b;
+ return aWatermarked ? elementA : elementB;
}
// (2) If neither or both have watermark=true, prefer name starting with "UGC" when only one has it;
- String nameA = getName(a).toUpperCase();
- String nameB = getName(b).toUpperCase();
+ String nameA = getName(elementA).toUpperCase(Locale.UK);
+ String nameB = getName(elementB).toUpperCase(Locale.UK);
boolean aUGC = nameA.contains("UGC");
boolean bUGC = nameB.contains("UGC");
if (aUGC && !bUGC) {
- return a;
+ return elementA;
}
if (!aUGC && bUGC) {
- return b;
+ return elementB;
}
// (3) Otherwise pick the largest mp4 file size
- long aSize = getLong(a, "Size");
- long bSize = getLong(b, "Size");
+ long aSize = getLong(elementA, "Size");
+ long bSize = getLong(elementB, "Size");
if (aSize != bSize) {
- return (aSize > bSize) ? a : b;
+ return (aSize > bSize) ? elementA : elementB;
}
// (4) Duration should be equal or within 1s (sanity check / log only)
- long aDur = getLong(a, "Duration");
- long bDur = getLong(b, "Duration");
+ long aDur = getLong(elementA, "Duration");
+ long bDur = getLong(elementB, "Duration");
boolean aDurValid = aDur >= 0;
boolean bDurValid = bDur >= 0;
if (aDurValid && bDurValid && aDur != bDur) {
- return (aDur > bDur) ? a : b;
+ return (aDur > bDur) ? elementA : elementB;
}
if (aDurValid != bDurValid) {
- return aDurValid ? a : b;
+ return aDurValid ? elementA : elementB;
}
// (5) If duration ties (or both invalid), prefer longer filename
int lenA = nameA != null ? nameA.length() : 0;
int lenB = nameB != null ? nameB.length() : 0;
if (lenA != lenB) {
- return (lenA > lenB) ? a : b;
+ return (lenA > lenB) ? elementA : elementB;
}
// Fallback: pick the second file (as you had)
- return b;
+ return elementB;
}
return files.get(0);
@@ -399,7 +404,7 @@ private String extractVersion(String displayName) {
return "";
}
- String cleanName = displayName.toUpperCase()
+ String cleanName = displayName.toUpperCase(Locale.UK)
.replaceAll("\\.(MP4|RAW|M4A|MOV|AVI)$", "");
String[] parts = cleanName.split("-");
@@ -416,26 +421,26 @@ private String extractVersion(String displayName) {
return "";
}
- //---------- helpers ----------
+ //---------- helpers ----------
private String getName(Element el) {
- String v = extractTextContent(el, "Name");
- return v == null ? "" : v.trim();
+ String content = extractTextContent(el, "Name");
+ return content == null ? "" : content.trim();
}
private boolean getBoolean(Element el, String tag) {
- String v = extractTextContent(el, tag);
- if (v == null) {
+ String content = extractTextContent(el, tag);
+ if (content == null) {
return false;
}
- v = v.trim().toLowerCase();
- return v.equals("true") || v.equals("1") || v.equals("yes");
+ content = content.trim().toLowerCase(Locale.UK);
+ return content.equals("true") || content.equals("1") || content.equals("yes");
}
private long getLong(Element el, String tag) {
try {
- String v = extractTextContent(el, tag);
- return v == null ? 0L : Long.parseLong(v.trim());
+ String content = extractTextContent(el, tag);
+ return content == null ? 0L : Long.parseLong(content.trim());
} catch (NumberFormatException e) {
return 0L;
}
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/Processor.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/Processor.java
index 89dfee23a6..9661d80be7 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/Processor.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/Processor.java
@@ -90,6 +90,7 @@ public MigratedItemGroup process(Object item) throws Exception {
}
}
+ @SuppressWarnings("PMD.CognitiveComplexity")
private MigratedItemGroup processRecording(MigrationRecord migrationRecord) {
String archiveId = migrationRecord.getArchiveId();
String archiveName = migrationRecord.getArchiveName();
@@ -199,9 +200,7 @@ private ExtractedMetadata extractData(MigrationRecord migrationRecord) {
return null;
}
- ExtractedMetadata extractedData = (ExtractedMetadata) extractionResult.getData();
-
- return extractedData;
+ return (ExtractedMetadata) extractionResult.getData();
}
private ProcessedRecording transformData(ExtractedMetadata extractedData) {
@@ -210,7 +209,7 @@ private ProcessedRecording transformData(ExtractedMetadata extractedData) {
loggingService.logError("Failed to transform archive: %s", extractedData.getSanitizedArchiveName());
return null;
}
-
+
loggingService.logDebug("Transformed data: %s", result.getData());
return result.getData();
}
@@ -310,6 +309,7 @@ private ExtractedMetadata convertToExtractedMetadata(MigrationRecord migrationRe
// =========================
// Notifications
// =========================
+ @SuppressWarnings("PMD.CognitiveComplexity")
private void checkAndCreateNotifyItem(ProcessedRecording recording) {
if (!recording.isPreferred()) {
return;
@@ -357,7 +357,7 @@ private void checkAndCreateNotifyItem(ProcessedRecording recording) {
}
-
+
}
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/RecordingMetadataProcessor.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/RecordingMetadataProcessor.java
index 6df91c22c9..a4977dcaa1 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/RecordingMetadataProcessor.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/processor/RecordingMetadataProcessor.java
@@ -2,6 +2,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import uk.gov.hmcts.reform.preapi.batch.application.enums.VfMigrationRecordingVersion;
import uk.gov.hmcts.reform.preapi.batch.application.enums.VfMigrationStatus;
import uk.gov.hmcts.reform.preapi.batch.application.services.MigrationRecordService;
import uk.gov.hmcts.reform.preapi.batch.application.services.extraction.DataExtractionService;
@@ -72,7 +73,7 @@ public void processRecording(MigrationRecord archiveItem) {
extractedData.getDefendantLastName()
);
- if ("COPY".equalsIgnoreCase(extractedData.getRecordingVersion())) {
+ if (VfMigrationRecordingVersion.COPY.toString().equalsIgnoreCase(extractedData.getRecordingVersion())) {
migrationRecordService.updateParentTempIdIfCopy(
archiveItem.getArchiveId(),
groupKey,
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/MigrationRecordService.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/MigrationRecordService.java
index 96396661d9..40fe0e42dc 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/MigrationRecordService.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/MigrationRecordService.java
@@ -26,6 +26,7 @@
import java.sql.Timestamp;
import java.util.Comparator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
@@ -33,12 +34,15 @@
@Slf4j
@Service
+@SuppressWarnings("PMD.TooManyMethods")
public class MigrationRecordService {
private final MigrationRecordRepository migrationRecordRepository;
private final LoggingService loggingService;
private final CourtRepository courtRepository;
private final boolean dryRun;
+ private static final long EPOCH_THRESHOLD_SECONDS_TO_MILLIS = 100_000_000_000L;
+
@Autowired
public MigrationRecordService(final MigrationRecordRepository migrationRecordRepository,
final CourtRepository courtRepository,
@@ -70,6 +74,7 @@ public List getPendingMigrationRecords() {
}
@Transactional
+ @SuppressWarnings("PMD.ExcessiveParameterList")
public UpsertResult upsert(String archiveId,
String archiveName,
Timestamp createTime,
@@ -136,14 +141,16 @@ public boolean insertPendingFromXml(String archiveId,
Timestamp createTime = null;
long epoch = Long.parseLong(createTimeEpoch);
if (epoch > 0) {
- if (epoch < 100_000_000_000L) {
+ if (epoch < EPOCH_THRESHOLD_SECONDS_TO_MILLIS) {
epoch *= 1000;
}
createTime = new Timestamp(epoch);
}
- Integer parsedDuration;
- parsedDuration = duration != null ? Integer.valueOf(duration) : null;
+ Integer parsedDuration = null;
+ if (duration != null) {
+ parsedDuration = Integer.valueOf(duration);
+ }
upsert(
archiveId,
@@ -221,7 +228,7 @@ public void updateMetadataFields(String archiveId, ExtractedMetadata extracted)
nullToEmpty(extracted.getExhibitReference()),
nullToEmpty(extracted.getWitnessFirstName()),
nullToEmpty(extracted.getDefendantLastName())
- ).toLowerCase().trim();
+ ).toLowerCase(Locale.UK).trim();
record.setRecordingGroupKey(groupKey);
migrationRecordRepository.save(record);
@@ -292,7 +299,7 @@ public void updateParentTempIdIfCopy(String archiveId, String recordingGroupKey,
Optional maybeOrig = migrationRecordRepository
.findByRecordingGroupKey(recordingGroupKey)
.stream()
- .filter(r -> !r.getArchiveName().toLowerCase().endsWith(".raw"))
+ .filter(r -> !r.getArchiveName().toLowerCase(Locale.UK).endsWith(".raw"))
.filter(r -> "ORIG".equalsIgnoreCase(r.getRecordingVersion()))
.filter(MigrationRecord::getIsPreferred)
.filter(r -> {
@@ -300,8 +307,8 @@ public void updateParentTempIdIfCopy(String archiveId, String recordingGroupKey,
return recVersion != null && recVersion.split("\\.")[0].equals(origVersionStr);
})
.sorted((a, b) -> {
- boolean aIsMp4 = a.getArchiveName().toLowerCase().endsWith(".mp4");
- boolean bIsMp4 = b.getArchiveName().toLowerCase().endsWith(".mp4");
+ boolean aIsMp4 = a.getArchiveName().toLowerCase(Locale.UK).endsWith(".mp4");
+ boolean bIsMp4 = b.getArchiveName().toLowerCase(Locale.UK).endsWith(".mp4");
if (aIsMp4 != bIsMp4) {
return bIsMp4 ? 1 : -1;
}
@@ -374,12 +381,12 @@ public boolean markNonMp4AsNotPreferred(String archiveId) {
boolean updated = false;
boolean mp4Exists = matchingVersion.stream()
- .anyMatch(r -> r.getArchiveName() != null && r.getArchiveName().toLowerCase().endsWith(".mp4"));
+ .anyMatch(r -> r.getArchiveName() != null && r.getArchiveName().toLowerCase(Locale.UK).endsWith(".mp4"));
if (mp4Exists) {
for (MigrationRecord r : matchingVersion) {
- boolean isMp4 = r.getFileName() != null && r.getFileName().toLowerCase().endsWith(".mp4");
+ boolean isMp4 = r.getFileName() != null && r.getFileName().toLowerCase(Locale.UK).endsWith(".mp4");
r.setIsPreferred(isMp4);
migrationRecordRepository.save(r);
updated = true;
@@ -414,7 +421,7 @@ public static String generateRecordingGroupKey(
nullToEmpty(exhibitRef),
nullToEmpty(witnessName),
nullToEmpty(defendantName))
- .toLowerCase()
+ .toLowerCase(Locale.UK)
.trim();
}
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/extraction/DataExtractionService.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/extraction/DataExtractionService.java
index 0b6a8dadde..8a3daae3db 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/extraction/DataExtractionService.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/extraction/DataExtractionService.java
@@ -12,6 +12,9 @@
import uk.gov.hmcts.reform.preapi.batch.util.RegexPatterns;
import uk.gov.hmcts.reform.preapi.batch.util.ServiceResultUtil;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Optional;
import java.util.regex.Matcher;
import static uk.gov.hmcts.reform.preapi.batch.config.Constants.ErrorMessages.PATTERN_MATCH;
@@ -41,24 +44,24 @@ public ServiceResult> process(MigrationRecord archiveItem) {
if (!preExistingValidation.isSuccess()) {
return preExistingValidation;
}
-
+
// -- 1. TEST validation (validate for pre-go-live, duration check and test keywords)
ServiceResult> testValidationResult = validator.validateTest(archiveItem);
loggingService.logDebug("Validation result in extraction %s", testValidationResult.isSuccess());
if (!testValidationResult.isSuccess()) {
return testValidationResult;
}
-
+
ServiceResult> testValidationExtensionResult = validator.validateRawFile(archiveItem);
if (!testValidationExtensionResult.isSuccess()) {
return testValidationExtensionResult;
}
-
+
String archiveName = archiveItem.getArchiveName();
// -- 2. Pattern matching for legitimate and test scenarios
String sanitisedName = archiveItem.getSanitizedArchiveName();
- var patternMatch = patternMatcher.findMatchingPattern(sanitisedName);
+ Optional> patternMatch = patternMatcher.findMatchingPattern(sanitisedName);
if (patternMatch.isEmpty()) {
loggingService.logDebug("Extraction - No pattern matched: archiveName=%s", archiveName);
return ServiceResultUtil.failure(PATTERN_MATCH, VfFailureReason.VALIDATION_FAILED.toString());
@@ -68,7 +71,7 @@ public ServiceResult> process(MigrationRecord archiveItem) {
if (RegexPatterns.TEST_PATTERNS.containsKey(patternMatch.get().getKey())) {
loggingService.logInfo("Extraction - Test pattern match: %s", patternMatch.get().getKey());
- var testItem = new TestItem(
+ TestItem testItem = new TestItem(
archiveItem,
"Matched TEST regex pattern",
false,
@@ -82,7 +85,7 @@ public ServiceResult> process(MigrationRecord archiveItem) {
}
Matcher matcher = patternMatch.get().getValue();
- var extractedData = extractMetaData(matcher, archiveItem);
+ ExtractedMetadata extractedData = extractMetaData(matcher, archiveItem);
String archiveId = archiveItem.getArchiveId();
loggingService.logDebug("Extraction - Metadata extracted: " + extractedData);
@@ -116,7 +119,7 @@ private ExtractedMetadata extractMetaData(Matcher matcher, MigrationRecord archi
String versionNumber = getMatcherGroup(matcher, "versionNumber");
versionType = RecordingUtils.normalizeVersionType(versionType);
- if (Constants.VALID_ORIG_TYPES.contains(versionType.toUpperCase())
+ if (Constants.VALID_ORIG_TYPES.contains(versionType.toUpperCase(Locale.UK))
&& (versionNumber == null || versionNumber.isEmpty())) {
versionNumber = "1";
}
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/extraction/MetadataValidator.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/extraction/MetadataValidator.java
index 22c55f9eec..4ea56a32b4 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/extraction/MetadataValidator.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/extraction/MetadataValidator.java
@@ -23,6 +23,7 @@
import static uk.gov.hmcts.reform.preapi.batch.config.Constants.ErrorMessages.TEST_ITEM_NAME;
@Service
+@SuppressWarnings("PMD.GodClass")
public class MetadataValidator {
private final LoggingService loggingService;
@@ -32,7 +33,7 @@ public MetadataValidator(final LoggingService loggingService) {
}
public ServiceResult> validatePreExisting(MigrationRecord archiveItem) {
- String name = archiveItem.getArchiveName().toUpperCase();
+ String name = archiveItem.getArchiveName().toUpperCase(Locale.UK);
if (name.contains("-PRE-")) {
return ServiceResultUtil.failure("Keyword 'PRE' found", VfFailureReason.PRE_EXISTING.toString());
}
@@ -63,7 +64,7 @@ public ServiceResult> validateExtension(String extension) {
}
public ServiceResult> validateRawFile(MigrationRecord archiveItem) {
- if (archiveItem.getArchiveName().toLowerCase().contains(".raw")
+ if (archiveItem.getArchiveName().toLowerCase().contains(".raw")
|| archiveItem.getArchiveName().toLowerCase().contains(".r")) {
return ServiceResultUtil.failure(RAW_FILE, VfFailureReason.RAW_FILES.toString());
}
@@ -120,7 +121,7 @@ private TestItem isTestRecording(MigrationRecord archiveItem) {
}
private boolean hasTestKeywords(MigrationRecord archiveItem) {
- String lowerName = archiveItem.getSanitizedArchiveName().toLowerCase();
+ String lowerName = archiveItem.getSanitizedArchiveName().toLowerCase(Locale.UK);
for (String keyword : Constants.TEST_KEYWORDS) {
if (lowerName.contains(keyword)) {
return false;
@@ -136,7 +137,7 @@ private String extractTestKeywords(String archiveName) {
List foundKeywords = new ArrayList<>();
for (String keyword : Constants.TEST_KEYWORDS) {
- if (archiveName.toLowerCase().contains(keyword.toLowerCase())) {
+ if (archiveName.toLowerCase(Locale.UK).contains(keyword.toLowerCase(Locale.UK))) {
foundKeywords.add(keyword);
}
}
@@ -181,7 +182,7 @@ public boolean isValidExtension(String ext) {
return false;
}
- boolean isValid = Constants.VALID_EXTENSIONS.contains(ext.toLowerCase());
+ boolean isValid = Constants.VALID_EXTENSIONS.contains(ext.toLowerCase(Locale.UK));
if (!isValid) {
loggingService.logDebug("Invalid file extension: %s | Allowed extensions: %s",
ext, Constants.VALID_EXTENSIONS);
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/EntityCreationService.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/EntityCreationService.java
index 9f24b06860..5f898c3cee 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/EntityCreationService.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/EntityCreationService.java
@@ -29,6 +29,7 @@
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
@@ -36,6 +37,7 @@
@Service
@RequiredArgsConstructor
+@SuppressWarnings("PMD.CouplingBetweenObjects")
public class EntityCreationService {
private final LoggingService loggingService;
private final InMemoryCacheService cacheService;
@@ -57,7 +59,7 @@ public CreateCaseDTO createCase(ProcessedRecording cleansedData) {
throw new IllegalArgumentException("Court information is missing");
}
- var caseDTO = new CreateCaseDTO();
+ CreateCaseDTO caseDTO = new CreateCaseDTO();
caseDTO.setId(UUID.randomUUID());
caseDTO.setCourtId(cleansedData.getCourt().getId());
caseDTO.setReference(cleansedData.getCaseReference());
@@ -120,12 +122,12 @@ public CreateCaptureSessionDTO createCaptureSession(ProcessedRecording cleansedD
captureSessionId = UUID.randomUUID();
}
- var captureSessionDTO = new CreateCaptureSessionDTO();
+ CreateCaptureSessionDTO captureSessionDTO = new CreateCaptureSessionDTO();
captureSessionDTO.setId(captureSessionId);
captureSessionDTO.setBookingId(booking.getId());
captureSessionDTO.setStartedAt(cleansedData.getRecordingTimestamp());
- var vodafoneUser = getUserByEmail(vodafoneUserEmail);
+ UUID vodafoneUser = getUserByEmail(vodafoneUserEmail);
captureSessionDTO.setStartedByUserId(vodafoneUser);
captureSessionDTO.setFinishedAt(cleansedData.getFinishedAt());
captureSessionDTO.setFinishedByUserId(vodafoneUser);
@@ -143,7 +145,7 @@ public CreateRecordingDTO createRecording(ProcessedRecording cleansedData, Creat
UUID parentRecordingId = null;
if (isCopy) {
- Optional currentRecordOpt =
+ Optional currentRecordOpt =
migrationRecordService.findByArchiveId(cleansedData.getArchiveId());
if (currentRecordOpt.isPresent()) {
@@ -167,7 +169,7 @@ public CreateRecordingDTO createRecording(ProcessedRecording cleansedData, Creat
}
}
- var recordingDTO = new CreateRecordingDTO();
+ CreateRecordingDTO recordingDTO = new CreateRecordingDTO();
UUID recordingId = UUID.randomUUID();
recordingDTO.setId(recordingId);
recordingDTO.setCaptureSessionId(captureSession.getId());
@@ -186,15 +188,15 @@ public CreateRecordingDTO createRecording(ProcessedRecording cleansedData, Creat
return recordingDTO;
}
-
+
public Set createParticipants(ProcessedRecording cleansedData) {
Set participants = new HashSet<>();
- if (cleansedData.getWitnessFirstName() != null && !cleansedData.getWitnessFirstName().trim().isEmpty()) {
+ if (cleansedData.getWitnessFirstName() != null && !cleansedData.getWitnessFirstName().isBlank()) {
participants.add(createParticipant(ParticipantType.WITNESS, cleansedData.getWitnessFirstName(), ""));
}
- if (cleansedData.getDefendantLastName() != null && !cleansedData.getDefendantLastName().trim().isEmpty()) {
+ if (cleansedData.getDefendantLastName() != null && !cleansedData.getDefendantLastName().isBlank()) {
participants.add(createParticipant(ParticipantType.DEFENDANT, "", cleansedData.getDefendantLastName()));
}
@@ -202,7 +204,7 @@ public Set createParticipants(ProcessedRecording cleansedD
}
private CreateParticipantDTO createParticipant(ParticipantType type, String firstName, String lastName) {
- var participantDTO = new CreateParticipantDTO();
+ CreateParticipantDTO participantDTO = new CreateParticipantDTO();
participantDTO.setId(UUID.randomUUID());
participantDTO.setParticipantType(type);
participantDTO.setFirstName(firstName != null ? firstName : Constants.DEFAULT_NAME);
@@ -215,7 +217,7 @@ public CreateShareBookingDTO createShareBooking(
CreateUserDTO sharedWith,
CreateUserDTO sharedBy
) {
- var shareBookingDTO = new CreateShareBookingDTO();
+ CreateShareBookingDTO shareBookingDTO = new CreateShareBookingDTO();
shareBookingDTO.setId(UUID.randomUUID());
shareBookingDTO.setBookingId(bookingDTO.getId());
shareBookingDTO.setSharedByUser(sharedBy.getId());
@@ -250,7 +252,7 @@ public CreateUserDTO createUser(String firstName, String lastName, String email,
}
public CreateInviteDTO createInvite(CreateUserDTO user) {
- var createInviteDTO = new CreateInviteDTO();
+ CreateInviteDTO createInviteDTO = new CreateInviteDTO();
createInviteDTO.setEmail(user.getEmail());
createInviteDTO.setFirstName(user.getFirstName());
createInviteDTO.setUserId(user.getId());
@@ -264,7 +266,7 @@ public PostMigratedItemGroup createShareBookingAndInviteIfNotExists(BookingDTO b
String firstName,
String lastName) {
loggingService.logInfo("Creating share booking and user for %s %s %s", email, firstName, lastName);
- String lowerEmail = email.toLowerCase();
+ String lowerEmail = email.toLowerCase(Locale.UK);
List invites = new ArrayList<>();
@@ -293,7 +295,7 @@ public PostMigratedItemGroup createShareBookingAndInviteIfNotExists(BookingDTO b
}
String vodafoneID = cacheService.getHashValue(Constants.CacheKeys.USERS_PREFIX,
- vodafoneUserEmail.toLowerCase(),
+ vodafoneUserEmail.toLowerCase(Locale.UK),
String.class);
CreateUserDTO sharedBy;
@@ -333,14 +335,4 @@ public PostMigratedItemGroup createShareBookingAndInviteIfNotExists(BookingDTO b
result.setShareBookings(shareBookings);
return result;
}
-
- private boolean isOrigRecordingPersisted(String archiveId) {
- Optional maybeRecord = migrationRecordService.findByArchiveId(archiveId);
-
- if (maybeRecord.isPresent()) {
- Optional maybeOrig = migrationRecordService.getOrigFromCopy(maybeRecord.get());
- return maybeOrig.isPresent() && maybeOrig.get().getRecordingId() != null;
- }
- return false;
- }
}
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/MigrationGroupBuilderService.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/MigrationGroupBuilderService.java
index 86a7f6b512..109172532f 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/MigrationGroupBuilderService.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/MigrationGroupBuilderService.java
@@ -16,6 +16,7 @@
import uk.gov.hmcts.reform.preapi.dto.CreateRecordingDTO;
import java.util.HashSet;
+import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -52,10 +53,10 @@ public MigrationGroupBuilderService(final LoggingService loggingService,
// =========================
public MigratedItemGroup createMigratedItemGroup(ExtractedMetadata item, ProcessedRecording cleansedData) {
CreateCaseDTO aCase = createCaseIfOrig(cleansedData);
-
+
if (aCase == null) {
String version = cleansedData.getExtractedRecordingVersion();
- if (version == null || !version.toUpperCase().contains("COPY")) {
+ if (version == null || !version.toUpperCase(Locale.UK).contains("COPY")) {
loggingService.logError("Failed to find or create case for file: %s", cleansedData.getFileName());
return null;
}
@@ -92,7 +93,7 @@ public MigratedItemGroup createMigratedItemGroup(ExtractedMetadata item, Process
protected CreateCaseDTO createCaseIfOrig(ProcessedRecording cleansedData) {
String caseReference = cleansedData.getCaseReference();
-
+
if (isInvalidCaseReference(caseReference)) {
loggingService.logDebug("Invalid case reference: '%s'", caseReference);
return null;
@@ -101,13 +102,13 @@ protected CreateCaseDTO createCaseIfOrig(ProcessedRecording cleansedData) {
Optional existingCaseOpt = cacheService.getCase(caseReference);
if (existingCaseOpt.isPresent()) {
CreateCaseDTO existingCase = existingCaseOpt.get();
- loggingService.logDebug("Existing case ID: %s, Reference: %s",
+ loggingService.logDebug("Existing case ID: %s, Reference: %s",
existingCase.getId(), existingCase.getReference());
return updateExistingCase(caseReference, cleansedData, existingCase);
}
loggingService.logDebug("Case not found in cache, creating new case for reference: '%s'", caseReference);
-
+
return createNewCase(caseReference, cleansedData);
}
@@ -167,7 +168,7 @@ protected CreateCaseDTO createNewCase(String caseReference, ProcessedRecording c
}
private String normalizeName(String name) {
- return name == null ? "" : name.trim().toLowerCase();
+ return name == null ? "" : name.trim().toLowerCase(Locale.UK);
}
protected CreateBookingDTO processBooking(String baseKey, ProcessedRecording cleansedData, CreateCaseDTO aCase) {
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/MigrationTrackerService.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/MigrationTrackerService.java
index bdd7d3a346..03b054e09e 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/MigrationTrackerService.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/migration/MigrationTrackerService.java
@@ -37,6 +37,7 @@
* and provides functionality to write these items to CSV files for reporting purposes.
*/
@Service
+@SuppressWarnings({"PMD.CouplingBetweenObjects", "PMD.GodClass"})
public class MigrationTrackerService {
@Value("${azure.vodafoneStorage.container}")
private String reportContainer;
@@ -154,7 +155,7 @@ public List writeCategorizedFailureReports(String outputDir) {
try {
Path path = ReportCsvWriter.writeToCsv(FAILED_ITEM_HEADERS, rows, fileName, outputDir, false);
- if (path != null) {
+ if (path != null) {
writtenFiles.add(path.toFile());
} else {
loggingService.logError(
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/persistence/InMemoryCacheService.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/persistence/InMemoryCacheService.java
index 66b7308228..3fcd004316 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/persistence/InMemoryCacheService.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/persistence/InMemoryCacheService.java
@@ -15,6 +15,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -23,6 +24,7 @@
import java.util.concurrent.ConcurrentHashMap;
@Service
+@SuppressWarnings("PMD.CouplingBetweenObjects")
public class InMemoryCacheService {
private final LoggingService loggingService;
@@ -50,7 +52,7 @@ public Optional getCourt(String courtName) {
}
public Optional getCase(String caseRef) {
- if (caseRef == null || caseRef.trim().isEmpty()) {
+ if (caseRef == null || caseRef.isBlank()) {
loggingService.logDebug("Attempted to get case with null or empty reference");
return Optional.empty();
}
@@ -63,13 +65,13 @@ public Optional getCase(String caseRef) {
} else {
loggingService.logInfo("Case not found in cache for reference: '%s'", normalizedRef);
}
-
+
return Optional.ofNullable(result);
}
public void saveCase(String caseRef, CreateCaseDTO caseDTO) {
- if (caseRef == null || caseRef.trim().isEmpty()) {
+ if (caseRef == null || caseRef.isBlank()) {
loggingService.logInfo("Case ref is null or empty: %s", caseRef);
return;
}
@@ -77,9 +79,9 @@ public void saveCase(String caseRef, CreateCaseDTO caseDTO) {
loggingService.logInfo("CaseDTO is null");
return;
}
-
+
String normalizedRef = normalizeCaseReference(caseRef);
- loggingService.logInfo("Saving case to cache - Original: '%s', Normalized: '%s', Case ID: %s",
+ loggingService.logInfo("Saving case to cache - Original: '%s', Normalized: '%s', Case ID: %s",
caseRef, normalizedRef, caseDTO.getId());
caseCache.put(normalizedRef, caseDTO);
}
@@ -89,7 +91,7 @@ private String normalizeCaseReference(String caseRef) {
if (caseRef == null) {
return null;
}
- return caseRef.trim().toUpperCase().replaceAll("\\s+", " ");
+ return caseRef.trim().toUpperCase(Locale.UK).replaceAll("\\s+", " ");
}
public void saveShareBooking(String cacheKey, CreateShareBookingDTO dto) {
@@ -105,7 +107,7 @@ public void saveUser(String email, UUID userID) {
loggingService.logWarning("Skipping saveUser: email or userID missing");
return;
}
- String lowerEmail = email.toLowerCase();
+ String lowerEmail = email.toLowerCase(Locale.UK);
userCache.put(lowerEmail, userID);
saveHashValue(Constants.CacheKeys.USERS_PREFIX, lowerEmail, userID.toString());
}
@@ -161,7 +163,7 @@ public String generateEntityCacheKey(String entityType, String... parts) {
return String.format("vf:%s:%s", entityType, String.join("-", normalizeAll(parts)));
}
- private static List normalizeAll(String[] parts) {
+ private static List normalizeAll(String... parts) {
return Arrays.stream(parts)
.filter(Objects::nonNull)
.map(String::toLowerCase)
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/reporting/LoggingService.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/reporting/LoggingService.java
index 9a76223e05..ca29d8d833 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/reporting/LoggingService.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/reporting/LoggingService.java
@@ -7,9 +7,13 @@
import uk.gov.hmcts.reform.preapi.batch.entities.FailedItem;
import uk.gov.hmcts.reform.preapi.batch.entities.TestItem;
-import java.io.FileWriter;
+import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -19,24 +23,25 @@
@Slf4j
@Service
+@SuppressWarnings("PMD.AvoidSynchronizedAtMethodLevel")
public class LoggingService {
@Getter
- private boolean debugEnabled = false;
+ private boolean debugEnabled;
@Setter
- private int totalMigrated = 0;
+ private int totalMigrated;
@Setter
- private int totalInvited = 0;
+ private int totalInvited;
@Setter
private int totalRecords;
@Getter
- private int processedRecords = 0;
+ private int processedRecords;
@Getter
- private int totalFailed = 0;
+ private int totalFailed;
protected LocalDateTime startTime;
protected final Map failedCategoryCounts = new HashMap<>();
@@ -47,10 +52,17 @@ public class LoggingService {
public void initializeLogFile() {
startTime = LocalDateTime.now();
- try (PrintWriter writer = new PrintWriter(new FileWriter(LOG_FILE_PATH, false))) {
- writer.println("=====================================================");
- writer.println(LocalDateTime.now().format(FORMATTER) + " | Vodafone ETL Job Started");
- writer.println("=====================================================");
+ try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(LOG_FILE_PATH),
+ StandardCharsets.UTF_8,
+ StandardOpenOption.CREATE,
+ StandardOpenOption.TRUNCATE_EXISTING)) {
+ writer.write("=====================================================");
+ writer.newLine();
+ writer.write(LocalDateTime.now().format(FORMATTER) + " | Vodafone ETL Job Started");
+ writer.newLine();
+ writer.write("=====================================================");
+ writer.newLine();
+
} catch (IOException e) {
log.error("Failed to initialize output.log: {}", e.getMessage());
}
@@ -60,11 +72,14 @@ public synchronized void log(String level, String message) {
String timestamp = LocalDateTime.now().format(FORMATTER);
String logMessage = String.format("%s [%s] %s", timestamp, level, message);
- try (FileWriter fileWriter = new FileWriter(LOG_FILE_PATH, true);
- PrintWriter printWriter = new PrintWriter(fileWriter)) {
+ try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(LOG_FILE_PATH),
+ StandardCharsets.UTF_8,
+ StandardOpenOption.CREATE,
+ StandardOpenOption.APPEND);
+ PrintWriter printWriter = new PrintWriter(writer)) {
printWriter.println(logMessage);
} catch (IOException e) {
- log.error("Failed to initialize output.log: {}", e.getMessage());
+ log.error("Failed to write to output.log: {}", e.getMessage());
}
}
@@ -125,9 +140,10 @@ public void incrementProgress() {
refreshProgressBar();
}
+ @SuppressWarnings("PMD.SystemPrintln")
private synchronized void refreshProgressBar() {
int progressWidth = 40;
- double percentage = Math.min((processedRecords * 100.0) / totalRecords, 100.0);
+ double percentage = Math.min(processedRecords * 100.0 / totalRecords, 100.0);
int filledLength = Math.max((int) (progressWidth * (percentage / 100)), 0);
String progressBar = "[" + "=".repeat(filledLength) + " ".repeat(progressWidth - filledLength) + "]";
@@ -154,7 +170,7 @@ public void logSummary() {
startTime = LocalDateTime.now();
}
- var endTime = LocalDateTime.now();
+ LocalDateTime endTime = LocalDateTime.now();
Duration duration = Duration.between(startTime, endTime);
long seconds = duration.getSeconds();
@@ -175,8 +191,12 @@ public void logSummary() {
"Total Execution Time", seconds
);
- try (FileWriter fileWriter = new FileWriter(LOG_FILE_PATH, true);
- PrintWriter printWriter = new PrintWriter(fileWriter)) {
+ try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(LOG_FILE_PATH),
+ StandardCharsets.UTF_8,
+ StandardOpenOption.CREATE,
+ StandardOpenOption.APPEND);
+ PrintWriter printWriter = new PrintWriter(writer)) {
+
printWriter.println(summary);
} catch (IOException e) {
log.error("Failed to write summary to output.log: {}", e.getMessage());
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/reporting/ReportCsvWriter.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/reporting/ReportCsvWriter.java
index e4bad3f94f..f7c76c636c 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/reporting/ReportCsvWriter.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/reporting/ReportCsvWriter.java
@@ -40,10 +40,10 @@ public static Path writeToCsv(
if (dataRows == null) {
throw new IllegalArgumentException("Data rows cannot be null");
}
- if (fileNamePrefix == null || fileNamePrefix.trim().isEmpty()) {
+ if (fileNamePrefix == null || fileNamePrefix.isBlank()) {
throw new IllegalArgumentException("File name prefix cannot be null or empty");
}
- if (outputDir == null || outputDir.trim().isEmpty()) {
+ if (outputDir == null || outputDir.isBlank()) {
throw new IllegalArgumentException("Output directory cannot be null or empty");
}
diff --git a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/transformation/DataTransformationService.java b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/transformation/DataTransformationService.java
index e0768d6b95..5693b91b30 100644
--- a/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/transformation/DataTransformationService.java
+++ b/src/main/java/uk/gov/hmcts/reform/preapi/batch/application/services/transformation/DataTransformationService.java
@@ -3,6 +3,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import uk.gov.hmcts.reform.preapi.batch.application.enums.VfFailureReason;
+import uk.gov.hmcts.reform.preapi.batch.application.enums.VfMigrationRecordingVersion;
import uk.gov.hmcts.reform.preapi.batch.application.services.MigrationRecordService;
import uk.gov.hmcts.reform.preapi.batch.application.services.persistence.InMemoryCacheService;
import uk.gov.hmcts.reform.preapi.batch.application.services.reporting.LoggingService;
@@ -21,19 +22,20 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
@Service
public class DataTransformationService {
- private static final String UNKNOWN_COURT = "Unknown Court";
-
private final InMemoryCacheService cacheService;
private final MigrationRecordService migrationRecordService;
private final CourtRepository courtRepository;
private final LoggingService loggingService;
+ private static final String UNKNOWN_COURT = "Unknown Court";
+
@Autowired
public DataTransformationService(final InMemoryCacheService cacheService,
final MigrationRecordService migrationRecordService,
@@ -67,6 +69,7 @@ public ServiceResult transformData(ExtractedMetadata extract
}
}
+ @SuppressWarnings("PMD.CognitiveComplexity")
protected ProcessedRecording buildProcessedRecording(ExtractedMetadata extracted,
Map sitesDataMap) {
@@ -82,7 +85,7 @@ protected ProcessedRecording buildProcessedRecording(ExtractedMetadata extracted
String origVersionStr = "1";
String copyVersionStr = null;
- if ("COPY".equals(versionType)) {
+ if (VfMigrationRecordingVersion.COPY.toString().equals(versionType)) {
String baseGroupKey = MigrationRecordService.generateRecordingGroupKey(
extracted.getUrn(),
extracted.getExhibitReference(),
@@ -114,7 +117,8 @@ protected ProcessedRecording buildProcessedRecording(ExtractedMetadata extracted
}
boolean isPreferred = true;
- if (!extracted.getArchiveName().toLowerCase().endsWith(".mp4") && !"COPY".equalsIgnoreCase(versionType)) {
+ if (!extracted.getArchiveName().toLowerCase(Locale.UK).endsWith(".mp4")
+ && !"COPY".equalsIgnoreCase(versionType)) {
boolean updated = migrationRecordService.markNonMp4AsNotPreferred(extracted.getArchiveId());
if (updated) {
loggingService.logInfo("Skipping non-preferred archive: %s", extracted.getArchiveName());
@@ -233,11 +237,9 @@ protected List