/*
* Created on 5.3.2004
*/
package is.idega.idegaweb.golf.tournament.presentation;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.List;
import javax.ejb.FinderException;
import com.idega.data.IDOLookup;
import com.idega.presentation.IWContext;
import com.idega.presentation.Table;
import com.idega.presentation.ui.CheckBox;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.HiddenInput;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import is.idega.idegaweb.golf.entity.Member;
import is.idega.idegaweb.golf.entity.MemberHome;
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.TournamentHome;
import is.idega.idegaweb.golf.entity.TournamentRound;
import is.idega.idegaweb.golf.entity.TournamentRoundHome;
import is.idega.idegaweb.golf.presentation.GolfBlock;
import com.idega.util.IWTimestamp;
import com.idega.util.text.TextSoap;
/**
* @author gimmi
*/
public class ModifyStartingtime extends GolfBlock {
public void setTournament(IWContext modinfo, Tournament tournament) {
modinfo.setSessionAttribute("golf_modifystartingtime_tournament", tournament);
}
public Tournament getTournament(IWContext modinfo) {
return (Tournament) modinfo.getSessionAttribute("golf_modifystartingtime_tournament");
}
public void main(IWContext modinfo) throws Exception {
try {
Tournament tournament = null;
String tournament_id = modinfo.getParameter("tournament_id");
if (tournament_id != null) {
tournament = ((TournamentHome) IDOLookup.getHomeLegacy(Tournament.class)).findByPrimaryKey(Integer.parseInt(tournament_id));
setTournament(modinfo, tournament);
}
else {
tournament = getTournament(modinfo);
}
if (tournament != null) {
String action = modinfo.getParameter("action");
String tournament_round_id = modinfo.getParameter("tournament_round");
if (action != null) {
if (action.equals("update")) {
executeUpdate(modinfo);
add(getEditableStartingtimeForm(modinfo, tournament, tournament_round_id));
}
else if (action.equals("getSearch")) {
add(getEditableStartingtimeForm(modinfo, tournament, tournament_round_id));
}
else if (action.equals("addMember")) {
add(drawLeftOuts(modinfo, tournament, tournament_round_id));
}
}
}
else {
add(getMessageText(localize("tournament.no_tournament_selected","No tournament selected")));
}
}
catch (Exception ex) {
System.err.println("{ Aron debugging catching errors}");
ex.printStackTrace();
}
}
public Form getEditableStartingtimeForm(IWContext modinfo, Tournament tournament, String tournament_round_id) throws SQLException, FinderException, RemoteException {
Form form = new Form();
Table table = new Table();
table.setBorder(0);
table.setCellpadding(2);
table.setCellspacing(0);
table.setWidth(Table.HUNDRED_PERCENT);
int row = 0;
int tournamentRoundId = 0;
TournamentRound[] tRounds = tournament.getTournamentRounds();
if (tournament_round_id != null) {
tournamentRoundId = Integer.parseInt(tournament_round_id);
}
else {
if (tRounds.length > 0) {
tournamentRoundId = tRounds[0].getID();
}
}
Table myTable = new Table();
myTable.setCellspacing(0);
myTable.setWidth(Table.HUNDRED_PERCENT);
myTable.setAlignment(1, 1, Table.HORIZONTAL_ALIGN_RIGHT);
IWTimestamp tourDay;
DropdownMenu rounds = (DropdownMenu)getStyledInterface(new DropdownMenu("tournament_round"));
for (int i = 0; i < tRounds.length; i++) {
tourDay = new IWTimestamp(tRounds[i].getRoundDate());
rounds.addMenuElement(tRounds[i].getID(), tRounds[i].getName() + " " + tourDay.getLocaleDate(modinfo.getCurrentLocale()));
}
if (tournamentRoundId != 0) {
rounds.setSelectedElement(Integer.toString(tournamentRoundId));
}
rounds.setToSubmit();
myTable.add(rounds, 1, 1);
form.add(myTable);
++row;
Text rast = getSmallHeader(localize("tournament.teetimes", "Teetimes"));
Text move = getSmallHeader(localize("tournament.move","Move"));
Text name = getSmallHeader(localize("tournament.name","Name"));
Text club = getSmallHeader(localize("tournament.club","Club"));
Text hand = getSmallHeader(localize("tournament.handicap","Handicap"));
Text del = getSmallHeader(localize("tournament.delete","Delete"));
Text tee = getSmallHeader(localize("tournament.tee","Tee"));
table.add(rast, 1, row);
table.add(move, 2, row);
table.add(name, 3, row);
table.add(club, 4, row);
table.add(hand, 5, row);
table.add(del, 6, row);
table.setRowStyleClass(row,getHeaderRowClass());
table.setColumnWidth(1,"100");
table.setColumnWidth(2,"70");
table.setColumnWidth(4,"70");
table.setColumnWidth(5,"70");
table.setColumnWidth(6,"70");
if (tournamentRoundId != 0) {
TournamentRound tournamentRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(tournamentRoundId);
boolean displayTee = false;
if (tournamentRound.getStartingtees() > 1) {
displayTee = true;
}
addHeading(tournament.getName());
DropdownMenu availableGrupNums = getAvailableGrupNums(tournament, tournamentRound);
DropdownMenu clonedMenu;
CheckBox memberCheck;
CheckBox delMember;
for (int y = 1; y <= tournamentRound.getStartingtees(); y++) {
// HAR�K��UN DAU�ANS
int tee_number = 1;
if (y == 2)
tee_number = 10;
//
int interval = tournament.getInterval();
int numberInGroup = tournament.getNumberInGroup();
IWTimestamp start = new IWTimestamp(tournamentRound.getRoundDate());
start.addMinutes(-interval);
IWTimestamp end = new IWTimestamp(tournamentRound.getRoundEndDate());
java.text.DecimalFormat extraZero = new java.text.DecimalFormat("00");
Startingtime[] sTimes;
Text time;
int grupNum = 0;
if (displayTee) {
++row;
Text startTee = getText(localize("tournament.tee","Tee")+" : " + tee_number);
table.add(startTee, 1, row);
table.setRowColor(row, "#336661");
table.mergeCells(1, row, 6, row);
table.setAlignment(1, row, "center");
}
Text errorText = new Text("Ekki pl�ss");
errorText.setFontColor("RED");
while (end.isLaterThan(start)) {
++grupNum;
++row;
start.addMinutes(interval);
sTimes = (Startingtime[]) ((Startingtime) IDOLookup.instanciateEntity(Startingtime.class)).findAll("Select startingtime.* from startingtime, tournament_round_startingtime where tournament_round_startingtime.startingtime_id = startingtime.startingtime_id AND tournament_round_startingtime.tournament_round_id = " + tournamentRoundId + " AND grup_num = " + grupNum + " AND tee_number = " + tee_number + " order by startingtime.grup_num, tee_number");
clonedMenu = (DropdownMenu) availableGrupNums.clone();
clonedMenu.setName("grup_num_dropdown_grup_num_" + grupNum + "_tee_num_" + tee_number);
table.add(new HiddenInput("tee_number", Integer.toString(tee_number)), 1, row);
time = new Text();
time.setText(extraZero.format(start.getHour()) + ":" + extraZero.format(start.getMinute()));
time.setFontStyle("letter-spacing:1px;font-family:Arial,Helvetica,sans-serif;background-color:#FFFFFF;font-size:18px;color:#2C4E3B;border-width:1px;font-weight:bold;border-style:solid;");
//time = new
// Flash("http://jgenerator.sidan.is/time.swt?grc=true&time="+extraZero.format(start.getHour())+":"+extraZero.format(start.getMinute()),extraZero.format(start.getHour())+":"+extraZero.format(start.getMinute()));
//time.setWidth("60");
//time.setHeight("40");
// time = new
// Image("http://jgenerator.sidan.is/time.swt?grc=true&time="+extraZero.format(start.getHour())+":"+extraZero.format(start.getMinute()),extraZero.format(start.getHour())+":"+extraZero.format(start.getMinute()));
//table.add(extraZero.format(start.getHour())+":"+extraZero.format(start.getMinute()),1,row);
table.add(time, 1, row);
//table.setAlignment(1,row,"center");
table.add("<br><br>", 1, row);
table.setVerticalAlignment(1, row, "top");
table.setStyleClass(1, row, getBigRowClass());
table.mergeCells(1, row, 1, row + numberInGroup - 1);
if (sTimes.length > 0) {
table.add(clonedMenu, 1, row);
table.add(new HiddenInput("grup_num", Integer.toString(grupNum)), 1, row);
}
for (int i = 0; i < sTimes.length; i++) {
String rowClass = (row%2==0)?getLightRowClass():getDarkRowClass();
table.setStyleClass(2, row, rowClass);
table.setStyleClass(3, row, rowClass);
table.setStyleClass(4, row, rowClass);
table.setStyleClass(5, row, rowClass);
table.setStyleClass(6, row, rowClass);
memberCheck = new CheckBox("grup_num_" + grupNum + "_member_checkbox_member_id_" + sTimes[i].getMemberID());
delMember = new CheckBox("remove_startingtime", "" + sTimes[i].getMemberID());
clonedMenu = (DropdownMenu) availableGrupNums.clone();
clonedMenu.setName("grup_num_dropdown_member_id_" + sTimes[i].getMemberID());
table.add(memberCheck, 2, row);
table.add(sTimes[i].getPlayerName(), 3, row);
table.add(sTimes[i].getClubName(), 4, row);
table.add(TextSoap.singleDecimalFormat(sTimes[i].getHandicap()), 5, row);
table.add(new HiddenInput("startingtime_id_member_id_" + sTimes[i].getMemberID(), Integer.toString(sTimes[i].getID())), 3, row);
table.add(new HiddenInput("member_id", Integer.toString(sTimes[i].getMemberID())), 3, row);
table.add(delMember, 6, row);
/*
* if ( (i+1) > numberInGroup) { table.add(errorText,1,row);
* table.setAlignment(1,row,"right"); table.setColor(1,row,color1); }
*/
++row;
}
for (int i = sTimes.length; i < numberInGroup; i++) {
String rowClass = (row%2==0)?getLightRowClass():getDarkRowClass();
table.add(" ", 3, row);
table.setStyleClass(2, row, rowClass);
table.setStyleClass(3, row, rowClass);
table.setStyleClass(4, row, rowClass);
table.setStyleClass(5, row, rowClass);
table.setStyleClass(6, row, rowClass);
++row;
}
--row;
}
}
}
else {
add("M�ti� er ekki sett upp r�tt");
}
++row;
table.mergeCells(1, row, 2, row);
table.mergeCells(3, row, 6, row);
Link link = getLocalizedLink("tournament.add_teetimes","Add teetimes");
link.addParameter("action", "addMember");
link.addParameter("tournament_round", tournamentRoundId + "");
link.addParameter("tournament", tournament.getID() + "");
table.add(link, 1, row);
table.add(getTournamentBusiness(modinfo).getAheadButton(modinfo, "", ""), 3, row);
table.add(new HiddenInput("action", "update"), 3, row);
table.add(new HiddenInput("tournament_round", tournamentRoundId + ""), 3, row);
table.setAlignment(1, row, "right");
table.setColumnAlignment(1, "center");
table.setColumnAlignment(2, "center");
table.setColumnAlignment(4, "center");
table.setColumnAlignment(5, "center");
table.setColumnAlignment(6, "center");
table.setAlignment(1, 1, "center");
table.setAlignment(3, 1, "left");
table.setAlignment(3, row, "right");
Table borderTable = new Table();
borderTable.setWidth(Table.HUNDRED_PERCENT);
borderTable.setCellpaddingAndCellspacing(0);
borderTable.setCellBorder(1, 1, 1, "#3A5A20", "solid");
borderTable.add(table);
form.add(borderTable);
return form;
}
public DropdownMenu getAvailableGrupNums(Tournament tournament, TournamentRound tRound) throws SQLException {
DropdownMenu menu = (DropdownMenu)getStyledInterface(new DropdownMenu("grup_num_dropdown"));
int interval = tournament.getInterval();
int grupNum = 0;
IWTimestamp start = new IWTimestamp(tRound.getRoundDate());
start.addMinutes(-interval);
IWTimestamp end = new IWTimestamp(tRound.getRoundEndDate());
java.text.DecimalFormat extraZero = new java.text.DecimalFormat("00");
menu.addMenuElement(0, "");
boolean displayTee = false;
if (tRound.getStartingtees() > 1) {
displayTee = true;
}
while (end.isLaterThan(start)) {
++grupNum;
start.addMinutes(interval);
if (displayTee) {
menu.addMenuElement(grupNum, extraZero.format(start.getHour()) + ":" + extraZero.format(start.getMinute()) + " (1)");
menu.addMenuElement(grupNum + "_", extraZero.format(start.getHour()) + ":" + extraZero.format(start.getMinute()) + " (10)");
}
else {
menu.addMenuElement(grupNum, extraZero.format(start.getHour()) + ":" + extraZero.format(start.getMinute()));
}
}
return menu;
}
public void executeUpdate(IWContext modinfo) throws FinderException, RemoteException, SQLException {
String[] member_id = modinfo.getParameterValues("member_id");
String[] grup_nums = modinfo.getParameterValues("grup_num");
String[] tee_number = modinfo.getParameterValues("tee_number");
String[] to_remove = modinfo.getParameterValues("remove_startingtime");
String tournament_round_id = modinfo.getParameter("tournament_round");
if (tournament_round_id != null) {
TournamentRound trou = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(Integer.parseInt(tournament_round_id));
getTournamentBusiness(modinfo).invalidateStartingTimeCache(modinfo, trou.getTournamentID(), tournament_round_id);
if (to_remove != null) {
String[] flipp;
Startingtime sTime;
TournamentRound tournamentRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(Integer.parseInt(tournament_round_id));
for (int i = 0; i < to_remove.length; i++) {
try {
flipp = com.idega.data.SimpleQuerier.executeStringQuery("Select s.startingtime_id from startingtime s, tournament_round_startingtime trs WHERE trs.startingtime_id = s.startingtime_id AND trs.tournament_round_id = " + tournament_round_id + " AND s.member_id = " + to_remove[i] + "");
if (flipp.length > 0) {
sTime = ((StartingtimeHome) IDOLookup.getHomeLegacy(Startingtime.class)).findByPrimaryKey(Integer.parseInt(flipp[0]));
sTime.removeFrom(tournamentRound);
sTime.delete();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
String startingtime_id;
String grup_num;
Startingtime sTime;
if (grup_nums != null) {
Startingtime[] sTimes;
TournamentRound tournamentRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(Integer.parseInt(tournament_round_id));
Tournament tournament = tournamentRound.getTournament();
Member member;
for (int i = 0; i < grup_nums.length; i++) {
String grup_num1 = modinfo.getParameter("grup_num_dropdown_grup_num_" + grup_nums[i] + "_tee_num_1");
String grup_num10 = modinfo.getParameter("grup_num_dropdown_grup_num_" + grup_nums[i] + "_tee_num_10");
grup_num = modinfo.getParameter("grup_num_dropdown_grup_num_" + grup_nums[i] + "_tee_num_" + tee_number[i]);
// System.out.println("[-=Gimmi=-] GrupNum["+i+"] TeeNum 1 =
// "+grup_num1);
// System.out.println("[-=Gimmi=-] GrupNum["+i+"] TeeNum 10=
// "+grup_num10);
// System.out.println("[-=Gimmi=-] GrupNum["+i+"] TeeNum["+i+"] =
// "+grup_num);
if (grup_num1 != null) {
if (!"0".equals(grup_num1))
grup_num = grup_num1;
}
if (grup_num10 != null) {
if (!"0".equals(grup_num10))
grup_num = grup_num10;
}
// System.out.println("[-=Gimmi=-] GrupNum after fix = "+grup_num);
if (grup_num != null) {
if (!grup_num.equals("0")) {
List members = getTournamentBusiness(modinfo).getMembersInStartingGroup(tournament, tournamentRound, Integer.parseInt(grup_nums[i]));
if (members != null) {
for (int g = 0; g < members.size(); g++) {
member = (Member) members.get(g);
String memberId = modinfo.getParameter("grup_num_" + grup_nums[i] + "_member_checkbox_member_id_" + member.getID());
if (memberId != null) {
sTimes = (Startingtime[]) ((Startingtime) IDOLookup.instanciateEntity(Startingtime.class)).findAll("select startingtime.* from startingtime, tournament_round_startingtime where startingtime.member_id = " + member.getID() + " AND tournament_round_startingtime.startingtime_id = startingtime.startingtime_id AND tournament_round_startingtime.tournament_round_id = " + tournamentRound.getID() + " AND startingtime.grup_num = " + grup_nums[i]);
for (int j = 0; j < sTimes.length; j++) {
if (grup_num.indexOf("_") > 0) {
//System.out.println("[-=Gimmi=-] setting scorecard to
// tee 10");
sTimes[j].setTeeNumber(10);
sTimes[j].setGroupNum(Integer.parseInt(grup_num.substring(0, (grup_num.length() - 1))));
}
else {
//System.out.println("[-=Gimmi=-] setting scorecard to
// tee 1");
sTimes[j].setTeeNumber(1);
sTimes[j].setGroupNum(Integer.parseInt(grup_num));
}
sTimes[j].update();
}
}
}
}
}
}
}
}
String sub_action = modinfo.getParameter("sub_action");
if (sub_action != null) {
if (sub_action.equals("addNew")) {
if (member_id != null) {
Member member;
TournamentRound tournamentRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(Integer.parseInt(tournament_round_id));
Tournament tournament = tournamentRound.getTournament();
for (int i = 0; i < member_id.length; i++) {
startingtime_id = modinfo.getParameter("startingtime_id_member_id_" + member_id[i]);
grup_num = modinfo.getParameter("grup_num_dropdown_member_id_" + member_id[i]);
if ((startingtime_id != null) && (grup_num != null)) {
if (!grup_num.equals("0")) {
sTime = ((StartingtimeHome) IDOLookup.getHomeLegacy(Startingtime.class)).findByPrimaryKey(Integer.parseInt(startingtime_id));
try {
sTime.setGroupNum(Integer.parseInt(grup_num));
sTime.setTeeNumber(1);
}
catch (NumberFormatException n) {
sTime.setGroupNum(Integer.parseInt(TextSoap.findAndCut(grup_num, "_")));
sTime.setTeeNumber(10);
}
sTime.update();
}
}
else if ((startingtime_id == null) && (grup_num != null)) {
if (!grup_num.equals("0")) {
member = ((MemberHome) IDOLookup.getHomeLegacy(Member.class)).findByPrimaryKey(Integer.parseInt(member_id[i]));
try {
getTournamentBusiness(modinfo).setupStartingtime(modinfo, member, tournament, Integer.parseInt(tournament_round_id), Integer.parseInt(grup_num), 1);
}
catch (NumberFormatException n) {
getTournamentBusiness(modinfo).setupStartingtime(modinfo, member, tournament, Integer.parseInt(tournament_round_id), Integer.parseInt(TextSoap.findAndCut(grup_num, "_")), 10);
}
}
}
}
}
}
}
}
}
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 Form drawLeftOuts(IWContext modinfo, Tournament tournament, String tournament_round_id) throws SQLException, FinderException, RemoteException {
Form form = new Form();
Table table = new Table();
form.add(table);
table.setBorder(0);
table.setCellpadding(2);
table.setCellspacing(1);
table.setAlignment("center");
table.setWidth("85%");
table.add(new HiddenInput("tournament_round", tournament_round_id));
table.add(new HiddenInput("action", "update"));
table.add(new HiddenInput("sub_action", "addNew"));
int tournamentRoundId = 0;
TournamentRound[] tRounds = tournament.getTournamentRounds();
if (tournament_round_id != null) {
tournamentRoundId = Integer.parseInt(tournament_round_id);
}
else {
if (tRounds.length > 0) {
tournamentRoundId = tRounds[0].getID();
}
}
if (tournamentRoundId != 0) {
TournamentRound tournamentRound = ((TournamentRoundHome) IDOLookup.getHomeLegacy(TournamentRound.class)).findByPrimaryKey(tournamentRoundId);
int row = 0;
DropdownMenu availableGrupNums = getAvailableGrupNums(tournament, tournamentRound);
availableGrupNums.setStyleAttribute("font-size: 8pt");
DropdownMenu clonedMenu;
++row;
table.add("�n r�st�ma", 1, row);
Member[] leftOut = (Member[]) ((Member) IDOLookup.instanciateEntity(Member.class)).findAll("select * from member where member_id in (Select member_id from tournament_member where tournament_id = " + tournamentRound.getTournamentID() + ") AND member_id not in (select s.member_id from startingtime s, tournament_round_startingtime trs where trs.startingtime_id = s.startingtime_id and trs.tournament_round_id = " + tournamentRound.getID() + " ) ");
table.add(" : " + leftOut.length, 1, row);
for (int i = 0; i < leftOut.length; i++) {
++row;
clonedMenu = (DropdownMenu) availableGrupNums.clone();
clonedMenu.setName("grup_num_dropdown_member_id_" + leftOut[i].getID());
table.add(new HiddenInput("member_id", leftOut[i].getID() + ""));
table.add(clonedMenu, 2, row);
table.add(leftOut[i].getName(), 3, row);
}
++row;
table.mergeCells(3, row, 6, row);
table.setAlignment(3, row, "right");
table.add(getTournamentBusiness(modinfo).getAheadButton(modinfo, "", ""), 3, row);
}
return form;
}
}