/* * Created on 5.3.2004 */ package is.idega.idegaweb.golf.tournament.presentation; import is.idega.idegaweb.golf.UpdateHandicap; import is.idega.idegaweb.golf.entity.DisplayScores; import is.idega.idegaweb.golf.entity.Member; import is.idega.idegaweb.golf.entity.Scorecard; import is.idega.idegaweb.golf.entity.Tournament; import is.idega.idegaweb.golf.entity.TournamentGroup; import is.idega.idegaweb.golf.entity.TournamentHome; import is.idega.idegaweb.golf.entity.TournamentRound; 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.TournamentTourMemberPK; import is.idega.idegaweb.golf.entity.TournamentTournamentTour; import is.idega.idegaweb.golf.entity.TournamentTournamentTourHome; import is.idega.idegaweb.golf.entity.TournamentTournamentTourPK; import is.idega.idegaweb.golf.tournament.business.ResultComparator; import is.idega.idegaweb.golf.tournament.business.ResultDataHandler; import is.idega.idegaweb.golf.tournament.business.ResultsCollector; import java.io.IOException; import java.rmi.RemoteException; import java.sql.SQLException; import java.sql.Timestamp; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Vector; import javax.ejb.FinderException; import com.idega.data.IDOLookup; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.Table; import com.idega.presentation.text.Text; import com.idega.presentation.ui.CloseButton; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.GenericButton; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SubmitButton; import com.idega.util.IWTimestamp; /** * @author gimmi */ public class CloseTournament extends TournamentBlock { IWResourceBundle iwrb; protected boolean tournamentMustBeSet() { return true; } public void main(IWContext modinfo) throws Exception { super.setAdminView(TournamentAdministratorWindow.ADMIN_VIEW_FINISH_TOURNAMENT); iwrb = getResourceBundle(); String mode = modinfo.getParameter("mode"); if (mode == null) mode = ""; String tournament_id = null; if (getTournamentID(modinfo) > 0) { tournament_id = Integer.toString(getTournamentID(modinfo)); } if (tournament_id != null) { Tournament tournament = null; try { tournament = ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id)); } catch (FinderException fe) { throw new SQLException(fe.getMessage()); } if (mode.equalsIgnoreCase("")) { main(tournament, modinfo); } if (mode.equals("select")) { main2(tournament, modinfo); } if (mode.equals("update_handicap")) { main3(tournament, modinfo); } } } public void getTournaments(IWContext modinfo) throws NumberFormatException, RemoteException { DropdownMenu menu = null; GenericButton submit = getButton(new SubmitButton(localize("tournament.continue","Continue"))); IWTimestamp stamp = IWTimestamp.RightNow(); String selectedYear = modinfo.getParameter("tr_year"); if (selectedYear == null) { selectedYear = Integer.toString(stamp.getYear()); } DropdownMenu yearMenu = new DropdownMenu("tr_year"); for (int i = 2001; i <= stamp.getYear(); i++) { yearMenu.addMenuElement(i, Integer.toString(i)); } yearMenu.setSelectedElement(selectedYear); yearMenu.setToSubmit(); Form myForm = new Form(); myForm.setMethod("get"); Table myTable = new Table(2, 3); myTable.setAlignment("center"); myTable.setAlignment(2, 1, "right"); myTable.setAlignment(1, 2, "center"); myTable.setAlignment(1, 3, "right"); myTable.setCellpadding(4); // add("using year : "+selectedYear); menu = getTournamentBusiness(modinfo).getDropdownOrderedByUnion(new DropdownMenu("tournament"), modinfo, Integer.parseInt(selectedYear)); menu.setMarkupAttribute("size", "10"); Text tournText = new Text(iwrb.getLocalizedString("tournament.choose_tournament", "Choose tournament") + ":"); tournText.setFontSize(3); tournText.setBold(); myTable.mergeCells(1, 2, 2, 2); myTable.mergeCells(1, 3, 2, 3); myTable.add(yearMenu, 2, 1); myTable.add(tournText, 1, 1); myTable.add(menu, 1, 2); myTable.add(submit, 1, 3); myForm.add(myTable); add("<br>"); add(myForm); } public void main(Tournament tournament, IWContext modinfo) throws IOException, SQLException { TournamentRound[] rounds = tournament.getTournamentRounds(); int holes = rounds.length * tournament.getNumberOfHoles(); DisplayScores[] members = getTournamentBusiness(modinfo).getDisplayScores("t.tournament_id = " + tournament.getID(), "m.member_id", "having count(stroke_count) < " + holes); Form myForm = new Form(); myForm.add(new HiddenInput("mode", "select")); myForm.add(new HiddenInput("tournament", ""+tournament.getID())); Table myTable = new Table(); myTable.mergeCells(1, 1, 2, 1); myTable.setCellpadding(3); //if ( members.length == 0 ) { Text selectText = new Text(iwrb.getLocalizedString("tournament.choose_calculation", "Choose how to calculate each round")); selectText.setFontSize(3); selectText.setBold(); myTable.add(selectText, 1, 1); for (int a = 0; a < rounds.length; a++) { DropdownMenu menu = new DropdownMenu("round_" + (a + 1)); if (!tournament.getTournamentType().getUseGroups()) { menu.addMenuElement(0, iwrb.getLocalizedString("tournament.handicap_increase_decrease", "Handicap to increase and decrease")); menu.addMenuElement(1, iwrb.getLocalizedString("tournament.handicap_decrease", "Handicap to decrease")); menu.addMenuElement(2, iwrb.getLocalizedString("tournament.handicap_increase", "Handicap to increase")); } menu.addMenuElement(3, iwrb.getLocalizedString("tournament.handicap_no_effect", "No change in handicap")); Text roundText = new Text(iwrb.getLocalizedString("tournament.round", "Round") + " " + rounds[a].getRoundNumber() + ":"); myTable.add(roundText, 1, a + 2); myTable.add(menu, 2, a + 2); myTable.setAlignment(1, a + 2, "right"); } int rows = myTable.getRows(); myTable.mergeCells(1, rows + 1, 2, rows + 1); myTable.setAlignment(1, rows + 1, "right"); myTable.add(getButton(new SubmitButton(localize("tournament.continue","Continue"))), 1, rows + 1); myForm.add(myTable); add(myForm); } public void main2(Tournament tournament, IWContext modinfo) throws IOException, SQLException { TournamentRound[] rounds = tournament.getTournamentRounds(); Form myForm = new Form(); myForm.add(new HiddenInput("mode", "update_handicap")); myForm.add(new HiddenInput("tournament", ""+tournament.getID())); Table myTable = new Table(); myTable.setCellpadding(3); myTable.setAlignment(1, 3, "right"); myTable.setWidth("60%"); Member member; boolean tooHigh = false; float useThis = 0; for (int a = 0; a < rounds.length; a++) { String option = modinfo.getParameter("round_" + (a + 1)); boolean increase = true; boolean decrease = true; if (option.equals("0")) { increase = true; decrease = true; Scorecard[] scorecard = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where tournament_round_id = " + rounds[a].getID() + " and scorecard_date is not null"); for (int b = 0; b < scorecard.length; b++) { scorecard[b].setUpdateHandicap(true); scorecard[b].update(); } } else if (option.equals("1")) { increase = false; decrease = true; Scorecard[] scorecard = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where total_points>36 and tournament_round_id=" + rounds[a].getID() + " and scorecard_date is not null"); Scorecard[] scorecard2 = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where total_points<=36 and tournament_round_id=" + rounds[a].getID() + " and scorecard_date is not null"); for (int b = 0; b < scorecard.length; b++) { scorecard[b].setUpdateHandicap(true); scorecard[b].update(); } for (int b = 0; b < scorecard2.length; b++) { scorecard2[b].setUpdateHandicap(false); scorecard2[b].update(); } } else if (option.equals("2")) { increase = true; decrease = false; Scorecard[] scorecard = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where total_points<=36 and tournament_round_id=" + rounds[a].getID() + " and scorecard_date is not null"); Scorecard[] scorecard2 = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where total_points>36 and tournament_round_id=" + rounds[a].getID() + " and scorecard_date is not null"); for (int b = 0; b < scorecard.length; b++) { scorecard[b].setUpdateHandicap(true); scorecard[b].update(); } for (int b = 0; b < scorecard2.length; b++) { scorecard2[b].setUpdateHandicap(false); scorecard2[b].update(); } } else if (option.equals("3")) { increase = false; decrease = false; Scorecard[] scorecard = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("select * from scorecard where tournament_round_id = " + rounds[a].getID() + " and scorecard_date is not null"); for (int b = 0; b < scorecard.length; b++) { scorecard[b].setUpdateHandicap(false); scorecard[b].update(); } } rounds[a].setDecreaseHandicap(decrease); rounds[a].setIncreaseHandicap(increase); rounds[a].update(); } Text handicapText = new Text(iwrb.getLocalizedString("tournament.to_update", "Update golfers handicap") + ":"); handicapText.setFontSize(3); handicapText.setBold(); myTable.add(handicapText, 1, 1); myTable.addText(iwrb.getLocalizedString("tournament.update_warning", "Handicap update could take several moments."), 1, 2); myTable.add(getButton(new SubmitButton(localize("tournament.continue","Continue"), "calculate")), 1, 3); myForm.add(myTable); add(myForm); } public void main3(Tournament tournament, IWContext modinfo) throws IOException, SQLException { IWTimestamp stampur = new IWTimestamp(tournament.getStartTime()); stampur.addDays(-2); boolean calculate = true; /* String query = modinfo.getParameter("calculate"); if (query == null) { calculate = false; } */ DisplayScores[] members = getTournamentBusiness(modinfo).getDisplayScores("t.tournament_id = " + tournament.getID() + " ", "m.member_id"); if (calculate) { for (int a = 0; a < members.length; a++) { UpdateHandicap.update(members[a].getMemberID(), stampur); } } // :added by Gimmi 15.06.2001 Timestamp stamp = IWTimestamp.getTimestampRightNow(); tournament.setIsClosed(true); tournament.setClosedDate(stamp); tournament.update(); getTournamentBusiness(modinfo).removeTournamentBoxApplication(modinfo); // :done // TournamentTour scoring... try { TournamentTourHome ttHome = (TournamentTourHome) IDOLookup.getHome(TournamentTour.class); TournamentTournamentTourHome tttHome = (TournamentTournamentTourHome) IDOLookup.getHome(TournamentTournamentTour.class); TournamentTourMemberHome ttmHome = (TournamentTourMemberHome) IDOLookup.getHome(TournamentTourMember.class); Collection tours = ttHome.findByTournamentID(tournament.getPrimaryKey()); if (tours != null && !tours.isEmpty()) { Iterator iter = tours.iterator(); while (iter.hasNext()) { int sorter = ResultComparator.TOTALSTROKES; TournamentTour tour = (TournamentTour) iter.next(); TournamentTournamentTourPK pk = new TournamentTournamentTourPK(tournament.getPrimaryKey(), tour.getPrimaryKey()); TournamentTournamentTour ttTour = tttHome.findByPrimaryKey(pk); int totalPoints = ttTour.getTotalScore(); float[] points = tour.getScoreSystem().getPointsDivision(); TournamentGroup[] groups = tournament.getTournamentGroups(); int tournamentId_ = tournament.getID(); Object tournamentID = tournament.getPrimaryKey(); Object tournamentTourID = tour.getPrimaryKey(); HashMap map = new HashMap(); HashMap scores = new HashMap(); int tournamentType_ = tournament.getTournamentTypeId(); // ResultDataHandler handler = new ResultDataHandler(tournamentId_, tournamentType_, tournamentGroupId_, tournamentRounds_, gender_); for (int i = 0; i < groups.length; i++) { map = new HashMap(); scores = new HashMap(); Object tournamentGroupID = groups[i].getPrimaryKey(); ResultDataHandler handler = new ResultDataHandler(tournamentId_, sorter, groups[i].getID(), null, null); Vector result = handler.getTournamentMembers(); ResultComparator comparator = new ResultComparator(sorter); // ResultComparator comparator = new ResultComparator(tournamentType_); Collections.sort(result, comparator); Iterator mIter = result.iterator(); int counter = 0; boolean cont = true; int length = points.length; while (mIter.hasNext() && cont) { ResultsCollector r = (ResultsCollector) mIter.next(); float score = 0; if (counter < length) { score = (float) totalPoints * (points[counter] / (float) 100); } if (r.getDismissal() > 0) { System.out.println("[CloseTournament : Member "+r.getName()+" has a dismissal"); continue; } System.out.println("[CloseTournament : Member "+r.getName()+" receives the score : "+score); Object memberID = new Integer(r.getMemberId()); TournamentTourMemberPK mPK = new TournamentTourMemberPK(tournamentID, tournamentTourID, tournamentGroupID, memberID); TournamentTourMember ttMember = null; try { ttMember = ttmHome.findByPrimaryKey(mPK); } catch (FinderException f) { ttMember = ttmHome.create(mPK); } ttMember.setScore(score); ttMember.store(); Collection coll = (Collection) map.get(new Integer(r.getTotalStrokes())); if (coll == null) { // FIRST PLAYER WITH WITH SCORE. if (counter < length) { coll = new Vector(); coll.add(ttMember); scores.put(new Integer(r.getTotalStrokes()), new Float(score)); map.put(new Integer(r.getTotalStrokes()), coll); } else { ttMember.remove(); cont = false; } } else { // OTHER PLAYER WITH SAME SCORE... coll.add(ttMember); float totalScore = score + ((Float) scores.get(new Integer(r.getTotalStrokes()))).floatValue(); scores.put(new Integer(r.getTotalStrokes()), new Float(totalScore)); int numOfPlayers = coll.size(); Iterator pIter = coll.iterator(); float newScore = totalScore / (float) numOfPlayers; while (pIter.hasNext()) { TournamentTourMember rr = (TournamentTourMember) pIter.next(); rr.setScore(newScore); System.out.println("[CloseTournament : Resetting member "+rr.getMember().getName()+" receives the score : "+newScore); rr.store(); } } ++counter; } } } } } catch (Exception e) { e.printStackTrace(System.err); } // TournamentTour scoring done Table myTable = new Table(1, 3); myTable.setCellpadding(3); myTable.setWidth("90%"); Text selectText = new Text(iwrb.getLocalizedString("tournament.tournament_results", "Results")); selectText.setFontSize(3); selectText.setBold(); myTable.add(selectText, 1, 1); ResultsViewer results = new ResultsViewer(tournament.getID()); myTable.setAlignment(1, 3, "right"); myTable.add(getButton(new CloseButton()), 1, 3); myTable.add(results, 1, 2); add(myTable); } }