/** * */ package org.minnal.core; import java.util.ArrayList; import java.util.List; import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.WebApplicationException; import org.minnal.core.server.ConnectorListener; import org.minnal.core.server.MessageContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author ganeshs * */ public class ContainerMessageObserver implements RouterListener, ConnectorListener { private List<MessageListener> messageListeners = new ArrayList<MessageListener>(); private static final Logger logger = LoggerFactory.getLogger(ContainerMessageObserver.class); /** * Registers the message listener * * @param listener */ public void registerListener(MessageListener listener) { messageListeners.add(listener); } @Override public void onReceived(MessageContext context) { for (final MessageListener listener : messageListeners) { invoke(new ListenerInvoker(){ @Override public void invoke(MessageContext context) { listener.onReceived(context); } }, context); } } @Override public void onSuccess(MessageContext context) { for (final MessageListener listener : messageListeners) { invoke(new ListenerInvoker(){ @Override public void invoke(MessageContext context) { listener.onSuccess(context); } }, context); } } @Override public void onError(MessageContext context) { for (final MessageListener listener : messageListeners) { invoke(new ListenerInvoker(){ @Override public void invoke(MessageContext context) { listener.onError(context); } }, context); } } @Override public void onComplete(MessageContext context) { for (final MessageListener listener : messageListeners) { invoke(new ListenerInvoker(){ @Override public void invoke(MessageContext context) { listener.onComplete(context); } }, context); } } @Override public void onApplicationResolved(MessageContext context) { ApplicationContext.instance().setApplicationConfiguration(context.getApplication().getConfiguration()); for (final MessageListener listener : messageListeners) { invoke(new ListenerInvoker(){ @Override public void invoke(MessageContext context) { listener.onApplicationResolved(context); } }, context); } } protected void invoke(ListenerInvoker invoker, MessageContext context) { try { invoker.invoke(context); } catch (WebApplicationException e) { throw e; } catch (Exception e) { logger.warn("Failed while handling the event", e); throw new InternalServerErrorException(e); } } @Override public void onError(Throwable cause) { } public static interface ListenerInvoker { void invoke(MessageContext context); } }