diff --git a/pom.xml b/pom.xml index 94162e6aa..9a7078301 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ 4.1.4.Final 1.7.1 4.2.0.Final + 2.0 @@ -196,7 +197,26 @@ 1.1 test + + + joda-time + joda-time + ${joda.version} + + + + org.jadira.usertype + usertype.core + 3.0.0.CR1 + + + joda-time + joda-time-jsptags + 1.1 + + + diff --git a/src/main/java/org/springframework/samples/petclinic/Pet.java b/src/main/java/org/springframework/samples/petclinic/Pet.java index 6b3915891..735001111 100644 --- a/src/main/java/org/springframework/samples/petclinic/Pet.java +++ b/src/main/java/org/springframework/samples/petclinic/Pet.java @@ -2,7 +2,6 @@ package org.springframework.samples.petclinic; import java.util.ArrayList; import java.util.Collections; -import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -15,6 +14,8 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; +import org.hibernate.annotations.Type; +import org.joda.time.DateTime; import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; @@ -29,7 +30,8 @@ import org.springframework.beans.support.PropertyComparator; public class Pet extends NamedEntity { @Column(name="birth_date") - private Date birthDate; + @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") + private DateTime birthDate; @ManyToOne @JoinColumn(name = "type_id") @@ -43,11 +45,11 @@ public class Pet extends NamedEntity { private Set visits; - public void setBirthDate(Date birthDate) { + public void setBirthDate(DateTime birthDate) { this.birthDate = birthDate; } - public Date getBirthDate() { + public DateTime getBirthDate() { return this.birthDate; } diff --git a/src/main/java/org/springframework/samples/petclinic/Visit.java b/src/main/java/org/springframework/samples/petclinic/Visit.java index 944d17d8c..a5a788f68 100644 --- a/src/main/java/org/springframework/samples/petclinic/Visit.java +++ b/src/main/java/org/springframework/samples/petclinic/Visit.java @@ -1,7 +1,5 @@ package org.springframework.samples.petclinic; -import java.util.Date; - import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.JoinColumn; @@ -10,6 +8,9 @@ import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import org.hibernate.annotations.Type; +import org.joda.time.DateTime; + /** * Simple JavaBean domain object representing a visit. * @@ -20,7 +21,8 @@ public class Visit extends BaseEntity { /** Holds value of property date. */ @Column(name="visit_date") - private Date date; + @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") + private DateTime date; /** Holds value of property description. */ @NotNull @Size(min = 1) @@ -35,21 +37,21 @@ public class Visit extends BaseEntity { /** Creates a new instance of Visit for the current date */ public Visit() { - this.date = new Date(); + this.date = new DateTime(); } /** Getter for property date. * @return Value of property date. */ - public Date getDate() { + public DateTime getDate() { return this.date; } /** Setter for property date. * @param date New value of property date. */ - public void setDate(Date date) { + public void setDate(DateTime date) { this.date = date; } diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRepositoryImpl.java index 34b85217d..a2a004524 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRepositoryImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRepositoryImpl.java @@ -106,7 +106,7 @@ public class JdbcPetRepositoryImpl implements PetRepository { return new MapSqlParameterSource() .addValue("id", pet.getId()) .addValue("name", pet.getName()) - .addValue("birth_date", pet.getBirthDate()) + .addValue("birth_date", pet.getBirthDate().toDate()) .addValue("type_id", pet.getType().getId()) .addValue("owner_id", pet.getOwner().getId()); } diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRowMapper.java b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRowMapper.java index 575f4608a..49cb4976b 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRowMapper.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcPetRowMapper.java @@ -2,7 +2,9 @@ package org.springframework.samples.petclinic.repository.jdbc; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Date; +import org.joda.time.DateTime; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; /** @@ -15,7 +17,8 @@ class JdbcPetRowMapper implements ParameterizedRowMapper { JdbcPet pet = new JdbcPet(); pet.setId(rs.getInt("id")); pet.setName(rs.getString("name")); - pet.setBirthDate(rs.getDate("birth_date")); + Date birthDate = rs.getDate("birth_date"); + pet.setBirthDate(new DateTime(birthDate)); pet.setTypeId(rs.getInt("type_id")); pet.setOwnerId(rs.getInt("owner_id")); return pet; diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcVisitRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcVisitRepositoryImpl.java index ffa6ce12e..c54eb108d 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcVisitRepositoryImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jdbc/JdbcVisitRepositoryImpl.java @@ -2,10 +2,12 @@ package org.springframework.samples.petclinic.repository.jdbc; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Date; import java.util.List; import javax.sql.DataSource; +import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; @@ -69,7 +71,7 @@ public class JdbcVisitRepositoryImpl implements VisitRepository { private MapSqlParameterSource createVisitParameterSource(Visit visit) { return new MapSqlParameterSource() .addValue("id", visit.getId()) - .addValue("visit_date", visit.getDate()) + .addValue("visit_date", visit.getDate().toDate()) .addValue("description", visit.getDescription()) .addValue("pet_id", visit.getPet().getId()); } @@ -84,7 +86,8 @@ public class JdbcVisitRepositoryImpl implements VisitRepository { public Visit mapRow(ResultSet rs, int row) throws SQLException { Visit visit = new Visit(); visit.setId(rs.getInt("id")); - visit.setDate(rs.getTimestamp("visit_date")); + Date visitDate = rs.getDate("visit_date"); + visit.setDate(new DateTime(visitDate)); visit.setDescription(rs.getString("description")); return visit; } diff --git a/src/main/java/org/springframework/samples/petclinic/web/ClinicBindingInitializer.java b/src/main/java/org/springframework/samples/petclinic/web/ClinicBindingInitializer.java index 4421ce008..0751d6c52 100644 --- a/src/main/java/org/springframework/samples/petclinic/web/ClinicBindingInitializer.java +++ b/src/main/java/org/springframework/samples/petclinic/web/ClinicBindingInitializer.java @@ -1,10 +1,6 @@ package org.springframework.samples.petclinic.web; -import java.text.SimpleDateFormat; -import java.util.Date; - import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.beans.propertyeditors.StringTrimmerEditor; import org.springframework.samples.petclinic.PetType; import org.springframework.samples.petclinic.service.ClinicService; @@ -27,9 +23,6 @@ public class ClinicBindingInitializer implements WebBindingInitializer { private ClinicService clinicService; public void initBinder(WebDataBinder binder, WebRequest request) { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - dateFormat.setLenient(false); - binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); binder.registerCustomEditor(String.class, new StringTrimmerEditor(false)); binder.registerCustomEditor(PetType.class, new PetTypeEditor(this.clinicService)); } diff --git a/src/main/java/org/springframework/samples/petclinic/web/VisitsAtomView.java b/src/main/java/org/springframework/samples/petclinic/web/VisitsAtomView.java index 4fbfe0bbc..7aa34d9d5 100644 --- a/src/main/java/org/springframework/samples/petclinic/web/VisitsAtomView.java +++ b/src/main/java/org/springframework/samples/petclinic/web/VisitsAtomView.java @@ -46,7 +46,7 @@ public class VisitsAtomView extends AbstractAtomFeedView { @SuppressWarnings("unchecked") List visits = (List) model.get("visits"); for (Visit visit : visits) { - Date date = visit.getDate(); + Date date = visit.getDate().toDate(); if (feed.getUpdated() == null || date.compareTo(feed.getUpdated()) > 0) { feed.setUpdated(date); } @@ -63,11 +63,11 @@ public class VisitsAtomView extends AbstractAtomFeedView { for (Visit visit : visits) { Entry entry = new Entry(); - String date = String.format("%1$tY-%1$tm-%1$td", visit.getDate()); + String date = String.format("%1$tY-%1$tm-%1$td", visit.getDate().toDate()); // see http://diveintomark.org/archives/2004/05/28/howto-atom-id#other entry.setId(String.format("tag:springsource.com,%s:%d", date, visit.getId())); entry.setTitle(String.format("%s visit on %s", visit.getPet().getName(), date)); - entry.setUpdated(visit.getDate()); + entry.setUpdated(visit.getDate().toDate()); Content summary = new Content(); summary.setValue(visit.getDescription()); diff --git a/src/main/resources/spring/applicationContext-dao.xml b/src/main/resources/spring/applicationContext-dao.xml index 0a5ebc025..d6aa8dc72 100644 --- a/src/main/resources/spring/applicationContext-dao.xml +++ b/src/main/resources/spring/applicationContext-dao.xml @@ -104,7 +104,7 @@ - + diff --git a/src/main/webapp/WEB-INF/jsp/owners/ownerDetails.jsp b/src/main/webapp/WEB-INF/jsp/owners/ownerDetails.jsp index e982a405b..0f59f5dcb 100644 --- a/src/main/webapp/WEB-INF/jsp/owners/ownerDetails.jsp +++ b/src/main/webapp/WEB-INF/jsp/owners/ownerDetails.jsp @@ -2,6 +2,7 @@ <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %> @@ -58,7 +59,7 @@
Name
${pet.name}
Birth Date
-
+
Type
${pet.type.name}
@@ -73,7 +74,7 @@ - + ${visit.description} diff --git a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdateVisitForm.jsp b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdateVisitForm.jsp index cd68a2d5f..11f5016db 100644 --- a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdateVisitForm.jsp +++ b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdateVisitForm.jsp @@ -2,7 +2,7 @@ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> - +<%@ taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %> @@ -26,7 +26,7 @@ ${visit.pet.name} - + ${visit.pet.type.name} ${visit.pet.owner.firstName} ${visit.pet.owner.lastName} @@ -35,7 +35,7 @@
- Date: + Date
@@ -44,7 +44,7 @@
- Description: + Description
@@ -61,7 +61,7 @@
- Previous Visits: + Previous Visits @@ -70,7 +70,7 @@ - + diff --git a/src/test/java/org/springframework/samples/petclinic/AbstractPetRepositoryTests.java b/src/test/java/org/springframework/samples/petclinic/AbstractPetRepositoryTests.java index 2247b0581..8d3431264 100644 --- a/src/test/java/org/springframework/samples/petclinic/AbstractPetRepositoryTests.java +++ b/src/test/java/org/springframework/samples/petclinic/AbstractPetRepositoryTests.java @@ -4,8 +4,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Collection; -import java.util.Date; +import org.joda.time.DateTime; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.samples.petclinic.repository.OwnerRepository; @@ -124,7 +124,7 @@ public abstract class AbstractPetRepositoryTests { pet.setName("bowser"); Collection types = this.petRepository.findPetTypes(); pet.setType(EntityUtils.getById(types, PetType.class, 2)); - pet.setBirthDate(new Date()); + pet.setBirthDate(new DateTime()); o6.addPet(pet); assertEquals(found + 1, o6.getPets().size()); // both storePet and storeOwner are necessary to cover all ORM tools diff --git a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java b/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java index 59d435cfd..74533505e 100644 --- a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java +++ b/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; import org.springframework.samples.petclinic.Pet; @@ -55,14 +56,14 @@ public class VisitsAtomViewTest { bello.setType(dog); Visit belloVisit = new Visit(); belloVisit.setPet(bello); - belloVisit.setDate(new Date(2009, 0, 1)); + belloVisit.setDate(new DateTime(2009, 1, 1,1,1)); belloVisit.setDescription("Bello visit"); Pet wodan = new Pet(); wodan.setName("Wodan"); wodan.setType(dog); Visit wodanVisit = new Visit(); wodanVisit.setPet(wodan); - wodanVisit.setDate(new Date(2009, 0, 2)); + wodanVisit.setDate(new DateTime(2009, 1, 2,1,1)); wodanVisit.setDescription("Wodan visit"); List visits = new ArrayList(); visits.add(belloVisit); @@ -80,7 +81,7 @@ public class VisitsAtomViewTest { assertNotNull("No id set", feed.getId()); assertNotNull("No title set", feed.getTitle()); - assertEquals("Invalid update set", new Date(2009, 0, 2), feed.getUpdated()); + assertEquals("Invalid update set", new DateTime(2009, 1, 2,1,1).toDate(), feed.getUpdated()); } @Test
Date
${visit.description}