package net.stsmedia.financemanager.domain; import java.io.Serializable; import javax.persistence.Embeddable; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import org.springframework.core.style.ToStringCreator; import org.springframework.util.Assert; /** * An example for an JPA embeddable class. Ideally this class should be treated * as a value object as documented in Evan's book p. 97 * * @author Stefan Schmidt * @since 0.1 * */ @Embeddable public class Address implements Serializable { @NotNull @Pattern(regexp = ".+", message = "Street name must not be empty!") private String streetName; @NotNull @Pattern(regexp = ".+", message = "Street number must not be empty!") private String streetNumber; @NotNull @Pattern(regexp = ".+", message = "City must not be empty!") private String city; @NotNull @Pattern(regexp = ".+", message = "Zip code must not be empty!") private String zipCode; private String state; private String country; // this object should be treated as VO and therefore this constructor is // just to be // used by the ORM protected Address() { } public Address(String streetName, String streetNumber, String city, String zipCode) { Assert.hasText(streetName, "Street name required."); Assert.hasText(streetNumber, "Street number required."); Assert.hasText(city, "City required."); Assert.hasText(zipCode, "Zip code required."); this.streetName = streetName; this.streetNumber = streetNumber; this.city = city; this.zipCode = zipCode; } public Address(String streetName, String streetNumber, String city, String zipCode, String state, String country) { Assert.hasText(streetName, "Street name required."); Assert.hasText(streetNumber, "Street number required."); Assert.hasText(city, "City required."); Assert.hasText(zipCode, "Zip code required."); Assert.hasText(state, "State required."); Assert.hasText(country, "Country required."); this.streetName = streetName; this.streetNumber = streetNumber; this.city = city; this.zipCode = zipCode; this.state = state; this.country = country; } public void setStreetName(String streetName) { this.streetName = streetName; } public void setStreetNumber(String streetNumber) { this.streetNumber = streetNumber; } public void setCity(String city) { this.city = city; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } public void setState(String state) { this.state = state; } public void setCountry(String country) { this.country = country; } public String getStreetName() { return streetName; } public String getStreetNumber() { return streetNumber; } public String getCity() { return city; } public String getZipCode() { return zipCode; } public String getState() { return state; } public String getCountry() { return country; } public String toString() { ToStringCreator tsc = new ToStringCreator(this); tsc.append("Street Name: " + getStreetName()); tsc.append("Street Number: ", getStreetNumber()); tsc.append("City: ", getCity()); tsc.append("Zip Code: ", getZipCode()); if (getState() != null) tsc.append("State: ", getState()); if (getCountry() != null) tsc.append("Country: ", getCountry()); return tsc.toString(); } }