package is.idega.idegaweb.golf.tournament.presentation; import is.idega.idegaweb.golf.entity.Tournament; import is.idega.idegaweb.golf.entity.TournamentHome; import is.idega.idegaweb.golf.entity.TournamentRound; 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.ResultDataHandler; import is.idega.idegaweb.golf.tournament.business.ResultsCollector; import is.idega.idegaweb.golf.tournament.business.TournamentSession; import java.io.FileWriter; import java.io.IOException; import java.sql.SQLException; import java.util.Collections; import java.util.Vector; import javax.ejb.FinderException; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.business.IBORuntimeException; import com.idega.data.IDOLookup; import com.idega.presentation.IWContext; import com.idega.presentation.Page; /** * @author gimmi */ public class PrintStatus extends GolfBlock { public void main(IWContext modinfo) throws SQLException,IOException, FinderException { String excel = modinfo.getParameter("xls"); String sTournamentId = modinfo.getParameter("tournament_id"); int tournament_id = getTournamentSession(modinfo).getTournamentID(); if(tournament_id==-1) { tournament_id = Integer.parseInt(sTournamentId); } if (excel == null) { ResultsViewer results = new ResultsViewer(tournament_id); add(results); }else { String fileSeperator = System.getProperty("file.separator"); String filepath = modinfo.getServletContext().getRealPath(fileSeperator+"files"+fileSeperator); String fileName = "status.xls"; try{ String file = filepath+fileName; FileWriter out = new FileWriter(file); char[] c = null; String sGender = modinfo.getParameter("gender"); String sTournamentGroupId = modinfo.getParameter("tournament_group_id"); String[] sTournamentRoundIds = modinfo.getParameterValues("tournament_round_id"); String sOrder = modinfo.getParameter("order"); String sSort = modinfo.getParameter("sort"); int iTournamentGroupId = -1; int[] iTournamentRoundIds = new int[]{}; int iOrder = -1; int iSort = -1; if (sTournamentGroupId != null) { iTournamentGroupId = Integer.parseInt(sTournamentGroupId); } if (sTournamentRoundIds != null) { iTournamentRoundIds = new int[sTournamentRoundIds.length]; for (int i = 0; i < sTournamentRoundIds.length; i++) { iTournamentRoundIds[i] = Integer.parseInt(sTournamentRoundIds[i]); } } if (sOrder != null) { iOrder = Integer.parseInt(sOrder); } if (sSort != null) { iSort = Integer.parseInt(sSort); } Tournament tournament = ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(tournament_id); TournamentRound[] rounds = tournament.getTournamentRounds(); int totalRounds = rounds.length; int tournamentType = getTournamentType(tournament, iOrder); ResultDataHandler rdh = new ResultDataHandler(tournament_id, tournamentType, iTournamentGroupId, iTournamentRoundIds, sGender); // int numberOfRounds = tournament.getNumberOfRounds(); ResultComparator comparator = new ResultComparator(tournamentType); java.util.Vector members = rdh.getTournamentMembers(); Collections.sort(members,comparator); String sql = rdh.getSQLString(); StringBuffer data = new StringBuffer(); data.append(localize("tournament.position","Position")); data.append("\t"); data.append(localize("tournament.player","Player")); data.append("\t"); data.append(localize("tournament.club","Club")); data.append("\t"); data.append(localize("tournament.handicap","Handicap")); data.append("\t"); switch (tournamentType) { case ResultComparator.TOTALSTROKES : data.append(localize("tournament.latest_rount","Latest round")); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(localize("trounament.rounds","Rounds")); data.append("\t"); if (totalRounds > 1) { for (int i = 2; i <= totalRounds; i++) { data.append(""); data.append("\t"); } } data.append(localize("trounament.total","Total"));data.append("\t"); data.append(""); data.append("\t"); data.append("\n"); break; case ResultComparator.TOTALSTROKESWITHHANDICAP : data.append(localize("trounament.last_rounds","Last round")); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); for (int i = 1; i <= totalRounds; i++) { data.append("H"+i); data.append("\t"); data.append(""); data.append("\t"); } data.append(localize("trounament.total","Total"));data.append("\t"); data.append(""); data.append("\t"); data.append("\n"); break; case ResultComparator.TOTALPOINTS : data.append(localize("trounament.last_rounds","Last round")); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(localize("trounament.rounds","Rounds")); data.append("\t"); if (totalRounds > 1) { for (int i = 2; i <= totalRounds; i++) { data.append(""); data.append("\t"); } } data.append("Samt");data.append("\t"); data.append("\n"); break; } data.append("\n"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(""); data.append("\t"); data.append(localize("trounament.hole","Hole")); data.append("\t"); data.append(localize("trounament.F9","F9")); data.append("\t"); data.append(localize("trounament.S9","S9")); data.append("\t"); data.append(localize("trounament.total","Total")); data.append("\t"); switch (tournamentType) { case ResultComparator.TOTALSTROKES : data.append(localize("trounament.placement","Placement")); data.append("\t"); data.append(localize("trounament.H1","H1")); data.append("\t"); if (totalRounds > 1) { for (int i = 2; i <= totalRounds; i++) { data.append(localize("trounament.H","H")+i); data.append("\t"); } data.append(localize("trounament.total","Total")); data.append("\t"); data.append(localize("trounament.placement","Placement")); data.append("\t"); } data.append("\n"); break; case ResultComparator.TOTALSTROKESWITHHANDICAP : data.append(localize("trounament.netto","Netto")); data.append("\t"); for (int i = 1; i <= totalRounds; i++) { data.append(localize("trounament.total","Total")); data.append("\t"); data.append(localize("trounament.netto","Netto")); data.append("\t"); } data.append(localize("trounament.total","Total")); data.append("\t"); data.append(localize("trounament.netto","Netto")); data.append("\t"); data.append("\n"); break; case ResultComparator.TOTALPOINTS : data.append(localize("trounament.H1","H1")); data.append("\t"); if (totalRounds > 1) { for (int i = 2; i <= totalRounds; i++) { data.append(localize("trounament.H","H")+i); data.append("\t"); } } data.append("\n"); break; } out.write(data.toString().toCharArray()); int count = 0; String tournName = tournament.getName(); int handicap = 0; int finalScore = 0; int difference = 0; String hole = "0"; int memberID = 0; int iRoundScore = 0; int iRoundScoreBrutto = 0; int totalScore = 0; int totalDifference = 0; int totalBrutto = 0; int roundNumber = 0; int vectorSize = members.size(); ResultsCollector r; for (int i = 0; i < vectorSize; i++) { ++count; r = (ResultsCollector) members.get(i); handicap = r.getHandicap(); iRoundScore = 0; iRoundScoreBrutto = 0; finalScore = r.getTotalScore(); difference = r.getDifference(); hole = r.getHole(); memberID = r.getMemberId(); totalScore = 0; totalDifference = 0; totalBrutto = 0; roundNumber = 0; int lastNine = 0; int firstNine = 0; Vector roundScore = r.getRoundScore(); if ( hole.equalsIgnoreCase("f") ) { lastNine = (int) r.getRealLastNine(); if ( roundScore != null ) { totalScore = ((Integer)roundScore.elementAt(roundScore.size()-1)).intValue(); totalDifference = totalScore - r.getFieldPar(); totalBrutto = totalScore + handicap; } firstNine = totalScore - lastNine; if ( tournamentType == ResultComparator.TOTALSTROKESWITHHANDICAP ) { firstNine = totalBrutto - lastNine; } } data = new StringBuffer(); data.append(count).append("\t"); data.append(r.getName()).append("\t"); data.append(r.getAbbrevation()).append("\t"); data.append(r.getHandicap()).append("\t"); data.append(hole).append("\t"); data.append(firstNine).append("\t"); data.append(lastNine).append("\t"); data.append(firstNine+lastNine).append("\t"); try { switch (tournamentType) { case ResultComparator.TOTALSTROKES : int[] roundScores = new int[totalRounds+1]; int roundScore2 = 0; totalScore = 0; for ( int b = 1; b <= totalRounds; b++ ) { roundScore2 = 0; int roundIncNumber = r.getRound(b); try { roundScores[b] = r.getRoundScore(r.getRoundNumber(b)); }catch (Exception e) { roundScores[b] = 0; } totalScore += roundScores[b]; if ( roundIncNumber != -1 ) { roundScore2 = roundScores[b]; } } data.append(firstNine+lastNine - r.getFieldPar()).append("\t"); for ( int b = 1; b <= totalRounds; b++) { if ( roundScores[b] > 0 ) { data.append(roundScores[b]).append("\t"); }else { data.append("\t"); } } data.append(totalScore).append("\t"); data.append(difference).append("\t"); break; case ResultComparator.TOTALSTROKESWITHHANDICAP : data.append(firstNine+lastNine-handicap).append("\t"); roundScores = new int[totalRounds+1]; int[] roundBruttos = new int[totalRounds+1]; totalScore = 0; totalBrutto = 0; roundScore2 = 0; int roundScoreBrutto = 0; int roundScoreColumn2 = 10; for ( int b = 1; b <= totalRounds; b++ ) { roundScore2 = 0; roundScoreBrutto = 0; int roundIncNumber = r.getRound(b); //int position2 = roundScoreColumn2 + (roundIncNumber*2 - 1) - 1; try { roundScores[b] = r.getRoundScore(r.getRoundNumber(b)); }catch (Exception e) { roundScores[b] = 0; } roundBruttos[b] = roundScores[b] + handicap; if ( roundIncNumber != -1 ) { roundScore2 = roundScores[b]; roundScoreBrutto = roundBruttos[b]; } totalScore += roundScore2; totalBrutto += roundScoreBrutto; // totalScore += roundScores[b]; // totalBrutto += roundBruttos[b]; } // data.append(roundScore2).append("\t"); // data.append(roundScoreBrutto).append("\t"); for ( int b = 1; b <= totalRounds; b++) { if ( roundScores[b] > 0 ) { data.append(roundBruttos[b]).append("\t"); data.append(roundScores[b]).append("\t"); }else { data.append("\t\t"); } } data.append(totalBrutto).append("\t"); data.append(totalScore).append("\t"); break; case ResultComparator.TOTALPOINTS : roundScores = new int[totalRounds+1]; totalScore = 0; roundScore2 = 0; for ( int b = 1; b <= totalRounds; b++ ) { roundScore2 = 0; int roundIncNumber = r.getRound(b); //int position = roundScoreColumn3 + roundIncNumber - 1; try { roundScores[b] = r.getRoundScore(r.getRoundNumber(b)); }catch (Exception e) { roundScores[b] = 0; } if ( roundIncNumber != -1 ) { roundScore2 = roundScores[b]; } totalScore += roundScores[b]; } // data.append(roundScore2).append("\t"); for ( int b = 1; b <= totalRounds; b++) { if ( roundScores[b] > 0 ) { data.append(roundScores[b]).append("\t"); }else { data.append("\t"); } } data.append(totalScore).append("\t"); break; } } catch (Exception e) { e.printStackTrace(System.err); System.err.println("MemberID: "+memberID); } data.append("\n"); c = data.toString().toCharArray(); out.write(c); } out.close(); Page page = getParentPage(); page.setToRedirect("/servlet/Excel?&dir="+file,1); } catch(IOException io){ add("io villa"); } catch(SQLException sql){ add("sql villa");sql.printStackTrace(); } add("excel :D"); } } private int getTournamentType(Tournament tournament, int orderBy) { 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 TournamentSession getTournamentSession(IWContext iwc) { try { return (TournamentSession) IBOLookup.getSessionInstance(iwc, TournamentSession.class); } catch (IBOLookupException ile) { throw new IBORuntimeException(ile); } } }