package org.zstack.network.l3; import org.springframework.beans.factory.annotation.Autowired; import org.zstack.core.componentloader.PluginRegistry; import org.zstack.header.Component; import org.zstack.header.network.l3.L3NetworkDeleteExtensionPoint; import org.zstack.header.network.l3.L3NetworkException; import org.zstack.header.network.l3.L3NetworkInventory; 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.List; public class L3NetworkExtensionPointEmitter implements Component { private static final CLogger logger = Utils.getLogger(L3NetworkExtensionPointEmitter.class); private List<L3NetworkDeleteExtensionPoint> extensions = null; @Autowired private PluginRegistry pluginRgty; public void preDelete(L3NetworkInventory inv) throws L3NetworkException { for (L3NetworkDeleteExtensionPoint ext : extensions) { try { ext.preDeleteL3Network(inv); } catch (L3NetworkException l3e) { throw l3e; } catch (Exception e) { logger.warn(String.format("Unhandled exception happened while calling L3NetworkDeleteExtensionPoint.preDeleteL3Network of %s", ext.getClass() .getCanonicalName()), e); } } } public void beforeDelete(final L3NetworkInventory inv) { CollectionUtils.safeForEach(extensions, new ForEachFunction<L3NetworkDeleteExtensionPoint>() { @Override public void run(L3NetworkDeleteExtensionPoint arg) { arg.beforeDeleteL3Network(inv); } }); } public void afterDelete(final L3NetworkInventory inv) { CollectionUtils.safeForEach(extensions, new ForEachFunction<L3NetworkDeleteExtensionPoint>() { @Override public void run(L3NetworkDeleteExtensionPoint arg) { arg.afterDeleteL3Network(inv); } }); } @Override public boolean start() { populateExtensions(); return true; } private void populateExtensions() { extensions = pluginRgty.getExtensionList(L3NetworkDeleteExtensionPoint.class); } @Override public boolean stop() { return true; } }