package ca.grocerygo.server;
import ca.grocerygo.database.Grocery;
import com.google.gson.Gson;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* User: robert
* Date: 25/01/13
*/
@WebServlet(name = "UpdateGroceryInfo", urlPatterns = "/UpdateGroceryInfo")
public class UpdateGroceryInfo extends HttpServlet {
private List<Grocery> groceries = null;
Gson gson = new Gson();
final static Logger logger = LoggerFactory.getLogger(UpdateGroceryInfo.class);
public static final DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Date requestDate = null;
Integer categoryId = null;
try {
requestDate = (req.getParameterMap().containsKey("date"))
? ((req.getParameter("date").isEmpty()) ? null : format.parse(req.getParameter("date")))
: null;
categoryId = (req.getParameterMap().containsKey("categoryId"))
? ((req.getParameter("categoryId").isEmpty()) ? null : Integer.parseInt(req.getParameter("categoryId")))
: null;
} catch (ParseException e) {
e.printStackTrace();
}
logger.info("requestDate = " + ((requestDate == null) ? "null" : requestDate.toString()));
logger.info("categoryId = " + ((categoryId == null) ? "null" : categoryId));
groceries = getGroceries(requestDate, categoryId);
resp.setContentType("application/json");
resp.setCharacterEncoding("UTF-8");
PrintWriter out = resp.getWriter();
out.print(gson.toJson(groceries));
}
public List<Grocery> getGroceries(Date requestDate, Integer categoryId) {
List<Grocery> gro = null;
Session session = HibernateUtils.getSessionFactory().openSession();
session.beginTransaction();
Date lastestDate = (Date) session.createCriteria(Grocery.class).setProjection(Projections.max("updateDate")).uniqueResult();
Criteria criteria = session.createCriteria(Grocery.class, "grocery");
if (requestDate == null) {
criteria.add(Restrictions.eq("updateDate", lastestDate));
} else {
criteria.add(Restrictions.ge("endDate", requestDate)).add(Restrictions.eq("updateDate", lastestDate));
}
if (categoryId != null)
criteria.createAlias("item", "myItem")
.createAlias("myItem.subcategory", "mySubcategory")
.createAlias("mySubcategory.categoryId", "myCategory")
.add(Restrictions.eq("myCategory.categoryId", categoryId));
gro = (List<Grocery>) criteria.list();
session.getTransaction().commit();
return gro;
}
}