package com.gisgraphy.addressparser.web; import java.io.IOException; import java.util.ResourceBundle; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import com.gisgraphy.addressparser.AddressQuery; import com.gisgraphy.addressparser.IAddressParserService; import com.gisgraphy.addressparser.exception.AddressParserErrorVisitor; import com.gisgraphy.addressparser.exception.AddressParserException; import com.gisgraphy.domain.Constants; import com.gisgraphy.domain.valueobject.GisgraphyServiceType; import com.gisgraphy.helper.HTMLHelper; import com.gisgraphy.serializer.IoutputFormatVisitor; import com.gisgraphy.serializer.OutputFormat; import com.gisgraphy.servlet.GisgraphyServlet; public abstract class AbstractAddressParserServlet extends GisgraphyServlet { /** * The logger */ protected static Logger logger = Logger.getLogger(AbstractAddressParserServlet.class); public final static String ADDRESS_PARAMETER = "address"; public final static String COUNTRY_PARAMETER = "country"; public final static String OUTPUT_FORMAT_PARAMETER = "format"; public final static String CALLBACK_PARAMETER = "callback"; public final static String INDENT_PARAMETER = "indent"; public static final int QUERY_MAX_LENGTH = 400; public abstract IAddressParserService getAddressParserService() ; protected AddressQueryHttpBuilder getAddressQueryHttpBuilder(){ return AddressQueryHttpBuilder.getInstance(); } /** * */ private static final long serialVersionUID = 7804855543117309510L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws AddressParserException ,IOException{ OutputFormat format = OutputFormat.getDefault(); try { format = setResponseContentType(req, resp); // check empty query if (HTMLHelper.isParametersEmpty(req, ADDRESS_PARAMETER,COUNTRY_PARAMETER)) { sendCustomError(ResourceBundle.getBundle( com.gisgraphy.addressparser.Constants.BUNDLE_KEY).getString( "error.requiredparameters"), format, resp,req); return; } AddressQuery query = getAddressQueryHttpBuilder().buildFromRequest(req); if (logger.isDebugEnabled()){ logger.debug("query=" + query); } String UA = req.getHeader(Constants.HTTP_USER_AGENT_HEADER_NAME); String referer = req.getHeader(Constants.HTTP_REFERER_HEADER_NAME); if (logger.isInfoEnabled()){ logger.info("A parser request from "+req.getRemoteHost()+" / "+req.getRemoteAddr()+" was received , Referer : "+referer+" , UA : "+UA); } getAddressParserService().executeAndSerialize(query, resp .getOutputStream()); } catch (AddressParserException e) { logger.error("error while execute a Parser query from http request : " + e); String errorMessage = this.debugMode ? " : " + e.getMessage() : ""; sendCustomError(ResourceBundle .getBundle(com.gisgraphy.addressparser.Constants.BUNDLE_KEY).getString( "error.error") + errorMessage, format, resp,req); } catch (RuntimeException e) { logger.error("error while execute a Parser query from http request : " + e); sendCustomError(ResourceBundle .getBundle(com.gisgraphy.addressparser.Constants.BUNDLE_KEY).getString( "error.error"), format, resp,req); } } @Override public IoutputFormatVisitor getErrorVisitor(String errorMessage) { return new AddressParserErrorVisitor(errorMessage); } @Override public GisgraphyServiceType getGisgraphyServiceType() { return GisgraphyServiceType.ADDRESS_PARSER; } }