Skip to content

Commit

Permalink
CCMSPUI-379 Fixed checkstyle issues
Browse files Browse the repository at this point in the history
Signed-off-by: Jamie Briggs <jamie.briggs@digital.justice.gov.uk>
  • Loading branch information
Jamie Briggs committed Feb 18, 2025
1 parent ed96589 commit 4353f23
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,27 @@
import uk.gov.laa.ccms.data.model.ClientDetails;
import uk.gov.laa.ccms.data.model.ClientSummary;

/**
* Interface responsible for mapping objects from {@link ClientDetail} to {@link ClientSummary}
* and {@link ClientDetails} objects. This interface utilizes MapStruct
* or mapping properties.
*
* @see ClientDetail
* @see ClientSummary
* @see ClientDetails
*
* @author Jamie Briggs
*/
@Mapper(componentModel = "spring")
public interface ClientDetailsMapper {


/**
* Maps a {@link ClientDetail} object to a {@link ClientSummary} object.
*
* @param clientDetail the {@link ClientDetail} instance to be mapped
* @return a {@link ClientSummary} object with mapped properties
*/
@Mapping(target = "postalCode",
expression = "java(clientDetail.getAddress() != null ? "
+ "clientDetail.getAddress().replaceAll(\".*<PostalCode>(.*?)</PostalCode>"
Expand All @@ -20,6 +37,14 @@ public interface ClientDetailsMapper {
expression = "java(clientDetail.getFirstName() + ' ' + clientDetail.getSurname())")
ClientSummary mapToClientSummary(ClientDetail clientDetail);

/**
* Maps the given pageable search results of {@link ClientDetail} entities
* into a {@link ClientDetails} object.
*
* @param searchResults the paginated list of {@link ClientDetail} instances to be mapped
* @return a {@link ClientDetails} object containing transformed search results
* along with pagination metadata.
*/
ClientDetails mapToClientDetails(Page<ClientDetail> searchResults);

}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public interface NotificationMapper {
* the {@link NotificationAction} object.
*/
@Named("action")
public static String actionToString(NotificationAction action) {
static String actionToString(NotificationAction action) {
return action.getNextAction();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,14 @@ protected static String getSortSql(Pageable pageable) {
/**
* Ensures that a string is query safe. For example, if the string "O'Neil" is entered, it
* will get transformed into "O''Neil" to work correctly in a SQL statement.
*
* @param input the string which requires sanitizing.
*
* @return a sanitized string.
*/
protected static String sanitizeForSql(String input) {
return input.replace("'", "''");
return input.replace("'",
"''");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
* @author Jamie Briggs
*/
@Repository
public class CaseSearchRepository extends BaseEntityManagerRepository{
public class CaseSearchRepository extends BaseEntityManagerRepository {

public CaseSearchRepository(EntityManager entityManager) {
super(entityManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public Page<ClientDetail> findAll(final String firstName, final String surname,
final LocalDate dateOfBirth, final String gender, final String clientReferenceNumber,
final String homeOfficeReference, final String nationalInsuranceNumber,
final Pageable pageable) {

final String searchCaseQuery =
"SELECT * FROM XXCCMS.XXCCMS_GET_CLIENT_DETAILS_V"
+ getFilterSql(firstName, surname, dateOfBirth, gender, clientReferenceNumber,
Expand All @@ -73,9 +74,7 @@ public Page<ClientDetail> findAll(final String firstName, final String surname,
query.setParameter("size", pageable.getPageSize());

final String countClientDetails =
"""
SELECT COUNT(*) FROM XXCCMS.XXCCMS_GET_CLIENT_DETAILS_V
"""
"SELECT COUNT(*) FROM XXCCMS.XXCCMS_GET_CLIENT_DETAILS_V"
+ getFilterSql(firstName, surname, dateOfBirth, gender, clientReferenceNumber,
homeOfficeReference, nationalInsuranceNumber);

Expand All @@ -91,36 +90,37 @@ SELECT COUNT(*) FROM XXCCMS.XXCCMS_GET_CLIENT_DETAILS_V

private static String getFilterSql(final String firstName, final String surnameAtBirth,
final LocalDate dateOfBirth, final String gender, final String clientReferenceNumber,
final String homeOfficeReference, final String nationalInsuranceNumber){
final String homeOfficeReference, final String nationalInsuranceNumber) {
StringJoiner sj = new StringJoiner(" AND ");
// First name (Fuzzy match, case-insensitive)
if(stringNotEmpty(firstName)){
if (stringNotEmpty(firstName)) {
sj.add("UPPER(FIRSTNAME) LIKE '%" + sanitizeForSql(firstName.toUpperCase()) + "%'");
}
// Surname (Fuzzy match, case-insensitive)
if(stringNotEmpty(surnameAtBirth)){
sj.add("UPPER(SURNAME_AT_BIRTH) LIKE '%" + sanitizeForSql(surnameAtBirth.toUpperCase()) + "%'");
if (stringNotEmpty(surnameAtBirth)) {
sj.add("UPPER(SURNAME_AT_BIRTH) LIKE '%"
+ sanitizeForSql(surnameAtBirth.toUpperCase()) + "%'");
}
// Date of birth (Exact match)
if(!Objects.isNull(dateOfBirth)){
if (!Objects.isNull(dateOfBirth)) {
sj.add("DATE_OF_BIRTH = TO_DATE('" + dateOfBirth + "', 'YYYY-MM-DD')");
}
// Gender (Exact match but case-insensitive)
if(stringNotEmpty(gender)){
if (stringNotEmpty(gender)) {
sj.add("UPPER(GENDER) = '" + sanitizeForSql(gender.toUpperCase()) + "'");
}
// Client reference number (Fuzzy match, case-insensitive)
if(stringNotEmpty(clientReferenceNumber)){
if (stringNotEmpty(clientReferenceNumber)) {
sj.add("TO_CHAR(CLIENT_REFERENCE_NUMBER) LIKE '%"
+ sanitizeForSql(clientReferenceNumber.toUpperCase()) + "%'");
}
// Home office number (Fuzzy match, case-insensitive)
if(stringNotEmpty(homeOfficeReference)){
if (stringNotEmpty(homeOfficeReference)) {
sj.add("UPPER(HOME_OFFICE_NUMBER) LIKE '%"
+ sanitizeForSql(homeOfficeReference.toUpperCase()) + "%'");
}
// National insurance number
if(stringNotEmpty(nationalInsuranceNumber)){
if (stringNotEmpty(nationalInsuranceNumber)) {
sj.add("UPPER(NI_NUMBER) LIKE '%"
+ sanitizeForSql(nationalInsuranceNumber.toUpperCase()) + "%'");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ public Optional<TransactionStatus> getTransactionStatus(String transactionId)
* or an empty {@code Optional} if no matches exist
*/
public Optional<ClientDetails> getClients(String firstName, String surname,
LocalDate dateOfBirth, String gender, String clientReferenceNumber, String homeOfficeReference,
String nationalInsuranceNumber, Pageable pageable) {
Page<ClientDetail> pagedClients = clientDetailRepository.findAll(firstName, surname, dateOfBirth,
gender, clientReferenceNumber, homeOfficeReference,
LocalDate dateOfBirth, String gender, String clientReferenceNumber,
String homeOfficeReference, String nationalInsuranceNumber, Pageable pageable) {
Page<ClientDetail> pagedClients = clientDetailRepository.findAll(firstName, surname,
dateOfBirth, gender, clientReferenceNumber, homeOfficeReference,
nationalInsuranceNumber, pageable);
ClientDetails clientDetails = clientDetailsMapper.mapToClientDetails(
pagedClients);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.junit.jupiter.api.Test;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import uk.gov.laa.ccms.data.entity.ClientDetail;
import uk.gov.laa.ccms.data.model.ClientDetails;
import uk.gov.laa.ccms.data.model.ClientSummary;
Expand Down Expand Up @@ -72,6 +73,23 @@ void shouldMapMultipleClients(){
assertEquals(2, result.getSize());
}

@Test
@DisplayName("Should map pageable properties")
void shouldMapPageableProperties(){
// Given
ClientDetail entity = getTestClientDetail();
ClientDetail entityTwo = getTestClientDetail();
Pageable pageable = Pageable.ofSize(2).withPage(5);
Page<ClientDetail> page = new PageImpl<>(Arrays.asList(entity, entityTwo), pageable, 20);
// When
ClientDetails result = mapper.mapToClientDetails(page);
// Then
assertEquals(2, result.getSize());
assertEquals(5, result.getNumber());
assertEquals(20, result.getTotalElements());
assertEquals(10, result.getTotalPages());
}

private static ClientDetail getTestClientDetail() {
return ClientDetail.builder()
.clientReferenceNumber(123L)
Expand Down

0 comments on commit 4353f23

Please sign in to comment.