21 package org.matsim.core.population;
23 import java.util.ArrayList;
24 import java.util.List;
27 import org.apache.logging.log4j.LogManager;
41 final class PersonImpl
implements Person, Lockable {
43 private List<Plan> plans =
new ArrayList<>(6);
44 private Id<Person> id;
46 private Plan selectedPlan = null;
48 private Customizable customizableDelegate;
49 private boolean locked;
51 private final Attributes attributes =
new AttributesImpl();
53 PersonImpl(
final Id<Person>
id) {
58 public final Plan getSelectedPlan() {
59 return this.selectedPlan;
63 public boolean addPlan(
final Plan plan) {
66 if (this.selectedPlan == null) this.selectedPlan = plan;
67 return this.plans.add(plan);
72 if (selectedPlan != null && !plans.contains( selectedPlan )) {
73 throw new IllegalStateException(
"The plan to be set as selected is not null nor stored in the person's plans");
75 this.selectedPlan = selectedPlan;
79 public Plan createCopyOfSelectedPlanAndMakeSelected() {
80 Plan oldPlan = this.getSelectedPlan();
81 if (oldPlan == null) {
84 Plan newPlan = PopulationUtils.createPlan(oldPlan.getPerson());
85 PopulationUtils.copyFromTo(oldPlan, newPlan,
true);
86 this.getPlans().add(newPlan);
92 public Id<Person> getId() {
96 void changeId(
final Id<Person> newId) {
104 LogManager.getLogger(getClass()).warn(
"cannot change oerson id while in population. remove the person, change Id, re-add.");
111 public final String toString() {
112 StringBuilder b =
new StringBuilder();
113 b.append(
"[id=").append(this.getId()).append(
"]");
114 b.append(
"[nof_plans=").append(this.getPlans() == null ?
"null" : this.getPlans().size()).append(
"]");
120 boolean result = this.getPlans().remove(plan);
121 if ((this.getSelectedPlan() == plan) && result) {
122 this.
setSelectedPlan(
new RandomPlanSelector<Plan, Person>().selectPlan(
this));
128 public List<Plan> getPlans() {
134 public Map<String, Object> getCustomAttributes() {
135 if (this.customizableDelegate == null) {
136 this.customizableDelegate = CustomizableUtils.createCustomizable();
138 return this.customizableDelegate.getCustomAttributes();
142 public Attributes getAttributes() {
147 public final void setLocked() {
152 private void testForLocked() {
abstract boolean removePlan(T p)
abstract boolean addPlan(T p)
abstract void setSelectedPlan(T selectedPlan)