view src/main/java/de/mpiwg/itgroup/ismi/servlets/JSONInterface.java @ 65:c4829c26d776 norm_json

first version of translit normalization service using the JSON interface.
author casties
date Wed, 09 Dec 2015 17:33:23 -0500
parents 2e911857a759
children 608f5303cb46
line wrap: on
line source

package de.mpiwg.itgroup.ismi.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.mpi.openmind.cache.WrapperService;

import de.mpiwg.itgroup.ismi.json.utils.JSONUtils;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONDataProxy;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONExistRel;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetAtts;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetDef;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetDefs;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetEnt;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetEnts;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetEntsSize;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetPublicCodices;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetRels;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetSrcRels;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetSrcs4TarRel;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetTarRels;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetTars4SrcRel;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetTitleDetails;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONGetWitnesses4Codex;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONNormString;
import de.mpiwg.itgroup.ismi.servlets.jsonmethods.JSONSearch;

public class JSONInterface extends AbstractServlet implements Servlet{
	private static final long serialVersionUID = 1L;
	
	private static Logger logger = Logger.getLogger(JSONInterface.class);

	private HttpServletRequest request;
	private HttpServletResponse response;
	
	private WrapperService wrapper;
	
	private void initialize(HttpServletRequest request, HttpServletResponse response){

		this.request = request;
		this.response = response;
		this.response.setContentType("application/json; charset=UTF-8");
		//this.response.setContentType("text/html; charset=UTF-8");
		try {
			request.setCharacterEncoding("UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} 
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doIt(request, response);
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doIt(request, response);
	}
	
	public void doIt(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		long start = System.currentTimeMillis();
		this.initialize(request, response);

		String method = request.getParameter(JSONUtils.METHOD);
		
		logger.debug("Starting " + paramsToString(request.getParameterMap()));
		
		if(StringUtils.isNotEmpty(method)){
			try{
				if(method.equals(JSONUtils.M_GET_ENT)){
					JSONGetEnt.execute(getWrapper(), request, response);
				}else if(method.equals("data_proxy")){
					JSONDataProxy.execute(request, response);
				}else if(method.equals(JSONUtils.M_GET_ENTS)){
					JSONGetEnts.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_ENTS_SIZE)){
					JSONGetEntsSize.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_DEF)){
					JSONGetDef.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_DEFS)){
					JSONGetDefs.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_SRC_RELS)){
					JSONGetSrcRels.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_TAR_RELS)){
					JSONGetTarRels.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_ATTS)){
					JSONGetAtts.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_TARS_4_SRC_REL)){
					JSONGetTars4SrcRel.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_SRCS_4_TAR_REL)){
					JSONGetSrcs4TarRel.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_EXIST_RELATION)){
					JSONExistRel.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_RELS)){
					JSONGetRels.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_SEARCH)){
					JSONSearch.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_GET_PUBLIC_CODICES)){
					JSONGetPublicCodices.execute(getWrapper(), request, response);
				}else if(method.equals(JSONUtils.M_WITNESSES_4_CODEX)){
					JSONGetWitnesses4Codex.execute(getWrapper(), request, response);
				}else if(method.equals("get_title_details")){
					JSONGetTitleDetails.execute(getWrapper(), request, response);
				}else if(method.equals("normalize_string")){
					JSONNormString.execute(getWrapper(), request, response);
				}else{
					PrintWriter out = response.getWriter();
					out.print("{\"responseInfo\": \"Method no valid "+ method +".\"}");
					response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Method no valid "+ method +".");
				}	
			}catch (Exception e) {
				logger.error(e.getMessage(), e);
				PrintWriter out = response.getWriter();
				out.print(e.getMessage());
				response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
			}
		}else{
			response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Parameter method not found!.");
		}
		long end = System.currentTimeMillis();
		logger.debug("Finish [time=" + (end-start) + "] " + paramsToString(request.getParameterMap()));
	}
	
	private String paramsToString(Map<String, String[]> paramMap){
		StringBuilder sb = new StringBuilder();
		
		for(Entry<String, String[]> entry : paramMap.entrySet()){
			sb.append(entry.getKey() + "=[");
			int count = 0;
			for(String value : entry.getValue()){
				if(count > 0){
					sb.append(", ");
				}
				sb.append(value);
				count++;
			}
			sb.append("] ");
		}
		
		return sb.toString();
	}
	
	
	public WrapperService getWrapper(){
		if(this.wrapper == null){
			this.wrapper = getAppBean(request, response).getWrapper();
		}
		return this.wrapper;
	}
}