Browse Source

Document Image Validation and Capitalisation

apg 2 tuần trước cách đây
mục cha
commit
6511d5cb56

+ 14 - 0
src/main/java/scot/carricksoftware/grants/capitalisation/images/documentimage/CapitaliseDocumentImageCommand.java

@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.capitalisation.images.documentimage;
+
+import scot.carricksoftware.grants.commands.images.DocumentImageCommand;
+
+public interface CapitaliseDocumentImageCommand {
+
+    @SuppressWarnings({"unused", "EmptyMethod"})
+    void capitalise(DocumentImageCommand command);
+}

+ 32 - 0
src/main/java/scot/carricksoftware/grants/capitalisation/images/documentimage/CapitaliseDocumentImageCommandImpl.java

@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.capitalisation.images.documentimage;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Component;
+import scot.carricksoftware.grants.capitalisation.CapitaliseString;
+import scot.carricksoftware.grants.commands.images.DocumentImageCommand;
+
+
+@Component
+public class CapitaliseDocumentImageCommandImpl implements CapitaliseDocumentImageCommand {
+
+    private static final Logger logger = LogManager.getLogger(CapitaliseDocumentImageCommandImpl.class);
+
+    private final CapitaliseString capitaliseString;
+
+    public CapitaliseDocumentImageCommandImpl(CapitaliseString capitaliseString) {
+        this.capitaliseString = capitaliseString;
+    }
+
+    @Override
+    public void capitalise(DocumentImageCommand documentImageCommand) {
+        logger.debug("CapitaliseDocumentImage::capitalise");
+        documentImageCommand.setCaption(capitaliseString.capitalise(documentImageCommand.getCaption()));
+    }
+
+}

+ 12 - 12
src/main/java/scot/carricksoftware/grants/controllers/images/appendixImages/AppendixImageFormControllerImpl.java

@@ -23,37 +23,37 @@ import scot.carricksoftware.grants.constants.ImageAttributeConstants;
 import scot.carricksoftware.grants.constants.ImageMappingConstants;
 import scot.carricksoftware.grants.constants.MappingConstants;
 import scot.carricksoftware.grants.constants.ViewConstants;
+import scot.carricksoftware.grants.converters.images.appendiximage.AppendixImageCommandConverter;
 import scot.carricksoftware.grants.converters.images.appendiximage.AppendixImageCommandConverterImpl;
-import scot.carricksoftware.grants.converters.images.appendiximage.AppendixImageConverterImpl;
+import scot.carricksoftware.grants.converters.images.appendiximage.AppendixImageConverter;
 import scot.carricksoftware.grants.services.images.appendiximage.AppendixImageService;
 import scot.carricksoftware.grants.services.images.image.ImageService;
-import scot.carricksoftware.grants.validators.images.AppendixImageCommandValidatorImpl;
+import scot.carricksoftware.grants.validators.images.AppendixImageCommandValidator;
 
 
 @Controller
 public class AppendixImageFormControllerImpl implements AppendixImageFormController {
 
     private static final Logger logger = LogManager.getLogger(AppendixImageFormControllerImpl.class);
+
     private final AppendixImageService appendixImageService;
-    @SuppressWarnings({"FieldCanBeLocal", "unused"})
-    private final AppendixImageCommandConverterImpl appendixImageCommandConverter;
-    private final AppendixImageConverterImpl appendixImageConverter;
-    private final AppendixImageCommandValidatorImpl appendixImageCommandValidatorImpl;
+    @SuppressWarnings({"unused", "FieldCanBeLocal"})
+    private final AppendixImageCommandConverter appendixImageCommandConverter;
+    private final AppendixImageConverter appendixImageConverter;
+    private final AppendixImageCommandValidator appendixImageCommandValidator;
     private final ImageService imageService;
     private final CapitaliseAppendixImageCommand capitaliseAppendixImageCommand;
 
-
     public AppendixImageFormControllerImpl(AppendixImageService appendixImageService,
                                            AppendixImageCommandConverterImpl appendixImageCommandConverter,
-                                           AppendixImageConverterImpl appendixImageConverter,
-                                           AppendixImageCommandValidatorImpl appendixImageCommandValidatorImpl,
+                                           AppendixImageConverter appendixImageConverter,
+                                           AppendixImageCommandValidator appendixImageCommandValidator,
                                            ImageService imageService,
                                            CapitaliseAppendixImageCommand capitaliseAppendixImageCommand) {
-
         this.appendixImageService = appendixImageService;
         this.appendixImageCommandConverter = appendixImageCommandConverter;
         this.appendixImageConverter = appendixImageConverter;
-        this.appendixImageCommandValidatorImpl = appendixImageCommandValidatorImpl;
+        this.appendixImageCommandValidator = appendixImageCommandValidator;
         this.imageService = imageService;
         this.capitaliseAppendixImageCommand = capitaliseAppendixImageCommand;
     }
@@ -82,7 +82,7 @@ public class AppendixImageFormControllerImpl implements AppendixImageFormControl
         logger.debug("AppendixImageFormControllerImpl::saveOrUpdate");
 
         capitaliseAppendixImageCommand.capitalise(appendixImageCommand);
-        appendixImageCommandValidatorImpl.validate(appendixImageCommand, bindingResult);
+        appendixImageCommandValidator.validate(appendixImageCommand, bindingResult);
 
         if (bindingResult.hasErrors()) {
             bindingResult.getAllErrors().forEach(error -> logger.debug(error.getDefaultMessage()));

+ 12 - 3
src/main/java/scot/carricksoftware/grants/controllers/images/documentImages/DocumentImageFormControllerImpl.java

@@ -15,6 +15,7 @@ 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.images.documentimage.CapitaliseDocumentImageCommand;
 import scot.carricksoftware.grants.commands.images.DocumentImageCommand;
 import scot.carricksoftware.grants.commands.images.DocumentImageCommandImpl;
 import scot.carricksoftware.grants.constants.*;
@@ -22,6 +23,7 @@ import scot.carricksoftware.grants.converters.images.documentimage.DocumentImage
 import scot.carricksoftware.grants.converters.images.documentimage.DocumentImageConverter;
 import scot.carricksoftware.grants.services.images.documentimage.DocumentImageService;
 import scot.carricksoftware.grants.services.images.image.ImageService;
+import scot.carricksoftware.grants.validators.images.DocumentImageCommandValidator;
 
 
 @Controller
@@ -32,18 +34,22 @@ public class DocumentImageFormControllerImpl implements DocumentImageFormControl
     @SuppressWarnings("unused")
     private final DocumentImageCommandConverter documentImageCommandConverter;
     private final DocumentImageConverter documentImageConverter;
+    private final DocumentImageCommandValidator documentImageCommandValidator;
     private final ImageService imageService;
-
+    private final CapitaliseDocumentImageCommand capitaliseDocumentImageCommand;
 
     public DocumentImageFormControllerImpl(DocumentImageService documentImageService,
                                            DocumentImageCommandConverter documentImageCommandConverter,
                                            DocumentImageConverter documentImageConverter,
-                                           ImageService imageService) {
-
+                                           DocumentImageCommandValidator documentImageCommandValidator,
+                                           ImageService imageService,
+                                           CapitaliseDocumentImageCommand capitaliseDocumentImageCommand) {
         this.documentImageService = documentImageService;
         this.documentImageCommandConverter = documentImageCommandConverter;
         this.documentImageConverter = documentImageConverter;
+        this.documentImageCommandValidator = documentImageCommandValidator;
         this.imageService = imageService;
+        this.capitaliseDocumentImageCommand = capitaliseDocumentImageCommand;
     }
 
     @SuppressWarnings("SameReturnValue")
@@ -70,6 +76,9 @@ public class DocumentImageFormControllerImpl implements DocumentImageFormControl
         logger.debug("DocumentImageFormControllerImpl::saveOrUpdate");
 
 
+        capitaliseDocumentImageCommand.capitalise(documentImageCommand);
+        documentImageCommandValidator.validate(documentImageCommand, bindingResult);
+
         if (bindingResult.hasErrors()) {
             bindingResult.getAllErrors().forEach(error -> logger.debug(error.getDefaultMessage()));
             model.addAttribute(AttributeConstants.IMAGES, imageService.findAll());

+ 15 - 0
src/main/java/scot/carricksoftware/grants/validators/images/DocumentImageCommandValidator.java

@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.images;
+
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.images.DocumentImageCommand;
+
+public interface DocumentImageCommandValidator {
+
+    @SuppressWarnings("unused")
+    void validate(DocumentImageCommand documentImageCommand, BindingResult bindingResult);
+}

+ 94 - 0
src/main/java/scot/carricksoftware/grants/validators/images/DocumentImageCommandValidatorImpl.java

@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) Andrew Grant of Carrick Software 19/03/2025, 09:50. All rights reserved.
+ *
+ */
+
+package scot.carricksoftware.grants.validators.images;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.images.DocumentImageCommand;
+import scot.carricksoftware.grants.constants.ApplicationConstants;
+import scot.carricksoftware.grants.constants.ValidationConstants;
+import scot.carricksoftware.grants.validators.helpers.ValidateTypes;
+
+@SuppressWarnings("unused")
+@Component
+public class DocumentImageCommandValidatorImpl implements DocumentImageCommandValidator {
+
+    private static final Logger logger = LogManager.getLogger(DocumentImageCommandValidatorImpl.class);
+
+    private final ValidateTypes validateTypes;
+
+    public DocumentImageCommandValidatorImpl(ValidateTypes validateTypes) {
+        this.validateTypes = validateTypes;
+    }
+
+    @Override
+    public void validate(DocumentImageCommand imageCommand, BindingResult bindingResult) {
+        logger.debug("DocumentCommandValidator::validate");
+        validateImage(imageCommand, bindingResult);
+        validateOrder(imageCommand, bindingResult);
+        validateLevel(imageCommand, bindingResult);
+        validateWidth(imageCommand, bindingResult);
+        validateHeight(imageCommand, bindingResult);
+    }
+
+    private void validateWidth(DocumentImageCommand imageCommand, BindingResult bindingResult) {
+        logger.debug("ImageCommandValidator::validateWidth");
+        validateTypes.validateIntegerRange(imageCommand.getWidth(),
+                ApplicationConstants.MINIMUM_IMAGE_WIDTH,
+                ApplicationConstants.MAXIMUM_IMAGE_WIDTH,
+                "width",
+                ValidationConstants.WIDTH_IS_NULL,
+                ValidationConstants.WIDTH_IS_NOT_AN_INTEGER,
+                ValidationConstants.WIDTH_OUTSIDE_RANGE,
+                bindingResult);
+    }
+
+    private void validateHeight(DocumentImageCommand imageCommand, BindingResult bindingResult) {
+        logger.debug("DocumentImageCommandValidator::validateHeight");
+        validateTypes.validateIntegerRange(imageCommand.getHeight(),
+                ApplicationConstants.MINIMUM_IMAGE_HEIGHT,
+                ApplicationConstants.MAXIMUM_IMAGE_HEIGHT,
+                "height",
+                ValidationConstants.HEIGHT_IS_NULL,
+                ValidationConstants.HEIGHT_IS_NOT_AN_INTEGER,
+                ValidationConstants.HEIGHT_OUTSIDE_RANGE,
+                bindingResult);
+
+    }
+
+
+    private void validateOrder(DocumentImageCommand imageCommand, BindingResult bindingResult) {
+        logger.debug("DocumentImageCommandValidator::validateOrder");
+        validateTypes.validateNonNegativeInteger(imageCommand.getOrder(), "order",
+                ValidationConstants.ORDER_IS_NULL,
+                ValidationConstants.ORDER_IS_INVALID,
+                ValidationConstants.ORDER_IS_NEGATIVE,
+                bindingResult);
+    }
+
+
+    private void validateLevel(DocumentImageCommand imageCommand, BindingResult bindingResult) {
+        logger.debug("DocumentImageCommandValidator::validateLevel");
+        validateTypes.validateNonNegativeInteger(imageCommand.getLevel(), "level",
+                ValidationConstants.LEVEL_IS_NULL,
+                ValidationConstants.LEVEL_IS_INVALID,
+                ValidationConstants.LEVEL_IS_NEGATIVE,
+                bindingResult);
+    }
+
+
+    private void validateImage(DocumentImageCommand imageCommand, BindingResult bindingResult) {
+        logger.debug("DocumentCommandValidator::validateImage");
+        validateTypes.validateImage(imageCommand.getImage(), "image", ValidationConstants.IMAGE_IS_NULL, bindingResult);
+    }
+
+
+
+
+}
+