Rev 3125 | Rev 4765 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.support.controllers;import java.util.List;import java.util.HashMap;import java.util.Map;import in.shop2020.model.v1.catalog.InventoryService.Client;import in.shop2020.model.v1.catalog.Warehouse;import in.shop2020.support.models.InventoryUpdate;import in.shop2020.support.models.Update;import in.shop2020.thrift.clients.CatalogClient;import in.shop2020.utils.ConfigClientKeys;import org.apache.struts2.rest.DefaultHttpHeaders;import org.apache.struts2.rest.HttpHeaders;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.opensymphony.xwork2.ModelDriven;public class UpdatesController implements ModelDriven<InventoryUpdate>{private static Logger logger = LoggerFactory.getLogger(UpdatesController.class);private InventoryUpdate inventoryUpdate = new InventoryUpdate();private String timestamp;private int errorCode = 0;private String errorMessage;private String id;public UpdatesController(){}@Overridepublic InventoryUpdate getModel() {return this.inventoryUpdate;}public HttpHeaders show(){logger.info("Status requested for warehouse id: " + getId());CatalogClient catalogServiceClient;Client client;try {catalogServiceClient = new CatalogClient();client = catalogServiceClient.getClient();long warehouseId = Long.parseLong(getId());Warehouse warehouse = client.getWarehouse(warehouseId);setTimestamp(warehouse.getVendorString());} catch (Exception e) {logger.error("Error getting the warehouse or setting the timestamp", e);}return new DefaultHttpHeaders("lsuccess");}/*** Stores the inventory updates on the history and the production server.* @return*/public HttpHeaders create(){logger.info(inventoryUpdate.toString());try {//The snapshot client is used to update the inventory snapshot for production systems.CatalogClient snapshotCatalogServiceClient = new CatalogClient();Client snapshotClient = snapshotCatalogServiceClient.getClient();//The history client is used to update the inventory history on the processing system.CatalogClient historyCatalogServiceClient = new CatalogClient(ConfigClientKeys.inventory_history_service_server_host.toString(),ConfigClientKeys.inventory_history_service_server_port.toString());Client historyClient = historyCatalogServiceClient.getClient();Long warehouseId = Long.parseLong(inventoryUpdate.getwarehouseId());String timestamp = inventoryUpdate.getCurrentTimestamp();Map<String, Long> availability = new HashMap<String, Long>();List<Update> updates = inventoryUpdate.getUpdates();for(Update update: updates){String key = update.getKey();long quantity = (long) Double.parseDouble(update.getQuantity());if(availability.containsKey(key)){quantity = quantity + availability.get(key);}availability.put(key, quantity);}//Update the snapshot before the history since that is more important.snapshotClient.updateInventory(warehouseId, timestamp, availability);historyClient.updateInventoryHistory(warehouseId, timestamp, availability);} catch (Exception e) {logger.error("Unable to update inventory", e);}return new DefaultHttpHeaders("psuccess");}public int getErrorCode() {return errorCode;}public String getErrorMessage() {return errorMessage;}public String getId(){return id;}public void setId(String id){this.id = id;}public InventoryUpdate getInventoryUpdate() {return inventoryUpdate;}public void setInventoryUpdate(InventoryUpdate inventoryUpdate) {this.inventoryUpdate = inventoryUpdate;}public void setTimestamp(String timestamp) {this.timestamp = timestamp;}public String getTimestamp() {return timestamp;}}