package railo.cli.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import railo.cli.util.EnumerationWrapper;
public class ServletContextImpl implements ServletContext {
private Map<String,Object> attributes;
private Map<String, String> parameters;
private int majorVersion;
private int minorVersion;
private File root;
public ServletContextImpl(File root,Map<String,Object> attributes,Map<String, String> parameters,int majorVersion, int minorVersion) {
this.root=root;
this.attributes=attributes;
this.parameters=parameters;
this.majorVersion=majorVersion;
this.minorVersion=minorVersion;
}
/**
* @see javax.servlet.ServletContext#getAttribute(java.lang.String)
*/
public Object getAttribute(String key) {
return attributes.get(key);
}
/**
* @see javax.servlet.ServletContext#getAttributeNames()
*/
public Enumeration getAttributeNames() {
return new EnumerationWrapper(attributes);
}
/**
* @see javax.servlet.ServletContext#getInitParameter(java.lang.String)
*/
public String getInitParameter(String key) {
return parameters.get(key);
}
/**
* @see javax.servlet.ServletContext#getInitParameterNames()
*/
public Enumeration getInitParameterNames() {
return new EnumerationWrapper(parameters);
}
/**
* @see javax.servlet.ServletContext#getMajorVersion()
*/
public int getMajorVersion() {
return majorVersion;
}
/**
* @see javax.servlet.ServletContext#getMinorVersion()
*/
public int getMinorVersion() {
return minorVersion;
}
/**
* @see javax.servlet.ServletContext#getMimeType(java.lang.String)
*/
public String getMimeType(String file) {
throw notSupported("getMimeType(String file)");
// TODO
//return ResourceUtil.getMimeType(config.getResource(file),null);
}
/**
* @see javax.servlet.ServletContext#getRealPath(java.lang.String)
*/
public String getRealPath(String realpath) {
return getRealFile(realpath).getAbsolutePath();
}
/**
* @see javax.servlet.ServletContext#getResource(java.lang.String)
*/
public URL getResource(String realpath) throws MalformedURLException {
File file = getRealFile(realpath);
return file.toURL();
}
/**
* @see javax.servlet.ServletContext#getResourceAsStream(java.lang.String)
*/
public InputStream getResourceAsStream(String realpath) {
try {
return new FileInputStream(getRealFile(realpath));
} catch (IOException e) {
return null;
}
}
public File getRealFile(String realpath) {
return new File(root,realpath);
}
public File getRoot() {
return root;
}
public Set getResourcePaths(String realpath) {
throw notSupported("getResourcePaths(String realpath)");
}
public RequestDispatcher getRequestDispatcher(String path) {
throw notSupported("getNamedDispatcher(String name)");
}
public ServletContext getContext(String key) {
// TODO ?
return this;
}
public RequestDispatcher getNamedDispatcher(String name) {
// TODO Auto-generated method stub
throw notSupported("getNamedDispatcher(String name)");
}
/**
* @see javax.servlet.ServletContext#log(java.lang.String, java.lang.Throwable)
*/
public void log(String msg, Throwable t) {// TODO better
if(t==null)System.out.println(msg);
else System.out.println(msg+":\n"+t.getMessage());
//if(t==null)log.log(Log.LEVEL_INFO, "ServletContext", msg);
//else log.log(Log.LEVEL_ERROR, "ServletContext", msg+":\n"+ExceptionUtil.getStacktrace(t,false));
}
/**
* @see javax.servlet.ServletContext#log(java.lang.Exception, java.lang.String)
*/
public void log(Exception e, String msg) {
log(msg,e);
}
/**
* @see javax.servlet.ServletContext#log(java.lang.String)
*/
public void log(String msg) {
log(msg,null);
}
/**
* @see javax.servlet.ServletContext#removeAttribute(java.lang.String)
*/
public void removeAttribute(String key) {
attributes.remove(key);
}
/**
* @see javax.servlet.ServletContext#setAttribute(java.lang.String, java.lang.Object)
*/
public void setAttribute(String key, Object value) {
attributes.put(key, value);
}
public String getServletContextName() {
// can return null
return null;
}
public String getServerInfo() {
// deprecated
throw notSupported("getServlet()");
}
public Servlet getServlet(String arg0) throws ServletException {
// deprecated
throw notSupported("getServlet()");
}
public Enumeration getServletNames() {
// deprecated
throw notSupported("getServlet()");
}
public Enumeration getServlets() {
// deprecated
throw notSupported("getServlet()");
}
private RuntimeException notSupported(String method) {
throw new RuntimeException(new ServletException("method "+method+" not supported"));
}
}