001package org.matsim.contrib.util;
002
003import java.util.*;
004
005import org.matsim.api.core.v01.*;
006import org.matsim.api.core.v01.population.*;
007
008public class PopulationUtils {
009        public static void convertLegModes(List<String> passengerIds, String mode, Scenario scenario) {
010                Map<Id<Person>, ? extends Person> persons = scenario.getPopulation().getPersons();
011
012                for (String id : passengerIds) {
013                        Person person = persons.get(Id.create(id, Person.class));
014
015                        for (PlanElement pe : person.getSelectedPlan().getPlanElements()) {
016                                if (pe instanceof Leg) {
017                                        ((Leg)pe).setMode(mode);
018                                }
019                        }
020                }
021        }
022
023        public static void removePersonsNotUsingMode(String mode, Scenario scenario) {
024                Map<Id<Person>, ? extends Person> persons = scenario.getPopulation().getPersons();
025                Iterator<? extends Person> personIter = persons.values().iterator();
026
027                while (personIter.hasNext()) {
028                        Plan selectedPlan = personIter.next().getSelectedPlan();
029
030                        if (!hasLegOfMode(selectedPlan, mode)) {
031                                personIter.remove();
032                        }
033                }
034        }
035
036        private static boolean hasLegOfMode(Plan plan, String mode) {
037                for (PlanElement pe : plan.getPlanElements()) {
038                        if (pe instanceof Leg) {
039                                if (((Leg)pe).getMode().equals(mode)) {
040                                        return true;
041                                }
042                        }
043                }
044
045                return false;
046        }
047}