package org.zstack.compute.zone;
import org.springframework.beans.factory.annotation.Autowired;
import org.zstack.core.cloudbus.CloudBus;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.header.apimediator.ApiMessageInterceptionException;
import org.zstack.header.apimediator.ApiMessageInterceptor;
import org.zstack.header.apimediator.StopRoutingException;
import org.zstack.header.message.APIMessage;
import org.zstack.header.zone.*;
/**
* Created with IntelliJ IDEA.
* User: frank
* Time: 11:36 AM
* To change this template use File | Settings | File Templates.
*/
public class ZoneApiInterceptor implements ApiMessageInterceptor {
@Autowired
private CloudBus bus;
@Autowired
private DatabaseFacade dbf;
private void setServiceId(APIMessage msg) {
if (msg instanceof ZoneMessage) {
ZoneMessage zmsg = (ZoneMessage) msg;
bus.makeTargetServiceIdByResourceUuid(msg, ZoneConstant.SERVICE_ID, zmsg.getZoneUuid());
}
}
@Override
public APIMessage intercept(APIMessage msg) throws ApiMessageInterceptionException {
setServiceId(msg);
if (msg instanceof APIDeleteZoneMsg) {
validate((APIDeleteZoneMsg) msg);
}
return msg;
}
private void validate(APIDeleteZoneMsg msg) {
if (!dbf.isExist(msg.getUuid(), ZoneVO.class)) {
APIDeleteZoneEvent evt = new APIDeleteZoneEvent(msg.getId());
bus.publish(evt);
throw new StopRoutingException();
}
}
}