/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.test.cache.infinispan.stress.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Version;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@Entity
public final class Address {
@Id
@GeneratedValue
private int id;
private int streetNumber;
private String streetName;
private String cityName;
private String countryName;
private String zipCode;
@OneToMany
private Set<Person> inhabitants;
@Version
private int version;
public Address(int streetNumber, String streetName, String cityName, String countryName) {
this.streetNumber = streetNumber;
this.streetName = streetName;
this.cityName = cityName;
this.countryName = countryName;
this.zipCode = null;
this.inhabitants = new HashSet<Person>();
this.id = 0;
this.version = 0;
}
protected Address() {
this.streetNumber = 0;
this.streetName = null;
this.cityName = null;
this.countryName = null;
this.zipCode = null;
this.inhabitants = new HashSet<Person>();
this.id = 0;
this.version = 0;
}
public int getStreetNumber() {
return streetNumber;
}
public String getStreetName() {
return streetName;
}
public String getCityName() {
return cityName;
}
public String getCountryName() {
return countryName;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
public Set<Person> getInhabitants() {
return inhabitants;
}
public boolean addInhabitant(Person inhabitant) {
boolean done = false;
if (inhabitants.add(inhabitant)) {
inhabitant.setAddress(this);
done = true;
}
return done;
}
public boolean remInhabitant(Person inhabitant) {
boolean done = false;
if (inhabitants.remove(inhabitant)) {
inhabitant.setAddress(null);
done = true;
}
return done;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getVersion() {
return version;
}
protected void removeAllInhabitants() {
// inhabitants relation is not CASCADED, we must delete the relation on other side by ourselves
for (Iterator<Person> iterator = inhabitants.iterator(); iterator.hasNext(); ) {
Person p = iterator.next();
p.setAddress(null);
}
}
protected void setStreetNumber(int streetNumber) {
this.streetNumber = streetNumber;
}
protected void setStreetName(String streetName) {
this.streetName = streetName;
}
protected void setCityName(String cityName) {
this.cityName = cityName;
}
protected void setCountryName(String countryName) {
this.countryName = countryName;
}
protected void setInhabitants(Set<Person> inhabitants) {
if (inhabitants == null) {
this.inhabitants = new HashSet<Person>();
} else {
this.inhabitants = inhabitants;
}
}
protected void setVersion(Integer version) {
this.version = version;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Address address = (Address) o;
// inhabitants must not be in the comparison since we would end up in infinite recursion
if (id != address.id) return false;
if (streetNumber != address.streetNumber) return false;
if (version != address.version) return false;
if (cityName != null ? !cityName.equals(address.cityName) : address.cityName != null)
return false;
if (countryName != null ? !countryName.equals(address.countryName) : address.countryName != null)
return false;
if (streetName != null ? !streetName.equals(address.streetName) : address.streetName != null)
return false;
if (zipCode != null ? !zipCode.equals(address.zipCode) : address.zipCode != null)
return false;
return true;
}
@Override
public int hashCode() {
int result = streetNumber;
result = 31 * result + (streetName != null ? streetName.hashCode() : 0);
result = 31 * result + (cityName != null ? cityName.hashCode() : 0);
result = 31 * result + (countryName != null ? countryName.hashCode() : 0);
result = 31 * result + (zipCode != null ? zipCode.hashCode() : 0);
result = 31 * result + id;
result = 31 * result + version;
return result;
}
@Override
public String toString() {
return "Address{" +
"cityName='" + cityName + '\'' +
", streetNumber=" + streetNumber +
", streetName='" + streetName + '\'' +
", countryName='" + countryName + '\'' +
", zipCode='" + zipCode + '\'' +
", inhabitants=" + inhabitants +
", id=" + id +
", version=" + version +
'}';
}
}