From 3d22e37944dc3b54a366102dd49b624bc42f0d2c Mon Sep 17 00:00:00 2001
From: Mic <misvy@vmware.com>
Date: Wed, 16 Jan 2013 11:07:39 +0800
Subject: [PATCH] improvements to Visit controller

- renamed
- migrated validation to bean validation
---
 .../samples/petclinic/Visit.java              |  3 +++
 .../petclinic/validation/VisitValidator.java  | 21 -------------------
 ...itController.java => VisitController.java} | 16 +++++++-------
 3 files changed, 10 insertions(+), 30 deletions(-)
 delete mode 100644 src/main/java/org/springframework/samples/petclinic/validation/VisitValidator.java
 rename src/main/java/org/springframework/samples/petclinic/web/{AddVisitController.java => VisitController.java} (76%)

diff --git a/src/main/java/org/springframework/samples/petclinic/Visit.java b/src/main/java/org/springframework/samples/petclinic/Visit.java
index 7d7502d..944d17d 100644
--- a/src/main/java/org/springframework/samples/petclinic/Visit.java
+++ b/src/main/java/org/springframework/samples/petclinic/Visit.java
@@ -7,6 +7,8 @@ import javax.persistence.Entity;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 
 /**
  * Simple JavaBean domain object representing a visit.
@@ -21,6 +23,7 @@ public class Visit extends BaseEntity {
 	private Date date;
 
 	/** Holds value of property description. */
+	@NotNull @Size(min = 1)
 	@Column(name="description")
 	private String description;
 
diff --git a/src/main/java/org/springframework/samples/petclinic/validation/VisitValidator.java b/src/main/java/org/springframework/samples/petclinic/validation/VisitValidator.java
deleted file mode 100644
index 35c80ba..0000000
--- a/src/main/java/org/springframework/samples/petclinic/validation/VisitValidator.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.springframework.samples.petclinic.validation;
-
-import org.springframework.samples.petclinic.Visit;
-import org.springframework.util.StringUtils;
-import org.springframework.validation.Errors;
-
-/**
- * <code>Validator</code> for <code>Visit</code> forms.
- *
- * @author Ken Krebs
- * @author Juergen Hoeller
- */
-public class VisitValidator {
-
-	public void validate(Visit visit, Errors errors) {
-		if (!StringUtils.hasLength(visit.getDescription())) {
-			errors.rejectValue("description", "required", "required");
-		}
-	}
-
-}
diff --git a/src/main/java/org/springframework/samples/petclinic/web/AddVisitController.java b/src/main/java/org/springframework/samples/petclinic/web/VisitController.java
similarity index 76%
rename from src/main/java/org/springframework/samples/petclinic/web/AddVisitController.java
rename to src/main/java/org/springframework/samples/petclinic/web/VisitController.java
index f005cff..0f38743 100644
--- a/src/main/java/org/springframework/samples/petclinic/web/AddVisitController.java
+++ b/src/main/java/org/springframework/samples/petclinic/web/VisitController.java
@@ -1,17 +1,17 @@
 
 package org.springframework.samples.petclinic.web;
 
+import javax.validation.Valid;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.samples.petclinic.Clinic;
 import org.springframework.samples.petclinic.Pet;
 import org.springframework.samples.petclinic.Visit;
-import org.springframework.samples.petclinic.validation.VisitValidator;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.annotation.InitBinder;
-import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -27,15 +27,14 @@ import org.springframework.web.bind.support.SessionStatus;
  * @author Arjen Poutsma
  */
 @Controller
-@RequestMapping("/owners/*/pets/{petId}/visits/new")
 @SessionAttributes("visit")
-public class AddVisitController {
+public class VisitController {
 
 	private final Clinic clinic;
 
 
 	@Autowired
-	public AddVisitController(Clinic clinic) {
+	public VisitController(Clinic clinic) {
 		this.clinic = clinic;
 	}
 
@@ -44,7 +43,7 @@ public class AddVisitController {
 		dataBinder.setDisallowedFields("id");
 	}
 
-	@RequestMapping(method = RequestMethod.GET)
+	@RequestMapping(value="/owners/*/pets/{petId}/visits/new", method = RequestMethod.GET)
 	public String setupForm(@PathVariable("petId") int petId, Model model) {
 		Pet pet = this.clinic.findPet(petId);
 		Visit visit = new Visit();
@@ -53,9 +52,8 @@ public class AddVisitController {
 		return "pets/createOrUpdateVisitForm";
 	}
 
-	@RequestMapping(method = RequestMethod.POST)
-	public String processSubmit(@ModelAttribute("visit") Visit visit, BindingResult result, SessionStatus status) {
-		new VisitValidator().validate(visit, result);
+	@RequestMapping(value="/owners/*/pets/{petId}/visits/new", method = RequestMethod.POST)
+	public String processSubmit(@Valid Visit visit, BindingResult result, SessionStatus status) {
 		if (result.hasErrors()) {
 			return "pets/createOrUpdateVisitForm";
 		}
-- 
GitLab