package com.iambookmaster.server; import java.io.IOException; import java.util.Date; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.jdo.PersistenceManager; import javax.jdo.Query; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; import com.iambookmaster.client.player.FeedbackPanel; import com.iambookmaster.server.beans.JPAFeedback; public class FeedbackServlet extends AbstractServlet { private static final long serialVersionUID = 1L; private static final Logger log = Logger.getLogger(FeedbackServlet.class.getName()); private static final String COOKIE_KEY="iamboomaster_feedback"; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { perform(req,resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { perform(req,resp); } private void perform(HttpServletRequest req, HttpServletResponse resp)throws IOException { req.setCharacterEncoding("UTF-8"); // AppConstants appConstants = LocalMessages.getInstance(AppConstants.class, LocalMessages.getLocale(req,resp)); Cookie[] cookies = req.getCookies(); String key = null; if (cookies != null) { for (Cookie cookie : cookies) { if (COOKIE_KEY.equals(cookie.getName())) { //found key = cookie.getValue(); break; } } } String paragraphId = req.getParameter(FeedbackPanel.PARAGRAPH); String gameId = req.getParameter(FeedbackPanel.GAME_ID); String gameKey = req.getParameter(FeedbackPanel.GAME_KEY); String title = req.getParameter(FeedbackPanel.GAME_TITLE); String authors = req.getParameter(FeedbackPanel.GAME_AUTHORS); String rating = req.getParameter(FeedbackPanel.STORY_RATING); String complexity = req.getParameter(FeedbackPanel.COMPLEXITY_RATING); String appearence = req.getParameter(FeedbackPanel.APPEARENCE_RATING); String note = req.getParameter(FeedbackPanel.NOTE); StringBuilder builder = new StringBuilder("Feedback\n"); builder.append(title); builder.append('\n'); builder.append(authors); builder.append('\n'); builder.append("id="); builder.append(gameId); builder.append(" key="); builder.append(gameKey); builder.append('\n'); if (paragraphId != null) { builder.append("paragraph ID "); builder.append(paragraphId); builder.append('\n'); } builder.append("Rating: "); builder.append(rating); builder.append('/'); builder.append(complexity); builder.append('/'); builder.append(appearence); builder.append('\n'); builder.append(note); log.log(Level.INFO,builder.toString()); if (gameId != null && title != null && authors != null && rating != null && complexity != null && appearence != null) { try { PersistenceManager em = getPM(req); JPAFeedback feedback=null; boolean create=false; if (key!=null) { Key feebackKey; try { feebackKey = KeyFactory.stringToKey(key); } catch (Exception e) { feebackKey = null; } if (feebackKey != null) { Query query = em.newQuery(Query.JDOQL,"SELECT from "+JPAFeedback.class.getName()+" WHERE id==_key"); query.declareImports("import "+Key.class.getName()); query.declareParameters("Key _key"); List<JPAFeedback> list = (List<JPAFeedback>)query.execute(feebackKey); if (list.size()>0) { feedback = list.get(0); if (gameId.equals(feedback.getBookId())==false) { //other book feedback = null; } } } } if (feedback==null) { create = true; feedback = new JPAFeedback(); feedback.setBookId(gameId); } feedback.setParagraph(paragraphId); if (feedback.getBookKey()==null && gameKey != null) { try { feedback.setBookKey(KeyFactory.stringToKey(gameKey)); } catch (Exception e) { } } feedback.setAuthor(authors); feedback.setTitle(title); feedback.setRating(Integer.parseInt(rating)); feedback.setComplexity(Integer.parseInt(complexity)); feedback.setAppearance(Integer.parseInt(appearence)); feedback.setNote(note); feedback.setDate(new Date()); if (create) { feedback = em.makePersistent(feedback); } Cookie cookie = new Cookie(COOKIE_KEY,KeyFactory.keyToString(feedback.getId())); cookie.setMaxAge(60*60*24*30);//30 days resp.addCookie(cookie); resp.getWriter().write("OK"); resp.flushBuffer(); } catch (Exception e) { e.printStackTrace(); log.log(Level.SEVERE,e.getMessage()); resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } } }