package cz.agents.agentpolis.darptestbed.simmodel.agent.data;
import cz.agents.agentpolis.darptestbed.siminfrastructure.communication.requestconsumer.receiver.RequestConsumerReceiverVisitor;
import cz.agents.agentpolis.ondemandtransport.siminfrastructure.communication.protocol.MessageVisitor;
import java.util.Set;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* A request for a taxi to drive from point A to B.
*
* @author Lukas Canda
*/
public final class Request implements MessageVisitor<RequestConsumerReceiverVisitor> {
private final String passengerId;
private final long callTimeInDayRange;
private final long fromNode;
private final long toNode;
private final TimeWindow timeWindow;
private final Set<String> additionalRequirements;
// this class can be extended by adding max price, max group size etc.
public Request(String passengerId, long fromNode, long toNode, Set<String> additionalRequirements) {
this(passengerId, -1, fromNode, toNode, null, additionalRequirements);
}
public Request(String passengerId, long fromNode, long toNode, TimeWindow timeWindow,
Set<String> additionalRequirements) {
super();
this.passengerId = passengerId;
this.callTimeInDayRange = -1;
this.fromNode = fromNode;
this.toNode = toNode;
this.timeWindow = timeWindow;
this.additionalRequirements = additionalRequirements;
}
// including time window
public Request(String passengerId, long callTimeInDayRange, long fromNode, long toNode, TimeWindow timeWindow,
Set<String> additionalRequirements) {
super();
this.passengerId = checkNotNull(passengerId);
this.callTimeInDayRange = callTimeInDayRange;
this.fromNode = fromNode;
this.toNode = toNode;
this.timeWindow = timeWindow;
this.additionalRequirements = checkNotNull(additionalRequirements);
}
public String getPassengerId() {
return passengerId;
}
public long getFromNode() {
return fromNode;
}
public long getToNode() {
return toNode;
}
public TimeWindow getTimeWindow() {
return timeWindow;
}
public long getCallTimeInDayRange() {
return callTimeInDayRange;
}
public Set<String> getAdditionalRequirements() {
return additionalRequirements;
}
@Override
public void accept(RequestConsumerReceiverVisitor receiverVisitor) {
receiverVisitor.visit(this);
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Request: PassengerId = ");
sb.append(passengerId);
sb.append(" ; CallTimeInDayRange = ");
sb.append(callTimeInDayRange);
sb.append(" ; FromNode = ");
sb.append(fromNode);
sb.append(" ; ToNode = ");
sb.append(toNode);
sb.append(" ; TimeWindow = ");
sb.append(timeWindow.toString());
sb.append(" ; AdditionalRequirements = ");
sb.append(additionalRequirements);
return sb.toString();
}
}