package org.zstack.network.service.virtualrouter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.core.db.SimpleQuery;
import org.zstack.core.db.SimpleQuery.Op;
import org.zstack.core.db.TransactionalCallback.Operation;
import org.zstack.header.configuration.*;
import javax.persistence.Query;
public class VirtualRouterOfferingFactory implements InstanceOfferingFactory {
static final InstanceOfferingType type = new InstanceOfferingType(VirtualRouterConstant.VIRTUAL_ROUTER_OFFERING_TYPE);
@Autowired
private DatabaseFacade dbf;
public InstanceOfferingType getInstanceOfferingType() {
return type;
}
@Transactional
public InstanceOfferingInventory createInstanceOffering(InstanceOfferingVO vo, APICreateInstanceOfferingMsg msg) {
VirtualRouterOfferingVO rvo = new VirtualRouterOfferingVO(vo);
APICreateVirtualRouterOfferingMsg amsg = (APICreateVirtualRouterOfferingMsg) msg;
rvo.setManagementNetworkUuid(amsg.getManagementNetworkUuid());
rvo.setPublicNetworkUuid(amsg.getPublicNetworkUuid());
rvo.setZoneUuid(amsg.getZoneUuid());
rvo.setImageUuid(amsg.getImageUuid());
dbf.getEntityManager().persist(rvo);
dbf.getEntityManager().flush();
dbf.getEntityManager().refresh(rvo);
DefaultVirtualRouterOfferingSelector selector = new DefaultVirtualRouterOfferingSelector();
selector.setOfferingUuid(rvo.getUuid());
selector.setZoneUuid(rvo.getZoneUuid());
selector.setPreferToBeDefault(amsg.isDefault());
selector.setCreated(true);
selector.selectDefaultOffering();
dbf.getEntityManager().refresh(rvo);
return VirtualRouterOfferingInventory.valueOf(rvo);
}
@Override
public InstanceOffering getInstanceOffering(InstanceOfferingVO vo) {
VirtualRouterOfferingVO vro = dbf.findByUuid(vo.getUuid(), VirtualRouterOfferingVO.class);
return new VirtualRouterOffering(vro);
}
}