DbMongoHandler.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package hello;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.google.common.net.MediaType;
  4. import com.mongodb.BasicDBObject;
  5. import com.mongodb.DB;
  6. import com.mongodb.DBObject;
  7. import io.undertow.server.HttpHandler;
  8. import io.undertow.server.HttpServerExchange;
  9. import io.undertow.util.Headers;
  10. import java.util.Objects;
  11. /**
  12. * Handles the single- and multiple-query database tests using MongoDB.
  13. */
  14. final class DbMongoHandler implements HttpHandler {
  15. private final ObjectMapper objectMapper;
  16. private final DB database;
  17. DbMongoHandler(ObjectMapper objectMapper, DB database) {
  18. this.objectMapper = Objects.requireNonNull(objectMapper);
  19. this.database = Objects.requireNonNull(database);
  20. }
  21. @Override
  22. public void handleRequest(HttpServerExchange exchange) throws Exception {
  23. if (exchange.isInIoThread()) {
  24. exchange.dispatch(this);
  25. return;
  26. }
  27. int queries = Helper.getQueries(exchange);
  28. World[] worlds = new World[queries];
  29. for (int i = 0; i < queries; i++) {
  30. DBObject object = database.getCollection("world").findOne(
  31. new BasicDBObject("id", Helper.randomWorld()));
  32. worlds[i] = new World(
  33. //
  34. // The creation script for the Mongo database inserts these numbers as
  35. // JavaScript numbers, which resolve to Doubles in Java.
  36. //
  37. ((Number) object.get("id")).intValue(),
  38. ((Number) object.get("randomNumber")).intValue());
  39. }
  40. exchange.getResponseHeaders().put(
  41. Headers.CONTENT_TYPE, MediaType.JSON_UTF_8.toString());
  42. exchange.getResponseSender().send(objectMapper.writeValueAsString(worlds));
  43. }
  44. }