/** * Copyright 2009-2013 Oy Vaadin Ltd * * 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 com.vaadin.addon.jpacontainer.testdata; import java.io.Serializable; import java.text.DateFormat; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.UniqueConstraint; import javax.persistence.Version; /** * Entity Java bean for testing. * * @author Petter Holmström (Vaadin Ltd) * @since 1.0 */ @SuppressWarnings("serial") @Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = { "lastName", "firstName" })) public class Person implements Serializable, Cloneable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Version private Long version; private String firstName; private String lastName; @Temporal(TemporalType.DATE) private Date dateOfBirth; @Embedded private Address address; private transient String tempData; @ManyToOne(fetch = FetchType.LAZY) private Person manager; @OneToMany(cascade = CascadeType.ALL, mappedBy = "person") private Set<PersonSkill> skills = new HashSet<PersonSkill>(); private boolean male; private double primitiveDouble; public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public Date getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(Date dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Long getVersion() { return version; } public void setVersion(Long version) { this.version = version; } public String getFullName() { return getFirstName() + " " + getLastName(); } public Address getTransientAddress() { return address; } public String getTempData() { return tempData; } public void setTempData(String tempData) { this.tempData = tempData; } public Person getManager() { return manager; } public void setManager(Person manager) { this.manager = manager; } public Set<PersonSkill> getSkills() { return skills; } public void setSkills(Set<PersonSkill> skills) { this.skills = skills; } public void addSkill(Skill skill, Integer level) { PersonSkill ps = new PersonSkill(); ps.setLevel(level); ps.setSkill(skill); ps.setPerson(this); skills.add(ps); } public boolean hasSkill(Skill skill) { for (PersonSkill personSkill : getSkills()) { if (personSkill.getSkill().equals(skill)) { return true; } } return false; } @Override public boolean equals(Object obj) { if (obj instanceof Person) { Person p = (Person) obj; if (this == p) { return true; } if (id == null || p.id == null) { return false; } return id.equals(p.id); } return super.equals(obj); } @Override public int hashCode() { return id == null ? 0 : id.hashCode(); } @Override public String toString() { String dob = null; if (dateOfBirth != null) { dob = DateFormat.getDateInstance(DateFormat.SHORT).format( dateOfBirth); } return lastName + ", " + firstName + ", " + dob + ", " + address + " (ID: " + id + ")"; } @Override public Person clone() { Person p = new Person(); p.address = address == null ? null : address.clone(); p.dateOfBirth = dateOfBirth; p.firstName = firstName; p.id = id; p.lastName = lastName; p.tempData = tempData; p.version = version; p.manager = manager; p.primitiveDouble = primitiveDouble; p.male = male; p.skills = new HashSet<PersonSkill>(); for (PersonSkill ps : skills) { PersonSkill cps = ps.clone(); cps.setPerson(p); p.skills.add(cps); } return p; } public void setMale(boolean male) { this.male = male; } public boolean isMale() { return male; } public void setPrimitiveDouble(double primitiveDouble) { this.primitiveDouble = primitiveDouble; } public double getPrimitiveDouble() { return primitiveDouble; } }