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

org.opentripplanner.model.fare.ItineraryFares Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.model.fare;

import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import org.opentripplanner.framework.lang.Sandbox;
import org.opentripplanner.framework.tostring.ToStringBuilder;
import org.opentripplanner.model.plan.Leg;

/**
 *
 * ItineraryFares is a set of fares for different legs, rider categories or fare media.
 */
@Sandbox
public class ItineraryFares {

  /**
   * The fare products that are valid for all legs of an itinerary, like a day pass.
   * 

* Note: LinkedHashSet keeps the insertion order */ private final Set itineraryProducts = new LinkedHashSet<>(); /** * Fare products that apply to one or more legs but _not_ the entire journey. *

* Note: LinkedHashMultimap keeps the insertion order */ private final Multimap legProducts = LinkedHashMultimap.create(); public static ItineraryFares empty() { return new ItineraryFares(); } /** * Get those fare products that cover the entire itinerary. */ public List getItineraryProducts() { return List.copyOf(itineraryProducts); } /** * Get those fare products that are valid for a subset of legs but not the entire itinerary. */ public Multimap getLegProducts() { return ImmutableMultimap.copyOf(legProducts); } /** * Add fare products that cover the entire itinerary, i.e. are valid for all legs. */ public void addItineraryProducts(Collection products) { itineraryProducts.addAll(products); } @Override public int hashCode() { return Objects.hash(itineraryProducts, legProducts); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ItineraryFares fare1 = (ItineraryFares) o; return ( Objects.equals(itineraryProducts, fare1.itineraryProducts) && Objects.equals(legProducts, fare1.legProducts) ); } @Override public String toString() { return ToStringBuilder .of(this.getClass()) .addObj("itineraryProducts", itineraryProducts) .addObj("legProducts", legProducts) .toString(); } /** * Add a single fare product for a single leg. */ public void addFareProduct(Leg leg, FareProduct fareProduct) { this.legProducts.put( leg, new FareProductUse(fareProduct.uniqueInstanceId(leg.getStartTime()), fareProduct) ); } /** * Add several fare products to a leg. */ public void addFareProduct(Leg leg, Collection fareProduct) { fareProduct.forEach(fp -> addFareProduct(leg, fp)); } public void addFareProductUses(Multimap fareProducts) { legProducts.putAll(fareProducts); } /** * Add the contents of another instance to this one. */ public void add(ItineraryFares fare) { itineraryProducts.addAll(fare.itineraryProducts); legProducts.putAll(fare.legProducts); } /** * Does this instance contain any fare products? */ public boolean isEmpty() { return itineraryProducts.isEmpty() && legProducts.isEmpty(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy