/*
* Hibernate Search, full-text search for your domain model
*
* 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.search.elasticsearch.test;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.SequenceGenerator;
import org.hibernate.search.annotations.CalendarBridge;
import org.hibernate.search.annotations.ClassBridge;
import org.hibernate.search.annotations.DateBridge;
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.FieldBridge;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import org.hibernate.search.annotations.Resolution;
import org.hibernate.search.annotations.Store;
import org.hibernate.search.bridge.builtin.DoubleBridge;
/**
* @author Gunnar Morling
*/
@Entity
@Indexed(index = "golfplayer")
@ClassBridge(name = "fullName", impl = NameConcatenationBridge.class)
@ClassBridge(name = "fullNameStored", index = Index.NO, store = Store.YES, impl = NameConcatenationBridge.class)
@ClassBridge(name = "age", impl = AgeBridge.class)
public class GolfPlayer {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GOLF_PLAYER_SEQ")
@SequenceGenerator(
name = "GOLF_PLAYER_SEQ",
sequenceName = "golfplayer_sequence",
allocationSize = 20
)
@DocumentId
private Long id;
@Field(indexNullAs = "<NULL>")
private String firstName;
@Field
private String lastName;
@Field(indexNullAs = "false")
private Boolean active;
@Field(indexNullAs = "1970-01-01+00:00")
@DateBridge(resolution = Resolution.DAY)
private Date dateOfBirth;
@Field(indexNullAs = "1970-01-01+00:00")
@CalendarBridge(resolution = Resolution.DAY)
private Calendar subscriptionEndDate;
@Field
private double handicap;
@Field(bridge = @FieldBridge(impl = DoubleBridge.class))
private double puttingStrength;
@Field(indexNullAs = "-1")
private Integer driveWidth;
@IndexedEmbedded
private Ranking ranking;
@ElementCollection
@Field
@IndexedEmbedded
private Set<String> strengths;
@ManyToMany
@JoinTable(name = "golfPlayer_playedCourses")
@IndexedEmbedded
private Set<GolfCourse> playedCourses;
@ManyToMany
@JoinTable(name = "golfPlayer_wonCourses")
@IndexedEmbedded(prefix = "won_")
private Set<GolfCourse> wonCourses;
GolfPlayer() {
}
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 Boolean isActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public Calendar getSubscriptionEndDate() {
return subscriptionEndDate;
}
public void setSubscriptionEndDate(Calendar subscriptionEndDate) {
this.subscriptionEndDate = subscriptionEndDate;
}
public double getHandicap() {
return handicap;
}
public void setHandicap(double handicap) {
this.handicap = handicap;
}
public double getPuttingStrength() {
return puttingStrength;
}
public void setPuttingStrength(double puttingStrength) {
this.puttingStrength = puttingStrength;
}
public Integer getDriveWidth() {
return driveWidth;
}
public void setDriveWidth(Integer driveWidth) {
this.driveWidth = driveWidth;
}
public Ranking getRanking() {
return ranking;
}
public void setRanking(Ranking ranking) {
this.ranking = ranking;
}
public Set<String> getStrengths() {
return strengths;
}
public void setStrengths(Set<String> strengths) {
this.strengths = strengths;
}
public Set<GolfCourse> getPlayedCourses() {
return playedCourses;
}
public void setPlayedCourses(Set<GolfCourse> playedCourses) {
this.playedCourses = playedCourses;
}
public Set<GolfCourse> getWonCourses() {
return wonCourses;
}
public void setWonCourses(Set<GolfCourse> wonCourses) {
this.wonCourses = wonCourses;
}
public static class Builder {
private String firstName;
private String lastName;
private Boolean active;
private Date dateOfBirth;
private Calendar subscriptionEndDate;
private double handicap;
private double puttingStrength;
private Integer driveWidth;
private Integer ranking;
private Set<String> strengths = new HashSet<>();
private final Set<GolfCourse> playedCourses = new HashSet<>();
private final Set<GolfCourse> wonCourses = new HashSet<>();
public Builder firstName(String firstName) {
this.firstName = firstName;
return this;
}
public Builder lastName(String lastName) {
this.lastName = lastName;
return this;
}
public Builder active(boolean active) {
this.active = active;
return this;
}
public Builder dateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
return this;
}
public Builder subscriptionEndDate(Calendar subscriptionEndDate) {
this.subscriptionEndDate = subscriptionEndDate;
return this;
}
public Builder handicap(double handicap) {
this.handicap = handicap;
return this;
}
public Builder driveWidth(int driveWidth) {
this.driveWidth = driveWidth;
return this;
}
public Builder ranking(int ranking) {
this.ranking = ranking;
return this;
}
public Builder puttingStrength(double puttingStrength) {
this.puttingStrength = puttingStrength;
return this;
}
public Builder strength(String strength) {
this.strengths.add( strength );
return this;
}
public Builder playedCourses(GolfCourse... courses) {
for ( GolfCourse course : courses ) {
this.playedCourses.add( course );
}
return this;
}
public Builder wonCourses(GolfCourse... courses) {
for ( GolfCourse course : courses ) {
this.wonCourses.add( course );
}
return this;
}
GolfPlayer build() {
GolfPlayer player = new GolfPlayer();
player.setFirstName( firstName );
player.setLastName( lastName );
player.setActive( active );
player.setDateOfBirth( dateOfBirth );
player.setSubscriptionEndDate( subscriptionEndDate );
player.setHandicap( handicap );
player.setPuttingStrength( puttingStrength );
player.setDriveWidth( driveWidth );
if ( ranking != null ) {
player.setRanking( new Ranking( BigInteger.valueOf( ranking ) ) );
}
player.setStrengths( strengths );
if ( !playedCourses.isEmpty() ) {
player.setPlayedCourses( playedCourses );
}
if ( !wonCourses.isEmpty() ) {
player.setWonCourses( wonCourses );
}
return player;
}
}
}