package is.idega.idegaweb.golf.tournament.presentation;
import is.idega.idegaweb.golf.access.AccessControl;
import is.idega.idegaweb.golf.entity.Member;
import is.idega.idegaweb.golf.entity.Tournament;
import is.idega.idegaweb.golf.entity.TournamentHome;
import is.idega.idegaweb.golf.entity.TournamentTour;
import is.idega.idegaweb.golf.entity.TournamentTourHome;
import is.idega.idegaweb.golf.entity.TournamentTourScoreSystem;
import is.idega.idegaweb.golf.entity.TournamentTourScoreSystemHome;
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.entity.Union;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.data.IDORuntimeException;
import com.idega.presentation.IWContext;
import com.idega.presentation.Table;
import com.idega.presentation.text.Link;
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.presentation.ui.TextInput;
import com.idega.util.IWTimestamp;
public class TournamentTourEditor extends TournamentBlock {
static final String PARAMETER_TOUR_ID = "tte_p_tid";
private static final String PARAMETER_UNION_ID = "tte_p_uid";
private static final String PARAMETER_NAME = "tte_p_name";
private static final String PARAMETER_TOUR_SCORING_TYPE_ID = "tte_p_tsid";
private static final String PARAMETER_TOURNAMENT_ID = "tte_p_tourid";
static final String ACTION = "tte_p_ac";
private static final String ACTION_NEW = "tte_p_ac_n";
private static final String ACTION_SAVE = "tte_p_ac_sn";
private static final String ACTION_EDIT = "tte_p_ac_ed";
private static final String ACTION_DELETE = "tte_p_ac_ad";
private static final String ACTION_REMOVE_TOURNAMENT = "tte_p_rmtm";
static final String ACTION_SELECT = "tte_p_ac_as";
protected boolean tournamentMustBeSet() {
return false;
}
public void main(IWContext iwc) throws Exception {
String action = iwc.getParameter(ACTION);
if (isAdmin() || isClubAdmin()) {
if (action == null) {
addMainMenu(iwc);
} else if (action.equals(ACTION_NEW)) {
addCreationMenu(iwc, -1);
} else if (action.equals(ACTION_EDIT)) {
int id = -1;
if (iwc.isParameterSet(PARAMETER_TOUR_ID)) {
id = Integer.parseInt(iwc.getParameter(PARAMETER_TOUR_ID));
addCreationMenu(iwc, id);
} else {
addMainMenu(iwc);
}
} else if (action.equals(ACTION_SAVE)) {
saveNewTour(iwc);
addMainMenu(iwc);
} else if (action.equals(ACTION_DELETE)) {
deleteTour(iwc);
addMainMenu(iwc);
} else if (action.equals(ACTION_SELECT)) {
if (iwc.isParameterSet(PARAMETER_TOUR_ID)) {
addTournamentTourInfo(iwc);
} else {
addMainMenu(iwc);
}
} else if (action.equals(ACTION_REMOVE_TOURNAMENT)) {
removeTournament(iwc);
addTournamentTourInfo(iwc);
}
} else {
add(localize("no_permission", "No permission"));
}
}
private void removeTournament(IWContext iwc) {
String id = iwc.getParameter(PARAMETER_TOUR_ID);
String tid = iwc.getParameter(PARAMETER_TOURNAMENT_ID);
try {
TournamentTournamentTourPK pk = new TournamentTournamentTourPK(new Integer(tid), new Integer(id));
TournamentTournamentTour ttTour = getTournamentTournamentTourHome().findByPrimaryKey(pk);
ttTour.remove();
} catch (FinderException e) {
e.printStackTrace();
} catch (RemoveException e) {
e.printStackTrace();
}
}
private void addTournamentTourInfo(IWContext iwc) throws FinderException {
String id = iwc.getParameter(PARAMETER_TOUR_ID);
TournamentTour tour = getTournamentTourHome().findByPrimaryKey(id);
Table outerTable = new Table();
Table headerTable = new Table();
headerTable.setWidth("100%");
outerTable.add(headerTable, 1, 1);
headerTable.add(localize("tournament.name", "Name")+ " : ", 1, 1);
headerTable.add(tour.getName(), 1, 1);
headerTable.add(localize("tournament.scoring_system", "Scoring System")+ " : ", 1, 2);
headerTable.add(tour.getScoreSystem().getName(), 1, 2);
Table tournamentList = new Table();
tournamentList.setWidth("100%");
outerTable.add(tournamentList, 1, 2);
int row = 1;
Locale locale = iwc.getCurrentLocale();
Collection tournamentIDS = getTournamentTourHome().getTournamentIDs(tour);
if (tournamentIDS != null) {
Iterator iter = tournamentIDS.iterator();
Tournament tournament;
IWTimestamp stamp;
while (iter.hasNext()) {
tournament = getTournamentHome().findByPrimaryKey(iter.next());
tournamentList.add(tournament.getName(), 1, row);
stamp = new IWTimestamp(tournament.getStartTime());
tournamentList.add(stamp.getLocaleDate(locale), 2, row);
tournamentList.setAlignment(2, row, Table.HORIZONTAL_ALIGN_RIGHT);
try {
TournamentTournamentTourPK pk = new TournamentTournamentTourPK(tournament.getPrimaryKey(), tour.getPrimaryKey());
TournamentTournamentTour ttTour = getTournamentTournamentTourHome().findByPrimaryKey(pk);
tournamentList.add(Integer.toString(ttTour.getTotalScore()), 3, row);
} catch (FinderException f) {
f.printStackTrace();
}
Link rem = new Link(localize("remove", "Remove"));
rem.addParameter(ACTION, ACTION_REMOVE_TOURNAMENT);
rem.addParameter(PARAMETER_TOUR_ID, id);
rem.addParameter(PARAMETER_TOURNAMENT_ID, tournament.getPrimaryKey().toString());
tournamentList.add(rem, 4, row);
row++;
}
}
GenericButton button = new GenericButton(localize("tournament.add_tournament", "Add tournament"));
button.setWindowToOpen(TournamentTourTournamentAdderWindow.class);
button.addParameter(PARAMETER_TOUR_ID, id);
outerTable.setAlignment(1, 3, Table.HORIZONTAL_ALIGN_RIGHT);
outerTable.add(button, 1, 3);
add(outerTable);
}
private void addMainMenu(IWContext iwc) throws Exception {
Union union = ((Member) AccessControl.getMember(iwc)).getMainUnion();
int unionID = 1;
if (union != null) {
unionID = union.getID();
}
Collection tours = getTournamentTourHome().findAllByUnionID(unionID);
DropdownMenu dTours = new DropdownMenu(PARAMETER_TOUR_ID);
dTours.setMarkupAttribute("size","10");
dTours.setStyleAttribute("width:300px");
if (tours != null) {
Iterator iter = tours.iterator();
String prefix = null;
TournamentTour tour;
if (super.isClubAdmin() && union != null) {
prefix = union.getAbbrevation()+" ";
}
while (iter.hasNext()) {
tour = (TournamentTour) iter.next();
if (prefix != null) {
dTours.addMenuElement(tour.getPrimaryKey().toString(), prefix + tour.getName());
} else {
dTours.addMenuElement(tour.getPrimaryKey().toString(), tour.getName());
}
}
}
Form form = new Form();
form.setMethod("POST");
Table table = new Table();
form.add(table);
table.add(getResourceBundle().getLocalizedString("tournament.select_a_tour","Select a tour"), 1, 1);
table.mergeCells(1, 1, 2, 1);
table.add(dTours, 1, 2);
table.mergeCells(1, 2, 2, 2);
SubmitButton create = new SubmitButton(localize("tournament.create", "Create"), ACTION, ACTION_NEW);
SubmitButton edit = new SubmitButton(localize("tournament.edit", "Edit"), ACTION, ACTION_EDIT);
SubmitButton del = new SubmitButton(localize("tournament.delete", "Delete"), ACTION, ACTION_DELETE);
SubmitButton select = new SubmitButton(localize("tournament.select", "Select"), ACTION, ACTION_SELECT);
table.add(create, 1, 3);
table.add(edit, 1, 3);
table.add(del, 2, 3);
table.add(select, 2, 3);
table.setAlignment(2, 3, Table.HORIZONTAL_ALIGN_RIGHT);
add(form);
}
private void deleteTour(IWContext iwc) {
String id = iwc.getParameter(PARAMETER_TOUR_ID);
if (id != null) {
try {
TournamentTour tour = getTournamentTourHome().findByPrimaryKey(new Integer(id));
tour.remove();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
} catch (RemoveException e) {
e.printStackTrace();
}
}
}
private void saveNewTour(IWContext iwc) {
String name = iwc.getParameter(PARAMETER_NAME);
String union = iwc.getParameter(PARAMETER_UNION_ID);
String score = iwc.getParameter(PARAMETER_TOUR_SCORING_TYPE_ID);
String id = iwc.getParameter(PARAMETER_TOUR_ID);
if (name != null && !name.trim().equals("")) {
try {
TournamentTour tour = null;
if (id != null) {
tour = getTournamentTourHome().findByPrimaryKey(new Integer(id));
} else {
tour = getTournamentTourHome().create();
}
tour.setName(name);
tour.setUnionId(Integer.parseInt(union));
tour.setScoreSystem(Integer.parseInt(score));
tour.store();
} catch (CreateException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FinderException e) {
e.printStackTrace();
}
}
}
private void addCreationMenu(IWContext modinfo, int id) {
Form form = new Form();
Table table = new Table();
form.add(table);
TournamentTour tour = null;
if (id > 0) {
try {
tour = getTournamentTourHome().findByPrimaryKey(new Integer(id));
} catch (FinderException e) {
e.printStackTrace();
}
}
int row = 1;
TextInput nameI = new TextInput(PARAMETER_NAME);
table.add(localize("tournament.name", "Name"), 1, row);
table.add(nameI, 2, row++);
table.add(localize("tournament.union", "Union"), 1, row);
DropdownMenu un = getUnionDropdown(modinfo);
table.add(un, 2, row++);
DropdownMenu menu = null;
try {
Collection system = getTournamentTourScoreSystemHome().findAll();
menu = new DropdownMenu(system, PARAMETER_TOUR_SCORING_TYPE_ID);
table.add(localize("tournament.scoring", "Scoring"), 1, row);
table.add(menu, 2, row++);
} catch (FinderException e) {
e.printStackTrace();
}
if (tour != null) {
nameI.setContent(tour.getName());
un.setSelectedElement(tour.getUnionID());
if (menu != null) {
menu.setSelectedElement(tour.getScoreSystem().getPrimaryKey().toString());
}
table.add(new HiddenInput(PARAMETER_TOUR_ID, Integer.toString(id)), 2, row);
}
SubmitButton sb = new SubmitButton(localize("tournament.save", "Save"), ACTION, ACTION_SAVE);
table.add(sb, 2, row);
table.setAlignment(2, row, Table.HORIZONTAL_ALIGN_RIGHT);
add(form);
}
private DropdownMenu getUnionDropdown(IWContext modinfo) {
Union union = null;
DropdownMenu unions = new DropdownMenu(PARAMETER_UNION_ID);
if (AccessControl.isClubAdmin(modinfo)) {
try {
union = ((Member) AccessControl.getMember(modinfo)).getMainUnion();
}
catch (FinderException fe) {
} catch (SQLException e) {
}
unions.addMenuElement(union.getID(),union.getName());
}
else {
Union[] theUnion;
try {
theUnion = (Union[])((Union) IDOLookup.instanciateEntity(Union.class)).findAllOrdered("ABBREVATION");
unions = new DropdownMenu(theUnion, PARAMETER_UNION_ID);
} catch (SQLException e) {
e.printStackTrace();
}
}
return unions;
}
private TournamentHome getTournamentHome() {
try {
return (TournamentHome) IDOLookup.getHome(Tournament.class);
} catch (IDOLookupException e) {
throw new IDORuntimeException(e);
}
}
private TournamentTourHome getTournamentTourHome() {
try {
return (TournamentTourHome) IDOLookup.getHome(TournamentTour.class);
} catch (IDOLookupException e) {
throw new IDORuntimeException(e);
}
}
private TournamentTournamentTourHome getTournamentTournamentTourHome() {
try {
return (TournamentTournamentTourHome) IDOLookup.getHome(TournamentTournamentTour.class);
} catch (IDOLookupException e) {
throw new IDORuntimeException(e);
}
}
private TournamentTourScoreSystemHome getTournamentTourScoreSystemHome() {
try {
return (TournamentTourScoreSystemHome) IDOLookup.getHome(TournamentTourScoreSystem.class);
} catch (IDOLookupException e) {
throw new IDORuntimeException(e);
}
}
}