/demos/helloorm/src/com/google/appengine/demos/helloorm/GetFlights.java

http://datanucleus-appengine.googlecode.com/ · Java · 144 lines · 123 code · 17 blank · 4 comment · 8 complexity · abff1351d16268b11dd8e85438edb3cc MD5 · raw file

  1. // Copyright 2008 Google Inc. All Rights Reserved.
  2. package com.google.appengine.demos.helloorm;
  3. import java.io.IOException;
  4. import java.util.Collection;
  5. import java.util.List;
  6. import javax.jdo.PersistenceManager;
  7. import javax.persistence.EntityManager;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. public class GetFlights extends HttpServlet {
  12. private static final String DEFAULT_QUERY = "select f from " + Flight.class.getName() + " as f";
  13. @Override
  14. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  15. doGet(req, resp);
  16. }
  17. @Override
  18. public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  19. resp.setContentType("text/html");
  20. long start = System.currentTimeMillis();
  21. Collection<Flight> flights;
  22. String query = DEFAULT_QUERY;
  23. String customQuery = req.getParameter("q");
  24. if (customQuery != null) {
  25. query = customQuery;
  26. }
  27. if (PersistenceStandard.get() == PersistenceStandard.JPA) {
  28. flights = queryJPA(query);
  29. } else {
  30. flights = queryJDO(query);
  31. }
  32. printQueryFlightForm(query, resp);
  33. resp.getWriter().println("<table>");
  34. printTableHeader(resp);
  35. printFlights(resp, flights);
  36. resp.getWriter().println("</table>");
  37. printAddFlightForm(query, resp);
  38. resp.getWriter().println("Request time in millis: " + (System.currentTimeMillis() - start));
  39. resp.getWriter().println("<br>");
  40. printPersistenceStandardForm(query, resp);
  41. }
  42. private Collection<Flight> queryJDO(String query) {
  43. PersistenceManager pm = PMF.get().getPersistenceManager();
  44. try {
  45. List<Flight> flights = (List<Flight>) pm.newQuery(query).execute();
  46. // Force all results to be pulled back before we close the entity manager.
  47. // We could have also called pm.detachCopyAll()
  48. flights.size();
  49. return flights;
  50. } finally {
  51. pm.close();
  52. }
  53. }
  54. private List<Flight> queryJPA(String query) {
  55. EntityManager em = EMF.get().createEntityManager();
  56. try {
  57. List<Flight> flights = em.createQuery(query).getResultList();
  58. // force all results to be pulled back before we close the entity manager
  59. flights.size();
  60. return flights;
  61. } finally {
  62. em.close();
  63. }
  64. }
  65. private void printQueryFlightForm(String query, HttpServletResponse resp) throws IOException {
  66. PersistenceStandard ps = PersistenceStandard.get();
  67. resp.getWriter().println("<form action=\"/\" method=\"post\">");
  68. resp.getWriter().println(ps.name() + " Query for flights: "
  69. + "<input name=\"q\" type=\"text\" size=\"100\" "
  70. + "value=\"" + (query == null ? "" : query) + "\"/>");
  71. resp.getWriter().println("<input type=\"submit\" value=\"Run Query\">");
  72. resp.getWriter().println("</form>");
  73. }
  74. private void printPersistenceStandardForm(String query, HttpServletResponse resp) throws IOException {
  75. PersistenceStandard ps = PersistenceStandard.get();
  76. resp.getWriter().println("Persistence standard is " + ps.name());
  77. resp.getWriter().println("<form action=\"updatePersistenceStandard\" method=\"post\">");
  78. resp.getWriter().println("<input type=\"submit\" value=\"Switch to " + ps.getAlternate() + "\">");
  79. resp.getWriter().println(
  80. "<input name=\"persistenceStandard\" type=\"hidden\" value=\"" + ps.getAlternate() + "\"/>");
  81. resp.getWriter().println("<input name=\"q\" type=\"hidden\" value=\"" + query + "\"/>");
  82. resp.getWriter().println("</form>");
  83. }
  84. private void printAddFlightForm(String query, HttpServletResponse resp) throws IOException {
  85. resp.getWriter().println("<form action=\"addFlight\" method=\"post\">");
  86. resp.getWriter().println("<table>");
  87. resp.getWriter().println("<tr>");
  88. resp.getWriter().println("<th>Origin</th><td><input name=\"orig\" type=\"text\"/></td>");
  89. resp.getWriter().println("<th>Destination</th><td><input name=\"dest\" type=\"text\"/></td>");
  90. resp.getWriter().println("</tr>");
  91. resp.getWriter().println("<tr><td><input type=\"submit\" value=\"Add Flight\"></td></tr>");
  92. resp.getWriter().println("<input name=\"q\" type=\"hidden\" value=\"" + query + "\"/>");
  93. resp.getWriter().println("</table>");
  94. resp.getWriter().println("</form>");
  95. }
  96. private void printFlights(HttpServletResponse resp, Collection<Flight> flights) throws IOException {
  97. if (flights.isEmpty()) {
  98. resp.getWriter().println("<br>No Flights!");
  99. }
  100. int index = 1;
  101. for (Flight f : flights) {
  102. resp.getWriter().println("<tr>");
  103. resp.getWriter().println("<td>");
  104. resp.getWriter().println("<a href=\"getFlight?key=" + f.getId() + "\"> " + index++ + "</a>");
  105. resp.getWriter().println("</td>");
  106. resp.getWriter().println("<td>");
  107. resp.getWriter().println(f.getOrig());
  108. resp.getWriter().println("</td>");
  109. resp.getWriter().println("<td>");
  110. resp.getWriter().println(f.getDest());
  111. resp.getWriter().println("</td>");
  112. resp.getWriter().println("</tr>");
  113. }
  114. }
  115. private void printTableHeader(HttpServletResponse resp) throws IOException {
  116. resp.getWriter().println("<tr>");
  117. resp.getWriter().println("<td>");
  118. resp.getWriter().println("</td>");
  119. resp.getWriter().println("<td>");
  120. resp.getWriter().println("Origin");
  121. resp.getWriter().println("</td>");
  122. resp.getWriter().println("<td>");
  123. resp.getWriter().println("Dest");
  124. resp.getWriter().println("</td>");
  125. resp.getWriter().println("</tr>");
  126. }
  127. }