package org.zstack.network.l2;
import org.springframework.beans.factory.annotation.Autowired;
import org.zstack.core.cloudbus.CloudBus;
import org.zstack.core.cloudbus.MessageSafe;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.header.AbstractService;
import org.zstack.header.message.APIMessage;
import org.zstack.header.message.Message;
import org.zstack.header.network.l2.*;
import org.zstack.query.QueryFacade;
import org.zstack.utils.Utils;
import org.zstack.utils.gson.JSONObjectUtil;
import org.zstack.utils.logging.CLogger;
import java.util.List;
public class L2VlanNetworkFactory extends AbstractService implements L2NetworkFactory {
private static CLogger logger = Utils.getLogger(L2VlanNetworkFactory.class);
static L2NetworkType type = new L2NetworkType(L2NetworkConstant.L2_VLAN_NETWORK_TYPE);
@Autowired
private DatabaseFacade dbf;
@Autowired
private CloudBus bus;
@Autowired
private QueryFacade qf;
@Override
public L2NetworkType getType() {
return type;
}
@Override
public L2NetworkInventory createL2Network(L2NetworkVO ovo, APICreateL2NetworkMsg msg) {
APICreateL2VlanNetworkMsg amsg = (APICreateL2VlanNetworkMsg) msg;
L2VlanNetworkVO vo = new L2VlanNetworkVO(ovo);
vo.setVlan(amsg.getVlan());
vo = dbf.persistAndRefresh(vo);
L2VlanNetworkInventory inv = L2VlanNetworkInventory.valueOf(vo);
String info = String.format("successfully create L2VlanNetwork, %s", JSONObjectUtil.toJsonString(inv));
logger.debug(info);
return inv;
}
@Override
public L2Network getL2Network(L2NetworkVO vo) {
return new L2VlanNetwork(vo);
}
@Override
public boolean start() {
return true;
}
@Override
public boolean stop() {
return true;
}
@Override
@MessageSafe
public void handleMessage(Message msg) {
if (msg instanceof APIMessage) {
handleApiMessage((APIMessage)msg);
} else {
handleLocalMessage(msg);
}
}
private void handleLocalMessage(Message msg) {
bus.dealWithUnknownMessage(msg);
}
private void handleApiMessage(APIMessage msg) {
if (msg instanceof APIListL2VlanNetworkMsg) {
handle((APIListL2VlanNetworkMsg)msg);
} else {
bus.dealWithUnknownMessage(msg);
}
}
private void handle(APIListL2VlanNetworkMsg msg) {
List<L2VlanNetworkVO> vos = dbf.listByApiMessage(msg, L2VlanNetworkVO.class);
List<L2VlanNetworkInventory> invs = L2VlanNetworkInventory.valueOf1(vos);
APIListL2VlanNetworkReply reply = new APIListL2VlanNetworkReply();
reply.setInventories(invs);
bus.reply(msg, reply);
}
@Override
public String getId() {
return bus.makeLocalServiceId(L2NetworkConstant.L2_VLAN_NETWORK_FACTORY_SERVICE_ID);
}
}