package io.vertx.examples.resteasy.asyncresponse;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import java.util.HashMap;
import java.util.Map;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class ProductBackend extends AbstractVerticle {
private Map<String, JsonObject> products = new HashMap<>();
public ProductBackend() {
// Setup initial data
addProduct(new JsonObject().put("id", "prod3568").put("name", "Egg Whisk").put("price", 3.99).put("weight", 150));
addProduct(new JsonObject().put("id", "prod7340").put("name", "Tea Cosy").put("price", 5.99).put("weight", 100));
addProduct(new JsonObject().put("id", "prod8643").put("name", "Spatula").put("price", 1.00).put("weight", 80));
}
@Override
public void start() throws Exception {
// A simple backend
vertx.eventBus().<JsonObject>consumer("backend", msg -> {
JsonObject json = msg.body();
switch (json.getString("op", "")) {
case "get": {
String productID = json.getString("id");
msg.reply(products.get(productID));
break;
}
case "add": {
String productID = json.getString("id");
JsonObject product = json.getJsonObject("product");
product.put("id", productID);
msg.reply(addProduct(product));
break;
}
case "list": {
JsonArray arr = new JsonArray();
products.forEach((k, v) -> arr.add(v));
msg.reply(arr);
break;
}
default: {
msg.fail(0, "operation not permitted");
}
}
});
}
private boolean addProduct(JsonObject product) {
if (product.containsKey("name") || product.containsKey("price") || product.containsKey("weight")) {
products.put(product.getString("id"), product);
return true;
} else {
return false;
}
}
}