/*
* JBoss, Home of Professional Open Source
* Copyright 2015, Red Hat, Inc. and/or its affiliates, and individual
* contributors by the @authors tag. See the copyright.txt in the
* distribution for a full listing of individual contributors.
*
* 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 org.jboss.quickstarts.contact;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
/**
* This is a Domain Object.
*
* @author Joshua Wilson
*
*/
/*
* The @NamedQueries included here are for searching against the table that reflects this object. This is the most efficient
* form of query in JPA though is it more error prone due to the syntax being in a String. This makes it harder to debug.
*/
@Entity
@NamedQueries({
@NamedQuery(name = Contact.FIND_ALL, query = "SELECT c FROM Contact c ORDER BY c.lastName ASC, c.firstName ASC"),
@NamedQuery(name = Contact.FIND_BY_EMAIL, query = "SELECT c FROM Contact c WHERE c.email = :email")
})
@XmlRootElement
@Table(name = "Contact", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class Contact implements Serializable {
/** Default value included to remove warning. Remove or modify at will. **/
private static final long serialVersionUID = 1L;
public static final String FIND_ALL = "Contact.findAll";
public static final String FIND_BY_EMAIL = "Contact.findByEmail";
/*
* The messages match the ones in the UI so that the user isn't confused by two similar error messages for the same
* error after hitting submit. This is if the form submits while having validation errors. The only difference is that
* there are no periods(.) at the end of these message sentences, this gives us a way to verify where the message came
* from.
*
* Each variable name exactly matches the ones used on the HTML form name attribute so that when an error for that
* variable occurs it can be sent to the correct input field on the form.
*/
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
@NotNull
@Size(min = 1, max = 25)
@Pattern(regexp = "[A-Za-z-']+", message = "Please use a name without numbers or specials")
@Column(name = "first_name")
private String firstName;
@NotNull
@Size(min = 1, max = 25)
@Pattern(regexp = "[A-Za-z-']+", message = "Please use a name without numbers or specials")
@Column(name = "last_name")
private String lastName;
@NotNull
@NotEmpty
@Email(message = "The email address must be in the format of name@domain.com")
private String email;
@NotNull
@Column(name = "phone_number")
private String phoneNumber;
@NotNull
@Past(message = "Birthdates can not be in the future. Please choose one from the past")
@Column(name = "birth_date")
@Temporal(TemporalType.DATE)
private Date birthDate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
}