package edu.ucsf.mousedatabase.servlets;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.*;
import edu.ucsf.mousedatabase.Log;
import edu.ucsf.mousedatabase.MGIConnect;
import edu.ucsf.mousedatabase.objects.MGIResult;
/**
* This is a JSON wrapper around the MGI data API.
*/
public class MgiDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MgiDataServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
@SuppressWarnings("serial")
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String query = request.getParameter("query");
try
{
if (query== null)
{
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
if (query.equals("allele_properties"))
{
String accIdParam = request.getParameter("acc_id");
String expectedTypeName = request.getParameter("expected_type_name");
if (accIdParam == null || expectedTypeName == null)
{
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
try
{
Integer.parseInt(accIdParam);
}
catch(Exception ex)
{
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
final int accessionId = Integer.parseInt(accIdParam);
MGIResult result = null;
if (expectedTypeName.equals("allele"))
{
result = MGIConnect.DoMGIAlleleQuery(Integer.toString(accessionId));
} else if (expectedTypeName.equals("transgene")) {
result = MGIConnect.DoMGITransgeneQuery(Integer.toString(accessionId));
} else {
response.getWriter().write("expected_type_name must be 'allele' or 'transgene'");
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
Properties data;
if (result.isValid())
{
HashMap<Integer,Properties> props = MGIConnect.getPropertiesFromAlleleMgiID(new ArrayList<Integer>(){{add(accessionId);}}, 0);
data = props.get(accessionId);
data.setProperty("is_valid", "true");
}
else
{
data = new Properties();
data.setProperty("is_valid", "false");
data.setProperty("error_string", result.getErrorString());
}
Gson gson = new Gson();
gson.toJson(data, response.getWriter());
response.setStatus(HttpServletResponse.SC_OK);
}
else
{
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
}
catch(Exception e)
{
Log.Error("Error responding to mgidataservlet request",e);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}