package is.idega.idegaweb.golf.tournament.presentation; import is.idega.idegaweb.golf.entity.Member; import is.idega.idegaweb.golf.entity.MemberHome; import is.idega.idegaweb.golf.entity.Tournament; import is.idega.idegaweb.golf.entity.TournamentGroup; import is.idega.idegaweb.golf.entity.TournamentGroupHome; import is.idega.idegaweb.golf.entity.TournamentHome; import is.idega.idegaweb.golf.entity.TournamentTour; import is.idega.idegaweb.golf.entity.TournamentTourHome; import is.idega.idegaweb.golf.entity.TournamentTourMember; import is.idega.idegaweb.golf.entity.TournamentTourMemberHome; import is.idega.idegaweb.golf.entity.TournamentTourResultMember; import is.idega.idegaweb.golf.presentation.GolfBlock; import java.text.DecimalFormat; import java.util.Collection; import java.util.Iterator; import java.util.Locale; import java.util.Vector; import javax.ejb.FinderException; import com.ibm.icu.util.StringTokenizer; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.data.IDORuntimeException; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.Form; import com.idega.util.IWTimestamp; public class TournamentTourResults extends GolfBlock { private TournamentTour tour = null; private int tournamentGroupID = -1; private int numberOfMembersToDisplay = -1; private String width = null; private boolean showTournamentDropdown = true; private boolean useFormParameters = true; private boolean showTournamentGroupDropdown = true; private boolean showPlace = true; private static final String PARAMETER_TOURNAMENT_IDS = "ttr_ptmids"; private static final String PARAMETER_TOURNAMENT_GROUP_ID = "ttr_ptmgrid"; private static DecimalFormat format = new DecimalFormat("0.00"); public void main(IWContext modinfo) throws Exception { if (tour != null) { String currentTournamentIDS = modinfo.getParameter(PARAMETER_TOURNAMENT_IDS); Collection tournamentIDs = new Vector(); if (currentTournamentIDS != null && useFormParameters) { if (currentTournamentIDS.startsWith("__")) { currentTournamentIDS = currentTournamentIDS.replaceAll("__", ""); StringTokenizer nizer = new StringTokenizer(currentTournamentIDS, "_"); while (nizer.hasMoreTokens()) { tournamentIDs.add(new Integer(nizer.nextToken())); } } else if (!currentTournamentIDS.equals("-1")) { tournamentIDs.add(new Integer(currentTournamentIDS)); } else { tournamentIDs = getTourHome().getTournamentIDs(tour); } } else { tournamentIDs = getTourHome().getTournamentIDs(tour); } String grpID = modinfo.getParameter(PARAMETER_TOURNAMENT_GROUP_ID); if (grpID != null && useFormParameters) { tournamentGroupID = Integer.parseInt(grpID); } Table table = new Table(); if (width != null) { table.setWidth(width); } int row = 1; Table dropdownTable = new Table(); dropdownTable.setCellpadding(0); dropdownTable.setCellspacing(0); dropdownTable.setWidth("100%"); if (showTournamentGroupDropdown) { int[] ids = getTourMemberHome().getTournamentGroupsInUse(tour); if (ids != null && ids.length > 0) { DropdownMenu groups = (DropdownMenu) getStyledInterface(new DropdownMenu(PARAMETER_TOURNAMENT_GROUP_ID)); groups.keepStatusOnAction(true); groups.setToSubmit(true); for (int i = 0; i < ids.length; i++) { if (i == 0 && tournamentGroupID < 0) { tournamentGroupID = ids[i]; } TournamentGroup group = getTournamentGroupHome().findByPrimaryKey(ids[i]); groups.addMenuElement(ids[i], group.getName()); } groups.setSelectedElement(tournamentGroupID); dropdownTable.add(groups, 1, 1); } else { showTournamentGroupDropdown = false; } } if (showTournamentDropdown) { DropdownMenu tournaments = (DropdownMenu) getStyledInterface(new DropdownMenu(PARAMETER_TOURNAMENT_IDS)); tournaments.addMenuElement("-1", localize("tournament.all_tournaments", "All Tournaments")); Collection allTournamentIDs = getTourHome().getTournamentIDs(tour); if (allTournamentIDs != null) { Locale locale = modinfo.getCurrentLocale(); Iterator iter = allTournamentIDs.iterator(); Vector ids = new Vector(); Vector names = new Vector(); String prevID = "_"; while (iter.hasNext()) { Tournament tournament = getTournamentHome().findByPrimaryKey(new Integer(iter.next().toString())); names.add(tournament.getName()); prevID += "_"+tournament.getPrimaryKey().toString(); ids.add(prevID); IWTimestamp stamp = new IWTimestamp(tournament.getStartTime()); tournaments.addMenuElement(tournament.getPrimaryKey().toString(), tournament.getName()+" - "+stamp.getLocaleDate(locale, IWTimestamp.MEDIUM)); } iter = names.iterator(); Iterator iiter = ids.iterator(); while (iter.hasNext()) { tournaments.addMenuElement(iiter.next().toString(), localize("tournament.the_score_after", "The score after")+" "+iter.next().toString()); } } tournaments.keepStatusOnAction(true); tournaments.setToSubmit(true); dropdownTable.add(tournaments, 2, 1); dropdownTable.setAlignment(2, 1, Table.HORIZONTAL_ALIGN_RIGHT); } if (showTournamentDropdown || showTournamentGroupDropdown) { table.add(dropdownTable, 1, row); if (showPlace) { table.mergeCells(1, row, 4, row); } else { table.mergeCells(1, row, 3, row); } ++row; } Collection tournamentGroupIDs = null; if (tournamentGroupID > 0) { tournamentGroupIDs = new Vector(); tournamentGroupIDs.add(new Integer(tournamentGroupID)); } Collection tourMembers = getTourMemberHome().getScoresOrdered(tour, tournamentIDs, tournamentGroupIDs); if (showPlace) { table.setWidth(1, 10); table.add(getHeader(localize("name", "Name")), 2, row); table.add(getHeader(localize("union", "Union")), 3, row); table.add(getHeader(localize("score", "Score")), 4, row); table.setAlignment(4, row, Table.HORIZONTAL_ALIGN_RIGHT); } else { table.add(getHeader(localize("name", "Name")), 1, row); table.add(getHeader(localize("union", "Union")), 2, row); table.add(getHeader(localize("score", "Score")), 3, row); table.setAlignment(3, row, Table.HORIZONTAL_ALIGN_RIGHT); } ++row; if (tourMembers != null) { Iterator iter = tourMembers.iterator(); int counter = 0; float prevScore = -1; float score = -1; boolean cont = true; while (iter.hasNext() && cont) { ++counter; if (counter == numberOfMembersToDisplay) { cont = false; } TournamentTourResultMember m = (TournamentTourResultMember) iter.next(); Member member = getMemberHome().findByPrimaryKey(new Integer(m.getMemberID())); score = m.getScore(); if (showPlace) { if (score == prevScore) { table.add("-", 1, row); } else { table.add(Integer.toString(counter), 1, row); } prevScore = score; table.add(member.getName(), 2, row); table.add(member.getMainUnion().getAbbrevation(), 3, row); table.add(format.format(score), 4, row); table.setVerticalAlignment(1, row, Table.VERTICAL_ALIGN_TOP); table.setVerticalAlignment(2, row, Table.VERTICAL_ALIGN_TOP); table.setVerticalAlignment(3, row, Table.VERTICAL_ALIGN_TOP); table.setVerticalAlignment(4, row, Table.VERTICAL_ALIGN_TOP); table.setAlignment(4, row, Table.HORIZONTAL_ALIGN_RIGHT); } else { table.add(member.getName(), 1, row); table.add(member.getMainUnion().getAbbrevation(), 2, row); table.add(format.format(score), 3, row); table.setVerticalAlignment(1, row, Table.VERTICAL_ALIGN_TOP); table.setVerticalAlignment(2, row, Table.VERTICAL_ALIGN_TOP); table.setVerticalAlignment(3, row, Table.VERTICAL_ALIGN_TOP); table.setAlignment(3, row, Table.HORIZONTAL_ALIGN_RIGHT); } ++row; } } Form form = new Form(); form.add(table); add(form); } else { add(localize("tournament.no_tour_selected", "No tour selected")); } } public void setWidth(String width) { super.setWidth(width); this.width = width; } public void setTournamentTourID(int id) { try { tour = getTourHome().findByPrimaryKey(new Integer(id)); } catch (FinderException e) { e.printStackTrace(); } } protected TournamentTourHome getTourHome() { try { return (TournamentTourHome) IDOLookup.getHome(TournamentTour.class); } catch (IDOLookupException e) { throw new IDORuntimeException(e); } } protected TournamentHome getTournamentHome() { try { return (TournamentHome) IDOLookup.getHome(Tournament.class); } catch (IDOLookupException e) { throw new IDORuntimeException(e); } } protected TournamentTourMemberHome getTourMemberHome() { try { return (TournamentTourMemberHome) IDOLookup.getHome(TournamentTourMember.class); } catch (IDOLookupException e) { throw new IDORuntimeException(e); } } protected TournamentGroupHome getTournamentGroupHome() { try { return (TournamentGroupHome) IDOLookup.getHome(TournamentGroup.class); } catch (IDOLookupException e) { throw new IDORuntimeException(e); } } protected MemberHome getMemberHome() { try { return (MemberHome) IDOLookup.getHome(Member.class); } catch (IDOLookupException e) { throw new IDORuntimeException(e); } } public void setNumberOfMembersToDisplay(int numberOfMembersToDisplay) { this.numberOfMembersToDisplay = numberOfMembersToDisplay; } public void setTournamentGroupID(int tournamentGroupID) { this.tournamentGroupID = tournamentGroupID; } public void setShowTournamentDropdown(boolean showTournamentDropdown) { this.showTournamentDropdown = showTournamentDropdown; } public void setUseFormParameters(boolean useFormParameters) { this.useFormParameters = useFormParameters; } public void setShowTournamentGroupDropdown(boolean showTournamentGroupDropdown) { this.showTournamentGroupDropdown = showTournamentGroupDropdown; } public void setShowPlace(boolean showPlace) { this.showPlace = showPlace; } }