/** * */ package org.jboss.test.faces.staging; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; import java.util.Enumeration; import java.util.EventListener; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.Filter; import javax.servlet.FilterRegistration; import javax.servlet.FilterRegistration.Dynamic; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; import javax.servlet.SessionCookieConfig; import javax.servlet.SessionTrackingMode; import javax.servlet.descriptor.JspConfigDescriptor; /** * @author asmirnov * */ abstract class StagingServletContext implements ServletContext { private static final Logger log = ServerLogger.SERVER.getLogger(); public static final String CONTEXT_PATH = ""; private static final String APPLICATION_NAME = "stub"; private final Map<String, Object> attributes = new ConcurrentHashMap<String, Object>(); private final Map<String,String> initParameters = new HashMap<String, String>(); /* (non-Javadoc) * @see javax.servlet.ServletContext#getAttribute(java.lang.String) */ public Object getAttribute(String name) { return attributes.get(name); } /* (non-Javadoc) * @see javax.servlet.ServletContext#getAttributeNames() */ @SuppressWarnings("unchecked") public Enumeration getAttributeNames() { return Collections.enumeration(attributes.keySet()); } /* (non-Javadoc) * @see javax.servlet.ServletContext#getContext(java.lang.String) */ public ServletContext getContext(String uripath) { // stub server has only one context. return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getContextPath() */ public String getContextPath() { // Test always run in the root context. return CONTEXT_PATH; } public void addInitParameters(Map<String,String>parameters) { initParameters.putAll(parameters); } /* (non-Javadoc) * @see javax.servlet.ServletContext#getInitParameter(java.lang.String) */ public String getInitParameter(String name) { return initParameters.get(name); } /** * Put new init parameter to the Map. * @param name * @param value * @return */ public boolean setInitParameter(String name, String value) { return null != initParameters.put(name, value); } /* (non-Javadoc) * @see javax.servlet.ServletContext#getInitParameterNames() */ @SuppressWarnings("unchecked") public Enumeration getInitParameterNames() { return Collections.enumeration(initParameters.keySet()); } /* (non-Javadoc) * @see javax.servlet.ServletContext#getMajorVersion() */ public int getMajorVersion() { return 2; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getMinorVersion() */ public int getMinorVersion() { return 5; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getNamedDispatcher(java.lang.String) */ public RequestDispatcher getNamedDispatcher(String name) { // TODO create stub dispatcher. log.info("unimplemented response method getNamedDispatcher"); return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getRealPath(java.lang.String) */ public String getRealPath(String path) { // we always use 'virtual' configuration. return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getRequestDispatcher(java.lang.String) */ public RequestDispatcher getRequestDispatcher(String path) { // TODO implement stub dispatcher. log.info("unimplemented response method getRequestDispatcher"); return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getResource(java.lang.String) */ public URL getResource(String path) throws MalformedURLException { URL url = null; ServerResource resource = getServerResource(path); if(null != resource){ url = resource.getURL(); } return url; } /** * @param path * @return */ protected abstract ServerResource getServerResource(String path); /* (non-Javadoc) * @see javax.servlet.ServletContext#getResourceAsStream(java.lang.String) */ public InputStream getResourceAsStream(String path) { ServerResource resource = getServerResource(path); if(null != resource){ try { return resource.getAsStream(); } catch (IOException e) { return null; } } return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getResourcePaths(java.lang.String) */ @SuppressWarnings("unchecked") public Set getResourcePaths(String path) { HashSet result=null; ServerResource resource = getServerResource(path); if(null == resource && !path.endsWith("/")){ path+="/"; resource = getServerResource(path); } if(null != resource){ Set<String> paths = resource.getPaths(); if(null != paths && paths.size()>0){ result = new HashSet(paths.size()); for (String resourcePath : paths) { result.add(path+resourcePath); } } } return result; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getServerInfo() */ public String getServerInfo() { return "Stub test server"; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getServlet(java.lang.String) */ public Servlet getServlet(String name) throws ServletException { // always return null. log.info("unimplemented response method getServlet"); return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getServletContextName() */ public String getServletContextName() { // Stub server has no declared name. return APPLICATION_NAME; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getServletNames() */ @SuppressWarnings("unchecked") public Enumeration getServletNames() { log.info("unimplemented response method getServletNames"); return Collections.enumeration(Collections.EMPTY_LIST); } /* (non-Javadoc) * @see javax.servlet.ServletContext#getServlets() */ @SuppressWarnings("unchecked") public Enumeration getServlets() { log.info("unimplemented response method getServlets"); return Collections.enumeration(Collections.EMPTY_LIST); } /* (non-Javadoc) * @see javax.servlet.ServletContext#log(java.lang.String) */ public void log(String msg) { log.finest(msg); } /* (non-Javadoc) * @see javax.servlet.ServletContext#log(java.lang.Exception, java.lang.String) */ public void log(Exception exception, String msg) { log.log(Level.FINEST, msg, exception); } /* (non-Javadoc) * @see javax.servlet.ServletContext#log(java.lang.String, java.lang.Throwable) */ public void log(String message, Throwable throwable) { log.log(Level.FINEST, message, throwable); } /* (non-Javadoc) * @see javax.servlet.ServletContext#removeAttribute(java.lang.String) */ public void removeAttribute(String name) { // TODO - inform listeners Object removed = attributes.remove(name); if(null != removed){ valueUnbound(new ServletContextAttributeEvent(this,name,removed)); } } /* (non-Javadoc) * @see javax.servlet.ServletContext#setAttribute(java.lang.String, java.lang.Object) */ public void setAttribute(String name, Object object) { // TODO - inform listeners if (null == object) { removeAttribute(name); } else { Object oldValue = attributes.put(name, object); ServletContextAttributeEvent event = new ServletContextAttributeEvent(this,name,object); if(null != oldValue){ valueReplaced(event); } else { valueBound(event); } } } protected abstract void valueBound(ServletContextAttributeEvent event); protected abstract void valueReplaced(ServletContextAttributeEvent event); protected abstract void valueUnbound( ServletContextAttributeEvent servletContextAttributeEvent); /* (non-Javadoc) * @see javax.servlet.ServletContext#addFilter(java.lang.String, java.lang.Class) */ public Dynamic addFilter(String arg0, Class<? extends Filter> arg1) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#addFilter(java.lang.String, javax.servlet.Filter) */ public Dynamic addFilter(String arg0, Filter arg1) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#addFilter(java.lang.String, java.lang.String) */ public Dynamic addFilter(String arg0, String arg1) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#addListener(java.lang.Class) */ public void addListener(Class<? extends EventListener> arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see javax.servlet.ServletContext#addListener(java.lang.String) */ public void addListener(String arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see javax.servlet.ServletContext#addListener(java.util.EventListener) */ public <T extends EventListener> void addListener(T arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see javax.servlet.ServletContext#addServlet(java.lang.String, java.lang.Class) */ public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Class<? extends Servlet> arg1) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#addServlet(java.lang.String, javax.servlet.Servlet) */ public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Servlet arg1) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#addServlet(java.lang.String, java.lang.String) */ public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, String arg1) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#createFilter(java.lang.Class) */ public <T extends Filter> T createFilter(Class<T> arg0) throws ServletException { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#createListener(java.lang.Class) */ public <T extends EventListener> T createListener(Class<T> arg0) throws ServletException { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#createServlet(java.lang.Class) */ public <T extends Servlet> T createServlet(Class<T> arg0) throws ServletException { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#declareRoles(java.lang.String[]) */ public void declareRoles(String... arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see javax.servlet.ServletContext#getClassLoader() */ public ClassLoader getClassLoader() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getDefaultSessionTrackingModes() */ public Set<SessionTrackingMode> getDefaultSessionTrackingModes() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getEffectiveMajorVersion() */ public int getEffectiveMajorVersion() { return 3; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getEffectiveMinorVersion() */ public int getEffectiveMinorVersion() { return 0; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getEffectiveSessionTrackingModes() */ public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getFilterRegistration(java.lang.String) */ public FilterRegistration getFilterRegistration(String arg0) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getFilterRegistrations() */ public Map<String, ? extends FilterRegistration> getFilterRegistrations() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getJspConfigDescriptor() */ public JspConfigDescriptor getJspConfigDescriptor() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getMimeType(java.lang.String) */ public String getMimeType(String arg0) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getServletRegistration(java.lang.String) */ public ServletRegistration getServletRegistration(String arg0) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getServletRegistrations() */ public Map<String, ? extends ServletRegistration> getServletRegistrations() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#getSessionCookieConfig() */ public SessionCookieConfig getSessionCookieConfig() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see javax.servlet.ServletContext#setSessionTrackingModes(java.util.Set) */ public void setSessionTrackingModes(Set<SessionTrackingMode> arg0) { // TODO Auto-generated method stub } }