/* * JBoss, Home of Professional Open Source * Copyright 2010, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.solder.servlet.test.weld.event; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Observes; import javax.servlet.FilterChain; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.jboss.solder.servlet.ServletRequestContext; import org.jboss.solder.servlet.WebApplication; import org.jboss.solder.servlet.event.Destroyed; import org.jboss.solder.servlet.event.DidActivate; import org.jboss.solder.servlet.event.Initialized; import org.jboss.solder.servlet.event.Path; import org.jboss.solder.servlet.event.Started; import org.jboss.solder.servlet.event.WillPassivate; import org.jboss.solder.servlet.http.HttpServletRequestContext; import org.junit.Assert; /** * @author Nicklas Karlsson * @author <a href="http://community.jboss.org/people/dan.j.allen">Dan Allen</a> */ @ApplicationScoped public class ServletEventBridgeTestHelper { private Map<String, List<Object>> observations = new HashMap<String, List<Object>>(); private void recordObservation(String id, Object observation) { List<Object> observed = observations.get(id); if (observed == null) { observed = new ArrayList<Object>(); observations.put(id, observed); } observed.add(observation); } public Map<String, List<Object>> getObservations() { return observations; } public void reset() { observations.clear(); } public void assertObservations(String id, Object... observations) { List<Object> observed = this.observations.get(id); if (observations.length > 0) { Assert.assertNotNull("Observer [@Observes " + id + "] was never notified", observed); } else { Assert.assertEquals("Observer [@Observes " + id + "] should not have been called", 0, (observed != null ? observed.size() : 0)); return; } for (Object o : observations) { if (!observed.remove(o)) { Assert.fail("Observer [@Observes " + id + "] notified too few times; expected payload: " + o); } } if (observed.size() > 0) { Assert.fail("Observer [@Observes " + id + "] notified too many times; extra payload: " + observed); } } public void observeServletRequest(@Observes ServletRequest req) { recordObservation("ServletRequest", req); } public void observeServletRequestInitialized(@Observes @Initialized ServletRequest req) { recordObservation("@Initialized ServletRequest", req); } public void observeServletRequestDestroyed(@Observes @Destroyed ServletRequest req) { recordObservation("@Destroyed ServletRequest", req); } public void observeWebApplication(@Observes WebApplication webapp) { recordObservation("WebApplication", webapp); } public void observeWebApplicationInitialized(@Observes @Initialized WebApplication webapp) { recordObservation("@Initialized WebApplication", webapp); } public void observeWebApplicationStarted(@Observes @Started WebApplication webapp) { recordObservation("@Started WebApplication", webapp); } public void observeWebApplicationDestroyed(@Observes @Destroyed WebApplication webapp) { recordObservation("@Destroyed WebApplication", webapp); } public void observeHttpServletRequest(@Observes HttpServletRequest req) { recordObservation("HttpServletRequest", req); } public void observeHttpServletRequestInitialized(@Observes @Initialized HttpServletRequest req) { recordObservation("@Initialized HttpServletRequest", req); } public void observeHttpServletRequestDestroyed(@Observes @Destroyed HttpServletRequest req) { recordObservation("@Destroyed HttpServletRequest", req); } public void observeServletResponse(@Observes ServletResponse res) { recordObservation("ServletResponse", res); } public void observeServletResponseInitialized(@Observes @Initialized ServletResponse res) { recordObservation("@Initialized ServletResponse", res); } public void observeServletResponseDestroyed(@Observes @Destroyed ServletResponse res) { recordObservation("@Destroyed ServletResponse", res); } public void observeHttpServletResponse(@Observes HttpServletResponse res) { recordObservation("HttpServletResponse", res); } public void observeHttpServletResponseInitialized(@Observes @Initialized HttpServletResponse res) { recordObservation("@Initialized HttpServletResponse", res); } public void observeHttpServletResponseDestroyed(@Observes @Destroyed HttpServletResponse res) { recordObservation("@Destroyed HttpServletResponse", res); } public void observeServletRequestContext(@Observes ServletRequestContext ctx) { recordObservation("ServletRequestContext", ctx); } public void observeServletRequestContextInitialized(@Observes @Initialized ServletRequestContext ctx) { recordObservation("@Initialized ServletRequestContext", ctx); } public void observeServletRequestContextDestroyed(@Observes @Destroyed ServletRequestContext ctx) { recordObservation("@Destroyed ServletRequestContext", ctx); } public void observeHttpServletRequestContext(@Observes HttpServletRequestContext ctx) { recordObservation("HttpServletRequestContext", ctx); } public void observeHttpServletRequestContextInitialized(@Observes @Initialized HttpServletRequestContext ctx) { recordObservation("@Initialized HttpServletRequestContext", ctx); } public void observeHttpServletRequestContextDestroyed(@Observes @Destroyed HttpServletRequestContext ctx) { recordObservation("@Destroyed HttpServletRequestContext", ctx); } public void observeHttpSession(@Observes HttpSession sess) { recordObservation("HttpSession", sess); } public void observeHttpSessionDidActivate(@Observes @DidActivate HttpSession sess) { recordObservation("@DidActivate HttpSession", sess); } public void observeSessionWillPassivate(@Observes @WillPassivate HttpSession sess) { recordObservation("@WillPassivate HttpSession", sess); } public void observeSessionInitialized(@Observes @Initialized HttpSession sess) { recordObservation("@Initialized HttpSession", sess); } public void observeSessionDestroyed(@Observes @Destroyed HttpSession sess) { recordObservation("@Destroyed HttpSession", sess); } public void observeServletContext(@Observes ServletContext ctx) { recordObservation("ServletContext", ctx); } public void observeServletContextInitialized(@Observes @Initialized ServletContext ctx) { recordObservation("@Initialized ServletContext", ctx); } public void observeServletContextDestroyed(@Observes @Destroyed ServletContext ctx) { recordObservation("@Destroyed ServletContext", ctx); } public void observeHttpServletRequestInitializedForPathA(@Observes @Initialized @Path("pathA") HttpServletRequest req) { recordObservation("@Initialized @Path(\"pathA\") HttpServletRequest", req); } public void observeHttpServletRequestInitializedForPathB(@Observes @Initialized @Path("pathB") HttpServletRequest req) { recordObservation("@Initialized @Path(\"pathB\") HttpServletRequest", req); } public static class NoOpFilterChain implements FilterChain { public static final FilterChain INSTANCE = new NoOpFilterChain(); public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException { } } }