From 2781809c095c8cf53c60a524499a9a74649ab506 Mon Sep 17 00:00:00 2001
From: Keith Donald <kdonald@vmware.com>
Date: Thu, 7 May 2009 20:39:59 +0000
Subject: [PATCH] appointments

---
 .../petclinic/appointments/Appointment.java   | 37 ++++++++++
 .../appointments/AppointmentBook.java         | 13 ++++
 .../appointments/AppointmentForm.java         | 67 +++++++++++++++++++
 .../petclinic/appointments/Appointments.java  | 15 +++++
 .../appointments/AppointmentsController.java  | 30 ++++++++-
 .../appointments/StubAppointmentBook.java     | 23 +++++++
 .../samples/petclinic/owners/Owner.java       | 13 ++--
 .../petclinic/owners/OwnersController.java    |  1 -
 .../WEB-INF/appointments/addNewForm.jsp       | 31 +++++++++
 .../webapp/WEB-INF/appointments/content.jsp   | 11 +++
 .../src/main/webapp/WEB-INF/tiles.xml         | 24 ++++++-
 11 files changed, 252 insertions(+), 13 deletions(-)
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/Appointment.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentBook.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentForm.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/Appointments.java
 create mode 100644 org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/StubAppointmentBook.java
 create mode 100644 org.springframework.samples.petclinic/src/main/webapp/WEB-INF/appointments/addNewForm.jsp
 create mode 100644 org.springframework.samples.petclinic/src/main/webapp/WEB-INF/appointments/content.jsp

diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/Appointment.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/Appointment.java
new file mode 100644
index 0000000..d193117
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/Appointment.java
@@ -0,0 +1,37 @@
+package org.springframework.samples.petclinic.appointments;
+
+import java.util.Date;
+
+public class Appointment {
+	
+	private String owner;
+	
+	private String ownerPhone;
+	
+	private String pet;
+	
+	private String notes;
+	
+	private Date dateTime;
+	
+	public String getOwner() {
+		return owner;
+	}
+	
+	public String getOwnerPhone() {
+		return ownerPhone;
+	}
+	
+	public String getPet() {
+		return pet;
+	}
+	
+	public Date getDateTime() {
+		return dateTime;
+	}
+
+	public String getNotes() {
+		return notes;
+	}	
+	
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentBook.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentBook.java
new file mode 100644
index 0000000..55ebd48
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentBook.java
@@ -0,0 +1,13 @@
+package org.springframework.samples.petclinic.appointments;
+
+import java.util.Date;
+
+public interface AppointmentBook {
+
+	Appointments getAppointmentsForToday();
+	
+	Appointments getAppointmentsForDay(Date day);
+
+	Long createAppointment(AppointmentForm form);
+
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentForm.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentForm.java
new file mode 100644
index 0000000..d3d7aba
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentForm.java
@@ -0,0 +1,67 @@
+package org.springframework.samples.petclinic.appointments;
+
+import java.util.Date;
+
+public class AppointmentForm {
+	
+	private Long doctor;
+	
+	private Long owner;
+	
+	private String pet;
+	
+	private Date date;
+	
+	private Date time;
+	
+	private String notes;
+
+	public Long getDoctor() {
+		return doctor;
+	}
+
+	public void setDoctor(Long doctor) {
+		this.doctor = doctor;
+	}
+
+	public Long getOwner() {
+		return owner;
+	}
+
+	public void setOwner(Long owner) {
+		this.owner = owner;
+	}
+
+	public String getPet() {
+		return pet;
+	}
+
+	public void setPet(String pet) {
+		this.pet = pet;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public Date getTime() {
+		return time;
+	}
+
+	public void setTime(Date time) {
+		this.time = time;
+	}
+
+	public String getNotes() {
+		return notes;
+	}
+
+	public void setNotes(String notes) {
+		this.notes = notes;
+	}
+
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/Appointments.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/Appointments.java
new file mode 100644
index 0000000..f2aa85e
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/Appointments.java
@@ -0,0 +1,15 @@
+package org.springframework.samples.petclinic.appointments;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Appointments {
+	
+	private Map<String, List<Appointment>> vetAppointments = new LinkedHashMap<String, List<Appointment>>();
+	
+	public Map<String, List<Appointment>> getAllByVet() {
+		return vetAppointments;
+	}
+	
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentsController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentsController.java
index c8abc0a..e3c7860 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentsController.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/AppointmentsController.java
@@ -1,6 +1,10 @@
 package org.springframework.samples.petclinic.appointments;
 
+import java.util.Date;
+
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
@@ -8,9 +12,31 @@ import org.springframework.web.bind.annotation.RequestMethod;
 @RequestMapping("/appointments")
 public class AppointmentsController {
 
+	private AppointmentBook appointmentBook;
+	
+	@Autowired
+	public AppointmentsController(AppointmentBook appointmentBook) {
+		this.appointmentBook = appointmentBook;
+	}
+
 	@RequestMapping(method = RequestMethod.GET)
-	public void get() {
-		
+	public Appointments get() {
+		return appointmentBook.getAppointmentsForToday();
+	}
+
+	@RequestMapping(value="/{day}", method = RequestMethod.GET)
+	public Appointments getForDay(@PathVariable Date day) {
+		return appointmentBook.getAppointmentsForDay(day);
+	}
+
+	@RequestMapping(value="/new", method = RequestMethod.GET)
+	public AppointmentForm getNewForm() {
+		return new AppointmentForm();
 	}
 	
+	@RequestMapping(method = RequestMethod.POST)
+	public String post(AppointmentForm form) {
+		appointmentBook.createAppointment(form);
+		return "redirect:/appointments";
+	}	
 }
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/StubAppointmentBook.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/StubAppointmentBook.java
new file mode 100644
index 0000000..92525a3
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/appointments/StubAppointmentBook.java
@@ -0,0 +1,23 @@
+package org.springframework.samples.petclinic.appointments;
+
+import java.util.Date;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class StubAppointmentBook implements AppointmentBook {
+
+	public Appointments getAppointmentsForDay(Date day) {
+		return new Appointments();
+	}
+
+	public Appointments getAppointmentsForToday() {
+		return new Appointments();
+	}
+
+	public Long createAppointment(AppointmentForm form) {
+		return 1L;
+	}
+
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java
index 934accd..9841482 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java
@@ -12,7 +12,7 @@ public class Owner {
 
 	private String city;
 
-	private String telephone;
+	private String phone;
 	
 	public Owner() {
 		
@@ -58,13 +58,12 @@ public class Owner {
 		this.city = city;
 	}
 
-	public String getTelephone() {
-		return telephone;
+	public String getPhone() {
+		return phone;
 	}
 
-	public void setTelephone(String telephone) {
-		this.telephone = telephone;
+	public void setPhone(String phone) {
+		this.phone = phone;
 	}
 
-
-}
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java
index f41e895..f24cd07 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java
@@ -37,7 +37,6 @@ public class OwnersController {
 	@RequestMapping(method = RequestMethod.POST)
 	public String post(Owner owner) {
 		Long ownerId = repository.saveOwner(owner);
-		// TODO simplify this since /owners is the current resource already?
 		return "redirect:/owners/" + ownerId;
 	}	
 
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/appointments/addNewForm.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/appointments/addNewForm.jsp
new file mode 100644
index 0000000..997640d
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/appointments/addNewForm.jsp
@@ -0,0 +1,31 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<h2>Add New Appointment</h2>
+
+<form:form id="addNewForm" action="${pageContext.request.contextPath}/appointments" modelAttribute="appointment" method="post">
+	<form:label for="doctor" path="doctor">
+		Doctor
+		<form:input path="doctor" />
+	</form:label>
+	<form:label for="owner" path="owner">
+		Owner
+		<form:input path="owner" />
+	</form:label>
+	<form:label for="pet" path="pet">
+		Pet
+		<form:input path="pet" />
+	</form:label>
+	<form:label for="date" path="date">
+		Date
+		<form:input path="date" />
+	</form:label>
+	<form:label for="time" path="time">
+		Time
+		<form:input path="time" />
+	</form:label>
+	<form:label for="notes" path="notes">
+		Notes
+		<form:input path="notes" />
+	</form:label>
+	<input type="submit" value="Add" />	
+</form:form>
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/appointments/content.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/appointments/content.jsp
new file mode 100644
index 0000000..b171fb5
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/appointments/content.jsp
@@ -0,0 +1,11 @@
+<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
+
+<div id="sidebar">
+	<ul id="sub-nav">
+		<li><a href="${pageContext.request.contextPath}/appointments">Calendar</a></li>
+		<li><a href="${pageContext.request.contextPath}/appointments/new">Add New</a></li>
+	</ul>
+</div>
+<div id="main">
+	<tiles:insertAttribute name="main" />
+</div>
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/tiles.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/tiles.xml
index 87229ac..e87543e 100644
--- a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/tiles.xml
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/tiles.xml
@@ -17,13 +17,30 @@
 	</definition>
 
 	<!-- APPOINTMENTS PAGES -->
+
+	<!-- CALENDAR PAGE -->
 	<definition name="appointments" extends="page">
 		<put-attribute name="title" value="Appointments" type="string" />
-		<put-attribute name="content" value="/WEB-INF/appointments/calendar.jsp" type="template" />
+		<put-attribute name="content" value="appointments.content" type="definition" />
 	</definition>
 	
+	<definition name="appointments.content" template="/WEB-INF/appointments/content.jsp">
+		<put-attribute name="main" value="/WEB-INF/appointments/calendar.jsp" type="template" />
+	</definition>
+
+	<!-- ADD NEW PAGE -->
+	<definition name="appointments/new" extends="page">
+		<put-attribute name="title" value="Add New Appointment" type="string" />
+		<put-attribute name="content" value="appointments/new.content" type="definition" />
+	</definition>
+
+	<definition name="appointments/new.content" template="/WEB-INF/appointments/content.jsp">
+		<put-attribute name="main" value="/WEB-INF/appointments/addNewForm.jsp" type="template" />
+	</definition>	
+		
 	<!-- OWNERS PAGES -->
 	
+	
 	<!-- SEARCH PAGE -->
 	<definition name="owners" extends="page">
 		<put-attribute name="title" value="Owners" type="string" />
@@ -36,7 +53,7 @@
 
 	<!-- ADD NEW PAGE -->
 	<definition name="owners/new" extends="page">
-		<put-attribute name="title" value="Owners" type="string" />
+		<put-attribute name="title" value="Add New Owner" type="string" />
 		<put-attribute name="content" value="owners/new.content" type="definition" />
 	</definition>
 
@@ -54,7 +71,7 @@
 		<put-attribute name="main" value="/WEB-INF/owners/searchResults.jsp" type="template" />
 	</definition>
 	
-	<!-- OWNER DETAIL PAGE -->
+	<!-- DETAIL PAGE -->
 	<definition name="owner" extends="page">
 		<put-attribute name="title" value="Owner" type="string" />
 		<put-attribute name="content" value="owner.content" type="definition" />
@@ -64,4 +81,5 @@
 		<put-attribute name="main" value="/WEB-INF/owners/owner.jsp" type="template" />
 	</definition>
 	
+	
 </tiles-definitions>
\ No newline at end of file
-- 
GitLab