package is.idega.idegaweb.marathon.presentation;
import is.idega.idegaweb.marathon.business.ConverterUtility;
import is.idega.idegaweb.marathon.business.RunBusiness;
import is.idega.idegaweb.marathon.business.Runner;
import is.idega.idegaweb.marathon.data.Participant;
import is.idega.idegaweb.marathon.data.Run;
import is.idega.idegaweb.marathon.data.Year;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.business.IBORuntimeException;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.user.data.Group;
import com.idega.util.CoreConstants;
public class DistanceDropDownMenu extends DropdownMenu {
private static final String IW_BUNDLE_IDENTIFIER = "is.idega.idegaweb.marathon";
// private static final String PARAMETER_DISTANCES = "prm_distances";
private static final String PARAMETER_MARATHON_PK = "prm_run_pk";
private Run run;
private Group distance;
private Runner runner;
public DistanceDropDownMenu(String parameterName) {
super(parameterName);
}
public DistanceDropDownMenu(String parameterName, Runner runner) {
super(parameterName);
this.runner = runner;
this.run = runner.getRun();
this.distance = runner.getDistance();
}
public DistanceDropDownMenu(String parameterName, Participant participant) {
super(parameterName);
try {
this.run = ConverterUtility.getInstance().convertGroupToRun(participant.getRunTypeGroup());
this.distance = participant.getRunDistanceGroup();
} catch (Exception e){
e.printStackTrace();
}
}
public void main(IWContext iwc) throws Exception {
super.main(iwc);
IWResourceBundle iwrb = this.getResourceBundle(iwc);
addMenuElement("-1", iwrb.getLocalizedString("run_year_ddd.select_distance", "Select distance..."));
if (this.run == null && iwc.isParameterSet(PARAMETER_MARATHON_PK)) {
Group gRun = getRunBusiness(iwc).getRunGroupByGroupId(Integer.valueOf(iwc.getParameter(PARAMETER_MARATHON_PK)));
run = ConverterUtility.getInstance().convertGroupToRun(gRun);
}
if (this.run != null) {
Year year = this.runner.getYear();
//Year year = ConverterUtility.getInstance().convertGroupToYear(Integer.valueOf(distance.getParentNode().getId()));
String runnerYearString = year.getYearString();
Collection distancesGroups = getRunBusiness(iwc).getDistancesMap(run, runnerYearString);
if (distancesGroups != null) {
List disallowedDistances;
if(runner == null) {
Logger.getLogger(this.getClassName()).log(Level.WARNING, "No runner resolved, therefore no filtering for distances drop down list");
disallowedDistances = new ArrayList();
} else {
List distances = new ArrayList(distancesGroups.size());
ConverterUtility converterUtility = ConverterUtility.getInstance();
for (Iterator distancesIterator = distances.iterator(); distancesIterator.hasNext();)
distances.add(converterUtility.convertGroupToDistance((Group) distancesIterator.next()));
disallowedDistances = runner.getDisallowedDistancesPKs(distances);
}
for (Iterator iterator = distancesGroups.iterator(); iterator.hasNext();) {
Group distanceGroup = (Group) iterator.next();
if(disallowedDistances.contains(distanceGroup.getPrimaryKey().toString())) {
addMenuElement("-1",
new StringBuilder(iwrb.getLocalizedString(distanceGroup.getName(), distanceGroup.getName()))
.append(CoreConstants.EMPTY)
.append(iwrb.getLocalizedString("runDistance.choiceNotAvailableBecauseOfAge", "(Not available for your age)"))
.toString()
);
} else {
addMenuElement(distanceGroup.getPrimaryKey().toString(), iwrb.getLocalizedString(distanceGroup.getName(), distanceGroup.getName()));
}
}
}
if (this.distance != null) {
setSelectedElement(this.distance.getPrimaryKey().toString());
}
}
}
protected RunBusiness getRunBusiness(IWApplicationContext iwac) {
try {
return (RunBusiness) IBOLookup.getServiceInstance(iwac, RunBusiness.class);
}
catch (IBOLookupException e) {
throw new IBORuntimeException(e);
}
}
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
}