Application.java 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package controllers;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.List;
  5. import java.util.Random;
  6. import java.util.concurrent.ThreadLocalRandom;
  7. import javax.inject.Inject;
  8. import models.Fortune;
  9. import models.World;
  10. import play.db.jpa.JPAApi;
  11. import play.libs.Json;
  12. import play.mvc.Controller;
  13. import play.mvc.Result;
  14. public class Application extends Controller {
  15. private final JPAApi jpa;
  16. @Inject
  17. public Application(final JPAApi jpa) {
  18. this.jpa = jpa;
  19. }
  20. public Result db() {
  21. return ok(Json.toJson(getRandomWorlds(1).get(0)));
  22. }
  23. public Result queries(final String queries) {
  24. return ok(Json.toJson(getRandomWorlds(queryCount(queries))));
  25. }
  26. public Result fortunes() {
  27. final List<Fortune> fortunes = Fortune.findAll(this.jpa);
  28. fortunes.add(new Fortune("Additional fortune added at request time."));
  29. Collections.sort(fortunes, (f1, f2) -> f1.message.compareTo(f2.message));
  30. return ok(views.html.fortunes.render(fortunes));
  31. }
  32. public Result update(final String queries) {
  33. final List<World> worlds = getRandomWorlds(queryCount(queries));
  34. final Random random = ThreadLocalRandom.current();
  35. for (final World world : worlds) {
  36. world.randomNumber = (long) (random.nextInt(10000) + 1);
  37. }
  38. final List<World> updatedWorlds = World.save(worlds, this.jpa);
  39. return ok(Json.toJson(updatedWorlds));
  40. }
  41. private int queryCount(final String queryCountString) {
  42. int queryCount;
  43. try {
  44. queryCount = Integer.parseInt(queryCountString, 10);
  45. } catch (final NumberFormatException e) {
  46. queryCount = 1;
  47. }
  48. if (queryCount < 1) {
  49. queryCount = 1;
  50. } else if (queryCount > 500) {
  51. queryCount = 500;
  52. }
  53. return queryCount;
  54. }
  55. private List<World> getRandomWorlds(final int n) {
  56. final Random random = ThreadLocalRandom.current();
  57. final List<World> worlds = new ArrayList<>(n);
  58. for (int i = 0; i < n; ++i) {
  59. long randomId = random.nextInt(10000) + 1;
  60. final World world = World.findById(randomId, this.jpa);
  61. worlds.add(world);
  62. }
  63. return worlds;
  64. }
  65. }