diff --git a/org.springframework.samples.petclinic/.classpath b/org.springframework.samples.petclinic/.classpath
new file mode 100644
index 000000000..5c40e0b3f
--- /dev/null
+++ b/org.springframework.samples.petclinic/.classpath
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.springframework.samples.petclinic/.project b/org.springframework.samples.petclinic/.project
new file mode 100644
index 000000000..ed4ca5e5a
--- /dev/null
+++ b/org.springframework.samples.petclinic/.project
@@ -0,0 +1,42 @@
+
+
+ org.springframework.samples.petclinic
+
+
+ Servers
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+ org.springframework.ide.eclipse.core.springbuilder
+
+
+
+
+ org.maven.ide.eclipse.maven2Builder
+
+
+
+
+
+ org.maven.ide.eclipse.maven2Nature
+ org.springframework.ide.eclipse.core.springnature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+
+
diff --git a/org.springframework.samples.petclinic/.settings/com.springsource.server.ide.jdt.core.xml b/org.springframework.samples.petclinic/.settings/com.springsource.server.ide.jdt.core.xml
new file mode 100644
index 000000000..0a4413c52
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/com.springsource.server.ide.jdt.core.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.jdt.core.prefs b/org.springframework.samples.petclinic/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..9ec44e3e6
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Tue Mar 17 10:00:21 EDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.jst.common.project.facet.core.prefs b/org.springframework.samples.petclinic/.settings/org.eclipse.jst.common.project.facet.core.prefs
new file mode 100644
index 000000000..763a1503d
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.jst.common.project.facet.core.prefs
@@ -0,0 +1,3 @@
+#Tue Mar 17 09:59:19 EDT 2009
+classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER\:\:org.eclipse.jdt.internal.launching.macosx.MacOSXType\:\:JVM\ 1.5.0\ (MacOS\ X\ Default)/owners=jst.java\:5.0
+eclipse.preferences.version=1
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.component b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.component
new file mode 100644
index 000000000..89d4f2ab5
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.project.facet.core.xml b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 000000000..d24a733bd
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/org.springframework.samples.petclinic/.settings/org.eclipse.wst.validation.prefs b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 000000000..75abca5ce
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,6 @@
+#Fri Jun 06 17:00:12 BST 2008
+DELEGATES_PREFERENCE=delegateValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator\=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator\=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator;
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;
+USER_PREFERENCE=overrideGlobalPreferencesfalse
+eclipse.preferences.version=1
diff --git a/org.springframework.samples.petclinic/.settings/org.maven.ide.eclipse.prefs b/org.springframework.samples.petclinic/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 000000000..0b751087c
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Mar 17 14:28:16 EDT 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.beans.core.prefs b/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.beans.core.prefs
new file mode 100644
index 000000000..a7eb2b337
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.beans.core.prefs
@@ -0,0 +1,3 @@
+#Wed Dec 17 01:09:03 EST 2008
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false
diff --git a/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.core.prefs b/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.core.prefs
new file mode 100644
index 000000000..e096d67b6
--- /dev/null
+++ b/org.springframework.samples.petclinic/.settings/org.springframework.ide.eclipse.core.prefs
@@ -0,0 +1,67 @@
+#Tue Mar 17 10:00:21 EDT 2009
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true
+org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=false
+org.springframework.ide.eclipse.core.builders.enable.osgibundleupdater=true
+org.springframework.ide.eclipse.core.enable.project.preferences=false
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.applicationSymbolicNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.applicationVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleActivationPolicyRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleActivatorRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleManifestVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleSymbolicNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.exportPackageRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.importRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.parsingProblemsRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.requireBundleRule-com.springsource.server.ide.manifest.core.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.AvoidDriverManagerDataSource-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ImportElementsAtTopRulee-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ParentBeanSpecifiesAbstractClassRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.RefElementRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.TooManyBeansInFileRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UnnecessaryValueElementRule-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UseBeanInheritance-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.legacyxmlusage.jndiobjectfactory-com.springsource.sts.bestpractices.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importBundleVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importLibraryVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importPackageVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.requireBundleVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
diff --git a/org.springframework.samples.petclinic/.springBeans b/org.springframework.samples.petclinic/.springBeans
new file mode 100644
index 000000000..24e2d6593
--- /dev/null
+++ b/org.springframework.samples.petclinic/.springBeans
@@ -0,0 +1,13 @@
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
diff --git a/org.springframework.samples.petclinic/pom.xml b/org.springframework.samples.petclinic/pom.xml
new file mode 100644
index 000000000..e38359706
--- /dev/null
+++ b/org.springframework.samples.petclinic/pom.xml
@@ -0,0 +1,106 @@
+
+
+ 4.0.0
+ org.springframework
+ samples
+ org.springframework.samples.petclinic
+ war
+ 1.0.0-SNAPSHOT
+
+ 2.5.6
+
+
+
+
+ javax.servlet
+ jstl
+ 1.2
+
+
+ log4j
+ log4j
+ 1.2.14
+
+
+ org.tuckey
+ urlrewritefilter
+ 3.1.0
+
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+
+ javax.servlet
+ servlet-api
+ 2.4
+ provided
+
+
+ javax.servlet.jsp
+ jsp-api
+ 2.1
+ provided
+
+
+
+ junit
+ junit
+ 4.5
+ test
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.5
+ 1.5
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ install
+ install
+
+ sources
+
+
+
+
+
+
+
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/HomeController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/HomeController.java
new file mode 100644
index 000000000..b11f02cec
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/HomeController.java
@@ -0,0 +1,14 @@
+package org.springframework.samples.petclinic;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+public class HomeController {
+
+ @RequestMapping(value="/", method = RequestMethod.GET)
+ public void getHome() {
+ }
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/Owner.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/Owner.java
new file mode 100644
index 000000000..4321ce3bd
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/Owner.java
@@ -0,0 +1,26 @@
+package org.springframework.samples.petclinic.owner;
+
+
+public class Owner {
+
+ private Long id;
+
+ private String firstName;
+
+ private String lastName;
+
+ private String address;
+
+ private String city;
+
+ private String telephone;
+
+ public Long getId() {
+ return id;
+ }
+
+ public String getName() {
+ return lastName;
+ }
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java
new file mode 100644
index 000000000..548889c7e
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java
@@ -0,0 +1,36 @@
+package org.springframework.samples.petclinic.owner;
+
+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;
+
+@Controller
+@RequestMapping(value="/owners/{owner}")
+public class OwnerController {
+
+ private final OwnerRepository repository;
+
+ @Autowired
+ public OwnerController(OwnerRepository repository) {
+ this.repository = repository;
+ }
+
+ @RequestMapping(method=RequestMethod.GET)
+ public Owner get(Long owner) {
+ return repository.getOwner(owner);
+ }
+
+ @RequestMapping(value="/edit", method=RequestMethod.GET)
+ public Owner getEditForm(Long owner) {
+ return repository.getOwner(owner);
+ }
+
+ @RequestMapping(method = RequestMethod.PUT)
+ public void put(Owner owner, ResponseContext response) {
+ repository.saveOwner(owner);
+ response.redirect(owner.getName());
+ }
+
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java
new file mode 100644
index 000000000..e151f45e2
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java
@@ -0,0 +1,13 @@
+package org.springframework.samples.petclinic.owner;
+
+import java.util.Collection;
+
+public interface OwnerRepository {
+
+ Collection findOwnersByLastName(String lastName);
+
+ Owner getOwner(Long id);
+
+ void saveOwner(Owner owner);
+
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnersController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnersController.java
new file mode 100644
index 000000000..9c547d9d0
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/owner/OwnersController.java
@@ -0,0 +1,39 @@
+package org.springframework.samples.petclinic.owner;
+
+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;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@Controller
+@RequestMapping("/owners")
+public class OwnersController {
+
+ private final OwnerRepository repository;
+
+ @Autowired
+ public OwnersController(OwnerRepository repository) {
+ this.repository = repository;
+ }
+
+ @RequestMapping(method = RequestMethod.GET)
+ public Collection get(@RequestParam String lastName) {
+ return repository.findOwnersByLastName(lastName);
+ }
+
+ @RequestMapping(value="/new", method = RequestMethod.GET)
+ public Owner getNewForm() {
+ return new Owner();
+ }
+
+ @RequestMapping(method = RequestMethod.POST)
+ public void post(Owner owner, ResponseContext response) {
+ repository.saveOwner(owner);
+ response.redirect(owner.getName());
+ }
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Gender.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Gender.java
new file mode 100644
index 000000000..e67a95aa6
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Gender.java
@@ -0,0 +1,5 @@
+package org.springframework.samples.petclinic.pet;
+
+public enum Gender {
+ MALE, FEMALE
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Pet.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Pet.java
new file mode 100644
index 000000000..e0765ee4c
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/Pet.java
@@ -0,0 +1,25 @@
+package org.springframework.samples.petclinic.pet;
+
+import java.util.Date;
+
+import org.springframework.samples.petclinic.util.Measurement;
+
+public class Pet {
+
+ private String name;
+
+ private String species;
+
+ private String breed;
+
+ private Gender gender;
+
+ private Date birthDate;
+
+ private Measurement weight;
+
+ public String getName() {
+ return name;
+ }
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetController.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetController.java
new file mode 100644
index 000000000..106754071
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetController.java
@@ -0,0 +1,41 @@
+package org.springframework.samples.petclinic.pet;
+
+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;
+
+@Controller
+@RequestMapping(value="/owners/{owner}/pets/{pet}")
+public class PetController {
+
+ private final PetRepository repository;
+
+ @Autowired
+ public PetController(PetRepository repository) {
+ this.repository = repository;
+ }
+
+ @RequestMapping(method=RequestMethod.GET)
+ public Pet get(Long owner, String pet) {
+ return repository.getPet(owner, pet);
+ }
+
+ @RequestMapping(value="/edit", method=RequestMethod.GET)
+ public Pet getEditForm(Long owner, String pet) {
+ return repository.getPet(owner, pet);
+ }
+
+ @RequestMapping(method = RequestMethod.PUT)
+ public void put(Pet pet, ResponseContext response) {
+ repository.savePet(pet);
+ response.redirect(pet.getName());
+ }
+
+ @RequestMapping(method = RequestMethod.DELETE)
+ public void delete(Long owner, String pet, ResponseContext context) {
+ context.forResource("owners").redirect(owner);
+ }
+
+}
\ No newline at end of file
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetRepository.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetRepository.java
new file mode 100644
index 000000000..c3b52f4f1
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/pet/PetRepository.java
@@ -0,0 +1,9 @@
+package org.springframework.samples.petclinic.pet;
+
+public interface PetRepository {
+
+ Pet getPet(Long owner, String name);
+
+ void savePet(Pet pet);
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Measurement.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Measurement.java
new file mode 100644
index 000000000..9120e5838
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Measurement.java
@@ -0,0 +1,10 @@
+package org.springframework.samples.petclinic.util;
+
+import java.math.BigDecimal;
+
+public class Measurement {
+
+ private BigDecimal amount;
+
+ private Unit unit;
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java
new file mode 100644
index 000000000..fd9d5f674
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/ResponseContext.java
@@ -0,0 +1,9 @@
+package org.springframework.samples.petclinic.util;
+
+public interface ResponseContext {
+
+ void redirect(Object resource);
+
+ ResponseContext forResource(Object resource);
+
+}
diff --git a/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Unit.java b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Unit.java
new file mode 100644
index 000000000..6bcf4e2e7
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/java/org/springframework/samples/petclinic/util/Unit.java
@@ -0,0 +1,5 @@
+package org.springframework.samples.petclinic.util;
+
+public enum Unit {
+ POUNDS
+}
diff --git a/org.springframework.samples.petclinic/src/main/resources/log4j.xml b/org.springframework.samples.petclinic/src/main/resources/log4j.xml
new file mode 100644
index 000000000..d65fd3775
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/resources/log4j.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/home.jsp b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/home.jsp
new file mode 100644
index 000000000..b37beeda4
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/home.jsp
@@ -0,0 +1,12 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page session="false" %>
+
+
+ Welcome
+
+
+
+ Congratulations! You're running Spring!
+
+
+
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/app-config.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/app-config.xml
new file mode 100644
index 000000000..63165f80e
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/app-config.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/mvc-config.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/mvc-config.xml
new file mode 100644
index 000000000..c9833d687
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/spring/mvc-config.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/urlrewrite.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/urlrewrite.xml
new file mode 100644
index 000000000..26672b6cd
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/urlrewrite.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ /**
+ /app/$1
+
+
+ /app/**
+ /$1
+
+
diff --git a/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/web.xml b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 000000000..95239d4a2
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ UrlRewriteFilter
+ org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
+
+
+
+ UrlRewriteFilter
+ /*
+
+
+
+
+ Spring MVC Dispatcher Servlet
+ org.springframework.web.servlet.DispatcherServlet
+
+ contextConfigLocation
+
+ /WEB-INF/spring/*.xml
+
+
+ 1
+
+
+
+
+ Spring MVC Dispatcher Servlet
+ /app/*
+
+
+
diff --git a/org.springframework.samples.petclinic/src/test/resources/log4j.xml b/org.springframework.samples.petclinic/src/test/resources/log4j.xml
new file mode 100644
index 000000000..6cd59573d
--- /dev/null
+++ b/org.springframework.samples.petclinic/src/test/resources/log4j.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+