All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.routing.algorithm.filterchain.filters.DebugFilterWrapper Maven / Gradle / Ivy

There is a newer version: 2.5.0
Show newest version
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. "
    ));
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy