package org.zstack.network.securitygroup; import org.springframework.beans.factory.annotation.Autowired; import org.zstack.core.componentloader.PluginExtension; import org.zstack.core.componentloader.PluginRegistry; import org.zstack.header.Component; import org.zstack.header.vm.VmInstanceInventory; import org.zstack.header.vm.VmNicInventory; import org.zstack.utils.CollectionUtils; import org.zstack.utils.Utils; import org.zstack.utils.function.ForEachFunction; import org.zstack.utils.logging.CLogger; import java.util.ArrayList; import java.util.List; public class SecurityGroupExtensionEmitter implements Component { private static CLogger logger = Utils.getLogger(SecurityGroupExtensionEmitter.class); @Autowired private PluginRegistry pluginRgty; private List<AddVmNicToSecurityGroupExtensionPoint> addNicExts = new ArrayList<AddVmNicToSecurityGroupExtensionPoint>(); public boolean start() { addNicExts = pluginRgty.getExtensionList(AddVmNicToSecurityGroupExtensionPoint.class); return true; } public boolean stop() { return true; } public void preAddVmNicToSecurityGroup(SecurityGroupInventory sg, VmInstanceInventory vm, List<VmNicInventory> nics) throws SecurityGroupException { for (AddVmNicToSecurityGroupExtensionPoint extp : addNicExts) { extp.preAddVmNic(sg, vm, nics); } } public void beforeAddVmNicToSecurityGroup(final SecurityGroupInventory sg, final VmInstanceInventory vm, final List<VmNicInventory> nics) { CollectionUtils.safeForEach(addNicExts, new ForEachFunction<AddVmNicToSecurityGroupExtensionPoint>() { @Override public void run(AddVmNicToSecurityGroupExtensionPoint arg) { arg.beforeAddVmNic(sg, vm, nics); } }); } public void afterAddVmNicToSecurityGroup(final SecurityGroupInventory sg, final VmInstanceInventory vm, final List<VmNicInventory> nics) { CollectionUtils.safeForEach(addNicExts, new ForEachFunction<AddVmNicToSecurityGroupExtensionPoint>() { @Override public void run(AddVmNicToSecurityGroupExtensionPoint arg) { arg.afterAddVmNic(sg, vm, nics); } }); } }