Address1.java

package ejava.jpa.example.validation;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

/**
 * This class provides an example of using GroupSequences where you can 
 * organize validation groups into a sequence which will short circuit
 * once one of the groups fails.
 */
@Entity
@Table(name="VALIDATION_ADDRESS")
@CityStateOrZip(groups=PreCheck.class)
public class Address1 {
	@Id @GeneratedValue
	private int id;
		
	@Column(name="STREET", length=32, nullable=false)
	@NotNull(message="street not supplied")
	@Size(max=32, message="street name too large", groups=DBChecks.class)
	@Pattern(regexp="^[0-9A-Za-z\\ ]+$", groups=DataChecks.class, 
	         message="street must be numbers and letters")
	private String street;
	
	@Column(name="CITY", length=20, nullable=false)
	@NotNull(message="city not supplied")
	@Size(max=20, message="city name too large", groups=DBChecks.class)
	@Pattern(regexp="^[a-zA-Z\\ ]+$", groups=DataChecks.class, 
	         message="city must be upper and lower case characters")
	private String city;
	
	@Column(name="STATE", length=2, nullable=false)
	@NotNull(message="state not supplied")
	@Size(min=2, max=2, message="state wrong size", groups=DBChecks.class)
	@Pattern(regexp="^[A-Z][A-Z]$", groups=DataChecks.class, 
	         message="state must be upper case letters")
	private String state;
	
	@Column(name="ZIP", length=5, nullable=false)
	@NotNull(message="zipcode not supplied")
	@Size(min=5, max=5, message="zipcode wrong size", groups=DBChecks.class)
	@Pattern(regexp="^[0-9][0-9][0-9][0-9][0-9]$", groups=DataChecks.class, 
	         message="zipcode must be numeric digits")
	private String zip;

	
	public int getId() { return id; }

	public String getStreet() { return street; }
	public Address1 setStreet(String street) {
		this.street = street;
		return this;
	}

	public String getCity() { return city; }
	public Address1 setCity(String city) {
		this.city = city;
		return this;
	}

	public String getState() { return state; }
	public Address1 setState(String state) {
		this.state = state;
		return this;
	}

	public String getZip() { return zip; }
	public Address1 setZip(String zip) {
		this.zip = zip;
		return this;
	}
	
	@Override
	public String toString() {
		return (street==null?"null":street) + " " + 
	           (city==null?"null":city) + ", " + 
			   (state==null?"null":state) + " " + 
	           (zip==null?"null":zip);
	}
	
}