package is.idega.idegaweb.golf.tournament.presentation; /** * Title: ResultsViewer Description: Displayes the results of a tournament * Copyright: Copyright (c) 2001 Company: idega co. * * @author Laddi * @version 1.3 */ import is.idega.idegaweb.golf.entity.Tournament; import is.idega.idegaweb.golf.entity.TournamentGroup; import is.idega.idegaweb.golf.entity.TournamentRound; import is.idega.idegaweb.golf.entity.TournamentRoundHome; import is.idega.idegaweb.golf.entity.TournamentType; import is.idega.idegaweb.golf.presentation.GolfBlock; import is.idega.idegaweb.golf.tournament.business.ResultComparator; import is.idega.idegaweb.golf.tournament.business.TournamentSession; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.business.IBORuntimeException; import com.idega.data.IDOLookup; import com.idega.data.SimpleQuerier; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.Image; import com.idega.presentation.Table; import com.idega.presentation.text.Link; import com.idega.presentation.text.Text; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.GenericButton; import com.idega.presentation.ui.SubmitButton; import com.idega.util.IWTimestamp; public class ResultsViewer extends GolfBlock { private final static String IW_BUNDLE_IDENTIFIER = "is.idega.idegaweb.golf"; protected IWResourceBundle iwrb; protected IWBundle iwb; private int tournamentID = 0; private int tournamentGroupID = -1; private int[] tournamentRounds = null; private String gender = null; private int orderBy = -1; private int sortBy = -1; private boolean showAllGroups = false; private boolean showAllGenders = false; private boolean championship = false; private Tournament tournament; private Form myForm; private Table outerTable; private Table formTable; private Table resultTable; public ResultsViewer() { } public ResultsViewer(int tournamentID) { this.tournamentID = tournamentID; } public void main(IWContext modinfo) throws Exception { try { if (tournamentID > 0) { getTournamentSession(modinfo).setTournamentID(tournamentID); } myForm = new Form(); myForm.setName("resultform"); iwrb = getResourceBundle(modinfo); tournament = getTournamentSession(modinfo).getTournament(); tournamentID = getTournamentSession(modinfo).getTournamentID(); if (tournament != null) { if (tournament.getNumberOfRounds() >= 4) { championship = true; } add(getResult(modinfo)); } else { System.out.println("ResultViewer: No tournament in session"); } } catch (Exception e) { e.printStackTrace(System.err); } } private Form getResult(IWContext modinfo) { try { getFormValues(modinfo); getOuterTable(); myForm.add(outerTable); } catch (Exception e) { e.printStackTrace(System.err); } return myForm; } private void getFormValues(IWContext modinfo) { String tournamentGroupId_ = modinfo.getParameter("tournament_group_id"); if (tournamentGroupId_ != null) { if (tournamentGroupId_.length() > 0) { int tournamentGroupId = Integer.parseInt(tournamentGroupId_); if (tournamentGroupId > 0) { tournamentGroupID = Integer.parseInt(tournamentGroupId_); } else { tournamentGroupID = -1; showAllGroups = true; } } } String tournamentRounds_ = modinfo.getParameter("tournament_round_id"); if (tournamentRounds_ != null) { if (tournamentRounds_.length() > 0) { if (Integer.parseInt(tournamentRounds_) != 0) { String[] query = null; try { TournamentRound round = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(Integer.parseInt(tournamentRounds_)); String queryString = "select tournament_round_id from tournament_round where tournament_id = " + Integer.toString(tournamentID) + " and round_number <= " + Integer.toString(round.getRoundNumber()) + " order by round_number"; query = SimpleQuerier.executeStringQuery(queryString); } catch (Exception e) { e.printStackTrace(System.err); } if (query != null) { tournamentRounds = new int[query.length]; for (int a = 0; a < query.length; a++) { tournamentRounds[a] = Integer.parseInt(query[a]); } } } } } String gender_ = modinfo.getParameter("gender"); if (gender_ != null) { if (gender_.equalsIgnoreCase("f") || gender_.equalsIgnoreCase("m")) { gender = gender_.toUpperCase(); } if (gender_.equalsIgnoreCase("b") && !showAllGroups) { showAllGenders = true; } } String sort_ = modinfo.getParameter("sort"); if (sort_ != null) { if (sort_.length() > 0) { sortBy = Integer.parseInt(sort_); } else { sortBy = this.getTournamentType(); } } else { sortBy = this.getTournamentType(); } String order_ = modinfo.getParameter("order"); if (order_ != null) { if (order_.length() > 0) { if (order_.equalsIgnoreCase("0")) { orderBy = sortBy; } else { orderBy = Integer.parseInt(order_); } } else { orderBy = sortBy; } } else { orderBy = sortBy; } } private void getOuterTable() { outerTable = new Table(1, 3); outerTable.setWidth("100%"); outerTable.setCellpadding(0); outerTable.setCellspacing(0); outerTable.setHeight(1, 40); outerTable.setCellpaddingRight(1, 1, 5); outerTable.setVerticalAlignment(1, 2, "top"); getFormTable(); getResultsTable(); //addExcelLink(); getHoleByHole(); outerTable.add(formTable, 1, 1); outerTable.add(resultTable, 1, 2); } private void addExcelLink() { Link excelLink = new Link(new Image("/reports/pics/xls.gif")); excelLink.addParameter("xls", "true"); excelLink.addParameter("tournament_id", tournamentID); excelLink.addParameter("gender", gender); excelLink.addParameter("tournament_group_id", tournamentGroupID); if (tournamentRounds != null) { for (int i = 0; i < tournamentRounds.length; i++) { excelLink.addParameter("tournament_round_id", tournamentRounds[i]); } } excelLink.addParameter("order", orderBy); excelLink.addParameter("sort", sortBy); outerTable.setHeight(3, 40); outerTable.setCellpaddingRight(1, 3, 5); outerTable.add(excelLink, 1, 3); } private void getFormTable() { formTable = new Table(6, 1); formTable.setAlignment("right"); formTable.setCellpadding(2); formTable.setCellspacing(0); DropdownMenu genderMenu = (DropdownMenu) getStyledInterface(new DropdownMenu("gender")); genderMenu.addMenuElement("", "- " + iwrb.getLocalizedString("tournament.genders", "Genders") + " -"); genderMenu.addMenuElement("M", iwrb.getLocalizedString("tournament.males", "Male")); genderMenu.addMenuElement("F", iwrb.getLocalizedString("tournament.females", "Female")); genderMenu.addMenuElement("B", iwrb.getLocalizedString("tournament.both", "Both")); genderMenu.keepStatusOnAction(); DropdownMenu groupsMenu = (DropdownMenu) getStyledInterface(new DropdownMenu("tournament_group_id")); groupsMenu.addMenuElement("", "- " + iwrb.getLocalizedString("tournament.groups", "Groups") + " -"); TournamentGroup[] groups = null; try { groups = tournament.getTournamentGroups(); for (int a = 0; a < groups.length; a++) { groupsMenu.addMenuElement(groups[a].getID(), groups[a].getName()); } } catch (Exception e) { e.printStackTrace(System.err); } groupsMenu.addMenuElement("0", iwrb.getLocalizedString("tournament.all", "All")); groupsMenu.keepStatusOnAction(); String roundShort = iwrb.getLocalizedString("tournament.round", "Round"); if (tournament.getNumberOfRounds() > 4) { roundShort = iwrb.getLocalizedString("tournament.day", "Day"); } String round = iwrb.getLocalizedString("tournament.rounds", "Rounds"); if (tournament.getNumberOfRounds() > 4) { round = iwrb.getLocalizedString("tournament.days", "Days"); } DropdownMenu roundsMenu = (DropdownMenu) getStyledInterface(new DropdownMenu("tournament_round_id")); roundsMenu.addMenuElement("", "- " + round + " -"); TournamentRound[] rounds = null; try { rounds = tournament.getTournamentRounds(); for (int a = 0; a < rounds.length; a++) { roundsMenu.addMenuElement(rounds[a].getID(), Integer.toString(a + 1) + ". " + roundShort); } } catch (Exception e) { e.printStackTrace(System.err); } roundsMenu.addMenuElement("0", iwrb.getLocalizedString("tournament.all", "All")); roundsMenu.keepStatusOnAction(); DropdownMenu scoreMenu = (DropdownMenu) getStyledInterface(new DropdownMenu("sort")); scoreMenu.addMenuElement("", "- " + iwrb.getLocalizedString("tournament.score", "Score") + " -"); scoreMenu.addMenuElement(ResultComparator.TOTALSTROKES, iwrb.getLocalizedString("tournament.strokes_without_handicap", "Strokes")); scoreMenu.addMenuElement(ResultComparator.TOTALSTROKESWITHHANDICAP, iwrb.getLocalizedString("tournament.strokes_with_handicap", "Strokes w/handicap")); scoreMenu.addMenuElement(ResultComparator.TOTALPOINTS, iwrb.getLocalizedString("tournament.points", "Points")); scoreMenu.addMenuElement(ResultComparator.TOTALPOINTSWITHOUTHANDICAP, iwrb.getLocalizedString("tournament.points_without_handicap", "Points wo/handicap")); scoreMenu.keepStatusOnAction(); DropdownMenu orderMenu = (DropdownMenu) getStyledInterface(new DropdownMenu("order")); orderMenu.addMenuElement("", "- " + iwrb.getLocalizedString("tournament.order", "Order") + " -"); orderMenu.addMenuElement(0, iwrb.getLocalizedString("tournament.by_score", "By score")); orderMenu.addMenuElement(ResultComparator.NAME, iwrb.getLocalizedString("tournament.by_name", "By name")); orderMenu.addMenuElement(ResultComparator.ABBREVATION, iwrb.getLocalizedString("tournament.by_club", "By club")); orderMenu.keepStatusOnAction(); SubmitButton submit = (SubmitButton) getButton(new SubmitButton(iwrb.getLocalizedString("tournament.get", "Get"))); formTable.add(genderMenu, 1, 1); formTable.add(groupsMenu, 2, 1); formTable.add(roundsMenu, 3, 1); formTable.add(scoreMenu, 4, 1); formTable.add(orderMenu, 5, 1); formTable.add(submit, 6, 1); } private void getResultsTable() { try { resultTable = new Table(1, 1); resultTable.setBorder(0); resultTable.setCellpadding(0); resultTable.setCellspacing(0); resultTable.setWidth("100%"); resultTable.setVerticalAlignment(1, 1, "top"); if (showAllGroups || showAllGenders) { if (showAllGroups) { String genderString = ""; if (gender != null) { genderString = "and gender = '" + gender.toUpperCase() + "'"; } TournamentGroup[] groups = (TournamentGroup[]) ((TournamentGroup) IDOLookup.instanciateEntity(TournamentGroup.class)).findAll("select tg.* from tournament_group tg, tournament_tournament_group ttg where tg.tournament_group_id = ttg.tournament_group_id " + genderString + " and tournament_id = " + Integer.toString(tournamentID) + " order by handicap_max"); Table groupResultsTable = new Table(); groupResultsTable.setWidth("100%"); int row = 1; for (int a = 0; a < groups.length; a++) { Text groupName = getHeader(groups[a].getName()); TournamentResults tournResults = new TournamentResults(tournamentID, sortBy, groups[a].getID(), tournamentRounds, gender); tournResults.sortBy(orderBy); groupResultsTable.add(groupName, 1, row); groupResultsTable.add(tournResults, 1, row + 1); row += 3; } resultTable.add(groupResultsTable, 1, 1); } if (showAllGenders) { String[] genders = getGenderInTournament(); Table groupResultsTable = new Table(); groupResultsTable.setWidth("100%"); groupResultsTable.setCellpadding(0); groupResultsTable.setCellspacing(0); int row = 1; for (int a = 0; a < genders.length; a++) { Text genderName = new Text(); genderName.setFontSize(3); genderName.setBold(); if (genders[a].equalsIgnoreCase("m")) genderName.setText(iwrb.getLocalizedString("tournament.men", "Men")); else genderName.setText(iwrb.getLocalizedString("tournament.women", "Women")); TournamentResults tournResults = new TournamentResults(tournamentID, sortBy, tournamentGroupID, tournamentRounds, genders[a]); tournResults.sortBy(orderBy); groupResultsTable.add(genderName, 1, row); groupResultsTable.add(tournResults, 1, row + 1); row += 3; } resultTable.add(groupResultsTable, 1, 1); } } else { if (championship && tournamentGroupID == -1) { resultTable.setAlignment(1, 1, "center"); resultTable.add(Text.getBreak()); resultTable.add(Text.getBreak()); String stringToDisplay = iwrb.getLocalizedString("tournament.select_each_group_for_results", "Select each group from the list above to see the resuls within that group"); resultTable.add(stringToDisplay, 1, 1); } else { TournamentResults tournResults = new TournamentResults(tournamentID, sortBy, tournamentGroupID, tournamentRounds, gender); tournResults.sortBy(orderBy); resultTable.add(tournResults, 1, 1); } } } catch (Exception e) { e.printStackTrace(System.err); } } private String[] getGenderInTournament() { String[] query = null; try { String queryString = "select distinct gender from tournament t,tournament_group tg,tournament_tournament_group ttg where t.tournament_id = ttg.tournament_id and ttg.tournament_group_id = tg.tournament_group_id and t.tournament_id = " + Integer.toString(tournamentID); query = SimpleQuerier.executeStringQuery(queryString); } catch (Exception e) { e.printStackTrace(System.err); } return query; } private int getTournamentType() { int tournamentType = ResultComparator.TOTALSTROKES; try { TournamentType type = tournament.getTournamentType(); String typeName = type.getTournamentType(); if (typeName.equalsIgnoreCase("points")) tournamentType = ResultComparator.TOTALPOINTS; if (orderBy == ResultComparator.TOTALPOINTS) tournamentType = ResultComparator.TOTALPOINTS; if (orderBy == ResultComparator.TOTALSTROKES) tournamentType = ResultComparator.TOTALSTROKES; if (orderBy == ResultComparator.TOTALSTROKESWITHHANDICAP) tournamentType = ResultComparator.TOTALSTROKESWITHHANDICAP; } catch (Exception e) { e.printStackTrace(System.err); } return tournamentType; } private void getHoleByHole() { try { //if ( tournamentGroupID != -1 || showAllGroups) { int tournamentRoundID = 0; GenericButton scoreLink = getButton(new GenericButton("hole_view", iwrb.getLocalizedString("tournament.holeview_window", "Hole view"))); scoreLink.setWindowToOpen(HoleView.class); scoreLink.addParameterToWindow("tournamentID", tournamentID); if (tournamentGroupID != -1) { scoreLink.addParameterToWindow("tournamentGroupID", tournamentGroupID); } else { TournamentGroup[] groups = tournament.getTournamentGroups(); for (int a = 0; a < groups.length; a++) { scoreLink.addParameterToWindow("tournamentGroupID", groups[a].getID()); } } if (tournament.getNumberOfRounds() == 1 && sortBy == ResultComparator.TOTALSTROKES) { TournamentRound[] rounds = tournament.getTournamentRounds(); if (rounds.length > 0) { tournamentRoundID = rounds[0].getID(); } scoreLink.addParameterToWindow("tournamentRoundID", tournamentRoundID); if (tournamentRoundID != 0) { outerTable.setAlignment(1, 3, "right"); outerTable.setHeight(1, 3, "40"); outerTable.setCellpaddingRight(1, 3, 5); outerTable.add(scoreLink, 1, 3); } } else if (tournament.getNumberOfRounds() > 1 && sortBy == ResultComparator.TOTALSTROKES) { if (tournamentRounds != null) { if (tournamentRounds.length > 0) { tournamentRoundID = tournamentRounds[tournamentRounds.length - 1]; scoreLink.addParameterToWindow("tournamentRoundID", tournamentRoundID); if (tournamentRoundID != 0) { outerTable.setAlignment(1, 3, "right"); outerTable.setHeight(1, 3, "40"); outerTable.setCellpaddingRight(1, 3, 5); outerTable.add(scoreLink, 1, 3); } } } else { IWTimestamp date = new IWTimestamp(); IWTimestamp date2 = new IWTimestamp(); date2.addDays(1); TournamentRound[] rounds = (TournamentRound[]) ((TournamentRound) IDOLookup.instanciateEntity(TournamentRound.class)).findAll("select * from tournament_round where tournament_id = " + Integer.toString(tournamentID) + " and round_date >= '" + date.getSQLDate() + "' and round_date <= '" + date2.getSQLDate() + "'"); if (rounds.length > 0) { tournamentRoundID = rounds[0].getID(); } scoreLink.addParameterToWindow("tournamentRoundID", tournamentRoundID); if (tournamentRoundID != 0) { outerTable.setAlignment(1, 3, "right"); outerTable.setHeight(1, 3, "40"); outerTable.setCellpaddingRight(1, 3, 5); outerTable.add(scoreLink, 1, 3); } } } //} } catch (Exception e) { e.printStackTrace(System.err); } } private TournamentSession getTournamentSession(IWContext iwc) { try { return (TournamentSession) IBOLookup.getSessionInstance(iwc, TournamentSession.class); } catch (IBOLookupException ile) { throw new IBORuntimeException(ile); } } public String getBundleIdentifier() { return IW_BUNDLE_IDENTIFIER; } }