Browse Source

Refactored the capitalisation

Andrew Grant 5 months ago
parent
commit
37b58c611e

+ 0 - 10
src/main/java/scot/carricksoftware/grants/capitalisation/Capitalisation.java

@@ -1,10 +0,0 @@
-/*
- * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
- *
- */
-
-package scot.carricksoftware.grants.capitalisation;
-
-public interface Capitalisation {
-    String getCapitalisation(@SuppressWarnings("unused") String input);
-}

+ 0 - 69
src/main/java/scot/carricksoftware/grants/capitalisation/CapitalisationImpl.java

@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
- *
- */
-
-package scot.carricksoftware.grants.capitalisation;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import java.util.Locale;
-
-@SuppressWarnings("DuplicatedCode")
-@Component
-public class CapitalisationImpl implements Capitalisation {
-
-    private static final Logger logger = LogManager.getLogger(CapitalisationImpl.class);
-
-    @Override
-    public String getCapitalisation(String input) {
-        if (input == null) {
-            return "";
-        } else if (input.length() < 3) {
-            return input;
-        } else {
-            logger.debug("CapitalisationImpl::getCapitalisation");
-            String[] parts = input.split(" ");
-            StringBuilder result = new StringBuilder();
-            for (String part : parts) {
-                result.append(doPart(part)).append(" ");
-            }
-            result = new StringBuilder(result.toString().trim());
-            parts = result.toString().split("-");
-            if (parts.length > 1) {
-                result = new StringBuilder();
-                for (String part : parts) {
-                    if (!result.isEmpty()) {
-                        result = new StringBuilder(result.append("-"));
-                    }
-                    result.append(doPart(part));
-                }
-            }
-
-            return result.toString();
-        }
-    }
-
-    private String doPart(String input) {
-        String result = input;
-        if (input.length() >= 3) {
-            String work = input.toLowerCase(Locale.ENGLISH);
-            result = work.substring(0, 1).toUpperCase(Locale.ENGLISH) + work.substring(1);
-            String prefix = result.substring(0, 2);
-            String name = result.substring(2);
-            if (prefix.equals("Mc")) {
-                result = prefix + doPart(name);
-            } else {
-                prefix = result.substring(0, 3);
-                if (prefix.equals("Mac")) {
-                    result = prefix + input.charAt(3) + result.substring(4);
-                }
-            }
-        }
-        return result;
-    }
-
-
-}

+ 21 - 41
src/main/java/scot/carricksoftware/grants/capitalisation/CapitaliseStringImpl.java

@@ -9,61 +9,41 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.springframework.stereotype.Component;
 
-import java.util.Locale;
+import java.util.Objects;
 
 @Component
 public class CapitaliseStringImpl implements CapitaliseString {
 
     private static final Logger logger = LogManager.getLogger(CapitaliseStringImpl.class);
 
-    @SuppressWarnings("DuplicatedCode")
     @Override
     public String capitalise(String input) {
         logger.info("CapitaliseStringImpl::capitalise");
-        if (input == null) {
-            return "";
-        } else if (input.length() < 3) {
-            return input;
-        } else {
-            logger.debug("CapitalisationImpl::getCapitalisation");
-            String[] parts = input.split(" ");
-            StringBuilder result = new StringBuilder();
-            for (String part : parts) {
-                result.append(doPart(part)).append(" ");
-            }
-            result = new StringBuilder(result.toString().trim());
-            parts = result.toString().split("-");
-            if (parts.length > 1) {
-                result = new StringBuilder();
-                for (String part : parts) {
-                    if (!result.isEmpty()) {
-                        result = new StringBuilder(result.append("-"));
-                    }
-                    result.append(doPart(part));
+        StringBuilder result = new StringBuilder();
+        boolean newWord = true;
+        if (input != null && input.length() > 2) {
+            for (int i = 0; i < input.length(); i++) {
+                char c = input.charAt(i);
+                if (newWord) {
+                    result.append(Character.toUpperCase(c));
+                } else {
+                    result.append(c);
                 }
-            }
 
-            return result.toString();
-        }
-    }
+                newWord = characterInSeparators(c);
 
-    @SuppressWarnings("DuplicatedCode")
-    private String doPart(String input) {
-        String result = input;
-        if (input.length() >= 3) {
-            String work = input.toLowerCase(Locale.ENGLISH);
-            result = work.substring(0, 1).toUpperCase(Locale.ENGLISH) + work.substring(1);
-            String prefix = result.substring(0, 2);
-            String name = result.substring(2);
-            if (prefix.equals("Mc")) {
-                result = prefix + doPart(name);
-            } else {
-                prefix = result.substring(0, 3);
-                if (prefix.equals("Mac")) {
-                    result = prefix + input.charAt(3) + result.substring(4);
+                if (result.toString().endsWith("Mc")) {
+                    newWord = true;
                 }
             }
+            return result.toString();
+        } else {
+            return Objects.requireNonNullElse(input, "");
         }
-        return result;
+    }
+
+
+    private boolean characterInSeparators(char c) {
+        return c == ' ' || c == '-';
     }
 }

+ 5 - 5
src/main/java/scot/carricksoftware/grants/controllers/places/organisations/OrganisationFormControllerImpl.java

@@ -15,12 +15,12 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
+import scot.carricksoftware.grants.capitalisation.CapitaliseString;
 import scot.carricksoftware.grants.commands.places.organisations.OrganisationCommand;
 import scot.carricksoftware.grants.commands.places.organisations.OrganisationCommandImpl;
 import scot.carricksoftware.grants.constants.AttributeConstants;
 import scot.carricksoftware.grants.constants.MappingConstants;
 import scot.carricksoftware.grants.constants.ViewConstants;
-import scot.carricksoftware.grants.capitalisation.Capitalisation;
 import scot.carricksoftware.grants.converters.places.organisations.OrganisationCommandConverter;
 import scot.carricksoftware.grants.converters.places.organisations.OrganisationConverter;
 import scot.carricksoftware.grants.services.places.organisations.OrganisationService;
@@ -35,18 +35,18 @@ public class OrganisationFormControllerImpl implements OrganisationFormControlle
     @SuppressWarnings({"unused", "FieldCanBeLocal"})
     private final OrganisationCommandConverter organisationCommandConverter;
     private final OrganisationConverter organisationConverter;
-    private final Capitalisation capitalisation;
+    private final CapitaliseString capitaliseString;
     private final OrganisationCommandValidator organisationCommandValidator;
 
     public OrganisationFormControllerImpl(OrganisationService organisationService,
                                           OrganisationCommandConverter organisationCommandConverter,
                                           OrganisationConverter organisationConverter,
-                                          Capitalisation capitalisation,
+                                          CapitaliseString capitaliseString,
                                           OrganisationCommandValidator organisationCommandValidator) {
         this.organisationService = organisationService;
         this.organisationCommandConverter = organisationCommandConverter;
         this.organisationConverter = organisationConverter;
-        this.capitalisation = capitalisation;
+        this.capitaliseString = capitaliseString;
         this.organisationCommandValidator = organisationCommandValidator;
     }
 
@@ -78,7 +78,7 @@ public class OrganisationFormControllerImpl implements OrganisationFormControlle
     }
 
     private void cleanUp(OrganisationCommand organisationCommand) {
-        organisationCommand.setName(capitalisation.getCapitalisation(organisationCommand.getName()));
+        organisationCommand.setName(capitaliseString.capitalise(organisationCommand.getName()));
     }
 
     @SuppressWarnings("SameReturnValue")

+ 1 - 1
src/test/java/scot/carricksoftware/grants/capitalisation/CapitaliseBirthCertificateStringTest.java

@@ -37,7 +37,7 @@ class CapitaliseBirthCertificateStringTest {
 
     @Test
     public void thirdTest() {
-        assertEquals("Smith", capitaliseString.capitalise("SMITH"));
+        assertEquals("SMITH", capitaliseString.capitalise("SMITH"));
     }
 
     @Test

+ 27 - 0
src/test/java/scot/carricksoftware/grants/capitalisation/CapitaliseRegressionTest.java

@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.capitalisation;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class CapitaliseRegressionTest {
+
+    private CapitaliseString capitaliseString;
+
+    @BeforeEach
+    void setUp() {
+        capitaliseString = new CapitaliseStringImpl();
+    }
+
+    @Test
+    void certificateNumberTest() {
+        String certificateNumber = "12345CE";
+        assertEquals(certificateNumber,capitaliseString.capitalise(certificateNumber));
+    }
+}

+ 5 - 5
src/test/java/scot/carricksoftware/grants/controllers/places/organisations/OrganisationFormControllerCleansingTest.java

@@ -13,8 +13,8 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.ui.Model;
 import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.capitalisation.CapitaliseString;
 import scot.carricksoftware.grants.commands.places.organisations.OrganisationCommand;
-import scot.carricksoftware.grants.capitalisation.CapitalisationImpl;
 import scot.carricksoftware.grants.converters.places.organisations.OrganisationCommandConverterImpl;
 import scot.carricksoftware.grants.converters.places.organisations.OrganisationConverterImpl;
 import scot.carricksoftware.grants.services.places.organisations.OrganisationService;
@@ -41,7 +41,7 @@ public class OrganisationFormControllerCleansingTest {
     private OrganisationConverterImpl organisationConverterMock;
 
     @Mock
-    private CapitalisationImpl capitalisationMock;
+    private CapitaliseString capitaliseStringMock;
 
     @Mock
     OrganisationCommand organisationCommandMock;
@@ -61,7 +61,7 @@ public class OrganisationFormControllerCleansingTest {
         organisationController = new OrganisationFormControllerImpl(organisationServiceMock,
                 organisationCommandConverterMock,
                 organisationConverterMock,
-                capitalisationMock,
+                capitaliseStringMock,
                 organisationCommandValidatorMock);
     }
 
@@ -72,7 +72,7 @@ public class OrganisationFormControllerCleansingTest {
         String uName = "Goat";
         when(organisationServiceMock.saveOrganisationCommand(any())).thenReturn(organisationCommandMock);
         when(organisationCommandMock.getName()).thenReturn(name);
-        when(capitalisationMock.getCapitalisation(name)).thenReturn(uName);
+        when(capitaliseStringMock.capitalise(name)).thenReturn(uName);
         organisationController.saveOrUpdate(organisationCommandMock, bindingResultMock, modelMock);
         verify(organisationCommandMock).setName(uName);
     }
@@ -83,7 +83,7 @@ public class OrganisationFormControllerCleansingTest {
         String uName = "Goat";
         when(organisationServiceMock.saveOrganisationCommand(any())).thenReturn(organisationCommandMock);
         when(organisationCommandMock.getName()).thenReturn(name);
-        when(capitalisationMock.getCapitalisation(name)).thenReturn(uName);
+        when(capitaliseStringMock.capitalise(name)).thenReturn(uName);
         organisationController.saveOrUpdate(organisationCommandMock, bindingResultMock, modelMock);
         verify(organisationCommandValidatorMock).validate(organisationCommandMock, bindingResultMock);
     }

+ 4 - 4
src/test/java/scot/carricksoftware/grants/controllers/places/organisations/OrganisationFormControllerSaveOrUpdateTest.java

@@ -12,9 +12,9 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.ui.Model;
 import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.capitalisation.CapitaliseString;
 import scot.carricksoftware.grants.commands.places.organisations.OrganisationCommand;
 import scot.carricksoftware.grants.commands.places.organisations.OrganisationCommandImpl;
-import scot.carricksoftware.grants.capitalisation.Capitalisation;
 import scot.carricksoftware.grants.converters.places.organisations.OrganisationCommandConverterImpl;
 import scot.carricksoftware.grants.converters.places.organisations.OrganisationConverterImpl;
 import scot.carricksoftware.grants.services.places.organisations.OrganisationService;
@@ -42,7 +42,7 @@ public class OrganisationFormControllerSaveOrUpdateTest {
     private OrganisationConverterImpl organisationConverterMock;
 
     @Mock
-    private Capitalisation capitalisationMock;
+    private CapitaliseString capitaliseStringMock;
 
     @Mock
     Model modelMock;
@@ -61,7 +61,7 @@ public class OrganisationFormControllerSaveOrUpdateTest {
         organisationController = new OrganisationFormControllerImpl(organisationServiceMock,
                 organisationCommandConverterMock,
                 organisationConverterMock,
-                capitalisationMock,
+                capitaliseStringMock,
                 organisationCommandValidatorMock);
         organisationCommand = new OrganisationCommandImpl();
     }
@@ -90,7 +90,7 @@ public class OrganisationFormControllerSaveOrUpdateTest {
         when(bindingResultMock.hasErrors()).thenReturn(false);
         when(organisationServiceMock.saveOrganisationCommand(any(OrganisationCommand.class))).thenReturn(organisationCommand);
         organisationController.saveOrUpdate(organisationCommand, bindingResultMock, modelMock);
-        verify(capitalisationMock).getCapitalisation("england");
+        verify(capitaliseStringMock).capitalise("england");
     }
 
 

+ 3 - 3
src/test/java/scot/carricksoftware/grants/controllers/places/organisations/OrganisationFormControllerTest.java

@@ -13,9 +13,9 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.ui.Model;
+import scot.carricksoftware.grants.capitalisation.CapitaliseString;
 import scot.carricksoftware.grants.commands.places.organisations.OrganisationCommand;
 import scot.carricksoftware.grants.constants.AttributeConstants;
-import scot.carricksoftware.grants.capitalisation.Capitalisation;
 import scot.carricksoftware.grants.converters.places.organisations.OrganisationCommandConverterImpl;
 import scot.carricksoftware.grants.converters.places.organisations.OrganisationConverterImpl;
 import scot.carricksoftware.grants.domains.places.Organisation;
@@ -46,7 +46,7 @@ public class OrganisationFormControllerTest {
     private OrganisationConverterImpl organisationConverterMock;
 
     @Mock
-    private Capitalisation capitalisationMock;
+    private CapitaliseString capitaliseString;
 
     @Mock
     private Model modelMock;
@@ -60,7 +60,7 @@ public class OrganisationFormControllerTest {
         organisationController = new OrganisationFormControllerImpl(organisationServiceMock,
                 organisationCommandConverterMock,
                 organisationConverterMock,
-                capitalisationMock,
+                capitaliseString,
                 organisationCommandValidatorMock);
     }
 

+ 0 - 44
src/test/java/scot/carricksoftware/grants/converters/capitalisation/CapitalisationLengthTest.java

@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
- *
- */
-
-package scot.carricksoftware.grants.converters.capitalisation;
-
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
-import scot.carricksoftware.grants.capitalisation.Capitalisation;
-import scot.carricksoftware.grants.capitalisation.CapitalisationImpl;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-@ExtendWith(MockitoExtension.class)
-public class CapitalisationLengthTest {
-
-    private Capitalisation capitalisation;
-
-    @BeforeEach
-    public void setUp() {
-        capitalisation = new CapitalisationImpl();
-    }
-
-    @Test
-    public void lowLengthTest() {
-        assertEquals("ab", capitalisation.getCapitalisation("ab"));
-    }
-
-    @Test
-    public void topLengthTest() {
-        assertEquals("Abc", capitalisation.getCapitalisation("abc"));
-    }
-
-    @Test
-    public void highLengthTest() {
-        //noinspection SpellCheckingInspection
-        assertEquals("Abcd", capitalisation.getCapitalisation("abcd"));
-    }
-
-}

+ 0 - 81
src/test/java/scot/carricksoftware/grants/converters/capitalisation/CapitalisationTest.java

@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
- *
- */
-
-package scot.carricksoftware.grants.converters.capitalisation;
-
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.junit.jupiter.MockitoExtension;
-import scot.carricksoftware.grants.capitalisation.Capitalisation;
-import scot.carricksoftware.grants.capitalisation.CapitalisationImpl;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-@ExtendWith(MockitoExtension.class)
-public class CapitalisationTest {
-
-    private Capitalisation capitalisation;
-
-    @BeforeEach
-    public void setUp() {
-        capitalisation = new CapitalisationImpl();
-    }
-
-    @Test
-    public void firstTest() {
-        assertEquals("Smith", capitalisation.getCapitalisation("Smith"));
-    }
-
-    @Test
-    public void secondTest() {
-        assertEquals("Smith", capitalisation.getCapitalisation("smith"));
-    }
-
-    @Test
-    public void thirdTest() {
-        assertEquals("Smith", capitalisation.getCapitalisation("SMITH"));
-    }
-
-    @Test
-    public void fourthTest() {
-        assertEquals("Smith Jones", capitalisation.getCapitalisation("smith jones"));
-    }
-
-    @Test
-    public void fifthTest() {
-        assertEquals("Smith-Jones", capitalisation.getCapitalisation("smith-jones"));
-    }
-
-    @Test
-    public void sixthTest() {
-        assertEquals("McSmith", capitalisation.getCapitalisation("mcSmith"));
-    }
-
-    @Test
-    public void seventhTest() {
-        //noinspection SpellCheckingInspection
-        assertEquals("Macsmith", capitalisation.getCapitalisation("macsmith"));
-    }
-
-    @Test
-    public void eighthTest() {
-        assertEquals("MacSmith", capitalisation.getCapitalisation("macSmith"));
-    }
-
-    @Test
-    public void ninthTest() {
-        //noinspection SpellCheckingInspection
-        assertEquals("McSmith", capitalisation.getCapitalisation("mcsmith"));
-    }
-
-    @Test
-    public void nullTest() {
-        assertEquals("", capitalisation.getCapitalisation(null));
-    }
-
-
-}