package is.idega.idegaweb.golf.tournament.presentation;
/**
* Title: TournamentResults 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.Tee;
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.TournamentRoundHome;
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.sql.SQLException;
import java.util.Collections;
import java.util.Vector;
import javax.ejb.FinderException;
import com.idega.data.IDOLookup;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.Block;
import com.idega.presentation.IWContext;
import com.idega.presentation.Table;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
public class TournamentResultsDetailed extends Block {
private final static String IW_BUNDLE_IDENTIFIER = "is.idega.idegaweb.golf";
protected IWResourceBundle iwrb;
protected IWBundle iwb;
private int tournamentId_ = -1;
private int tournamentGroupId_ = -1;
private int tournamentRound_ = -1;
private Tournament tournament;
private TournamentRound tournamentRound;
private Vector result = null;
private Table myTable;
private Text blackText;
private Text whiteText;
private int[] pastTournamentRounds_ = null;
private int[] allTournamentRounds_;
private int totalPar = 0;
private int outValue = 0;
private int inValue = 0;
public TournamentResultsDetailed(int tournamentId, int tournamentGroupId, int tournamentRound) {
tournamentId_ = tournamentId;
tournamentGroupId_ = tournamentGroupId;
tournamentRound_ = tournamentRound;
}
public void main(IWContext modinfo) throws SQLException {
try {
iwrb = getResourceBundle(modinfo);
iwb = getBundle(modinfo);
try {
tournament = ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(tournamentId_);
tournamentRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(tournamentRound_);
}
catch (FinderException fe) {
throw new SQLException(fe.getMessage());
}
getMemberVector();
setMemberVectorPastRounds();
setMemberVectorAllRounds();
if (result != null) {
if (result.size() > 1) {
sortMemberVector();
}
}
setValues();
getFieldInfo();
getResults();
}
catch (Exception e) {
e.printStackTrace(System.out);
}
}
private void getResults() {
try {
int size = result.size();
int row = 5;
int[] tournamentRounds_ = new int[1];
tournamentRounds_[0] = tournamentRound_;
ResultDataHandler handler;
for (int a = 0; a < size; a++) {
ResultsCollector r = (ResultsCollector) result.elementAt(a);
handler = new ResultDataHandler(tournamentId_, ResultComparator.TOTALSTROKES, tournamentGroupId_, tournamentRounds_, r.getMemberId());
Vector v = handler.getTournamentMembers();
if (v != null) {
if (v.size() > 0) {
r = (ResultsCollector) v.elementAt(0);
}
}
if (size <= 1) {
r.calculateCompareInfo();
}
if (r.getDismissal() == 0 || (r.getDismissal() == 15 && tournamentRound.getRoundNumber() <= 2)) {
myTable.mergeCells(1, row + 2, 22, row + 2);
myTable.addText("", 1, row + 2);
myTable.setHeight(1, row + 2, "5");
getMemberScore(r, row, a + 1);
row += 3;
}
}
for (int a = 2; a <= myTable.getColumns(); a++) {
myTable.setColumnAlignment(a, "center");
}
myTable.setColumnAlignment(1, "left");
myTable.setAlignment(1, 1, "center");
myTable.setAlignment(1, 2, "right");
myTable.setAlignment(1, 3, "right");
myTable.setRowColor(1, "#2C4E3B");
myTable.setRowColor(2, "#2C4E3B");
myTable.setRowColor(3, "#DCEFDE");
myTable.mergeCells(1, 4, 22, 4);
myTable.addText("", 1, 4);
//myTable.setColor(1,4,"#2C4E3B");
myTable.setHeight(1, 4, "5");
add(myTable);
}
catch (Exception e) {
e.printStackTrace(System.err);
}
}
private void getMemberScore(ResultsCollector r, int row, int position) {
try {
int extraColumnsOnTheLeftSide = 1;
int strokeValue = 0;
int holeNumberValue = -1;
int parValue = 0;
int outScore = 0;
int inScore = 0;
int totalStrokes = 0;
int difference = 0;
if (this.pastTournamentRounds_ != null) {
ResultDataHandler handler = new ResultDataHandler(tournamentId_, ResultComparator.TOTALSTROKES, tournamentGroupId_, pastTournamentRounds_, r.getMemberId());
Vector v = handler.getTournamentMembers();
if (v != null) {
if (v.size() > 0) {
ResultsCollector rip = (ResultsCollector) v.get(0);
if (rip != null) {
rip.calculateCompareInfo();
difference = rip.getDifference();
}
}
}
}
myTable.setHeight(row, "20");
myTable.setHeight(row + 1, "20");
myTable.setRowColor(row, "#EAFAEC");
myTable.setRowColor(row + 1, "#DCEFDE");
Text positionText = (Text) blackText.clone();
positionText.setText(" " + Integer.toString(position) + ". ");
Text member = (Text) blackText.clone();
member.setText(r.getName());
Link seeScores = new Link(member);
seeScores.setWindowToOpen(HandicapScore.class);
seeScores.addParameter("member_id", r.getMemberId());
seeScores.addParameter("tournament_id", tournamentId_);
seeScores.addParameter("tournament_group_id", r.getTournamentGroupId());
myTable.add(positionText, 1, row);
myTable.add(seeScores, 1, row);
Vector strokes = r.getStrokes();
Vector holeNumber = r.getHoleNumber();
Vector pars = r.getPar();
if (strokes != null) {
int strokeSize = strokes.size();
for (int b = 0; b < strokeSize; b++) {
strokeValue = ((Double) strokes.elementAt(b)).intValue();
if (strokeValue > 0) {
holeNumberValue = ((Integer) holeNumber.elementAt(b)).intValue();
parValue = ((Integer) pars.elementAt(b)).intValue();
int column = extraColumnsOnTheLeftSide+holeNumberValue;
if(holeNumberValue>9){
column++;
}
difference += strokeValue - parValue;
totalStrokes += strokeValue;
Text stroke = (Text) blackText.clone();
stroke.setText(Integer.toString(strokeValue));
Text differ = getDifference(difference);
String color = this.getBackgroundColor(strokeValue, parValue);
if (color != null) {
myTable.setColor(column, row, color);
stroke.setFontColor("#FFFFFF");
}
myTable.add(stroke, column, row);
myTable.add(differ, column, row + 1);
if (holeNumberValue == 9) {
outScore = totalStrokes;
Text outValueText = (Text) blackText.clone();
outValueText.setText(Integer.toString(outScore));
outValueText.setFontColor(getColor(outScore, outValue));
myTable.add(outValueText, column+1, row);
myTable.add(differ, column+1, row + 1);
}
if (holeNumberValue == 18) {
inScore = totalStrokes - outScore;
Text inValueText = (Text) blackText.clone();
inValueText.setText(Integer.toString(inScore));
inValueText.setFontColor(getColor(inScore, inValue));
myTable.add(inValueText, column+1, row);
myTable.add(differ, column+1, row + 1);
}
}
}
Text totalText = (Text) blackText.clone();
totalText.setText(Integer.toString(totalStrokes));
totalText.setFontColor(getColor(totalStrokes, totalPar));
myTable.add(totalText, 22, row);
myTable.add(getDifference(difference), 22, row + 1);
}
else {
myTable.add(getDifference(difference), 22, row + 1);
}
}
catch (Exception e) {
e.printStackTrace(System.err);
}
}
private Text getDifference(int difference) {
String differ = "";
Text differenceText = (Text) blackText.clone();
if (difference > 0) {
differ = "+" + Integer.toString(difference);
differenceText.setText(differ);
differenceText.setFontColor("#0000FF");
}
else if (difference == 0) {
differ = "E";
differenceText.setText(differ);
}
else {
differ = Integer.toString(difference);
differenceText.setText(differ);
differenceText.setFontColor("#FF0000");
}
return differenceText;
}
private void setValues() {
try {
getParentPage().setAllMargins(0);
getParentPage().setTitle(tournament.getName());
myTable = new Table();
myTable.setAlignment("center");
myTable.setCellpadding(1);
myTable.setCellspacing(1);
myTable.setWidth("780");
blackText = new Text();
blackText.setFontSize(Text.FONT_SIZE_7_HTML_1);
whiteText = new Text();
whiteText.setFontSize(Text.FONT_SIZE_7_HTML_1);
whiteText.setFontColor("#FFFFFF");
whiteText.setBold();
whiteText.setFontFace(Text.FONT_FACE_VERDANA);
}
catch (Exception e) {
e.printStackTrace(System.err);
}
}
private void getFieldInfo() {
try {
int parValue = 0;
int column = 2;
Tee[] tee = (Tee[]) ((Tee) IDOLookup.instanciateEntity(Tee.class)).findAll("select distinct hole_number,par from tee where field_id = " + tournament.getFieldId() + " order by hole_number");
Text holeText = (Text) whiteText.clone();
holeText.setText(iwrb.getLocalizedString("tournament.hole", "Hole") + " ");
Text parText = (Text) blackText.clone();
parText.setText(iwrb.getLocalizedString("tournament.par", "Par") + " ");
parText.setBold();
parText.setFontFace(Text.FONT_FACE_VERDANA);
Text outText = (Text) whiteText.clone();
outText.setText(iwrb.getLocalizedString("tournament.out", "Out"));
outText.setBold();
outText.setFontFace(Text.FONT_FACE_VERDANA);
Text inText = (Text) whiteText.clone();
inText.setText(iwrb.getLocalizedString("tournament.in", "In"));
inText.setBold();
inText.setFontFace(Text.FONT_FACE_VERDANA);
Text totalText = (Text) whiteText.clone();
totalText.setText(iwrb.getLocalizedString("tournament.total", "Total"));
totalText.setBold();
totalText.setFontFace(Text.FONT_FACE_VERDANA);
for (int b = 0; b < tee.length; b++) {
parValue = tee[b].getPar();
totalPar += parValue;
Text par = (Text) blackText.clone();
par.setText(Integer.toString(parValue));
par.setBold();
par.setFontFace(Text.FONT_FACE_VERDANA);
Text hole = (Text) whiteText.clone();
hole.setText(Integer.toString(b + 1));
myTable.add(hole, column, 2);
myTable.add(par, column, 3);
myTable.setWidth(column, 2, "25");
column++;
if (b + 1 == 9) {
outValue = totalPar;
Text outValueText = (Text) blackText.clone();
outValueText.setText(Integer.toString(outValue));
outValueText.setBold();
outValueText.setFontFace(Text.FONT_FACE_VERDANA);
myTable.add(outText, column, 2);
myTable.setWidth(column, 2, "30");
myTable.add(outValueText, column, 3);
column++;
}
if (b + 1 == 18) {
inValue = totalPar - outValue;
Text inValueText = (Text) blackText.clone();
inValueText.setText(Integer.toString(inValue));
inValueText.setBold();
inValueText.setFontFace(Text.FONT_FACE_VERDANA);
myTable.add(inText, column, 2);
myTable.setWidth(column, 2, "30");
myTable.add(inValueText, column, 3);
column++;
}
}
Text totalParText = (Text) blackText.clone();
totalParText.setText(Integer.toString(totalPar));
totalParText.setBold();
totalParText.setFontFace(Text.FONT_FACE_VERDANA);
myTable.setWidth(column, 2, "40");
myTable.add(totalText, column, 2);
myTable.add(totalParText, column, 3);
myTable.add(holeText, 1, 2);
myTable.add(parText, 1, 3);
myTable.setHeight(2, "20");
myTable.setHeight(3, "20");
myTable.mergeCells(1, 1, myTable.getColumns(), 1);
Text tournamentText = new Text(" " + tournament.getName());
tournamentText.setBold();
tournamentText.setFontSize(Text.FONT_SIZE_10_HTML_2);
tournamentText.setFontFace(Text.FONT_FACE_VERDANA);
tournamentText.setFontColor("FFFFFF");
Text groupAndRound = new Text(((TournamentGroupHome) IDOLookup.getHomeLegacy(TournamentGroup.class)).findByPrimaryKey(this.tournamentGroupId_).getName() + " - " + iwrb.getLocalizedString("tournament.round", "Round") + " " + ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(this.tournamentRound_).getRoundNumber() + " ");
groupAndRound.setBold();
groupAndRound.setFontSize(Text.FONT_SIZE_10_HTML_2);
groupAndRound.setFontFace(Text.FONT_FACE_VERDANA);
groupAndRound.setFontColor("FFFFFF");
Table headerTable = new Table(2, 1);
headerTable.setWidth("100%");
headerTable.setCellpadding(0);
headerTable.setCellspacing(0);
headerTable.setAlignment(2, 1, "right");
headerTable.add(tournamentText, 1, 1);
headerTable.add(groupAndRound, 2, 1);
myTable.add(headerTable, 1, 1);
}
catch (Exception e) {
e.printStackTrace(System.err);
}
}
private void setMemberVectorPastRounds() throws SQLException, FinderException {
TournamentRound[] rounds = tournament.getTournamentRounds();
TournamentRound tRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(tournamentRound_);
Vector ids = new Vector();
for (int i = 0; i < rounds.length; i++) {
if (rounds[i].getRoundNumber() < tRound.getRoundNumber()) {
ids.add(new Integer(rounds[i].getID()));
}
}
if (ids.size() > 0) {
pastTournamentRounds_ = new int[ids.size()];
for (int i = 0; i < ids.size(); i++) {
pastTournamentRounds_[i] = ((Integer) ids.get(i)).intValue();
}
}
}
private void setMemberVectorAllRounds() throws SQLException {
TournamentRound[] allRounds = tournament.getTournamentRounds();
allTournamentRounds_ = new int[allRounds.length];
for (int i = 0; i < allRounds.length; i++) {
allTournamentRounds_[i] = allRounds[i].getID();
}
}
private void getMemberVector() {
try {
int[] tournamentRounds_ = new int[1];
tournamentRounds_[0] = tournamentRound_;
ResultDataHandler handler = new ResultDataHandler(tournamentId_, ResultComparator.TOTALSTROKES, tournamentGroupId_, this.allTournamentRounds_, null);
result = handler.getTournamentMembers();
}
catch (Exception e) {
e.printStackTrace(System.err);
}
}
private String getColor(int score, int par) {
if (score < par) {
return "FF0000";
}
else if (score == par) {
return "000000";
}
else {
return "0000FF";
}
}
private String getBackgroundColor(int score, int par) {
String color = null;
int birdie = score - par;
if (birdie >= 2) {
color = "#777D1A";
}
else if (birdie == 1) {
color = "#04463C";
}
else if (birdie == -1) {
color = "#BB2322";
}
else if (birdie == -2) {
color = "#2050A8";
}
return color;
}
private void sortMemberVector() {
ResultComparator comparator = new ResultComparator(ResultComparator.TOTALSTROKES);
Collections.sort(result, comparator);
}
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
}