// Copyright 2008 Google Inc. All Rights Reserved. package com.google.appengine.demos.helloorm; import java.io.IOException; import java.util.Collection; import java.util.List; import javax.jdo.PersistenceManager; import javax.persistence.EntityManager; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GetFlights extends HttpServlet { private static final String DEFAULT_QUERY = "select from " + Flight.class.getName(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { doGet(req, resp); } @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/html"); long start = System.currentTimeMillis(); Collection<Flight> flights; String query = DEFAULT_QUERY; String customQuery = req.getParameter("q"); if (customQuery != null) { query = customQuery; } if (PersistenceStandard.get() == PersistenceStandard.JPA) { flights = queryJPA(query); } else { flights = queryJDO(query); } printQueryFlightForm(query, resp); resp.getWriter().println("<table>"); printTableHeader(resp); printFlights(resp, flights); resp.getWriter().println("</table>"); printAddFlightForm(query, resp); resp.getWriter().println("Request time in millis: " + (System.currentTimeMillis() - start)); resp.getWriter().println("<br>"); printPersistenceStandardForm(query, resp); } private Collection<Flight> queryJDO(String query) { PersistenceManager pm = PMF.get().getPersistenceManager(); try { List<Flight> flights = (List<Flight>) pm.newQuery(query).execute(); // Force all results to be pulled back before we close the entity manager. // We could have also called pm.detachCopyAll() flights.size(); return flights; } finally { pm.close(); } } private List<Flight> queryJPA(String query) { EntityManager em = EMF.get().createEntityManager(); try { List<Flight> flights = em.createQuery(query).getResultList(); // force all results to be pulled back before we close the entity manager flights.size(); return flights; } finally { em.close(); } } private void printQueryFlightForm(String query, HttpServletResponse resp) throws IOException { PersistenceStandard ps = PersistenceStandard.get(); resp.getWriter().println("<form action=\"/\" method=\"post\">"); resp.getWriter().println(ps.name() + " Query for flights: " + "<input name=\"q\" type=\"text\" size=\"100\" " + "value=\"" + (query == null ? "" : query) + "\"/>"); resp.getWriter().println("<input type=\"submit\" value=\"Run Query\">"); resp.getWriter().println("</form>"); } private void printPersistenceStandardForm(String query, HttpServletResponse resp) throws IOException { PersistenceStandard ps = PersistenceStandard.get(); resp.getWriter().println("Persistence standard is " + ps.name()); resp.getWriter().println("<form action=\"updatePersistenceStandard\" method=\"post\">"); resp.getWriter().println("<input type=\"submit\" value=\"Switch to " + ps.getAlternate() + "\">"); resp.getWriter().println( "<input name=\"persistenceStandard\" type=\"hidden\" value=\"" + ps.getAlternate() + "\"/>"); resp.getWriter().println("<input name=\"q\" type=\"hidden\" value=\"" + query + "\"/>"); resp.getWriter().println("</form>"); } private void printAddFlightForm(String query, HttpServletResponse resp) throws IOException { resp.getWriter().println("<form action=\"addFlight\" method=\"post\">"); resp.getWriter().println("<table>"); resp.getWriter().println("<tr>"); resp.getWriter().println("<th>Origin</th><td><input name=\"orig\" type=\"text\"/></td>"); resp.getWriter().println("<th>Destination</th><td><input name=\"dest\" type=\"text\"/></td>"); resp.getWriter().println("</tr>"); resp.getWriter().println("<tr><td><input type=\"submit\" value=\"Add Flight\"></td></tr>"); resp.getWriter().println("<input name=\"q\" type=\"hidden\" value=\"" + query + "\"/>"); resp.getWriter().println("</table>"); resp.getWriter().println("</form>"); } private void printFlights(HttpServletResponse resp, Collection<Flight> flights) throws IOException { if (flights.isEmpty()) { resp.getWriter().println("<br>No Flights!"); } int index = 1; for (Flight f : flights) { resp.getWriter().println("<tr>"); resp.getWriter().println("<td>"); resp.getWriter().println("<a href=\"getFlight?key=" + f.getId() + "\"> " + index++ + "</a>"); resp.getWriter().println("</td>"); resp.getWriter().println("<td>"); resp.getWriter().println(f.getOrig()); resp.getWriter().println("</td>"); resp.getWriter().println("<td>"); resp.getWriter().println(f.getDest()); resp.getWriter().println("</td>"); resp.getWriter().println("</tr>"); } } private void printTableHeader(HttpServletResponse resp) throws IOException { resp.getWriter().println("<tr>"); resp.getWriter().println("<td>"); resp.getWriter().println("</td>"); resp.getWriter().println("<td>"); resp.getWriter().println("Origin"); resp.getWriter().println("</td>"); resp.getWriter().println("<td>"); resp.getWriter().println("Dest"); resp.getWriter().println("</td>"); resp.getWriter().println("</tr>"); } }