/* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package sample.ui.model; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.validation.constraints.NotNull; import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; import org.springframework.format.annotation.DateTimeFormat; /** * Simple business object representing a pet. * * @author Ken Krebs * @author Juergen Hoeller * @author Sam Brannen * @author Arnaldo Piccinelli */ @Entity @Table(name = "pets") public class Pet extends NamedEntity { private static final long serialVersionUID = -7523031237057644849L; @Column(name = "birth_date") @Temporal(TemporalType.DATE) @DateTimeFormat(pattern = "MM/dd/yyyy") @NotNull private Date birthDate; @ManyToOne @JoinColumn(name = "pet_type_id") @NotNull private PetType type; @ManyToOne @JoinColumn(name = "owner_id") @NotNull private Owner owner; @OneToMany(cascade = CascadeType.ALL, mappedBy = "pet", fetch = FetchType.EAGER) private Set<Visit> visits; public Pet() { super(); } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public Date getBirthDate() { return this.birthDate; } public void setType(PetType type) { this.type = type; } public PetType getType() { return this.type; } protected void setOwner(Owner owner) { this.owner = owner; } public Owner getOwner() { return this.owner; } protected void setVisitsInternal(Set<Visit> visits) { this.visits = visits; } protected Set<Visit> getVisitsInternal() { if (this.visits == null) { this.visits = new HashSet<Visit>(); } return this.visits; } public List<Visit> getVisits() { List<Visit> sortedVisits = new ArrayList<Visit>(getVisitsInternal()); PropertyComparator.sort(sortedVisits, new MutableSortDefinition("date", false, false)); return Collections.unmodifiableList(sortedVisits); } public void addVisit(Visit visit) { getVisitsInternal().add(visit); visit.setPet(this); } }