package org.yamcs.simulator; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.yamcs.ConfigurationException; import org.yamcs.YConfiguration; public class SimulationConfiguration { private Class<? extends Simulator> modelClass; private boolean uiEnabled; private boolean losEnabled; private int losPeriodS; private int aosPeriodS; private List<ServerConnection> serverConnections; private SimulationConfiguration() { } @SuppressWarnings("unchecked") public static SimulationConfiguration loadFromFile() { SimulationConfiguration conf = new SimulationConfiguration(); YConfiguration yconfig = YConfiguration.getConfiguration("simulator"); try { Class<?> modelClass = Class.forName(yconfig.getString("model")); if (Simulator.class.isAssignableFrom(modelClass)) { conf.modelClass = (Class<? extends Simulator>) modelClass; } else { throw new ConfigurationException("Class '" + modelClass.getName() + "' is not an instance of '" + Simulator.class.getName() + "'"); } } catch (ClassNotFoundException e) { throw new ConfigurationException("Could not locate model class", e); } conf.uiEnabled = yconfig.getBoolean("ui"); conf.losEnabled = yconfig.getBoolean("losAos"); conf.losPeriodS = yconfig.getInt("los_period_s"); conf.aosPeriodS = yconfig.getInt("aos_period_s"); int i = 0; conf.serverConnections = new LinkedList<>(); Map<String, Object> servers = yconfig.getMap("servers"); for(String serverName : servers.keySet()) { Map<String, Object> serverConfig = yconfig.getMap("servers", serverName); int tmPort = YConfiguration.getInt(serverConfig, "tmPort"); int tcPort = YConfiguration.getInt(serverConfig, "tcPort"); int dumpPort = YConfiguration.getInt(serverConfig, "dumpPort"); conf.serverConnections.add(new ServerConnection(i++, tmPort, tcPort, dumpPort)); } return conf; } public Class<? extends Simulator> getModelClass() { return modelClass; } public boolean isUIEnabled() { return uiEnabled; } public boolean isLOSEnabled() { return losEnabled; } public int getLOSPeriod() { return losPeriodS; } public int getAOSPeriod() { return aosPeriodS; } public List<ServerConnection> getServerConnections() { return serverConnections; } }