From 4b48bacffc6b20c803c049c01d3765df22c169c1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 07:07:13 +0000 Subject: [PATCH 1/5] Initial plan From 197de7737a33d0d72ee45e79b13d3e908d8b04d5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 07:11:15 +0000 Subject: [PATCH 2/5] Upgrade Java from 8 to 21 --- pom.xml | 6 +++--- .../java/com/photoalbum/controller/DetailController.java | 2 +- .../com/photoalbum/controller/PhotoFileController.java | 2 +- .../com/photoalbum/service/impl/PhotoServiceImpl.java | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 216b79d5..732bd783 100644 --- a/pom.xml +++ b/pom.xml @@ -21,9 +21,9 @@ A simple photo storage and gallery application built with Spring Boot and Oracle DB - 1.8 - 8 - 8 + 21 + 21 + 21 UTF-8 diff --git a/src/main/java/com/photoalbum/controller/DetailController.java b/src/main/java/com/photoalbum/controller/DetailController.java index d138ef95..1c091add 100644 --- a/src/main/java/com/photoalbum/controller/DetailController.java +++ b/src/main/java/com/photoalbum/controller/DetailController.java @@ -37,7 +37,7 @@ public String detail(@PathVariable String id, Model model) { try { Optional photoOpt = photoService.getPhotoById(id); - if (!photoOpt.isPresent()) { + if (photoOpt.isEmpty()) { return "redirect:/"; } diff --git a/src/main/java/com/photoalbum/controller/PhotoFileController.java b/src/main/java/com/photoalbum/controller/PhotoFileController.java index 2f314081..6013ab6e 100644 --- a/src/main/java/com/photoalbum/controller/PhotoFileController.java +++ b/src/main/java/com/photoalbum/controller/PhotoFileController.java @@ -45,7 +45,7 @@ public ResponseEntity servePhoto(@PathVariable String id) { logger.info("=== DEBUGGING: Serving photo request for ID {} ===", id); Optional photoOpt = photoService.getPhotoById(id); - if (!photoOpt.isPresent()) { + if (photoOpt.isEmpty()) { logger.warn("Photo with ID {} not found", id); return ResponseEntity.notFound().build(); } diff --git a/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java b/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java index fa379a51..9211352c 100644 --- a/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java +++ b/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java @@ -91,7 +91,7 @@ public UploadResult uploadPhoto(MultipartFile file) { // Validate file size if (file.getSize() > maxFileSizeBytes) { result.setSuccess(false); - result.setErrorMessage(String.format("File size exceeds %dMB limit.", maxFileSizeBytes / 1024 / 1024)); + result.setErrorMessage("File size exceeds %dMB limit.".formatted(maxFileSizeBytes / 1024 / 1024)); logger.warn("Upload rejected: File size {} exceeds limit for {}", file.getSize(), file.getOriginalFilename()); return result; @@ -178,7 +178,7 @@ public UploadResult uploadPhoto(MultipartFile file) { public boolean deletePhoto(String id) { try { Optional photoOpt = photoRepository.findById(id); - if (!photoOpt.isPresent()) { + if (photoOpt.isEmpty()) { logger.warn("Photo with ID {} not found for deletion", id); return false; } @@ -203,7 +203,7 @@ public boolean deletePhoto(String id) { @Transactional(readOnly = true) public Optional getPreviousPhoto(Photo currentPhoto) { List olderPhotos = photoRepository.findPhotosUploadedBefore(currentPhoto.getUploadedAt()); - return olderPhotos.isEmpty() ? Optional.empty() : Optional.of(olderPhotos.get(0)); + return olderPhotos.isEmpty() ? Optional.empty() : Optional.of(olderPhotos.getFirst()); } /** @@ -213,7 +213,7 @@ public Optional getPreviousPhoto(Photo currentPhoto) { @Transactional(readOnly = true) public Optional getNextPhoto(Photo currentPhoto) { List newerPhotos = photoRepository.findPhotosUploadedAfter(currentPhoto.getUploadedAt()); - return newerPhotos.isEmpty() ? Optional.empty() : Optional.of(newerPhotos.get(0)); + return newerPhotos.isEmpty() ? Optional.empty() : Optional.of(newerPhotos.getFirst()); } /** From 7e15ba47defd30fdbad3f2aad2f805ac69d4d8bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 07:15:48 +0000 Subject: [PATCH 3/5] Upgrade Spring Boot to 3.3.13 and migrate javax.* packages to jakarta.* --- pom.xml | 2 +- .../java/com/photoalbum/controller/HomeController.java | 2 +- src/main/java/com/photoalbum/model/Photo.java | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 732bd783..966e621d 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.18 + 3.3.13 diff --git a/src/main/java/com/photoalbum/controller/HomeController.java b/src/main/java/com/photoalbum/controller/HomeController.java index d9905d97..22d52509 100644 --- a/src/main/java/com/photoalbum/controller/HomeController.java +++ b/src/main/java/com/photoalbum/controller/HomeController.java @@ -54,7 +54,7 @@ public String index(Model model) { */ @PostMapping("/upload") @ResponseBody - public ResponseEntity> uploadPhotos(@RequestParam("files") List files) { + public ResponseEntity> uploadPhotos(@RequestParam List files) { Map response = new HashMap(); List> uploadedPhotos = new ArrayList>(); List> failedUploads = new ArrayList>(); diff --git a/src/main/java/com/photoalbum/model/Photo.java b/src/main/java/com/photoalbum/model/Photo.java index d1cea3ec..1852ad7a 100644 --- a/src/main/java/com/photoalbum/model/Photo.java +++ b/src/main/java/com/photoalbum/model/Photo.java @@ -1,10 +1,10 @@ package com.photoalbum.model; -import javax.persistence.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Positive; -import javax.validation.constraints.Size; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import jakarta.validation.constraints.Size; import java.time.LocalDateTime; import java.util.UUID; From e33f7b7199029aaeb70ed1062935c58e33e4420a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 07:16:15 +0000 Subject: [PATCH 4/5] Upgrade Spring Boot to 3.4.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 966e621d..55daeed2 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.13 + 3.4.1 From c3b1f2d1079360b9be1dbf756bf2be66e0eece15 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 07:19:07 +0000 Subject: [PATCH 5/5] Fix CVE-2024-47554 and H2 compatibility issues - Upgraded commons-io from 2.11.0 to 2.18.0 to address HIGH severity CVE-2024-47554 - Updated H2 test datasource URL to handle case sensitivity in H2 2.x with DATABASE_TO_LOWER and CASE_INSENSITIVE_IDENTIFIERS options --- pom.xml | 2 +- src/test/resources/application-test.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 55daeed2..8d2acb73 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ commons-io commons-io - 2.11.0 + 2.18.0 diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index 41da82b1..a351b258 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -1,5 +1,5 @@ # Test configuration - use H2 in-memory database for testing -spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_LOWER=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=