package cz.agents.agentpolis.darptestbed.simmodel.agent.data.generator; import java.util.LinkedList; import java.util.Set; import cz.agents.agentpolis.darptestbed.simmodel.agent.data.Request; import cz.agents.agentpolis.darptestbed.simmodel.agent.data.generator.support.RequestBuilder; import cz.agents.agentpolis.siminfrastructure.time.TimeProvider; import cz.agents.agentpolis.simmodel.agent.activity.TimeSpendingActivity; import cz.agents.agentpolis.simmodel.agent.activity.callback.TimeActivityCallback; import cz.agents.agentpolis.simmodel.environment.model.action.AgentPositionAction; import org.apache.log4j.Logger; public class BenchmarkRequestGenerator implements RequestGenerator { private static final Logger LOGGER = Logger.getLogger(BenchmarkRequestGenerator.class); // private static int allRequestsCounter = 0; private final AgentPositionAction agentPositionAction; private final LinkedList<RequestBuilder> requests; private final TimeProvider timeProvider; private final TimeSpendingActivity timeSpendingActivity; public BenchmarkRequestGenerator(AgentPositionAction agentPositionAction, LinkedList<RequestBuilder> requests, TimeProvider timeProvider, TimeSpendingActivity timeSpendingActivity) { super(); this.agentPositionAction = agentPositionAction; this.requests = requests; this.timeProvider = timeProvider; this.timeSpendingActivity = timeSpendingActivity; // allRequestsCounter += requests.size(); // LOGGER.debug("Received requests count: " + allRequestsCounter); } @Override public void start(final String agentId, Set<String> additionalRequirements, final RequestGeneratorCall requestGeneratorCall) { RequestBuilder requestBuilder = requests.poll(); final Request request = requestBuilder.buildRequest(agentId, additionalRequirements); timeSpendingActivity.spendingTime(new TimeActivityCallback() { @Override public void timeCallback() { agentPositionAction.actSetPosition(agentId, request.getFromNode()); requestGeneratorCall.sendRequest(request); } }, computeWaitingTime(request.getCallTimeInDayRange())); } @Override public void timerSignal() { // TODO Auto-generated method stub } private long computeWaitingTime(long requestCallTimeInDayRange) { long waitingTime = timeProvider.computeDepartureTime(timeProvider.getCurrentDayFlag(), requestCallTimeInDayRange); if (waitingTime > 0) { return waitingTime; } return 1; } }