/* * Copyright 2013 Red Hat, Inc. and/or its affiliates. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jboss.forge.furnace.container.cdi.events; import java.lang.annotation.Annotation; import javax.enterprise.inject.Any; import javax.enterprise.inject.spi.BeanManager; import org.jboss.forge.furnace.addons.Addon; import org.jboss.forge.furnace.event.EventException; import org.jboss.forge.furnace.event.EventManager; import org.jboss.forge.furnace.util.ClassLoaders; /** * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> * */ public class EventManagerImpl implements EventManager { private final Addon addon; private final BeanManager manager; private static final Annotation[] ANY_QUALIFIER = { Any.Literal.INSTANCE }; public EventManagerImpl(Addon addon, BeanManager manager) { this.addon = addon; this.manager = manager; } @Override public void fireEvent(final Object event, final Annotation... qualifiers) throws EventException { try { ClassLoaders.executeIn(addon.getClassLoader(), () -> manager.fireEvent(new InboundEvent(event, (qualifiers == null || qualifiers.length == 0) ? ANY_QUALIFIER : qualifiers))); } catch (Exception e) { throw new EventException("Could not propagate event to addon [" + addon + "]", e); } } }