util::ParametersMap PTRouteDetailFunction::run(ostream& stream, const Request& request) const { const CommercialLine * commercialLine(_journeyPattern->getCommercialLine()); ParametersMap m; // Properties m.insert(DATA_ID, _journeyPattern->getKey()); m.insert(DATA_NAME, _journeyPattern->getName()); m.insert(DATA_IS_MAIN, _journeyPattern->getMain()); m.insert(DATA_LINE_ID, commercialLine->getKey()); m.insert(DATA_LINE_NAME, commercialLine->getName()); m.insert(DATA_LINE_SHORT_NAME, commercialLine->getShortName()); m.insert(DATA_LINE_LONG_NAME, commercialLine->getLongName()); m.insert(DATA_LINE_IMAGE, commercialLine->getImage()); m.insert(DATA_LINE_STYLE, commercialLine->getStyle()); if(commercialLine->getColor()) { m.insert(DATA_LINE_COLOR, commercialLine->getColor()->toXMLColor()); } m.insert( DATA_DIRECTION, _journeyPattern->getDirection().empty() && _journeyPattern->getDirectionObj() ? _journeyPattern->getDirectionObj()->getDisplayedText() : _journeyPattern->getDirection() ); // Edges const StopArea* lastConnPlace(NULL); BOOST_FOREACH(const Edge* edge, _journeyPattern->getAllEdges()) { if( (!edge->isDepartureAllowed() || !_displayDepartureStops) && (!edge->isArrivalAllowed() || !_displayArrivalStops) ){ continue; } const StopPoint* stopPoint(static_cast<const StopPoint *>(edge->getFromVertex())); const StopArea* connPlace(stopPoint->getConnectionPlace()); // Display same stop area once if(_displaySameStopAreaOnce && connPlace == lastConnPlace) { continue; } lastConnPlace = connPlace; const LineStop* lineStop(static_cast<const LineStop*>(edge)); boost::shared_ptr<ParametersMap> sm(new ParametersMap); sm->insert(DATA_ID, stopPoint->getKey()); sm->insert(DATA_RANK, edge->getRankInPath()); sm->insert(DATA_DEPARTURE_IS_ALLOWED, edge->isDepartureAllowed()); sm->insert(DATA_ARRIVAL_IS_ALLOWED, edge->isArrivalAllowed()); sm->insert(DATA_WITH_SCHEDULES, lineStop->getScheduleInput()); sm->insert(DATA_RESERVATION_NEEDED, lineStop->getReservationNeeded()); sm->insert(DATA_NAME, stopPoint->getName()); sm->insert(DATA_OPERATOR_CODE, stopPoint->getCodeBySources()); sm->insert(DATA_STOP_AREA_ID, connPlace->getKey()); sm->insert(DATA_STOP_AREA_NAME, connPlace->getName()); sm->insert(DATA_CITY_ID, connPlace->getCity()->getKey()); sm->insert(DATA_CITY_NAME, connPlace->getCity()->getName()); sm->insert(DATA_DIRECTION_ALIAS, connPlace->getName26()); if(_service.get()) { if(edge->isDepartureAllowed()) { sm->insert(DATA_DEPARTURE_TIME, to_simple_string(Service::GetTimeOfDay(_service->getDepartureSchedule(false, edge->getRankInPath())))); } if(edge->isArrivalAllowed()) { sm->insert(DATA_ARRIVAL_TIME, to_simple_string(Service::GetTimeOfDay(_service->getArrivalSchedule(false, edge->getRankInPath())))); } } m.insert(TAG_STOP, sm); } // CMS Display if(_mainPage.get()) { // Template parameters m.merge(getTemplateParameters()); // Stops if(_stopPage.get()) { stringstream s; BOOST_FOREACH(const boost::shared_ptr<ParametersMap>& item, m.getSubMaps(TAG_STOP)) { item->merge(getTemplateParameters()); _stopPage->display(s, request, *item); } m.insert(DATA_STOPS, s.str()); }