/*
* This file is part of the Wayback archival access software
* (http://archive-access.sourceforge.net/projects/wayback/).
*
* Licensed to the Internet Archive (IA) by one or more individual
* contributors.
*
* The IA licenses this file to You 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.archive.wayback.util.webapp;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.archive.wayback.exception.BadQueryException;
/**
* Abstract RequestHandler implementation which performs the minimal behavior
* for self registration with a RequestMapper, requiring subclasses to implement
* only handleRequest().
*
* @author brad
*
*/
public abstract class AbstractRequestHandler implements RequestHandler {
private String beanName = null;
private String accessPointPath = null;
private ServletContext servletContext = null;
public void setBeanName(final String beanName) {
this.beanName = beanName;
}
public String getBeanName() {
return beanName;
}
public String getAccessPointPath() {
return accessPointPath;
}
public void setAccessPointPath(String accessPointPath) {
this.accessPointPath = accessPointPath;
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
public ServletContext getServletContext() {
return servletContext;
}
public void registerPortListener(RequestMapper requestMapper) {
BeanNameRegistrar.registerHandler(this, requestMapper);
}
public String translateRequestPath(HttpServletRequest httpRequest) {
return RequestMapper.getRequestContextPath(httpRequest);
}
public String translateRequestPathQuery(HttpServletRequest httpRequest) {
return RequestMapper.getRequestContextPathQuery(httpRequest);
}
/**
* Extract the first value in the array mapped to by field in queryMap
* @param queryMap the Map in which to search
* @param field the field value desired
* @return the first value in the array mapped to field in queryMap, if
* present, null otherwise
*/
public static String getMapParam(Map<String,String[]> queryMap,
String field) {
String arr[] = queryMap.get(field);
if (arr == null || arr.length == 0) {
return null;
}
return arr[0];
}
/**
* Extract the first value in the array mapped to by field in queryMap
* @param queryMap the Map in which to search
* @param field the field value desired
* @return the first value in the array mapped to field in queryMap, if
* present. A BadQueryException is thrown if there is no appropriate value
* @throws BadQueryException if there is nothing mapped to field, or if the
* Array mapped to field is empty
*/
public static String getRequiredMapParam(Map<String,String[]> queryMap,
String field)
throws BadQueryException {
// TODO: Throw something different, org.archive.wayback.util should have
// no references outside of org.archive.wayback.util
String value = getMapParam(queryMap,field);
if(value == null) {
throw new BadQueryException("missing field " + field);
}
if(value.length() == 0) {
throw new BadQueryException("empty field " + field);
}
return value;
}
/**
* Extract the first value in the array mapped to by field in queryMap
* @param map the Map in which to search
* @param param the field value desired
* @return the first value in the array mapped to field in queryMap, if
* present, or an empty string otherwise
*/
public static String getMapParamOrEmpty(Map<String,String[]> map,
String param) {
String val = getMapParam(map,param);
return (val == null) ? "" : val;
}
}