Subversion Repositories SmartDukaan

Rev

Rev 13709 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.support.controllers;

import in.shop2020.model.v1.catalog.HsItem;
import in.shop2020.support.utils.ReportsUtils;
import in.shop2020.thrift.clients.CatalogClient;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
@InterceptorRefs({
        @InterceptorRef("defaultStack"),
        @InterceptorRef("login")
})
@Results({
        @Result(name="authfail", type="redirectAction", params = {"actionName" , "reports"})
})
public class HsListingController extends ActionSupport implements ServletRequestAware {
        private HttpServletRequest request;
        private HttpSession session;

        private static Logger logger = LoggerFactory.getLogger(HsListingController.class);

        private File listingDataFile;
        private String listingDataFileName;
        private String errorMsg = "";
        private Long rowId = 0L;
        
        private static final int HS_ITEM_ID_INDEX = 0;
        private static final int ITEM_ID_INDEX = 1;
        private static final int HS_PRODUCT_ID_INDEX = 2;
        private static final int LISTING_PRICE_INDEX = 3;
        private static final int DEFAULT_WH_ID_INDEX = 4;
        
        
        public String index() {
        if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), "/hs-dashboard"))
            return "authfail";
        checkForErrors();
        return "authsuccess";
    }

        public String create(){
                File fileToCreate = null;
                listingDataFileName = "ListingSheet_HomeShop18_"+(new Date().toString());
                try {
                        fileToCreate = new File("/tmp/", this.listingDataFileName);
                        FileUtils.copyFile(this.listingDataFile, fileToCreate);
                } catch (Exception e) {
                        logger.error("Error while writing order data file to the local file system for Homeshop18", e);
                        addActionError("Error while writing order data file to the local file system");
                }

                if(checkForErrors())
                        return "authsuccess";

                Workbook wb = null;
                try {
                        wb = new HSSFWorkbook(new FileInputStream(fileToCreate));
                } catch (Exception e) {
                        logger.error("Unable to open the File for Order Creation for Homeshop18 ", e);
                        setErrorMsg(getErrorMsg() + "Error in opening File for Order creation");
                        addActionError("Unable to open the File for Order creation");
                }
                if(checkForErrors())
                        return "authsuccess";

                Sheet sheet = wb.getSheetAt(0);
                Row firstRow = sheet.getRow(0);
                
                in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = null;
                try {
                        catalogClient = new CatalogClient().getClient();
                }
                catch (Exception e) {
             logger.error(e + "\n" + e.getMessage() + e.getCause());
             setErrorMsg(getErrorMsg() + "<br/>Unable to  Initialize Catalog Client ");
             addActionError("Unable to  Initialize Catalog Client ");
        }
                
                List<HsItem> hsItemList = new ArrayList<HsItem>();
                long time = System.currentTimeMillis();
                for (Row row : sheet) {
                        rowId++;
                        if(row.equals(firstRow))
                                continue;
                        try {
                                row.getCell(HS_ITEM_ID_INDEX).setCellType(Cell.CELL_TYPE_STRING);
                                row.getCell(HS_PRODUCT_ID_INDEX).setCellType(Cell.CELL_TYPE_STRING);
                                HsItem hsItem = new HsItem();
                                hsItem.setAddedBy(session.getAttribute(ReportsUtils.USER_EMAIL).toString());
                                hsItem.setAddedTimestamp(time);
                                hsItem.setDefaultWarehouseId((long)row.getCell(DEFAULT_WH_ID_INDEX).getNumericCellValue());
                                hsItem.setHsItemId(row.getCell(HS_ITEM_ID_INDEX).getStringCellValue());
                                hsItem.setHsProductId(row.getCell(HS_PRODUCT_ID_INDEX).getStringCellValue());
                                hsItem.setItemId((long)row.getCell(ITEM_ID_INDEX).getNumericCellValue());
                                hsItem.setListingPrice((long)row.getCell(LISTING_PRICE_INDEX).getNumericCellValue());
                                
                                hsItemList.add(hsItem);
                                if(!catalogClient.isAlive()){
                                        catalogClient = new CatalogClient().getClient();
                                }
                                if(hsItemList.size()>=500){
                                        catalogClient.addHsItem(hsItemList);
                                        hsItemList = new ArrayList<HsItem>();
                                }
                        }
                        catch (Exception e) {
                     logger.error(e + "\n" + e.getMessage() + e.getCause());
                     setErrorMsg(getErrorMsg() + "<br/>Error in row number " + rowId);
                     addActionError("Error in row number " + rowId);
                }
                }
                
                try{
                        if(!catalogClient.isAlive()){
                                catalogClient = new CatalogClient().getClient();
                        }if(hsItemList.size()>0){
                                catalogClient.addHsItem(hsItemList);
                        }
                }catch (Exception e) {
            logger.error(e + "\n" + e.getMessage() + e.getCause());
            setErrorMsg(getErrorMsg() + "<br/>Error while updating Data in System");
            addActionError("Error while updating Data in System");
       }
                if(errorMsg.isEmpty()) {
                setErrorMsg("Sucessfully uploaded listings");
            }
                return "authsuccess";
        }

        private boolean checkForErrors(){
                Collection<String> actionErrors = getActionErrors();
                if(actionErrors != null && !actionErrors.isEmpty()){
                        for (String str : actionErrors) {
                                errorMsg += "<BR/>" + str;
                        }
                        return true;
                }
                return false;
        }

        @Override
        public void setServletRequest(HttpServletRequest request) {
                this.request = request;
                this.session = request.getSession();
        }

        public File getListingDataFile() {
                return listingDataFile;
        }

        public void setListingDataFile(File listingDataFile) {
                this.listingDataFile = listingDataFile;
        }

        public String getListingDataFileName() {
                return listingDataFileName;
        }

        public void setListingDataFileName(String listingDataFileName) {
                this.listingDataFileName = listingDataFileName;
        }

        public String getErrorMsg() {
                return errorMsg;
        }

        public void setErrorMsg(String errorMsg) {
                this.errorMsg = errorMsg;
        }

        public Long getRowId() {
                return rowId;
        }

        public void setRowId(Long rowId) {
                this.rowId = rowId;
        }
}