package ddth.dasp.springmvc.spring;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.handler.AbstractHandlerMapping;
import ddth.dasp.common.DaspGlobal;
import ddth.dasp.common.osgi.IOsgiBootstrap;
import ddth.dasp.common.rp.IRequestParser;
import ddth.dasp.common.utils.DaspConstants;
public class DaspHandlerMapping extends AbstractHandlerMapping {
private Logger LOGGER = LoggerFactory.getLogger(DaspHandlerMapping.class);
private final static Class<HandlerMapping> SERVICE_CLASS = HandlerMapping.class;
@Override
protected Object getHandlerInternal(HttpServletRequest request)
throws Exception {
Object temp = request
.getAttribute(DaspConstants.REQ_ATTR_REQUEST_PARSER);
if (!(temp instanceof IRequestParser)) {
LOGGER.warn("No instance of [" + IRequestParser.class + "] found!");
return null;
}
IRequestParser rp = (IRequestParser) temp;
String moduleName = rp.getRequestModule();
if (StringUtils.isBlank(moduleName)) {
moduleName = "home";
}
IOsgiBootstrap osgiBootstrap = DaspGlobal.getOsgiBootstrap();
if (osgiBootstrap == null) {
String msg = "Instance of [" + IOsgiBootstrap.class
+ " not found]!";
LOGGER.warn(msg);
return null;
}
Map<String, String> filter = new HashMap<String, String>();
filter.put("Module", moduleName);
HandlerMapping handlerMapping = osgiBootstrap.getService(SERVICE_CLASS,
filter);
if (handlerMapping == null) {
String msg = "No handler mapping found for module [" + moduleName
+ "]!";
LOGGER.warn(msg);
return null;
}
Object result = handlerMapping.getHandler(request);
if (LOGGER.isDebugEnabled()) {
String msg = "Found [" + result + "] for module [" + moduleName
+ "].";
LOGGER.debug(msg);
}
return result;
}
}