Application.java 2.1 KB

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