/* * Created on 5.3.2004 */ 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.Scorecard; import is.idega.idegaweb.golf.entity.ScorecardHome; import is.idega.idegaweb.golf.entity.Startingtime; import is.idega.idegaweb.golf.entity.StartingtimeHome; 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.TournamentRound; import is.idega.idegaweb.golf.entity.TournamentTournamentGroup; import is.idega.idegaweb.golf.presentation.GolfBlock; import java.rmi.RemoteException; import java.sql.SQLException; import java.util.List; import javax.ejb.FinderException; 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.Form; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TimeInput; import com.idega.util.IWTimestamp; /** * @author gimmi * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class TournamentChecker extends GolfBlock { public void main(IWContext modinfo) throws Exception { String tournament_id = modinfo.getParameter("tournament_id"); IWBundle iwb = getBundle(); IWResourceBundle iwrb = getResourceBundle(); if (tournament_id != null) { String action = modinfo.getParameter("action"); if (action != null) { if (action.equals("doCheck")) { checkTournament(modinfo, ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id)),iwrb,iwb); }else if (action.equals("fix")) { prepareFix(modinfo,iwrb,iwb); }else if (action.equals("doFix")) { doFix(modinfo,iwrb,iwb); }else if (action.equals("delete")) { delete(modinfo,iwrb,iwb); }else if (action.equals("deleteOneScorecard")) { String scorecard_id = modinfo.getParameter("scorecard_id"); if (scorecard_id != null) { deleteScorecard(Integer.parseInt(scorecard_id)); } checkTournament(modinfo, ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id)),iwrb,iwb); }else if (action.equals("deleteAllScorecards")) { String[] scorecard_ids = modinfo.getParameterValues("scorecard_id"); if (scorecard_ids != null) { for (int i = 0; i < scorecard_ids.length; i++) { deleteScorecard(Integer.parseInt(scorecard_ids[i])); } } checkTournament(modinfo, ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id)),iwrb,iwb); }else if (action.equals("deleteOneStartingtime")) { String startingtime_id = modinfo.getParameter("startingtime_id"); if (startingtime_id != null) { deleteStartingtime(Integer.parseInt(startingtime_id)); } checkTournament(modinfo, ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id)),iwrb,iwb); }else if (action.equals("deleteAllStartingtimes")) { String[] startingtime_ids = modinfo.getParameterValues("startingtime_id"); if (startingtime_ids != null) { for (int i = 0; i < startingtime_ids.length; i++) { deleteStartingtime(Integer.parseInt(startingtime_ids[i])); } } checkTournament(modinfo, ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id)),iwrb,iwb); } }else{ add(iwrb.getLocalizedString("tournament.no_tournament_selected","No tournament selected")); } }else{ add(iwrb.getLocalizedString("tournament.no_tournament_selected","No tournament selected")); } } public void checkTournament(IWContext modinfo, Tournament tournament,IWResourceBundle iwrb, IWBundle iwb) throws RemoteException, SQLException { List members = getTournamentBusiness(modinfo).getMembersInTournamentList(tournament); TournamentRound[] tRounds = tournament.getTournamentRounds(); int roundRows = tRounds.length; Image yes = iwb.getImage("shared/paid.gif"); Image no = iwb.getImage("shared/unpaid.gif"); Image total = null; IWTimestamp stamp = null; Link fix = null; Link delete = null; Table table = new Table(); table.setBorder(0); table.setWidth("90%"); table.setAlignment("center"); int row = 1; String startingtime_id = "0"; String scorecard_id = "0"; Member member = null; String[] results = null; Text tournamentName = new Text(tournament.getName()); tournamentName.setBold(); tournamentName.setFontSize(3); table.add(tournamentName,1,row); table.mergeCells(1,row,2,row ); for (int i = 0; i < tRounds.length; i++) { table.add(tRounds[i].getName(),3+i,row); table.addBreak(3+i,row); table.add(iwrb.getLocalizedString("tournament.map_tee_time","map / tee time"),3+i,row); table.setAlignment(3+i,row,"center"); } ++row; table.mergeCells(1,row,2,row ); if (members != null) { java.util.Collections.sort(members,new is.idega.idegaweb.golf.member.GenericMemberComparator(is.idega.idegaweb.golf.member.GenericMemberComparator.FIRSTLASTMIDDLE)); for (int i = 0; i < members.size(); i++) { ++row; total = yes; startingtime_id = "0"; scorecard_id = "0"; member = (Member) members.get(i); table.add(member.getName(),2,row); for (int j = 0; j < tRounds.length; j++) { table.setAlignment(3+j,row,"center"); try { results = SimpleQuerier.executeStringQuery("SELECT SCORECARD_ID FROM SCORECARD WHERE TOURNAMENT_ROUND_ID = "+tRounds[j].getID()+" AND MEMBER_ID = "+member.getID()+""); if (results.length == 1) { table.add(yes,3+j,row); scorecard_id = results[0]; } else { table.add("("+results.length+") ",3+j,row); table.add(no,3+j,row); total = no; } } catch (Exception e) {} table.add(" / ",3+j,row); try { stamp = new IWTimestamp(tRounds[j].getRoundDate()); results = SimpleQuerier.executeStringQuery("SELECT STARTINGTIME.STARTINGTIME_ID FROM STARTINGTIME,TOURNAMENT_ROUND_STARTINGTIME WHERE TOURNAMENT_ROUND_STARTINGTIME.TOURNAMENT_ROUND_ID = "+tRounds[j].getID()+" AND TOURNAMENT_ROUND_STARTINGTIME.STARTINGTIME_ID = STARTINGTIME.STARTINGTIME_ID AND STARTINGTIME_DATE = '"+stamp.toSQLDateString()+"' AND MEMBER_ID = "+member.getID()+""); if (results.length == 1) { table.add(yes,3+j,row); startingtime_id = results[0]; } else { table.add(no,3+j,row); table.add(" ("+results.length+") ",3+j,row); if (j == 0) { total = no; } } } catch (Exception e) { e.printStackTrace(System.err); } } table.add(total,1,row); table.setWidth(1,row,"5%"); fix = new Link(iwrb.getLocalizedString("tournament.fix","Fix")); fix.addParameter("action","fix"); fix.addParameter("tournament_id",""+tournament.getID()); fix.addParameter("member_id",""+member.getID()); fix.addParameter("startingtime_id",startingtime_id); fix.addParameter("scorecard_id",scorecard_id); table.add(fix,3+roundRows,row); table.add(" - ",3+roundRows,row); delete = new Link(iwrb.getLocalizedString("tournament.delete","Delete")); delete.addParameter("action","delete"); delete.addParameter("tournament_id",""+tournament.getID()); delete.addParameter("member_id",""+member.getID()); table.add(delete,3+roundRows,row); } } ++row; ++row; Text scorecardName = new Text(iwrb.getLocalizedString("tournament.extra_scorecard","Extra scorecard")); scorecardName.setBold(); scorecardName.setFontSize(3); table.add(scorecardName,1,row); table.mergeCells(1,row,2,row ); Link deleteOneScorecard = null; Link deleteAllScorecards = new Link(iwrb.getLocalizedString("tournament.delete_all_scorecards","Delete all scorecards")); deleteAllScorecards.addParameter("action","deleteAllScorecards"); deleteAllScorecards.addParameter("tournament_id",""+tournament.getID()); table.add(deleteAllScorecards,3+roundRows,row); Scorecard[] theScorecards = null; for (int i = 0; i < tRounds.length; i++) { theScorecards = (Scorecard[]) ((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAll("Select * from scorecard where tournament_round_id = "+tRounds[i].getID()+" AND member_id not in (Select member_id from tournament_member where tournament_id = "+tournament.getID()+")"); for (int j = 0; j < theScorecards.length; j++) { ++row; table.add(theScorecards[j].getMember().getName(),2,row); deleteAllScorecards.addParameter("scorecard_id",""+theScorecards[j].getID()); deleteOneScorecard = new Link(iwrb.getLocalizedString("tournament.delete","Delete")); deleteOneScorecard.addParameter("action","deleteOneScorecard"); deleteOneScorecard.addParameter("scorecard_id",""+theScorecards[j].getID()); deleteOneScorecard.addParameter("tournament_id",""+tournament.getID()); table.add(deleteOneScorecard,3+roundRows,row); } } ++row; ++row; //Eitthvad mis enntha /* Text startingtimeName = new Text(iwrb.getLocalizedString("tournament.extra_tee_time","Extra tee time")); startingtimeName.setBold(); startingtimeName.setFontSize(3); table.add(startingtimeName,1,row); table.mergeCells(1,row,2,row ); Link deleteOneStartingtime = null; Link deleteAllStartingtimes = new Link(iwrb.getLocalizedString("tournament.delte_all_extra_tee_times","Delte all extra tee times")); deleteAllStartingtimes.addParameter("action","deleteAllStartingtimes"); deleteAllStartingtimes.addParameter("tournament_id",""+tournament.getID()); table.add(deleteAllStartingtimes,3+roundRows,row); Startingtime[] theStartingtimes = null; for (int i = 0; i < tRounds.length; i++) { theStartingtimes = (Startingtime[]) (new Startingtime()).findAll("Select * from startingtime where field_id = "+tournament.getFieldId()+" AND startingtime_date = '"+new idegaTimestamp(tRounds[i].getRoundDate()).toSQLDateString()+"' AND (startingtime_id is null OR startingtime_id < 1 OR startingtime_id not in (Select startingtime_id from tournament_round_startingtime where tournament_round_id = "+tRounds[i].getID()+"))"); for (int j = 0; j < theStartingtimes.length; j++) { ++row; table.add(theStartingtimes[j].getPlayerName(),2,row); deleteAllStartingtimes.addParameter("startingtime_id",""+theStartingtimes[j].getID()); deleteOneStartingtime = new Link(iwrb.getLocalizedString("tournament.delete","Delete")); deleteOneStartingtime.addParameter("action","deleteOneStartingtime"); deleteOneStartingtime.addParameter("startingtime_id",""+theStartingtimes[j].getID()); deleteOneStartingtime.addParameter("tournament_id",""+tournament.getID()); table.add(deleteOneStartingtime,3+roundRows,row); } } ++row; ++row; */ Text txtAth = new Text(iwrb.getLocalizedString("tournament.nb","NB")); txtAth.setBold(); txtAth.setFontSize(3); table.mergeCells(1,row,2,row); table.add(txtAth,1,row); table.add("<br>",1,row); table.add(iwrb.getLocalizedString("tournament.fix_delete_procedure","Fixing procedure replaces player's scorecards"),1,row); add("<br>"); add(table); add("<br>"); } public void doFix(IWContext modinfo, IWResourceBundle iwrb, IWBundle iwb) throws Exception { try { String tournament_id = modinfo.getParameter("tournament_id"); String member_id = modinfo.getParameter("member_id"); String startingtime_id = modinfo.getParameter("startingtime_id"); if (startingtime_id == null) { startingtime_id = "0"; } Tournament tournament = ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id)); TournamentRound[] tRounds = tournament.getTournamentRounds(); if (tRounds.length > 0) { Member member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(Integer.parseInt(member_id)); String[] tournament_group_ids = SimpleQuerier.executeStringQuery("SELECT TOURNAMENT_GROUP_ID FROM TOURNAMENT_MEMBER WHERE TOURNAMENT_ID = "+tournament_id+" AND MEMBER_ID = "+member_id+""); String[] tournament_round_ids = SimpleQuerier.executeStringQuery("select distinct (tr.tournament_round_id) from scorecard s, tournament_round tr where tr.tournament_round_id = s.tournament_round_id and tr.tournament_id = "+tournament_id+" AND s.member_id = "+member_id+""); if (tournament_round_ids != null && tournament_round_ids.length > 0) { System.out.print("Creating missing scorecards for member = "+member.getName()+" "); int tournamentGroupId = getTournamentBusiness(modinfo).getTournamentGroup(member, tournament); TournamentGroup tGroup = ((TournamentGroupHome) IDOLookup.getHome(TournamentGroup.class)).findByPrimaryKey(tournamentGroupId); TournamentTournamentGroup[] tTGroup = (TournamentTournamentGroup[]) ((TournamentTournamentGroup) IDOLookup.instanciateEntity(TournamentTournamentGroup.class)).findAllByColumnEquals("tournament_id", tournament.getID() + "", "tournament_group_id", tournamentGroupId + ""); // TournamentTournamentGroup ttGroup = ((TournamentTournamentGroupHome) IDOLookup.getHome(TournamentTournamentGroup.class)).findByPrimaryKey(); for (int j = 0; j < tRounds.length; j++) { boolean alreadyExists = false; for (int i = 0; i < tournament_round_ids.length && !alreadyExists; i++) { alreadyExists = (tournament_round_ids[i].equals( tRounds[j].getPrimaryKey().toString()) ); } if (!alreadyExists && tTGroup.length > 0) { //getTournamentBusiness(modinfo).createScorecardForMember(member, tournament, tGroup, tournamentRound); getTournamentBusiness(modinfo).createScorecardForMember(member, tournament, tTGroup[0], tRounds[j]); System.out.print("x"); } else { System.out.print("o"); } } System.out.println(" done"); } else { getTournamentBusiness(modinfo).removeMemberFromTournament(modinfo, tournament,member); getTournamentBusiness(modinfo).registerMember(member,tournament,tournament_group_ids[0]); int grupNum = 1; if (startingtime_id.equals("0")) { String time = modinfo.getParameter("time"); IWTimestamp stamp = new IWTimestamp(tRounds[0].getRoundDate()); stamp.setHour(Integer.parseInt(time.substring(0,2))); stamp.setMinute(Integer.parseInt(time.substring(3,5))); grupNum = getGrupNum(tRounds[0],stamp); } else { Startingtime sTime = ((StartingtimeHome) IDOLookup.getHomeLegacy(Startingtime.class)).findByPrimaryKey(Integer.parseInt(startingtime_id)); grupNum = sTime.getGroupNum(); } getTournamentBusiness(modinfo).setupStartingtime(modinfo, member,tournament,tRounds[0].getID(),grupNum); } } checkTournament(modinfo,tournament,iwrb,iwb); } catch (Exception e) { e.printStackTrace(System.err); add("Error"); } } public void prepareFix(IWContext modinfo,IWResourceBundle iwrb, IWBundle iwb) throws Exception { String startingtime_id = modinfo.getParameter("startingtime_id"); if (startingtime_id == null) { startingtime_id = "0"; } if (startingtime_id.equalsIgnoreCase("0")) { String tournament_id = modinfo.getParameter("tournament_id"); String member_id = modinfo.getParameter("member_id"); Form form = new Form(); form.maintainParameter("tournament_id"); form.maintainParameter("member_id"); Table table = new Table(); table.setAlignment("center"); table.setBorder(0); table.add(new HiddenInput("action","doFix")); form.add(table); table.add(iwrb.getLocalizedString("tournament.tee_time1","Tee time")); table.add(new TimeInput("time")); table.add(getButton(new SubmitButton(localize("tournament.continue","Continue"))),1,2); table.setAlignment(1,1,"left"); table.setAlignment(1,2,"right"); add(form); } else { doFix(modinfo,iwrb,iwb); } } public void delete(IWContext modinfo,IWResourceBundle iwrb, IWBundle iwb) throws Exception { try { String tournament_id = modinfo.getParameter("tournament_id"); String member_id = modinfo.getParameter("member_id"); Tournament tournament = ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id)); Member member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(Integer.parseInt(member_id)); getTournamentBusiness(modinfo).removeMemberFromTournament(modinfo, tournament,member); checkTournament(modinfo, tournament,iwrb,iwb); } catch (Exception e) { e.printStackTrace(System.err); add("Error"); } } public int getGrupNum(TournamentRound tRound, IWTimestamp stamp) { int returner = 0; Tournament tournament = tRound.getTournament(); IWTimestamp startStamp = new IWTimestamp(tRound.getRoundDate()); stamp.addMinutes(1); int interval = tournament.getInterval(); if (stamp.isLaterThan(startStamp)) { while (stamp.isLaterThan(startStamp)) { startStamp.addMinutes(interval); ++returner; } } else { returner = -10; } return returner; } public void deleteScorecard(int scorecard_id) throws SQLException { try { Scorecard scorecard = ((ScorecardHome) IDOLookup.getHomeLegacy(Scorecard.class)).findByPrimaryKey(scorecard_id); scorecard.delete(); } catch (FinderException fe) { throw new SQLException(fe.getMessage()); } } public void deleteStartingtime(int startingtime_id) throws SQLException { try { Startingtime startingtime = ((StartingtimeHome) IDOLookup.getHomeLegacy(Startingtime.class)).findByPrimaryKey(startingtime_id); startingtime.removeFrom((TournamentGroup) IDOLookup.instanciateEntity(TournamentGroup.class)); startingtime.removeFrom((Tournament) IDOLookup.instanciateEntity(Tournament.class)); startingtime.delete(); } catch (FinderException fe) { throw new SQLException(fe.getMessage()); } } }