diff --git a/.github/dco.yml b/.github/dco.yml new file mode 100644 index 000000000..37e411e1b --- /dev/null +++ b/.github/dco.yml @@ -0,0 +1,2 @@ +require: + members: false \ No newline at end of file diff --git a/README.md b/README.md index 9153520f2..3797fbab9 100644 --- a/README.md +++ b/README.md @@ -158,7 +158,8 @@ Here is a list of them: The [issue tracker](https://github.com/spring-projects/spring-petclinic/issues) is the preferred channel for bug reports, feature requests and submitting pull requests. -For pull requests, editor preferences are available in the [editor config](.editorconfig) for easy use in common text editors. Read more and download plugins at . If you have not previously done so, please fill out and submit the [Contributor License Agreement](https://cla.pivotal.io/sign/spring). +For pull requests, editor preferences are available in the [editor config](.editorconfig) for easy use in common text editors. Read more and download plugins at . All commits must include a __Signed-off-by__ trailer at the end of each commit message to indicate that the contributor agrees to the Developer Certificate of Origin. +For additional details, please refer to the blog post [Hello DCO, Goodbye CLA: Simplifying Contributions to Spring](https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring). ## License diff --git a/build.gradle b/build.gradle index 17c3763e2..b52d8e185 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.4.0' + id 'org.springframework.boot' version '3.4.2' id 'io.spring.dependency-management' version '1.1.6' id 'org.graalvm.buildtools.native' version '0.10.3' id 'org.cyclonedx.bom' version '1.10.0' diff --git a/pom.xml b/pom.xml index 33bf04c6f..bd4f400f0 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.2 diff --git a/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java b/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java index 5d7a40fbb..ab594841c 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java @@ -23,7 +23,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import org.springframework.transaction.annotation.Transactional; /** * Repository class for Owner domain objects All method names are compliant diff --git a/src/main/java/org/springframework/samples/petclinic/owner/PetController.java b/src/main/java/org/springframework/samples/petclinic/owner/PetController.java index fcf431bff..3234e39d6 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/PetController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/PetController.java @@ -129,7 +129,7 @@ class PetController { String petName = pet.getName(); - // checking if the pet name already exist for the owner + // checking if the pet name already exists for the owner if (StringUtils.hasText(petName)) { Pet existingPet = owner.getPet(petName, false); if (existingPet != null && !existingPet.getId().equals(pet.getId())) { @@ -146,10 +146,28 @@ class PetController { return VIEWS_PETS_CREATE_OR_UPDATE_FORM; } - owner.addPet(pet); - this.owners.save(owner); + updatePetDetails(owner, pet); redirectAttributes.addFlashAttribute("message", "Pet details has been edited"); return "redirect:/owners/{ownerId}"; } + /** + * Updates the pet details if it exists or adds a new pet to the owner. + * @param owner The owner of the pet + * @param pet The pet with updated details + */ + private void updatePetDetails(Owner owner, Pet pet) { + Pet existingPet = owner.getPet(pet.getId()); + if (existingPet != null) { + // Update existing pet's properties + existingPet.setName(pet.getName()); + existingPet.setBirthDate(pet.getBirthDate()); + existingPet.setType(pet.getType()); + } + else { + owner.addPet(pet); + } + this.owners.save(owner); + } + } diff --git a/src/main/java/org/springframework/samples/petclinic/vet/Vet.java b/src/main/java/org/springframework/samples/petclinic/vet/Vet.java index d8a1fc84d..00c7ec1c8 100644 --- a/src/main/java/org/springframework/samples/petclinic/vet/Vet.java +++ b/src/main/java/org/springframework/samples/petclinic/vet/Vet.java @@ -15,14 +15,13 @@ */ package org.springframework.samples.petclinic.vet; -import java.util.ArrayList; -import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; -import org.springframework.beans.support.MutableSortDefinition; -import org.springframework.beans.support.PropertyComparator; +import org.springframework.samples.petclinic.model.NamedEntity; import org.springframework.samples.petclinic.model.Person; import jakarta.persistence.Entity; @@ -59,9 +58,9 @@ public class Vet extends Person { @XmlElement public List getSpecialties() { - List sortedSpecs = new ArrayList<>(getSpecialtiesInternal()); - PropertyComparator.sort(sortedSpecs, new MutableSortDefinition("name", true, true)); - return Collections.unmodifiableList(sortedSpecs); + return getSpecialtiesInternal().stream() + .sorted(Comparator.comparing(NamedEntity::getName)) + .collect(Collectors.toList()); } public int getNrOfSpecialties() { diff --git a/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java b/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java index 8c7560a19..f98d892d3 100644 --- a/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java +++ b/src/test/java/org/springframework/samples/petclinic/MysqlTestApplication.java @@ -40,7 +40,8 @@ public class MysqlTestApplication { } public static void main(String[] args) { - SpringApplication.run(PetClinicApplication.class, "--spring.profiles.active=mysql"); + SpringApplication.run(PetClinicApplication.class, "--spring.profiles.active=mysql", + "--spring.docker.compose.enabled=false"); } }