/*
* $Id: RunInputCollectionHandler.java,v 1.14 2007/12/17 13:48:13 civilis Exp $
* Created on Feb 14, 2005
*
* Copyright (C) 2005 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
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.Year;
import is.idega.idegaweb.marathon.util.IWMarathonConstants;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.core.cache.IWCacheManager2;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.presentation.PresentationObject;
import com.idega.presentation.remotescripting.RemoteScriptCollection;
import com.idega.presentation.remotescripting.RemoteScriptHandler;
import com.idega.presentation.remotescripting.RemoteScriptingResults;
import com.idega.user.data.Group;
import com.idega.util.CoreConstants;
import com.idega.util.IWTimestamp;
/**
*
* Last modified: $Date: 2007/12/17 13:48:13 $ by $Author: civilis $
*
* @author <a href="mailto:birna@idega.com">birna</a>
* @version $Revision: 1.14 $
*/
public class RunInputCollectionHandler extends PresentationObject implements RemoteScriptCollection {
//TODO parameter check member ID
public static final String PARAMETER_USER_ID = "rich_uid";
public static final String RUNNER_PERSONAL_ID = "rich_runner_pid";
public String getBundleIdentifier() {
return IWMarathonConstants.IW_BUNDLE_IDENTIFIER;
}
public RemoteScriptingResults getResults(IWContext iwc) {
String sourceName = iwc.getParameter(RemoteScriptHandler.PARAMETER_SOURCE_PARAMETER_NAME);
String sourceID = iwc.getParameter(sourceName);
return handleDistanceUpdate(iwc, sourceName, sourceID);
}
private RemoteScriptingResults handleDistanceUpdate(IWContext iwc, String sourceName, String runIdString) {
IWResourceBundle iwrb = getResourceBundle(iwc);
if (runIdString != null) {
Integer runId = Integer.valueOf(runIdString);
RunBusiness runBiz = getRunBiz(iwc);
IWTimestamp ts = IWTimestamp.RightNow();
Integer y = new Integer(ts.getYear());
String yearString = y.toString();
IWTimestamp stamp = new IWTimestamp();
stamp.addYears(1);
String nextYearString = String.valueOf(stamp.getYear());
try {
Collection distancesGroups = null;
if (runId.intValue() != -1) {
Group run = runBiz.getRunGroupByGroupId(runId);
String runnerYearString = yearString;
boolean finished = false;
boolean foundYear = false;
Map yearMap = runBiz.getYearsMap(run);
Year year = (Year) yearMap.get(yearString);
if (year != null && year.getLastRegistrationDate() != null && ts.isLaterThanOrEquals(new IWTimestamp(year.getLastRegistrationDate()))) {
finished = true;
} else {
foundYear = true;
}
Year nextYear = (Year) yearMap.get(nextYearString);
if (finished && nextYear != null && nextYear.getLastRegistrationDate() != null && ts.isEarlierThan(new IWTimestamp(nextYear.getLastRegistrationDate()))) {
runnerYearString = nextYearString;
foundYear = true;
}
if (foundYear) {
distancesGroups = runBiz.getDistancesMap(run, runnerYearString);
}
}
Vector ids = new Vector();
Vector names = new Vector();
if (distancesGroups != null) {
if (!distancesGroups.isEmpty()) {
ids.add("-1");
names.add(iwrb.getLocalizedString("run_year_ddd.select_distance","Select distance..."));
Map runners = (Map) iwc.getSessionAttribute(Registration.SESSION_ATTRIBUTE_RUNNER_MAP);
String runnerPersonalId = iwc.getParameter(RUNNER_PERSONAL_ID);
Runner runner = runners == null || runnerPersonalId == null || CoreConstants.EMPTY.equals(runnerPersonalId) ? null :
(Runner)runners.get(runnerPersonalId);
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 distancesGroupsIterator = distancesGroups.iterator(); distancesGroupsIterator.hasNext();)
distances.add(converterUtility.convertGroupToDistance((Group) distancesGroupsIterator.next()));
disallowedDistances = runner.getDisallowedDistancesPKs(distances);
}
for (Iterator iterator = distancesGroups.iterator(); iterator.hasNext();) {
Group distanceGroup = (Group) iterator.next();
if(disallowedDistances.contains(distanceGroup.getPrimaryKey().toString())) {
ids.add("-1");
names.add(
new StringBuffer(iwrb.getLocalizedString(distanceGroup.getName(), distanceGroup.getName()))
.append(" ")
.append(iwrb.getLocalizedString("runDistance.choiceNotAvailableBecauseOfAge", "(Not available for your age)"))
.toString()
);
} else {
ids.add(distanceGroup.getPrimaryKey().toString());
names.add(iwrb.getLocalizedString(distanceGroup.getName(), distanceGroup.getName()));
}
}
} else {
ids.add("-1");
names.add(iwrb.getLocalizedString("unavailable","Unavailable"));
}
} else {
ids.add("-1");
names.add(iwrb.getLocalizedString("unavailable","Unavailable"));
}
RemoteScriptingResults rsr = new RemoteScriptingResults(RemoteScriptHandler.getLayerName(sourceName, "id"), ids);
rsr.addLayer(RemoteScriptHandler.getLayerName(sourceName, "name"), names);
return rsr;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
private RunBusiness getRunBiz(IWContext iwc) {
RunBusiness business = null;
try {
business = (RunBusiness) IBOLookup.getServiceInstance(iwc, RunBusiness.class);
}
catch (IBOLookupException e) {
business = null;
}
return business;
}
}