petclinic-uncached
Changes
org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/Owner.java 49(+47 -2)
org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java 15(+9 -6)
org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java 2(+1 -1)
org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnersController.java 12(+6 -6)
org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerSearchForm.java 15(+15 -0)
org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java 6(+3 -3)
org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java 5(+3 -2)
org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ExternalContext.java 22(+22 -0)
Details
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 ec19625..934accd 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
@@ -14,12 +14,57 @@ public class Owner {
private String telephone;
+ public Owner() {
+
+ }
+
+ public Owner(Long id) {
+ this.id = id;
+ }
+
public Long getId() {
return id;
}
-
- public String getName() {
+
+ 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;
+ }
+
+
}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java
index 11be755..d357c04 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerController.java
@@ -1,8 +1,10 @@
package org.springframework.samples.petclinic.owners;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.samples.petclinic.util.ResponseContext;
+import org.springframework.samples.petclinic.util.ExternalContext;
import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -18,19 +20,20 @@ public class OwnerController {
}
@RequestMapping(method=RequestMethod.GET)
- public Owner get(Long owner) {
- return repository.getOwner(owner);
+ public String get(@PathVariable Long owner, Model model) {
+ model.addAttribute(repository.getOwner(owner));
+ return "owner";
}
@RequestMapping(value="/edit", method=RequestMethod.GET)
- public Owner getEditForm(Long owner) {
+ public Owner getEditForm(@PathVariable Long owner) {
return repository.getOwner(owner);
}
@RequestMapping(method = RequestMethod.PUT)
- public void put(Owner owner, ResponseContext response) {
+ public void put(Owner owner, ExternalContext response) {
repository.saveOwner(owner);
- response.redirect(owner.getName());
+ response.redirect(owner.getId());
}
}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java
index 762ba5d..1070224 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerRepository.java
@@ -8,6 +8,6 @@ public interface OwnerRepository {
Owner getOwner(Long id);
- void saveOwner(Owner owner);
+ Long saveOwner(Owner owner);
}
\ 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 93fd5b9..f41e895 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
@@ -3,7 +3,6 @@ package org.springframework.samples.petclinic.owners;
import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.samples.petclinic.util.ResponseContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -21,8 +20,8 @@ public class OwnersController {
}
@RequestMapping(method = RequestMethod.GET)
- public void get() {
-
+ public OwnerSearchForm get() {
+ return new OwnerSearchForm();
}
@RequestMapping(value="/search", method = RequestMethod.GET)
@@ -36,9 +35,10 @@ public class OwnersController {
}
@RequestMapping(method = RequestMethod.POST)
- public void post(Owner owner, ResponseContext response) {
- repository.saveOwner(owner);
- response.redirect(owner.getName());
+ 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/java/org/springframework/samples/petclinic/owners/OwnerSearchForm.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerSearchForm.java
new file mode 100644
index 0000000..c9c5896
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/OwnerSearchForm.java
@@ -0,0 +1,15 @@
+package org.springframework.samples.petclinic.owners;
+
+public class OwnerSearchForm {
+
+ private String lastName;
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java
index d789f91..a0a7e74 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/pets/PetController.java
@@ -1,7 +1,7 @@
package org.springframework.samples.petclinic.owners.pets;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.samples.petclinic.util.ResponseContext;
+import org.springframework.samples.petclinic.util.ExternalContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -28,13 +28,13 @@ public class PetController {
}
@RequestMapping(method = RequestMethod.PUT)
- public void put(Pet pet, ResponseContext response) {
+ public void put(Pet pet, ExternalContext response) {
repository.savePet(pet);
response.redirect(pet.getName());
}
@RequestMapping(method = RequestMethod.DELETE)
- public void delete(Long owner, String pet, ResponseContext context) {
+ public void delete(Long owner, String pet, ExternalContext context) {
context.forResource("owners").redirect(owner);
}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java
index 5c3406b..d442ee9 100644
--- a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owners/StubOwnerRepository.java
@@ -12,10 +12,11 @@ public class StubOwnerRepository implements OwnerRepository {
}
public Owner getOwner(Long id) {
- return null;
+ return new Owner(id);
}
- public void saveOwner(Owner owner) {
+ public Long saveOwner(Owner owner) {
+ return 1L;
}
}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ExternalContext.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ExternalContext.java
new file mode 100644
index 0000000..5f4fc1e
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ExternalContext.java
@@ -0,0 +1,22 @@
+package org.springframework.samples.petclinic.util;
+
+import org.springframework.ui.Model;
+
+// This is an idea as a context object to make avail to @Controller methods to interact with Dispatcher
+public interface ExternalContext {
+
+ Model getModel();
+
+ void selectView(String viewName);
+
+ void renderFragment(String fragment);
+
+ void redirect(Object resource);
+
+ ExternalContext forResource(Object resource);
+
+ Object getNativeRequest();
+
+ Object getNativeResponse();
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/layouts/page.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/layouts/page.jsp
index df5ed7b..b92d0ff 100644
--- a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/layouts/page.jsp
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/layouts/page.jsp
@@ -22,9 +22,9 @@
</ul>
<div id="nav">
<ul>
- <li><a href="<c:url value="/"/>">Home</a></li>
- <li><a href="appointments">Appointments</a></li>
- <li><a href="owners">Owners</a></li>
+ <li><a href="${pageContext.request.contextPath}">Home</a></li>
+ <li><a href="${pageContext.request.contextPath}/appointments">Appointments</a></li>
+ <li><a href="${pageContext.request.contextPath}/owners">Owners</a></li>
</ul>
</div>
</div>
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/addNewForm.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/addNewForm.jsp
new file mode 100644
index 0000000..68ad9dd
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/addNewForm.jsp
@@ -0,0 +1,15 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<h2>Add New Owner</h2>
+
+<form:form id="addNewForm" action="${pageContext.request.contextPath}/owners" modelAttribute="owner" method="post">
+ <form:label for="firstName" path="firstName">
+ First Name
+ <form:input path="firstName" />
+ </form:label>
+ <form:label for="lastName" path="lastName">
+ Last Name
+ <form:input path="lastName" />
+ </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/owners/content.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/content.jsp
new file mode 100644
index 0000000..c0dae0e
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/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}/owners">Search</a></li>
+ <li><a href="${pageContext.request.contextPath}/owners/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/owners/searchForm.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchForm.jsp
new file mode 100644
index 0000000..1a5830d
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchForm.jsp
@@ -0,0 +1,12 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+
+<h2>Search Owners</h2>
+
+<form:form id="searchForm" action="owners/search" modelAttribute="ownerSearchForm" method="get">
+ <form:label for="lastName" path="lastName">
+ Last Name
+ <form:input path="lastName" />
+ </form:label>
+ <input type="submit" value="Search" />
+</form:form>
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchResults.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchResults.jsp
new file mode 100644
index 0000000..c01fd8a
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/owners/searchResults.jsp
@@ -0,0 +1,2 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<h2>Search Results</h2>
\ 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 64d5e66..87229ac 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
@@ -18,14 +18,50 @@
<!-- APPOINTMENTS PAGES -->
<definition name="appointments" extends="page">
- <put-attribute name="title" value="Appointment" type="string" />
+ <put-attribute name="title" value="Appointments" type="string" />
<put-attribute name="content" value="/WEB-INF/appointments/calendar.jsp" type="template" />
</definition>
<!-- OWNERS PAGES -->
+
+ <!-- SEARCH PAGE -->
<definition name="owners" extends="page">
+ <put-attribute name="title" value="Owners" type="string" />
+ <put-attribute name="content" value="owners.content" type="definition" />
+ </definition>
+
+ <definition name="owners.content" template="/WEB-INF/owners/content.jsp">
+ <put-attribute name="main" value="/WEB-INF/owners/searchForm.jsp" type="template" />
+ </definition>
+
+ <!-- ADD NEW PAGE -->
+ <definition name="owners/new" extends="page">
+ <put-attribute name="title" value="Owners" type="string" />
+ <put-attribute name="content" value="owners/new.content" type="definition" />
+ </definition>
+
+ <definition name="owners/new.content" template="/WEB-INF/owners/content.jsp">
+ <put-attribute name="main" value="/WEB-INF/owners/addNewForm.jsp" type="template" />
+ </definition>
+
+ <!-- SEARCH RESULTS PAGE -->
+ <definition name="owners/search" extends="page">
<put-attribute name="title" value="Owner Search" type="string" />
- <put-attribute name="content" value="/WEB-INF/owners/search.jsp" type="template" />
- </definition>
+ <put-attribute name="content" value="owners/search.content" type="definition" />
+ </definition>
+
+ <definition name="owners/search.content" template="/WEB-INF/owners/content.jsp">
+ <put-attribute name="main" value="/WEB-INF/owners/searchResults.jsp" type="template" />
+ </definition>
+
+ <!-- OWNER DETAIL PAGE -->
+ <definition name="owner" extends="page">
+ <put-attribute name="title" value="Owner" type="string" />
+ <put-attribute name="content" value="owner.content" type="definition" />
+ </definition>
+ <definition name="owner.content" template="/WEB-INF/owners/content.jsp">
+ <put-attribute name="main" value="/WEB-INF/owners/owner.jsp" type="template" />
+ </definition>
+
</tiles-definitions>
\ No newline at end of file