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