package de.flower.rmt.model.db.entity;
import de.flower.common.model.db.entity.AbstractBaseEntity;
import de.flower.rmt.model.db.entity.event.Event;
import org.hibernate.annotations.Index;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;
/**
* Team for single event. Used to model Socca5 events.
*
* @author flowerrrr
*/
@SuppressWarnings("FieldCanBeLocal")
@Entity
@Table(name = "eventteam")
public class EventTeam extends AbstractBaseEntity {
@NotNull
@Column
@Size(max = 40)
private String name;
@Column
private Integer rank;
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@Index(name = "ix_event")
private Event event;
@OneToMany(mappedBy = "eventTeam", cascade = CascadeType.REMOVE)
@OrderBy("order")
private List<EventTeamPlayer> players = new ArrayList<>();
protected EventTeam() {
}
public EventTeam(Event event) {
this.event = event;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public Integer getRank() {
return rank;
}
public void setRank(final Integer rank) {
this.rank = rank;
}
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
this.event = event;
}
public List<EventTeamPlayer> getPlayers() {
return players;
}
public void setPlayers(final List<EventTeamPlayer> players) {
this.players = players;
}
public void addPlayer(final EventTeamPlayer player, final EventTeamPlayer insertBeforePlayer) {
if (insertBeforePlayer == null) {
// add to end of player list.
player.setOrder(players.size());
players.add(player);
} else {
int index = players.indexOf(insertBeforePlayer);
player.setOrder(insertBeforePlayer.getOrder());
for (int i = index; i < players.size(); i++) {
EventTeamPlayer p = players.get(i);
p.setOrder(p.getOrder() + 1);
}
players.add(index, player);
}
}
public void removePlayer(final EventTeamPlayer player) {
int index = players.indexOf(player);
players.remove(index);
// from i on decrement order
for (int i = index; i < players.size(); i++) {
EventTeamPlayer p = players.get(i);
p.setOrder(p.getOrder() - 1);
}
}
}