protected void handle(APIChangeZoneStateMsg msg) {
APIChangeZoneStateEvent evt = new APIChangeZoneStateEvent(msg.getId());
ZoneStateEvent stateEvt = ZoneStateEvent.valueOf(msg.getStateEvent());
try {
extpEmitter.preChange(self, stateEvt);
} catch (ZoneException e) {
evt.setError(err(SysErrors.CHANGE_RESOURCE_STATE_ERROR, e.getMessage()));
bus.publish(evt);
return;
}
ZoneState formerState = self.getState();
extpEmitter.beforeChange(self, stateEvt);
ZoneState next = AbstractZone.getNextState(self.getState(), stateEvt);
self.setState(next);
self = dbf.updateAndRefresh(self);
extpEmitter.afterChange(self, stateEvt, formerState);
evt.setInventory(ZoneInventory.valueOf(self));
logger.debug(String.format("Changed state of zone[uuid:%s] from %s to %s by event %s", self.getUuid(), formerState, self.getState(), stateEvt));
bus.publish(evt);
}