package kickr.db.entity; import java.util.Date; import java.util.List; import javax.persistence.AssociationOverride; import javax.persistence.AssociationOverrides; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.validation.constraints.NotNull; import kickr.db.entity.user.User; import kickr.util.Side; @Entity @Table(name = "kickr_match") @NamedQueries({ @NamedQuery( name = "Match.getAll", query = "SELECT m FROM Match m " + "LEFT JOIN FETCH m.team1.offense " + "LEFT JOIN FETCH m.team1.defense " + "LEFT JOIN FETCH m.team2.offense " + "LEFT JOIN FETCH m.team2.defense " + "JOIN FETCH m.table " + "LEFT JOIN FETCH m.creator " + "WHERE m.played IS NOT NULL " + "ORDER BY m.played DESC"), @NamedQuery( name = "Match.get", query = "SELECT m FROM Match m " + "LEFT JOIN FETCH m.team1.offense " + "LEFT JOIN FETCH m.team1.defense " + "LEFT JOIN FETCH m.team2.offense " + "LEFT JOIN FETCH m.team2.defense " + "JOIN FETCH m.table " + "LEFT JOIN FETCH m.creator " + "WHERE m.id = :id"), @NamedQuery( name = "Match.getUnrated", query = "SELECT m FROM Match m WHERE m.removed = false AND m.rated = false AND m.played IS NOT NULL AND m.played < :played") }) public class Match extends BaseEntity { @NotNull @Embedded @AssociationOverrides({ @AssociationOverride(name="offense", joinColumns = @JoinColumn(name="team1_offense_id")), @AssociationOverride(name="defense", joinColumns = @JoinColumn(name="team1_defense_id")) }) protected Team team1; @NotNull @Embedded @AssociationOverrides({ @AssociationOverride(name="offense", joinColumns = @JoinColumn(name="team2_offense_id")), @AssociationOverride(name="defense", joinColumns = @JoinColumn(name="team2_defense_id")) }) protected Team team2; @NotNull @ManyToOne protected FoosballTable table; @Embedded protected MatchResult result; @Temporal(TemporalType.TIMESTAMP) protected Date played; protected boolean rated = false; protected boolean removed = false; @OneToMany @JoinColumn(name = "match_id") protected List<Game> games; @ManyToOne @JoinColumn(name = "creator_id") private User creator; private String participants; public Match() { } public Team getTeam1() { return team1; } public void setTeam1(Team team1) { this.team1 = team1; } public Team getTeam2() { return team2; } public void setTeam2(Team team2) { this.team2 = team2; } public boolean isRemoved() { return removed; } public void setRemoved(boolean removed) { this.removed = removed; } public FoosballTable getTable() { return table; } public User getCreator() { return creator; } public void setCreator(User creator) { this.creator = creator; } public void setTable(FoosballTable table) { this.table = table; } public void setPlayed(Date played) { this.played = played; } public Date getPlayed() { return played; } public List<Game> getGames() { return games; } public boolean isRated() { return rated; } public void setRated(boolean rated) { this.rated = rated; } public void setGames(List<Game> games) { this.games = games; } public Team getTeam(Side side) { if (side == Side.TEAM1) { return team1; } else { return team2; } } public void setResult(MatchResult result) { this.result = result; } public MatchResult getResult() { return result; } public boolean isIndexed() { return false; } public void setIndexed(boolean indexed) { } }