EpisimContactEvent.java

package org.matsim.episim.events;

import org.matsim.api.core.v01.Id;
import org.matsim.api.core.v01.events.Event;
import org.matsim.api.core.v01.population.Person;
import org.matsim.core.api.internal.HasPersonId;

import java.util.Map;

import static org.matsim.api.core.v01.events.ActivityEndEvent.ATTRIBUTE_ACTTYPE;


/**
 * Notifies when a person had contact with another one during its performed activity.
 */
public final class EpisimContactEvent extends Event implements HasPersonId {

	public static final String EVENT_TYPE = "episimContact";
	public static final String CONTACT_PERSON = "contactPerson";
	public static final String DURATION = "duration";
	public static final String CONTAINER = "container";
	private static final String INFECTION_PROB = "infectionProb";
	public static final String GROUP_SIZE = "groupSize";

	private final Id<Person> personId;
	private final Id<Person> contactPersonId;
	private final Id<?> containerId;
	private final String actType;
	private final double duration;
	private final int groupSize;

	/**
	 * Constructor.
	 */
	public EpisimContactEvent(double time, Id<Person> personId, Id<Person> contactPersonId, Id<?> containerId, String actType, double duration, int groupSize) {
		super(time);
		this.personId = personId;
		this.contactPersonId = contactPersonId;
		this.containerId = containerId;
		this.actType = actType;
		this.duration = duration;
		this.groupSize = groupSize;
	}

	@Override
	public String getEventType() {
		return EVENT_TYPE;
	}

	@Override
	public Id<Person> getPersonId() {
		return personId;
	}

	/**
	 * The contact person.
	 */
	public Id<Person> getContactPersonId() {
		return contactPersonId;
	}

	/**
	 * Length of the contact in seconds.
	 */
	public double getDuration() {
		return duration;
	}

	@Override
	public Map<String, String> getAttributes() {
		Map<String, String> attr = super.getAttributes();

		attr.put(ATTRIBUTE_ACTTYPE, actType);
		attr.put(CONTACT_PERSON, contactPersonId.toString());
		attr.put(DURATION, String.valueOf(duration));
		attr.put(CONTAINER, containerId.toString());
		attr.put(GROUP_SIZE, String.valueOf(groupSize));

		return attr;
	}
}