/* * 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; } }