/** * Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onebusaway.webapp.actions.where; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Actions; import org.onebusaway.exceptions.ServiceException; import org.onebusaway.transit_data.model.AgencyBean; import org.onebusaway.webapp.impl.WebappArrivalsAndDeparturesModel; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.ModelDriven; import com.opensymphony.xwork2.conversion.annotations.TypeConversion; public class StopAction extends AbstractWhereAction implements ModelDriven<WebappArrivalsAndDeparturesModel> { private static final long serialVersionUID = 1L; protected List<String> _ids; private Set<String> _routes; private String _title; private boolean _showTitle = true; protected WebappArrivalsAndDeparturesModel _model; @Autowired public void setModel(WebappArrivalsAndDeparturesModel model) { _model = model; } /** * To give more than one Stop ID, the URL must specify id= more than once. */ public void setId(List<String> ids) { _ids = new ArrayList<String>(ids); _model.setStopIds(_ids); } public List<String> getId() { return _ids; } /** * Supports two styles of URL. It can be comma-seperated, or route= can be * given multiple times. */ public void setRoute(List<String> routeLists) { _routes = new HashSet<String>(); for (String routes : routeLists) { if (!(routes.length() == 0 || routes.equals("all"))) { for (String token : routes.split(",")) { _routes.add(token); } } } if (!_routes.isEmpty()) _model.setRouteFilter(_routes); } public Set<String> getRoutes() { return _routes; } public void setOrder(String order) { if (!_model.setOrderFromString(order)) addFieldError("order", "unknown order value: " + order); } @TypeConversion(converter = "org.onebusaway.presentation.impl.conversion.DateTimeConverter") public void setTime(Date time) { _model.setTargetTime(time); } public void setMinutesBefore(int minutesBefore) { _model.setMinutesBefore(minutesBefore); } public void setMinutesAfter(int minutesAfter) { _model.setMinutesAfter(minutesAfter); } public void setShowArrivals(boolean showArrivals) { _model.setShowArrivals(showArrivals); } public boolean isShowArrivals() { return _model.isShowArrivals(); } @Override public WebappArrivalsAndDeparturesModel getModel() { return _model; } public void setTitle(String title) { _title = title; } public String getTitle() { return _title; } public void setShowTitle(boolean showTitle) { _showTitle = showTitle; } public boolean isShowTitle() { return _showTitle; } @Override @Actions({ @Action(value = "/where/standard/stop"), @Action(value = "/where/iphone/stop"), @Action(value = "/where/text/stop"), @Action(value = "/where/sign/stop")}) public String execute() throws ServiceException { if (_ids == null || _ids.isEmpty()) return INPUT; _model.process(); logUserInteraction("stopIds", _model.getStopIds(), "routeIds", _model.getRouteFilter()); return SUCCESS; } public boolean testAgenciesWithDisclaimers(List<AgencyBean> agencies) { for (AgencyBean agency : agencies) { String disclaimer = agency.getDisclaimer(); if (disclaimer != null && disclaimer.length() > 0) return true; } return false; } /** * Build URL of stops and routes for the Refined Search page. */ public String getStopAndRouteIdsAsUrlParams() { StringBuilder sb = new StringBuilder(); for (String id : _ids) { sb.append("id=" + id + "&"); } if (_routes != null) { for (String route : _routes) { sb.append("route=" + route + "&"); } } sb.setLength(sb.length() - 1); // trim the final "&" return sb.toString(); } }