private Iterable<PlanTicket> query(final TicketPoolQueryArgs args) throws Exception
	{
	
		IPlanTicketFilter[] filters = this.createFilters();
		
		Iterable<PlanTicket> rs = Queries.query(this._stopRangeGroups)
				.where(new Predicate<StopRangeGroup>(){

					@Override
					public boolean evaluate(StopRangeGroup group)
							throws Exception {
						return group.getRange().start <= args.getDepartureStop() && args.getDestinationStop() <= group.getRange().end;
					}})
				.selectMany(new Selector<StopRangeGroup, Iterable<PlanTicket>>(){

					@Override
					public Iterable<PlanTicket> select(StopRangeGroup item) {
						return item.getTickets();
					}});
		
		
		for(IPlanTicketFilter filter : filters)
		{
			rs = filter.filter(rs, args);
		}
		
		return rs;
		
	}