/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.module.web;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.openmrs.module.Module;
import org.openmrs.module.ModuleFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ModuleServlet extends HttpServlet {
private static final long serialVersionUID = 1239820102030303L;
private Logger log = LoggerFactory.getLogger(this.getClass());
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
log.debug("In service method for module servlet: " + request.getPathInfo());
String servletName = request.getPathInfo();
int end = servletName.indexOf("/", 1);
String moduleId = null;
if (end > 0) {
moduleId = servletName.substring(1, end);
}
log.debug("ModuleId: " + moduleId);
Module mod = ModuleFactory.getModuleById(moduleId);
int start = 1; // where in the path to start trimming
if (mod != null) {
log.debug("Module with id " + moduleId + " found. Looking for servlet name after " + moduleId + " in url path");
start = moduleId.length() + 2;
// this skips over the moduleId that is in the path
}
end = servletName.indexOf("/", start);
if (end == -1 || end > servletName.length()) {
end = servletName.length();
}
servletName = servletName.substring(start, end);
log.debug("Servlet name: " + servletName);
HttpServlet servlet = WebModuleUtil.getServlet(servletName);
if (servlet == null) {
log.warn("No servlet with name: " + servletName + " was found");
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
servlet.service(request, response);
}
/**
* Internal implementation of the ServletConfig interface, to be passed to module servlets when
* they are first loaded
*/
public static class SimpleServletConfig implements ServletConfig {
private String name;
private ServletContext servletContext;
public SimpleServletConfig(String name, ServletContext servletContext) {
this.name = name;
this.servletContext = servletContext;
}
@Override
public String getServletName() {
return name;
}
@Override
public ServletContext getServletContext() {
return servletContext;
}
// not implemented in a module's config.xml yet
@Override
public String getInitParameter(String paramName) {
return null;
}
// not implemented in a module's config.xml yet
@Override
@SuppressWarnings("unchecked")
public Enumeration getInitParameterNames() {
return null;
}
}
}