org.opentripplanner.routing.algorithm.filterchain.filters.DebugFilterWrapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
package org.opentripplanner.routing.algorithm.filterchain.filters;
import org.opentripplanner.model.SystemNotice;
import org.opentripplanner.model.plan.Itinerary;
import org.opentripplanner.routing.algorithm.filterchain.ItineraryFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class DebugFilterWrapper implements ItineraryFilter {
private final ItineraryFilter delegate;
private final List deletedItineraries;
public DebugFilterWrapper(ItineraryFilter delegate, List deletedItineraries) {
this.delegate = delegate;
this.deletedItineraries = deletedItineraries;
}
@Override
public String name() {
return delegate.name();
}
@Override
public List filter(List itineraries) {
List previouslyUnfiltered = remindingItineraries(itineraries);
List filtered = delegate.filter(previouslyUnfiltered);
for (Itinerary it : previouslyUnfiltered) {
if(!filtered.contains(it)) {
markItineraryAsDeleted(it);
}
}
return itineraries;
}
@Override
public boolean removeItineraries() { return false; }
private List remindingItineraries(List originalList) {
return originalList.stream()
.filter(it -> !deletedItineraries.contains(it))
.collect(Collectors.toList());
}
/* inner classes */
public static class Factory {
private final List deletedItineraries = new ArrayList<>();
public ItineraryFilter wrap(ItineraryFilter original) {
if(!original.removeItineraries()) { return original; }
else { return new DebugFilterWrapper(original, deletedItineraries); }
}
}
/* private methods */
private void markItineraryAsDeleted(Itinerary itinerary) {
deletedItineraries.add(itinerary);
itinerary.addSystemNotice(new SystemNotice(
delegate.name(),
"This itinerary is marked as deleted by the " + delegate.name() + " filter. "
));
}
}