package controllers;
import general.DateOperator;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Session;
import protocol.Query;
import protocol.QueryFactory;
import protocol.Response;
import protocol.ResponseStatus;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import database.Database;
/**
* Servlet implementation class QueryDispatcher
*/
public class QueryDispatcher extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public QueryDispatcher() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// http://code.google.com/p/google-gson/
Session databaseSession = Database.getInstance().getSessionFactory().openSession();
Gson gson = new GsonBuilder()
.setDateFormat(DateOperator.getDateFormatString())
.excludeFieldsWithoutExposeAnnotation()
.create();
Response queryResponse = null;
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String queryName = request.getParameter("queryName");
String queryString = request.getParameter("queryString");
//System.out.println(">> DEBUG: Got query from user: " + queryName + " => " + queryString);
if (queryName != null && queryString != null && queryName.length() > 0 && queryString.length() > 0) {
Query query = QueryFactory.factory(queryName, queryString);
if (query != null) {
queryResponse = query.execute(request, databaseSession);
} else {
queryResponse = new Response(ResponseStatus.FAIL, "Unknown query requested");
}
} else {
queryResponse = new Response(ResponseStatus.FAIL, "Bad query request");
}
out.write(gson.toJson(queryResponse));
out.close();
databaseSession.close();
}
}