Commit 7011d55f by Tuomas Riihimäki

Merge branch 'devel' of codecrew.fi:bortal into devel

2 parents 90200b00 9f958648
Showing with 1139 additions and 14 deletions
package fi.codecrew.moya.beans;
import java.util.Date;
import java.util.List;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import fi.codecrew.moya.enums.TournamentStatus;
import fi.codecrew.moya.enums.TournamentTeamMemberRole;
import fi.codecrew.moya.enums.apps.TournamentPermission;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.TournamentFacade;
import fi.codecrew.moya.facade.TournamentGameFacade;
import fi.codecrew.moya.facade.TournamentParticipantFacade;
import fi.codecrew.moya.facade.TournamentRuleFacade;
import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Tournament;
import fi.codecrew.moya.model.TournamentGame;
import fi.codecrew.moya.model.TournamentParticipant;
import fi.codecrew.moya.model.TournamentRule;
import fi.codecrew.moya.model.TournamentTeamMember;
import fi.codecrew.moya.model.User;
/**
* Session Bean implementation class TournamentBean
......@@ -24,6 +35,9 @@ public class TournamentBean implements TournamentBeanLocal {
@EJB private TournamentRuleFacade tournamentRuleFacade;
@EJB private TournamentGameFacade tournamentGameFacade;
@EJB private TournamentFacade tournamentFacade;
@EJB private TournamentParticipantFacade tournamentParticipantFacade;
@EJB private EventUserFacade eventUserFacade;
@EJB private EventBean eventBean;
/**
* Default constructor.
......@@ -33,42 +47,139 @@ public class TournamentBean implements TournamentBeanLocal {
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public List<TournamentRule> getRulesByGame(TournamentGame tg) {
return tournamentRuleFacade.getRulesByGame(tg);
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public List<TournamentGame> getGames() {
return tournamentGameFacade.getGames();
}
@Override
@RolesAllowed(TournamentPermission.S_MANAGE_ALL)
public TournamentGame createGame(TournamentGame tg) {
return tournamentGameFacade.create(tg);
}
@Override
@RolesAllowed(TournamentPermission.S_MANAGE_ALL)
public TournamentRule createRule(TournamentRule tr) {
return tournamentRuleFacade.create(tr);
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public TournamentGame findGame(Integer id) {
return tournamentGameFacade.find(id);
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public TournamentRule findRule(Integer id) {
return tournamentRuleFacade.find(id);
}
@Override
@RolesAllowed(TournamentPermission.S_MANAGE_ALL)
public void createTournament(Tournament tournament) {
tournamentFacade.create(tournament);
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public List<Tournament> getTournamentsInStatus(TournamentStatus status, boolean useTimeConstraints) {
return tournamentFacade.getTournamentsInStatusWithParticipationTimeIn(status);
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public List<Tournament> getActiveTournaments() {
return tournamentFacade.getTournamentsNotInStatus(TournamentStatus.COMPLETED);
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public Tournament getTournamentById(Integer tournamentId) {
return tournamentFacade.find(tournamentId);
}
@Override
@RolesAllowed(TournamentPermission.S_MANAGE_ALL)
public void editTournament(Tournament tournament) {
tournamentFacade.merge(tournament);
}
@Override
@RolesAllowed(TournamentPermission.S_MANAGE_ALL)
public void deleteTournament(Tournament tournament) {
tournament = tournamentFacade.merge(tournament);
tournamentFacade.remove(tournament);
}
@Override
@RolesAllowed(TournamentPermission.S_PARTICIPATE)
public void createParticipation(TournamentParticipant tournamentParticipant) throws Exception {
Tournament t = tournamentFacade.find(tournamentParticipant.getTournament().getId());
Date currentTime = new Date();
if(t.getRegistrationOpensAt() != null && t.getRegistrationClosesAt() != null && currentTime.after(t.getRegistrationOpensAt()) && currentTime.before(t.getRegistrationClosesAt())) {
// Assert participant size is smaller than max
if(t.getParticipants().size() < t.getMaxParticipants()) {
TournamentTeamMember capt = null;
for(TournamentTeamMember ttm : tournamentParticipant.getTeamMembers()) if(ttm.getRole() == TournamentTeamMemberRole.CAPTAIN) capt=ttm;
// Assert team has a captain
if(capt != null) {
// Assert team has the correct number of players for a match
if(tournamentParticipant.getTeamMembers().size() >= tournamentParticipant.getTournament().getPlayersPerTeam()) {
tournamentParticipant = tournamentParticipantFacade.create(tournamentParticipant);
t.getParticipants().add(tournamentParticipant);
} else {
throw new Exception("tournament.not_enough_players");
}
} else {
throw new Exception("tournament.no_captain");
}
} else {
throw new Exception("tournament.participation_full");
}
} else {
throw new Exception("tournament.not_within_participation_time");
}
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public boolean hasParticipations(EventUser currentUser, Tournament tournament) {
for(TournamentParticipant tp : tournament.getParticipants()) {
for(TournamentTeamMember tm : tp.getTeamMembers()) {
EventUser eu = tm.getEventUser();
System.out.println(eu.getNick());
if(eu.equals(currentUser)) {
return true;
}
}
}
return false;
}
@Override
@RolesAllowed(TournamentPermission.S_VIEW)
public EventUser findAvailablePlayerForTournamentByLogin(Tournament t, String login) throws Exception {
EventUser u = eventUserFacade.findByLogin(login);
if(u != null) {
if(!hasParticipations(u,t))
return u;
else
throw new Exception("tournaments.participation_already_exists");
} else {
throw new Exception("tournaments.participated_user_not_found");
}
}
}
package fi.codecrew.moya.facade;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.ejb.LocalBean;
......@@ -9,7 +11,9 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.enums.TournamentStatus;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Tournament;
import fi.codecrew.moya.model.TournamentParticipant;
import fi.codecrew.moya.model.Tournament_;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.model.User_;
......@@ -30,5 +34,28 @@ public class TournamentFacade extends IntegerPkGenericFacade<Tournament> {
return getEm().createQuery(cq).getResultList();
}
public List<Tournament> getTournamentsInStatus(TournamentStatus status) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Tournament> cq = cb.createQuery(Tournament.class);
Root<Tournament> root = cq.from(Tournament.class);
cq.where(cb.equal(root.get(Tournament_.tournamentStatus), status));
return getEm().createQuery(cq).getResultList();
}
public List<Tournament> getTournamentsInStatusWithParticipationTimeIn(TournamentStatus status) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Tournament> cq = cb.createQuery(Tournament.class);
Root<Tournament> root = cq.from(Tournament.class);
cq.where(
cb.and(
cb.equal(root.get(Tournament_.tournamentStatus), status),
cb.between(cb.currentDate(), root.get(Tournament_.registrationOpensAt), root.get(Tournament_.registrationClosesAt))
)
);
return getEm().createQuery(cq).getResultList();
}
}
......@@ -4,8 +4,11 @@ import java.util.List;
import javax.ejb.Local;
import fi.codecrew.moya.enums.TournamentStatus;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Tournament;
import fi.codecrew.moya.model.TournamentGame;
import fi.codecrew.moya.model.TournamentParticipant;
import fi.codecrew.moya.model.TournamentRule;
@Local
......@@ -19,5 +22,12 @@ public interface TournamentBeanLocal {
TournamentRule findRule(Integer id);
void createTournament(Tournament tournament);
List<Tournament> getActiveTournaments();
Tournament getTournamentById(Integer tournamentId);
void editTournament(Tournament tournament);
void deleteTournament(Tournament tournament);
void createParticipation(TournamentParticipant tournamentParticipant) throws Exception;
boolean hasParticipations(EventUser currentUser, Tournament tournament);
EventUser findAvailablePlayerForTournamentByLogin(Tournament t, String login) throws Exception;
List<Tournament> getTournamentsInStatus(TournamentStatus status, boolean useTimeConstraints);
}
......@@ -72,11 +72,15 @@ public class Tournament extends GenericEntity implements Serializable {
@JoinColumn(name="rules", nullable=false)
private TournamentRule rules;
@OneToMany
@ManyToOne
@JoinColumn(name="parent_tournament")
private Tournament parentTournament;
@OneToMany(mappedBy="parentTournament")
@OrderBy("id ASC")
private List<Tournament> subTournaments;
@OneToMany
@OneToMany(mappedBy="tournament")
private List<TournamentParticipant> participants;
public Tournament() { super(); }
......
......@@ -43,7 +43,6 @@ public class TournamentMatch extends GenericEntity implements Serializable {
@Temporal(TemporalType.TIMESTAMP)
private Date endTime;
@OneToMany
@OrderBy("rank")
private List<TournamentMatchResult> matchResults;
......
......@@ -19,11 +19,14 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
public class TournamentParticipant extends GenericEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="team_name", nullable=true)
private String teamName;
@JoinColumn(name="participator")
private EventUser participator;
@OneToMany
private List<EventUser> teamMembers;
@OneToMany(mappedBy="team", cascade=CascadeType.PERSIST)
private List<TournamentTeamMember> teamMembers;
@ManyToOne
@JoinColumn(name="tournament")
......@@ -32,4 +35,37 @@ public class TournamentParticipant extends GenericEntity implements Serializable
public TournamentParticipant() {
super();
}
public EventUser getParticipator() {
return participator;
}
public void setParticipator(EventUser participator) {
this.participator = participator;
}
public List<TournamentTeamMember> getTeamMembers() {
return teamMembers;
}
public void setTeamMembers(List<TournamentTeamMember> teamMembers) {
this.teamMembers = teamMembers;
}
public Tournament getTournament() {
return tournament;
}
public void setTournament(Tournament tournament) {
this.tournament = tournament;
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
}
package fi.codecrew.moya.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
import fi.codecrew.moya.enums.TournamentTeamMemberRole;
@Entity
@Table(name="tournament_team_members")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class TournamentTeamMember extends GenericEntity implements Serializable {
private static final long serialVersionUID = 8511689754953929329L;
@Column(name="role", nullable=true)
@Enumerated(EnumType.STRING)
private TournamentTeamMemberRole role;
@JoinColumn(name="tournament_participant_id")
private TournamentParticipant team;
@JoinColumn(name="event_user_id")
private EventUser eventUser;
public EventUser getEventUser() {
return eventUser;
}
public void setEventUser(EventUser eventUser) {
this.eventUser = eventUser;
}
public TournamentParticipant getTeam() {
return team;
}
public void setTeam(TournamentParticipant team) {
this.team = team;
}
public TournamentTeamMemberRole getRole() {
return role;
}
public void setRole(TournamentTeamMemberRole role) {
this.role = role;
}
}
......@@ -11,6 +11,7 @@ import fi.codecrew.moya.enums.apps.PollPermission;
import fi.codecrew.moya.enums.apps.SalespointPermission;
import fi.codecrew.moya.enums.apps.ShopPermission;
import fi.codecrew.moya.enums.apps.TerminalPermission;
import fi.codecrew.moya.enums.apps.TournamentPermission;
import fi.codecrew.moya.enums.apps.UserPermission;
public enum BortalApplication {
......@@ -25,6 +26,7 @@ public enum BortalApplication {
COMPO(CompoPermission.class),
EVENT(EventPermission.class),
LICENSE(LicensePermission.class),
TOURNAMENT(TournamentPermission.class)
;
......
package fi.codecrew.moya.enums;
public enum TournamentTeamMemberRole {
CAPTAIN,
PLAYER,
BACKUP_PLAYER
;
private final String key;
private static final String I18N_HEADER = "bortalApplication.tournamentteammemberrole.";
private TournamentTeamMemberRole() {
key = I18N_HEADER + name();
}
public String getI18nKey() {
return key;
}
}
package fi.codecrew.moya.enums.apps;
import fi.codecrew.moya.enums.BortalApplication;
public enum TournamentPermission implements IAppPermission {
VIEW,
MANAGE_ALL,
PARTICIPATE
;
public static final String S_VIEW = "TOURNAMENT/VIEW";
public static final String S_MANAGE_ALL = "TOURNAMENT/MANAGE_ALL";
public static final String S_PARTICIPATE = "TOURNAMENT/PARTICIPATE";
private final String fullName;
private final String key;
private static final String I18N_HEADER = "bortalApplication.tournament.";
private TournamentPermission() {
key = I18N_HEADER + name();
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.TOURNAMENT;
}
@Override
public String getFullName() {
return fullName;
}
@Override
public String getI18nKey() {
return key;
}
}
package fi.codecrew.moya.utilities.jsf;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import fi.codecrew.moya.utilities.I18n;
public class MessageHelper {
public static void msg(String message, FacesMessage.Severity severity) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, I18n.get(message), null));
}
public static void err(String message) {
msg(message, FacesMessage.SEVERITY_ERROR);
}
public static void info(String message) {
msg(message, FacesMessage.SEVERITY_INFO);
}
public static void fatal(String message) {
msg(message, FacesMessage.SEVERITY_FATAL);
}
public static void warn(String message) {
msg(message, FacesMessage.SEVERITY_WARN);
}
}
......@@ -81,7 +81,7 @@
</h:selectOneMenu>
<br />
<h:outputText value="#{i18n['tournaments.players_per_match']}" />
<h:outputText value="#{i18n['tournaments.max_participants']}" />
<h:panelGrid columns="1" style="margin-bottom:10px">
<p:inputText id="maxPartSlider" value="#{tournamentCreateView.tournament.maxParticipants}" />
<p:slider for="maxPartSlider" />
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
</f:metadata>
<ui:define name="content">
<h1>#{i18n['tournaments.admin.remove_title']}</h1>
<p>#{i18n['tournaments.admin.remove_confirmation_text']}</p>
<h:form>
<p:commandButton value="#{i18n['tournament.admin.delete_cancel']}" action="#{tournamentDeleteView.cancel}" />
<p:commandButton value="#{i18n['tournament.admin.delete_confirm']}" action="#{tournamentDeleteView.delete}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
</f:metadata>
<ui:define name="content">
<h1>#{i18n['tournaments.admin.create_tournament']}</h1>
<h:form>
<h2>#{i18n['tournaments.tournament_details']}</h2>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['tournaments.tournament_name']}" />
<p:inputText value="#{tournamentEditView.tournament.tournamentName}" />
<h:outputText value="#{i18n['tournaments.max_participants']}" />
<h:panelGroup>
<p:inputText id="maxPartSlider" value="#{tournamentEditView.tournament.maxParticipants}" />
<p:slider for="maxPartSlider" />
</h:panelGroup>
</h:panelGrid>
<h2>#{i18n['tournaments.admin.registration_time_constraints']}</h2>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['tournaments.registration_opens']}" />
<h:outputText value="#{i18n['tournaments.registration_closes']}" />
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentEditView.tournament.registrationOpensAt}"/>
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentEditView.tournament.registrationClosesAt}"/>
</h:panelGrid>
<h2>#{i18n['tournaments.admin.begin_time_constraints']}</h2>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['tournaments.start_time']}" />
<p:calendar stepHour="1" stepMinute="10" pattern="dd.MM.yyyy hh:mm" value="#{tournamentEditView.tournament.beginsAt}"/>
</h:panelGrid>
<p:commandButton value="#{i18n['tournaments.admin.cancel_edits']}" action="#{tournamentEditView.cancel}"/>
<p:commandButton value="#{i18n['tournaments.admin.edit_tournament']}" action="#{tournamentEditView.commit}"/>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -5,14 +5,13 @@
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<!-- <f:event type="preRenderView" listener="#{userOverviewView.initView()}" /> -->
</f:metadata>
<ui:define name="content">
<h1>#{i18n['tournaments.admin.title']}</h1>
<p>#{i18n['tournaments.admin.description']}</p>
<h2>#{i18n['tournaments.active_tournaments']}</h2>
<h:form>
<p:dataTable value="#{tournamentAdminView.activeTournaments}" var="tournament">
<p:column>
<f:facet name="header">
......@@ -56,7 +55,28 @@
</f:facet>
<h:outputText value="#{tournament.rules.name}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.participation_time']}" />
</f:facet>
<h:outputText value="#{tournament.registrationOpensAt}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
-
<h:outputText value="#{tournament.registrationClosesAt}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.admin.control']}" />
</f:facet>
<p:commandButton value="#{i18n['tournament.admin.edit']}" action="#{tournamentEditView.showEdit(tournament.id)}"/>
<p:commandButton value="#{i18n['tournament.admin.delete']}" action="#{tournamentDeleteView.showConfirm(tournament.id)}"/>
</p:column>
</p:dataTable>
</h:form>
<h:form>
<p:commandButton value="#{i18n['tournament.admin.create']}" action="#{tournamentAdminView.create}" />
</h:form>
......
......@@ -5,15 +5,94 @@
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<!-- <f:event type="preRenderView" listener="#{userOverviewView.initView()}" /> -->
</f:metadata>
<ui:define name="content">
<h1>Tournaments</h1>
<h:form>
<p:messages autoUpdate="true" redisplay="false"></p:messages>
<h1>#{i18n['tournaments.title']}</h1>
<p>#{i18n['tournaments.description']}</p>
<h2>#{i18n['tournaments.open_tournaments']}</h2>
<p:dataTable value="#{tournamentListView.setupPhaseTournaments}" var="tournament">
<p:column style="width:2%">
<p:rowToggler />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.name']}" />
</f:facet>
<h:outputText value="#{tournament.tournamentName}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.game']}" />
</f:facet>
<h:outputText value="#{tournament.tournamentGame.name}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.status']}" />
</f:facet>
<h:outputText value="#{i18n[tournament.tournamentStatus.i18nKey]}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.type']}" />
</f:facet>
<h:outputText value="#{i18n[tournament.tournamentType.i18nKey]}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.fillamount']}" />
</f:facet>
<h:outputText value="#{tournament.participants.size()}/#{tournament.maxParticipants}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.participation_time']}" />
</f:facet>
<h:outputText value="#{tournament.registrationOpensAt}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
-
<h:outputText value="#{tournament.registrationClosesAt}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.rules']}" />
</f:facet>
<h:link value="#{tournament.rules.name}" outcome="/tournaments/showrules.xhtml">
<f:param name="tournament_id" value="#{tournament.id}" />
</h:link>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.control']}" />
</f:facet>
<h:panelGroup>
<p:commandButton value="#{i18n['tournament.participate']}" action="#{tournamentParticipateView.participate(tournament.id)}" rendered="#{tournament.participants.size() lt tournament.maxParticipants}" ajax="false"/>
<h:outputText value="#{i18n['tournament.full']}" rendered="#{tournament.participants.size() ge tournament.maxParticipants}"/>
</h:panelGroup>
</p:column>
<p:rowExpansion>
<h:panelGrid id="display" columns="2" cellpadding="4" styleClass=" ui-widget-content grid">
<h:outputText value="#{i18n['tournament.participants']}" />
<h:panelGroup>
<ul>
<ui:repeat var="participant" value="#{tournament.participants}">
<li>
<h:outputText value="#{participant.teamName}" rendered="#{not empty participant.teamName}" />
<h:outputText value="#{participant.participator.user.nick}" rendered="#{empty participant.teamName}" />
</li>
</ui:repeat>
</ul>
</h:panelGroup>
</h:panelGrid>
</p:rowExpansion>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
</f:metadata>
<ui:define name="content">
<h1>#{i18n['tournaments.participate_title']} #{tournamentParticipateView.tournament.tournamentName}</h1>
<p>#{i18n['tournaments.participate_description']}</p>
<h2>#{i18n['tournaments.participate_rules']}</h2>
<p><h:outputText value="#{tournamentParticipateView.tournament.rules.rules}" escape="false" /></p>
<h2>#{i18n['tournaments.participate_team_members']}</h2>
<p:messages autoUpdate="true" redisplay="false"></p:messages>
<h:form>
<h3>#{i18n['tournaments.team_details']}</h3>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['tournament.team_name']}" />
<p:inputText value="#{tournamentParticipateView.tournamentParticipant.teamName}" required="true" requiredMessage="#{i18n['tournament.team_name_required']}" />
</h:panelGrid>
<h3>#{i18n['tournaments.participate_actual_team_members']}</h3>
<p:dataTable id="teammember_table" value="#{tournamentParticipateView.players}" var="teamMember">
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.teammember.name']}" />
</f:facet>
<h:outputText value="#{teamMember.eventUser.user.nick}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.control']}" />
</f:facet>
<h:panelGroup>
<p:commandButton value="#{i18n['tournament.teammember.delete']}" action="#{tournamentParticipateView.removePlayerFromTeam(teamMember.eventUser.id)}" update="@form" />
</h:panelGroup>
</p:column>
</p:dataTable>
<h:panelGrid columns="3" rendered="#{tournamentParticipateView.teamMax > tournamentParticipateView.playerCount}">
<h:outputText value="#{i18n['tournament.teammember.login']}" />
<p:inputText value="#{tournamentParticipateView.selectedPlayerLogin}" />
<p:commandButton value="#{i18n['tournaments.add_player_to_team']}" action="#{tournamentParticipateView.addMainPlayerToTeam}" update="@form" />
</h:panelGrid>
<h:panelGroup rendered="#{tournamentParticipateView.backupMax > 0}">
<h3>#{i18n['tournaments.participate_backup_team_members']}</h3>
<p:dataTable id="backup_teammember_table" value="#{tournamentParticipateView.backupPlayers}" var="teamMember">
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.teammember.name']}" />
</f:facet>
<h:outputText value="#{teamMember.eventUser.user.nick}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{i18n['tournament.control']}" />
</f:facet>
<h:panelGroup>
<p:commandButton value="#{i18n['tournament.teammember.delete']}" action="#{tournamentParticipateView.removePlayerFromTeam(teamMember.eventUser.id)}" update="@form" />
</h:panelGroup>
</p:column>
</p:dataTable>
<h:panelGrid columns="3" rendered="#{tournamentParticipateView.backupMax > tournamentParticipateView.backupPlayerCount}">
<h:outputText value="#{i18n['tournament.teammember.login']}" />
<p:inputText value="#{tournamentParticipateView.selectedBackupPlayerLogin}" />
<p:commandButton value="#{i18n['tournaments.add_backup_player_to_team']}" action="#{tournamentParticipateView.addBackupPlayerToTeam}" update="@form" />
</h:panelGrid>
</h:panelGroup>
<h3>#{i18n['tournaments.participate_team_counters']}</h3>
<h:panelGrid columns="2">
<h:panelGroup>
#{i18n['tournaments.participate_player_count']}:
#{tournamentParticipateView.playerCount}/#{tournamentParticipateView.teamMax}
</h:panelGroup>
<h:panelGroup>
#{i18n['tournaments.participate_backup_player_count']}:
#{tournamentParticipateView.backupPlayerCount}/#{tournamentParticipateView.backupMax}
</h:panelGroup>
</h:panelGrid>
<p:commandButton value="#{i18n['tournaments.cancel_participation']}" action="#{tournamentParticipateView.cancelParticipation}" />
<p:commandButton value="#{i18n['tournaments.accept_rules_and_participate']}" action="#{tournamentParticipateView.saveParticipation}" disabled="#{tournamentParticipateView.teamMax != tournamentParticipateView.playerCount}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
</f:metadata>
<ui:define name="content">
<h1>#{i18n['tournaments.participate_title']} #{tournamentParticipateView.tournament.tournamentName}</h1>
<p>#{i18n['tournaments.participate_description']}</p>
<h2>#{i18n['tournaments.participate_rules']}</h2>
<p><h:outputText value="#{tournamentParticipateView.tournament.rules.rules}" escape="false" /></p>
<h:form>
<p:commandButton value="#{i18n['tournaments.cancel_participation']}" action="#{tournamentParticipateView.cancelParticipation}" />
<p:commandButton value="#{i18n['tournaments.accept_rules_and_participate']}" action="#{tournamentParticipateView.saveParticipation}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:viewParam name="tournament_id" value="#{tournamentRulesView.tournamentId}"/>
<f:event type="preRenderView" listener="#{tournamentRulesView.init}" />
</f:metadata>
<ui:define name="content">
<p>
<h:link outcome="/tournaments/index.xhtml" value="#{i18n['tournaments.back_to_tournament_list']}" />
</p>
<h1>#{i18n['tournament.rules_for_tournament']} #{tournamentRulesView.tournament.tournamentName} (#{tournamentRulesView.tournament.rules.name})</h1>
<h:outputText value="#{tournamentRulesView.tournament.rules.rules}" escape="false" />
<p>
<h:link outcome="/tournaments/index.xhtml" value="#{i18n['tournaments.back_to_tournament_list']}" />
</p>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -1008,40 +1008,88 @@ topnavi.usermgmt = Users
topnavi.userplaces = Computer Places
topnavi.usershop = Shop
tournament.admin.control = Control
tournament.admin.create = Create new tournament
tournament.admin.delete = Delete
tournament.admin.delete_cancel = Cancel Deletion
tournament.admin.delete_confirm = Confirm Deletion
tournament.admin.edit = Edit
tournament.already_participated_into_tournament = Already participated into the selected tournament!
tournament.backup_player_successfully_added_to_team = Backup player added
tournament.cannot_add_anon_user = Cannot add anonymous user
tournament.cannot_remove_captain = Cannot remove the team captain (you)
tournament.control = Control
tournament.create = Create tournament
tournament.edit = Edit tournament
tournament.fillamount = Places taken
tournament.game = Game
tournament.name = Tournament name
tournament.not_within_participation_time = Not within the participation time for the tournament
tournament.participants = Participants
tournament.participate = Participate
tournament.participation_failed = Participation failed
tournament.participation_success = Successfully participated into tournament
tournament.participation_time = Participation time
tournament.player_already_exists_in_team = Player already exists in the team
tournament.player_successfully_added_to_team = Player added to the team
tournament.playerspermatch_slash_teamsize = Players / team size
tournament.rules = Rules
tournament.rules_for_tournament = Rules for tournament
tournament.status = Status
tournament.team_name = Team Name
tournament.team_name_required = Team name is required
tournament.teammember.delete = Delete
tournament.teammember.login = Login
tournament.teammember.name = Name
tournament.type = Type
tournaments.accept_rules_and_participate = Accept rules and participate
tournaments.active_tournaments = Active tournaments
tournaments.add_backup_player_to_team = Add backup player
tournaments.add_player_to_team = Add player to team
tournaments.admin.begin_time_constraints = Tournament begin time
tournaments.admin.cancel_edits = Cancel Edits
tournaments.admin.create = Create tournament
tournaments.admin.create_a_game = Create a game
tournaments.admin.create_new_ruleset = Create a new ruleset
tournaments.admin.create_tournament = Create a tournament
tournaments.admin.description = Manage tournaments
tournaments.admin.edit = Edit tournament
tournaments.admin.edit_tournament = Edit Tournament
tournaments.admin.game_description = Game description
tournaments.admin.game_name = Game name
tournaments.admin.registration_time_constraints = Registration time constraints
tournaments.admin.remove_confirmation_text = Are you sure you want to remove this tournament? THIS CANNOT BE REVERSED!
tournaments.admin.remove_title = Confirm Tournament Removal
tournaments.admin.rules = Rules
tournaments.admin.select_a_game = Select a game
tournaments.admin.select_a_ruleset = Select a ruleset
tournaments.admin.set_time_constraints = Set time constraints
tournaments.admin.title = Tournaments management
tournaments.back_to_tournament_list = Back to tournament list
tournaments.backup_players = Max backup players
tournaments.cancel_participation = Cancel participation
tournaments.description = You can view & participate into tournaments from this page.
tournaments.max_participants = Max participants
tournaments.open_tournaments = Open tournaments
tournaments.participate_actual_team_members = Actual team members
tournaments.participate_backup_player_count = Backup Player Count
tournaments.participate_backup_team_members = Backup team members
tournaments.participate_description = You may participate to the tournament from this page.
tournaments.participate_player_count = Player Count
tournaments.participate_rules = Rules
tournaments.participate_team_counters = Counters
tournaments.participate_team_members = Team members for participation
tournaments.participate_title = Participate to tournament
tournaments.players_per_match = Max players per match
tournaments.registration_closes = Set registration closing time
tournaments.registration_opens = Set registration opening time
tournaments.ruleset_description = Ruleset description
tournaments.ruleset_name = Ruleset name
tournaments.ruleset_rules = Tournament ruleset
tournaments.start_time = Start Time
tournaments.team_details = Team Details
tournaments.title = Tournaments
tournaments.tournament_details = Tournament details
tournaments.tournament_name = Tournament name
tournaments.tournament_type = Tournament type
......
......@@ -993,40 +993,88 @@ topnavi.usermgmt = K\u00E4ytt\u00E4j\u00E4t
topnavi.userplaces = Konepaikat
topnavi.usershop = Kauppa
tournament.admin.control = Hallitse
tournament.admin.create = Luo uusi turnaus
tournament.admin.delete = Poista
tournament.admin.delete_cancel = Peruuta
tournament.admin.delete_confirm = Vahvista Poisto
tournament.admin.edit = Muokkaa
tournament.already_participated_into_tournament = Olet jo osallistunut valittuun turnaukseen!
tournament.backup_player_successfully_added_to_team = Varapelaaja lis\u00E4tty
tournament.cannot_add_anon_user = Ei voida lis\u00E4t\u00E4 anomuumia
tournament.cannot_remove_captain = Kapteenia (sinua) ei voi poistaa joukkueesta
tournament.control = Hallitse
tournament.create = Luo turnaus
tournament.edit = Muokkaa turnausta
tournament.fillamount = Osallistujaa ilmottautunut
tournament.game = Peli
tournament.name = Turnauksen nimi
tournament.not_within_participation_time = Turnauksen ilmoittautuminen ei ole aktiivinen
tournament.participants = Osallistujat
tournament.participate = Osallistu
tournament.participation_failed = Turnausilmoittautuminen ep\u00E4onnistui
tournament.participation_success = Osallistuminen vastaanotettu
tournament.participation_time = Osallistumisaika
tournament.player_already_exists_in_team = Pelaaja on jo lis\u00E4tty joukkueeseen
tournament.player_successfully_added_to_team = Pelaaja lis\u00E4tty joukkueeseen
tournament.playerspermatch_slash_teamsize = Pelaajat / tiimin koko
tournament.rules = S\u00E4\u00E4nn\u00F6t
tournament.rules_for_tournament = S\u00E4\u00E4nn\u00F6t turnaukselle
tournament.status = Tilanne
tournament.team_name = Joukkueen nimi
tournament.team_name_required = Joukkueen nimi vaaditaan
tournament.teammember.delete = Poista
tournament.teammember.login = Kirjautumistunnus
tournament.teammember.name = Nimi
tournament.type = Tyyppi
tournaments.accept_rules_and_participate = Hyv\u00E4ksyn s\u00E4\u00E4nn\u00F6t ja osallistun
tournaments.active_tournaments = Aktiiviset turnaukset
tournaments.add_backup_player_to_team = Lis\u00E4\u00E4 varaj\u00E4sen
tournaments.add_player_to_team = Lis\u00E4\u00E4 pelaaja joukkueeseen
tournaments.admin.begin_time_constraints = Turnauksen aloitusaika
tournaments.admin.cancel_edits = Peruuta Muokkaukset
tournaments.admin.create = Luo turnaus
tournaments.admin.create_a_game = Luo peli
tournaments.admin.create_new_ruleset = Luo uusi s\u00E4\u00E4nn\u00F6st\u00F6
tournaments.admin.create_tournament = Luo turnaus
tournaments.admin.description = Hallinnoi turnauksia
tournaments.admin.edit = Muokkaa turnausta
tournaments.admin.edit_tournament = Muokkaa turnausta
tournaments.admin.game_description = Pelin kuvaus
tournaments.admin.game_name = Pelin nimi
tournaments.admin.registration_time_constraints = Rekister\u00F6itymisaika
tournaments.admin.remove_confirmation_text = Oletko varma ett\u00E4 haluat poistaa turnauksen? T\u00C4T\u00C4 EI VOI PERUUTTAA!
tournaments.admin.remove_title = Vahvista turnauksen poisto
tournaments.admin.rules = S\u00E4\u00E4nn\u00F6t
tournaments.admin.select_a_game = Valitse peli
tournaments.admin.select_a_ruleset = Valitse s\u00E4\u00E4nn\u00F6st\u00F6
tournaments.admin.set_time_constraints = Aseta aikarajat
tournaments.admin.title = Turnauksien hallinnointi
tournaments.back_to_tournament_list = Takaisin turnauslistaukseen
tournaments.backup_players = Maksimim\u00E4\u00E4r\u00E4 varapelaajia
tournaments.cancel_participation = Peruuta osallistuminen
tournaments.description = Voit osallistua sek\u00E4 katselmoida turnauksia t\u00E4ll\u00E4 sivulla.
tournaments.max_participants = Maksimiosallistujam\u00E4\u00E4r\u00E4
tournaments.open_tournaments = Avoimet turnaukset
tournaments.participate_actual_team_members = Varsinaiset joukkueen j\u00E4senet
tournaments.participate_backup_player_count = Varapelaajat
tournaments.participate_backup_team_members = Joukkueen varaj\u00E4senet
tournaments.participate_description = Voit osallistua turnaukseen t\u00E4ll\u00E4 sivulla.
tournaments.participate_player_count = Pelaajam\u00E4\u00E4r\u00E4
tournaments.participate_rules = S\u00E4\u00E4nn\u00F6t
tournaments.participate_team_counters = Laskurit
tournaments.participate_team_members = Valitse joukkueesi
tournaments.participate_title = Osallistu turnaukseen
tournaments.players_per_match = Maksimim\u00E4\u00E4r\u00E4 pelaajia matchissa
tournaments.registration_closes = Rekister\u00F6itymisen sulkeutumisaika
tournaments.registration_opens = Rekister\u00F6itymisen aukeamisaika
tournaments.ruleset_description = S\u00E4\u00E4nn\u00F6st\u00F6n kuvaus
tournaments.ruleset_name = S\u00E4\u00E4nn\u00F6st\u00F6n nimi
tournaments.ruleset_rules = Turnauksen s\u00E4\u00E4nn\u00F6t
tournaments.start_time = Aloitusaika
tournaments.team_details = Joukkuekohtaiset tiedot
tournaments.title = Turnaukset
tournaments.tournament_details = Turnauksen yksityiskohdat
tournaments.tournament_name = Turnauksen nimi
tournaments.tournament_type = Turnauksen tyyppi
......
package fi.codecrew.moya.web.cdiview.tournaments;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedProperty;
import javax.inject.Named;
import fi.codecrew.moya.beans.TournamentBeanLocal;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.utilities.jsf.MessageHelper;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class TournamentDeleteView extends GenericCDIView {
private static final long serialVersionUID = 7283815262506163537L;
private Integer id = null;
@EJB private TournamentBeanLocal tournamentBean;
public String showConfirm(Integer id) {
this.beginConversation();
this.id = id;
return "/tournaments/admin/delete.xhtml";
}
public String delete() {
if(this.id != null) {
try {
tournamentBean.deleteTournament(tournamentBean.getTournamentById(this.id));
MessageHelper.info(I18n.get("tournament.admin.tournament_deleted_successfully"));
} catch(Exception e) {
MessageHelper.err(I18n.get("tournament.admin.tournament_delete_failed"));
}
} else {
MessageHelper.err(I18n.get("tournament.admin.tournament_delete_failed"));
}
this.endConversation();
return "/tournaments/admin/index.xhtml";
}
public String cancel() {
this.endConversation();
return "/tournaments/admin/index.xhtml";
}
}
package fi.codecrew.moya.web.cdiview.tournaments;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import fi.codecrew.moya.beans.TournamentBeanLocal;
import fi.codecrew.moya.model.Tournament;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.utilities.jsf.MessageHelper;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class TournamentEditView extends GenericCDIView {
@EJB private TournamentBeanLocal tournamentBean;
private Tournament tournament = null;
public String showEdit(Integer tournamentId) {
this.beginConversation();
this.setTournament(tournamentBean.getTournamentById(tournamentId));
return "/tournaments/admin/edit.xhtml";
}
public String commit() {
if(this.tournament != null) {
try {
this.tournamentBean.editTournament(tournament);
MessageHelper.info(I18n.get("tournament.admin.tournament_edited_successfully"));
} catch(Exception e) {
MessageHelper.err(I18n.get("tournament.admin.tournament_edit_failed"));
}
} else {
MessageHelper.err(I18n.get("tournament.admin.tournament_edit_failed"));
}
this.endConversation();
return "/tournaments/admin/index.xhtml";
}
public String cancel() {
this.endConversation();
return "/tournaments/admin/index.xhtml";
}
public Tournament getTournament() {
return tournament;
}
public void setTournament(Tournament tournament) {
this.tournament = tournament;
}
}
package fi.codecrew.moya.web.cdiview.tournaments;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import fi.codecrew.moya.beans.TournamentBeanLocal;
import fi.codecrew.moya.enums.TournamentStatus;
import fi.codecrew.moya.model.Tournament;
@Named
@RequestScoped
public class TournamentListView {
@EJB private TournamentBeanLocal tournamentBean;
public List<Tournament> getSetupPhaseTournaments() {
return tournamentBean.getTournamentsInStatus(TournamentStatus.SETUP, true);
}
public List<Tournament> getInProgressTournaments() {
return tournamentBean.getTournamentsInStatus(TournamentStatus.IN_PROGRESS, false);
}
public List<Tournament> getCompletedTournaments() {
return tournamentBean.getTournamentsInStatus(TournamentStatus.COMPLETED, false);
}
}
package fi.codecrew.moya.web.cdiview.tournaments;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.TournamentBeanLocal;
import fi.codecrew.moya.enums.TournamentTeamMemberRole;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Tournament;
import fi.codecrew.moya.model.TournamentParticipant;
import fi.codecrew.moya.model.TournamentTeamMember;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.utilities.jsf.MessageHelper;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class TournamentParticipateView extends GenericCDIView {
private static final long serialVersionUID = 8002140932622853455L;
private Tournament tournament;
private TournamentParticipant tournamentParticipant;
@EJB private TournamentBeanLocal tournamentBean;
@EJB private PermissionBeanLocal permissionBean;
private String selectedPlayerLogin;
private String selectedBackupPlayerLogin;
public Integer getTeamMax() {
return tournament.getPlayersPerMatch();
}
public Integer getBackupMax() {
return (tournament.getPlayersPerTeam() - tournament.getPlayersPerMatch());
}
public Integer getPlayerCount() {
return getPlayers().size();
}
public Integer getBackupPlayerCount() {
return getBackupPlayers().size();
}
public void removePlayerFromTeam(Integer euid) {
TournamentTeamMember ttcand = null;
for(TournamentTeamMember ttm : tournamentParticipant.getTeamMembers()) {
if(ttm.getEventUser().getId() == euid) {
ttcand = ttm;
}
}
if(ttcand != null) {
if(ttcand.getRole() == TournamentTeamMemberRole.CAPTAIN) {
MessageHelper.err("tournament.cannot_remove_captain");
} else {
tournamentParticipant.getTeamMembers().remove(ttcand);
}
}
}
public String participate(Integer tournamentId) {
tournament = tournamentBean.getTournamentById(tournamentId);
if(tournamentBean.hasParticipations(permissionBean.getCurrentUser(), tournament)) {
MessageHelper.err("tournament.already_participated_into_tournament");
return "/tournaments/index.xhtml";
}
this.beginConversation();
if(tournament != null) {
tournamentParticipant = new TournamentParticipant();
tournamentParticipant.setTournament(tournament);
tournamentParticipant.setParticipator(permissionBean.getCurrentUser());
tournamentParticipant.setTeamMembers(new ArrayList<TournamentTeamMember>());
TournamentTeamMember captain = new TournamentTeamMember();
captain.setRole(TournamentTeamMemberRole.CAPTAIN);
captain.setEventUser(permissionBean.getCurrentUser());
captain.setTeam(tournamentParticipant);
tournamentParticipant.getTeamMembers().add(captain);
if(tournament.getPlayersPerTeam() == 1) {
return "/tournaments/participate_single.xhtml";
} else {
return "/tournaments/participate_multi.xhtml";
}
} else {
return "/tournaments/index.xhtml";
}
}
public String addMainPlayerToTeam() {
try {
EventUser p = tournamentBean.findAvailablePlayerForTournamentByLogin(this.tournament, selectedPlayerLogin);
for(TournamentTeamMember member : tournamentParticipant.getTeamMembers())
if(member.getEventUser().equals(p))
throw new Exception("tournament.player_already_exists_in_team");
if(p.isAnonymous()) {
throw new Exception("tournament.cannot_add_anon_user");
}
TournamentTeamMember ttm = new TournamentTeamMember();
ttm.setEventUser(p);
ttm.setRole(TournamentTeamMemberRole.PLAYER);
ttm.setTeam(tournamentParticipant);
this.tournamentParticipant.getTeamMembers().add(ttm);
MessageHelper.info("tournament.player_successfully_added_to_team");
this.selectedPlayerLogin = "";
} catch (Exception e) {
MessageHelper.err(e.getMessage());
}
return "";
}
public String addBackupPlayerToTeam() {
try {
EventUser p = tournamentBean.findAvailablePlayerForTournamentByLogin(this.tournament, selectedBackupPlayerLogin);
for(TournamentTeamMember member : tournamentParticipant.getTeamMembers())
if(member.getEventUser().equals(p))
throw new Exception("tournament.player_already_exists_in_team");
if(p.isAnonymous()) {
throw new Exception("tournament.cannot_add_anon_user");
}
TournamentTeamMember ttm = new TournamentTeamMember();
ttm.setEventUser(p);
ttm.setRole(TournamentTeamMemberRole.BACKUP_PLAYER);
ttm.setTeam(tournamentParticipant);
this.tournamentParticipant.getTeamMembers().add(ttm);
MessageHelper.info("tournament.backup_player_successfully_added_to_team");
this.selectedBackupPlayerLogin = "";
} catch (Exception e) {
MessageHelper.err(e.getMessage());
}
return "";
}
public List<TournamentTeamMember> getPlayers() {
ArrayList<TournamentTeamMember> ttms = new ArrayList<>();
for(TournamentTeamMember ttm : tournamentParticipant.getTeamMembers()) {
if(ttm.getRole() == TournamentTeamMemberRole.CAPTAIN || ttm.getRole() == TournamentTeamMemberRole.PLAYER) {
ttms.add(ttm);
}
}
return ttms;
}
public List<TournamentTeamMember> getBackupPlayers() {
ArrayList<TournamentTeamMember> ttms = new ArrayList<>();
for(TournamentTeamMember ttm : tournamentParticipant.getTeamMembers()) {
if(ttm.getRole() == TournamentTeamMemberRole.BACKUP_PLAYER) {
ttms.add(ttm);
}
}
return ttms;
}
public String saveParticipation() {
if(tournamentParticipant != null) {
try {
tournamentBean.createParticipation(tournamentParticipant);
MessageHelper.info("tournament.participation_success");
} catch(Exception e) {
MessageHelper.err(e.getMessage());
}
} else {
MessageHelper.err("tournament.participation_failed");
}
this.endConversation();
return "/tournaments/index.xhtml";
}
public String cancelParticipation() {
this.endConversation();
return "/tournaments/index.xhtml";
}
public Tournament getTournament() {
return tournament;
}
public void setTournament(Tournament tournament) {
this.tournament = tournament;
}
public TournamentParticipant getTournamentParticipant() {
return this.tournamentParticipant;
}
public void setTournamentParticipant(TournamentParticipant tp) {
this.tournamentParticipant = tp;
}
public String getSelectedPlayerLogin() {
return selectedPlayerLogin;
}
public void setSelectedPlayerLogin(String selectedPlayerLogin) {
this.selectedPlayerLogin = selectedPlayerLogin;
}
public String getSelectedBackupPlayerLogin() {
return selectedBackupPlayerLogin;
}
public void setSelectedBackupPlayerLogin(String selectedBackupPlayerLogin) {
this.selectedBackupPlayerLogin = selectedBackupPlayerLogin;
}
}
package fi.codecrew.moya.web.cdiview.tournaments;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedProperty;
import javax.inject.Named;
import fi.codecrew.moya.beans.TournamentBeanLocal;
import fi.codecrew.moya.enums.TournamentStatus;
import fi.codecrew.moya.model.Tournament;
@Named
@RequestScoped
public class TournamentRulesView {
@EJB private TournamentBeanLocal tournamentBean;
private Tournament tournament;
private Integer tournamentId;
public void init() {
tournament = tournamentBean.getTournamentById(tournamentId);
}
public Integer getTournamentId() {
return tournamentId;
}
public void setTournamentId(Integer tournamentId) {
this.tournamentId = tournamentId;
}
public Tournament getTournament() {
return tournament;
}
public void setTournament(Tournament tournament) {
this.tournament = tournament;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!