001package org.matsim.contribs.discrete_mode_choice.model.constraints;
002
003import java.util.ArrayList;
004import java.util.Collection;
005import java.util.LinkedList;
006import java.util.List;
007
008import org.matsim.api.core.v01.population.Person;
009import org.matsim.contribs.discrete_mode_choice.model.DiscreteModeChoiceTrip;
010import org.matsim.contribs.discrete_mode_choice.model.trip_based.TripConstraint;
011import org.matsim.contribs.discrete_mode_choice.model.trip_based.TripConstraintFactory;
012
013/**
014 * Creates a CompositeTripConstraint.
015 * 
016 * @author sebhoerl
017 */
018public class CompositeTripConstraintFactory implements TripConstraintFactory {
019        final private List<TripConstraintFactory> factories = new LinkedList<>();
020
021        public CompositeTripConstraintFactory() {
022        }
023
024        public CompositeTripConstraintFactory(List<TripConstraintFactory> factories) {
025                this.factories.addAll(factories);
026        }
027
028        public void addFactory(TripConstraintFactory factory) {
029                this.factories.add(factory);
030        }
031
032        @Override
033        public TripConstraint createConstraint(Person person, List<DiscreteModeChoiceTrip> planTrips,
034                        Collection<String> availableModes) {
035                List<TripConstraint> constraints = new ArrayList<>(factories.size());
036                factories.forEach(f -> constraints.add(f.createConstraint(person, planTrips, availableModes)));
037                return new CompositeTripConstraint(constraints);
038        }
039}