package iamrescue.communication.scenario.scenarios;
import iamrescue.communication.ISimulationCommunicationConfiguration;
import iamrescue.communication.scenario.ICommunicationScenario;
import iamrescue.communication.scenario.ICommunicationScenarioDetector;
import iamrescue.communication.scenario.ICommunicationScenarioFactory;
import iamrescue.communication.scenario.ScenarioInvalidException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
public class DefaultCommunicationScenarioDetector implements
ICommunicationScenarioDetector {
private static final Logger LOGGER = Logger
.getLogger(DefaultCommunicationScenarioDetector.class);
private ISimulationCommunicationConfiguration configuration;
private ICommunicationScenario scenario;
private static List<ICommunicationScenarioFactory> scenarios = new ArrayList<ICommunicationScenarioFactory>();
static {
scenarios.add(new DefaultIAMCommunicationScenarioFactory());
scenarios.add(new DefaultCommunicationScenarioFactory());
scenarios.add(new CompleteCoverageScenarioFactory());
scenarios.add(new FallbackScenarioFactory());
}
public DefaultCommunicationScenarioDetector(
ISimulationCommunicationConfiguration configuration) {
this.configuration = configuration;
}
@Override
public ICommunicationScenario getScenario() {
if (scenario == null) {
for (ICommunicationScenarioFactory factory : scenarios) {
if (factory.isApplicableTo(configuration)) {
try {
scenario = factory.create(configuration);
LOGGER.info("Selected scenario " + scenario);
break;
} catch (Exception e) {
LOGGER.error("Could not create scenario: "
+ e.getMessage());
e.printStackTrace();
}
}
}
if (scenario == null) {
LOGGER.error("No communication scenario found "
+ "that is applicable to this state of the simulation");
return new NoCommunicationScenario(
configuration.getAgentType(), configuration
.getVoiceChannels());
/*
* throw new IllegalStateException(
* "No communication scenario found " +
* "that is applicable to this state of the simulation");
*/
}
}
return scenario;
}
}