From 1752f1789bb1fc2b7e22f9798adcb9dd7899b71e Mon Sep 17 00:00:00 2001 From: Awadhesh Kumar Date: Mon, 27 Apr 2020 09:17:07 +0530 Subject: [PATCH 1/7] Added rest controller for owner. --- .../samples/petclinic/rest/NewOwnerForm.java | 70 +++++++++++++++++++ .../petclinic/rest/OwnerController.java | 42 +++++++++++ 2 files changed, 112 insertions(+) create mode 100644 src/main/java/org/springframework/samples/petclinic/rest/NewOwnerForm.java create mode 100644 src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java diff --git a/src/main/java/org/springframework/samples/petclinic/rest/NewOwnerForm.java b/src/main/java/org/springframework/samples/petclinic/rest/NewOwnerForm.java new file mode 100644 index 000000000..2c93cfa20 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/rest/NewOwnerForm.java @@ -0,0 +1,70 @@ +package org.springframework.samples.petclinic.rest; + +import javax.validation.constraints.Digits; +import javax.validation.constraints.NotEmpty; + +import org.springframework.samples.petclinic.owner.Owner; + +public class NewOwnerForm { + @NotEmpty + private String firstName; + @NotEmpty + private String lastName; + @NotEmpty + private String address; + @NotEmpty + private String city; + @NotEmpty + @Digits(fraction = 0, integer = 10) + private String telephone; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public Owner NewOwner() { + Owner owner=new Owner(); + owner.setFirstName(this.firstName); + owner.setLastName(this.lastName); + owner.setAddress(this.address); + owner.setCity(this.city); + owner.setTelephone(this.telephone); + return owner; + } +} diff --git a/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java new file mode 100644 index 000000000..af3ac6e38 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java @@ -0,0 +1,42 @@ +package org.springframework.samples.petclinic.rest; + +import javax.validation.Valid; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.samples.petclinic.owner.Owner; +import org.springframework.samples.petclinic.owner.OwnerRepository; +import org.springframework.samples.petclinic.visit.VisitRepository; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController("OwnerRestController") +@RequestMapping("/api/owner") +public class OwnerController { + private final OwnerRepository owners; + + private VisitRepository visits; + + public OwnerController(OwnerRepository clinicService, VisitRepository visits) { + this.owners = clinicService; + this.visits = visits; + } + + @PostMapping("/new") + public ResponseEntity processCreationForm(@Valid @RequestBody NewOwnerForm owner, BindingResult result) { + if (result.hasErrors()) { + return new ResponseEntity(result.getAllErrors(),HttpStatus.BAD_REQUEST); + } else { + createNewOwner(owner); + return new ResponseEntity("Owner created",HttpStatus.OK); + } + } + + private void createNewOwner(final NewOwnerForm owner) { + Owner newOwner=owner.NewOwner(); + this.owners.save(newOwner); + } +} From f535c69eeaaa5349c1cecbd725df629414fd74e7 Mon Sep 17 00:00:00 2001 From: Awadhesh Kumar Date: Mon, 27 Apr 2020 20:55:39 +0530 Subject: [PATCH 2/7] Rename create owner controller handler. --- .../springframework/samples/petclinic/rest/OwnerController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java index af3ac6e38..2de920a43 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java @@ -26,7 +26,7 @@ public class OwnerController { } @PostMapping("/new") - public ResponseEntity processCreationForm(@Valid @RequestBody NewOwnerForm owner, BindingResult result) { + public ResponseEntity createOwner(@Valid @RequestBody NewOwnerForm owner, BindingResult result) { if (result.hasErrors()) { return new ResponseEntity(result.getAllErrors(),HttpStatus.BAD_REQUEST); } else { From b91651ad2b5b32df8e65117df9d23ff00b2fe423 Mon Sep 17 00:00:00 2001 From: Awadhesh Kumar Date: Mon, 27 Apr 2020 20:57:36 +0530 Subject: [PATCH 3/7] Moved rest api to owner package. --- .../samples/petclinic/{ => owner}/rest/NewOwnerForm.java | 2 +- .../samples/petclinic/{ => owner}/rest/OwnerController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/java/org/springframework/samples/petclinic/{ => owner}/rest/NewOwnerForm.java (90%) rename src/main/java/org/springframework/samples/petclinic/{ => owner}/rest/OwnerController.java (93%) diff --git a/src/main/java/org/springframework/samples/petclinic/rest/NewOwnerForm.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/NewOwnerForm.java similarity index 90% rename from src/main/java/org/springframework/samples/petclinic/rest/NewOwnerForm.java rename to src/main/java/org/springframework/samples/petclinic/owner/rest/NewOwnerForm.java index 2c93cfa20..8f36ce22b 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/NewOwnerForm.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/NewOwnerForm.java @@ -1,4 +1,4 @@ -package org.springframework.samples.petclinic.rest; +package org.springframework.samples.petclinic.owner.rest; import javax.validation.constraints.Digits; import javax.validation.constraints.NotEmpty; diff --git a/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java similarity index 93% rename from src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java rename to src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java index 2de920a43..dbbed7765 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java @@ -1,4 +1,4 @@ -package org.springframework.samples.petclinic.rest; +package org.springframework.samples.petclinic.owner.rest; import javax.validation.Valid; From cacf6f0fddf01be5a65e682ec43c38b3370d2f40 Mon Sep 17 00:00:00 2001 From: Awadhesh Kumar Date: Mon, 27 Apr 2020 20:59:10 +0530 Subject: [PATCH 4/7] Added author name on file. --- .../samples/petclinic/owner/rest/NewOwnerForm.java | 6 +++++- .../samples/petclinic/owner/rest/OwnerController.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/samples/petclinic/owner/rest/NewOwnerForm.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/NewOwnerForm.java index 8f36ce22b..738946852 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/rest/NewOwnerForm.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/NewOwnerForm.java @@ -4,7 +4,11 @@ import javax.validation.constraints.Digits; import javax.validation.constraints.NotEmpty; import org.springframework.samples.petclinic.owner.Owner; - +/** + * + * @author Awadhesh Kumar + * + */ public class NewOwnerForm { @NotEmpty private String firstName; diff --git a/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java index dbbed7765..e79b54141 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java @@ -12,7 +12,11 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - +/** + * + * @author Awadhesh Kumar + * + */ @RestController("OwnerRestController") @RequestMapping("/api/owner") public class OwnerController { From 0db37cda20902a4698a5a009cb6fcf66a8348bf4 Mon Sep 17 00:00:00 2001 From: Awadhesh Kumar Date: Mon, 27 Apr 2020 21:39:32 +0530 Subject: [PATCH 5/7] Added api to find owner. --- .../owner/rest/ExistingOwnerForm.java | 14 +++++++ .../petclinic/owner/rest/OwnerController.java | 41 +++++++++++++++++++ .../system/SwaggerConfiguration.java | 3 +- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java diff --git a/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java new file mode 100644 index 000000000..97ba946ff --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java @@ -0,0 +1,14 @@ +package org.springframework.samples.petclinic.owner.rest; + +public class ExistingOwnerForm extends NewOwnerForm{ + private int id; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java index e79b54141..54091c4cf 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java @@ -1,13 +1,19 @@ package org.springframework.samples.petclinic.owner.rest; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; + import javax.validation.Valid; import org.springframework.http.HttpStatus; +import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; import org.springframework.samples.petclinic.owner.Owner; import org.springframework.samples.petclinic.owner.OwnerRepository; import org.springframework.samples.petclinic.visit.VisitRepository; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -38,6 +44,41 @@ public class OwnerController { return new ResponseEntity("Owner created",HttpStatus.OK); } } + + @GetMapping("") + public ResponseEntity processFindForm(NewOwnerForm owner) { + + // allow parameterless GET request to return all records + if (owner.getLastName() == null) { + owner.setLastName(""); // empty string signifies broadest possible search + } + + // find owners by last name + Collection results = getAllOwners(owner); + if (results.isEmpty()) { + // no owners found + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } else { + // owners found + return new ResponseEntity<>(results, HttpStatus.OK); + } + } + + private Collection getAllOwners(NewOwnerForm ownerForm) { + CollectionexistingOwners=owners.findByLastName(ownerForm.getLastName()); + Collectionowners=new ArrayList<>(); + for(Owner existingOwner:existingOwners) { + ExistingOwnerForm owner=new ExistingOwnerForm(); + owner.setId(existingOwner.getId()); + owner.setAddress(existingOwner.getAddress()); + owner.setCity(existingOwner.getCity()); + owner.setFirstName(existingOwner.getFirstName()); + owner.setLastName(existingOwner.getLastName()); + owner.setTelephone(existingOwner.getTelephone()); + owners.add(owner); + } + return owners; + } private void createNewOwner(final NewOwnerForm owner) { Owner newOwner=owner.NewOwner(); diff --git a/src/main/java/org/springframework/samples/petclinic/system/SwaggerConfiguration.java b/src/main/java/org/springframework/samples/petclinic/system/SwaggerConfiguration.java index d48abd007..d267c9f52 100644 --- a/src/main/java/org/springframework/samples/petclinic/system/SwaggerConfiguration.java +++ b/src/main/java/org/springframework/samples/petclinic/system/SwaggerConfiguration.java @@ -2,6 +2,7 @@ package org.springframework.samples.petclinic.system; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.bind.annotation.RestController; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.spi.DocumentationType; @@ -14,7 +15,7 @@ public class SwaggerConfiguration { @Bean public Docket productApi() { return new Docket(DocumentationType.SWAGGER_2).select() - .apis(RequestHandlerSelectors.basePackage("org.springframework.samples.petclinic.rest")) + .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) .build(); } } From 7805a7f8ef94e685aaec0e3613843659bc7336f8 Mon Sep 17 00:00:00 2001 From: Awadhesh Kumar Date: Mon, 27 Apr 2020 21:41:17 +0530 Subject: [PATCH 6/7] Added owner for file. --- .../samples/petclinic/owner/rest/ExistingOwnerForm.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java index 97ba946ff..e5f9b950d 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java @@ -1,5 +1,9 @@ package org.springframework.samples.petclinic.owner.rest; - +/** + * + * @author Awadhesh Kumar + * + */ public class ExistingOwnerForm extends NewOwnerForm{ private int id; From 535564e614329802366a789903ddd496d6f013b3 Mon Sep 17 00:00:00 2001 From: Awadhesh Kumar Date: Mon, 27 Apr 2020 22:11:27 +0530 Subject: [PATCH 7/7] Added update owner form. --- .../owner/rest/ExistingOwnerForm.java | 10 +++++++- .../petclinic/owner/rest/OwnerController.java | 23 +++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java index e5f9b950d..666e9de11 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/ExistingOwnerForm.java @@ -1,4 +1,7 @@ package org.springframework.samples.petclinic.owner.rest; + +import org.springframework.samples.petclinic.owner.Owner; + /** * * @author Awadhesh Kumar @@ -14,5 +17,10 @@ public class ExistingOwnerForm extends NewOwnerForm{ public void setId(int id) { this.id = id; } - + + public Owner NewOwner() { + Owner owner=super.NewOwner(); + owner.setId(this.id); + return owner; + } } diff --git a/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java index 54091c4cf..783cffc97 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/rest/OwnerController.java @@ -12,9 +12,12 @@ import org.springframework.http.ResponseEntity; import org.springframework.samples.petclinic.owner.Owner; import org.springframework.samples.petclinic.owner.OwnerRepository; import org.springframework.samples.petclinic.visit.VisitRepository; +import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -24,7 +27,7 @@ import org.springframework.web.bind.annotation.RestController; * */ @RestController("OwnerRestController") -@RequestMapping("/api/owner") +@RequestMapping("/api/owners") public class OwnerController { private final OwnerRepository owners; @@ -35,7 +38,7 @@ public class OwnerController { this.visits = visits; } - @PostMapping("/new") + @PostMapping("") public ResponseEntity createOwner(@Valid @RequestBody NewOwnerForm owner, BindingResult result) { if (result.hasErrors()) { return new ResponseEntity(result.getAllErrors(),HttpStatus.BAD_REQUEST); @@ -64,6 +67,22 @@ public class OwnerController { } } + @PutMapping("") + public ResponseEntity updateOwner(@Valid @RequestBody ExistingOwnerForm existingOwnerForm,BindingResult result) { + if (result.hasErrors()) { + return new ResponseEntity(result.getAllErrors(),HttpStatus.BAD_REQUEST); + } else { + updateOwner(existingOwnerForm); + return new ResponseEntity<>("Owner updated",HttpStatus.OK); + } + } + + private void updateOwner(final ExistingOwnerForm existingOwnerForm) { + Owner existingOwner=this.owners.findById(existingOwnerForm.getId()); + existingOwner=existingOwnerForm.NewOwner(); + this.owners.save(existingOwner); + } + private Collection getAllOwners(NewOwnerForm ownerForm) { CollectionexistingOwners=owners.findByLastName(ownerForm.getLastName()); Collectionowners=new ArrayList<>();