private static Room readRoom(JsonObject roomDescription)
throws InstantiationException, IllegalAccessException,
ClassNotFoundException, SimulationConfigurationException {
Map<Integer, ISensor> sensorMap = new HashMap<Integer, ISensor>();
Map<Integer, IActuator> actuatorMap = new HashMap<Integer, IActuator>();
Room room = new Room();
JsonNumber roomId = roomDescription.getJsonNumber("id");
if (roomId != null) {
room.setId(roomId.longValue());
}
String roomName = roomDescription.getString("name");
if (roomName != null) {
room.setName(roomName);
}
JsonArray sensors = roomDescription.getJsonArray("sensors");
if (sensors != null) {
for (JsonObject sensorDescription : sensors
.getValuesAs(JsonObject.class)) {
ISensor sensor = (ISensor) Class.forName(
sensorDescription.getString("class")).newInstance();
sensor.setId(sensorDescription.getJsonNumber("id").longValue());
room.addSensor(sensor);
sensorMap.put(sensorDescription.getInt("id"), sensor);
}
}
JsonArray actuators = roomDescription.getJsonArray("actuators");
if (actuators != null) {
for (JsonObject actuatorDescription : actuators
.getValuesAs(JsonObject.class)) {
IActuator actuator = (IActuator) Class.forName(
actuatorDescription.getString("class")).newInstance();
actuator.setId(actuatorDescription.getJsonNumber("id")
.longValue());
room.addActuator(actuator);
actuatorMap.put(actuatorDescription.getInt("id"), actuator);
}
}
JsonArray controllers = roomDescription.getJsonArray("controllers");
if (controllers != null) {
for (JsonObject controllerDescription : controllers
.getValuesAs(JsonObject.class)) {
IController controller = (IController) Class.forName(
controllerDescription.getString("class")).newInstance();
controller.setId(controllerDescription.getJsonNumber("id")
.longValue());
JsonArray sensorArray = controllerDescription
.getJsonArray("sensors");
if (sensorArray != null) {
for (JsonNumber sensorId : sensorArray
.getValuesAs(JsonNumber.class)) {
controller.attachSensor(sensorMap.get(sensorId
.intValue()));
}
}
JsonArray actuatorArray = controllerDescription
.getJsonArray("actuators");
if (actuatorArray != null) {
for (JsonNumber actuatorId : actuatorArray
.getValuesAs(JsonNumber.class)) {
controller.attachActuator(actuatorMap.get(actuatorId
.intValue()));
}
}
room.addController(controller);
}
}
return room;
}