Subversion Repositories SmartDukaan

Rev

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(){
                
        }
        
        @Override
        public 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;
        }       
}