package org.zstack.network.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.zstack.core.componentloader.PluginRegistry;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.core.db.SimpleQuery;
import org.zstack.core.errorcode.ErrorFacade;
import org.zstack.header.network.l3.L3NetworkInventory;
import org.zstack.header.network.service.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created with IntelliJ IDEA.
* User: frank
* Time: 8:00 PM
* To change this template use File | Settings | File Templates.
*/
public abstract class AbstractNetworkServiceExtension implements NetworkServiceExtensionPoint {
@Autowired
protected DatabaseFacade dbf;
@Autowired
protected PluginRegistry pluginRgty;
@Autowired
protected ErrorFacade errf;
public NetworkServiceExtensionPosition getNetworkServiceExtensionPosition() {
return NetworkServiceExtensionPosition.BEFORE_VM_CREATED;
}
protected NetworkServiceProviderType getNetworkServiceProviderType(NetworkServiceType type, L3NetworkInventory l3) {
for (NetworkServiceL3NetworkRefInventory ref : l3.getNetworkServices()) {
if (!type.toString().equals(ref.getNetworkServiceType())) {
continue;
}
SimpleQuery<NetworkServiceProviderVO> q = dbf.createQuery(NetworkServiceProviderVO.class);
q.select(NetworkServiceProviderVO_.type);
q.add(NetworkServiceProviderVO_.uuid, SimpleQuery.Op.EQ, ref.getNetworkServiceProviderUuid());
String providerType = q.findValue();
return NetworkServiceProviderType.valueOf(providerType);
}
return null;
}
protected Map<NetworkServiceProviderType, List<L3NetworkInventory>> getNetworkServiceProviderMap(NetworkServiceType type, List<L3NetworkInventory> l3Networks) {
Map<NetworkServiceProviderType, List<L3NetworkInventory>> ret = new HashMap<NetworkServiceProviderType, List<L3NetworkInventory>>();
for (L3NetworkInventory l3 : l3Networks) {
for (NetworkServiceL3NetworkRefInventory ref : l3.getNetworkServices()) {
if (!type.toString().equals(ref.getNetworkServiceType())) {
continue;
}
SimpleQuery<NetworkServiceProviderVO> q = dbf.createQuery(NetworkServiceProviderVO.class);
q.select(NetworkServiceProviderVO_.type);
q.add(NetworkServiceProviderVO_.uuid, SimpleQuery.Op.EQ, ref.getNetworkServiceProviderUuid());
String providerType = q.findValue();
NetworkServiceProviderType ptype = NetworkServiceProviderType.valueOf(providerType);
List<L3NetworkInventory> l3s = ret.get(ptype);
if (l3s == null) {
l3s = new ArrayList<L3NetworkInventory>();
ret.put(ptype, l3s);
}
l3s.add(l3);
}
}
return ret;
}
}