Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

/**
 * 
 */

package in.shop2020.inventory.controllers;

import in.shop2020.model.v1.catalog.InventoryServiceException;
import in.shop2020.model.v1.catalog.Vendor;
import in.shop2020.purchase.PurchaseOrder;
import in.shop2020.purchase.PurchaseService.Client;
import in.shop2020.purchase.PurchaseServiceException;
import in.shop2020.purchase.Supplier;
import in.shop2020.thrift.clients.CatalogClient;
import in.shop2020.thrift.clients.PurchaseClient;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@SuppressWarnings("serial")
@Results({ @Result(name = "index", location = "raisePO-index.vm"),
        @Result(name = "result", location = "raisePO-result.vm") })
public class RaisePOController extends BaseController {

    private static Logger log = LoggerFactory
            .getLogger(RaisePOController.class);

    private File purchaseOrderDetails;
    private String vendorId;
    private String result;
    private List<Vendor> vendors;

    private HttpServletResponse response;

    public String index() {
        CatalogClient csc;
        try {
            csc = new CatalogClient();
            in.shop2020.model.v1.catalog.InventoryService.Client catalogClient = csc
                    .getClient();
            setVendors(catalogClient.getAllVendors());
        } catch (TTransportException e) {
            e.printStackTrace();
            setResult(e.getMessage());
        } catch (TException e) {
            e.printStackTrace();
            setResult(e.getMessage());
        }
        return "index";
    }

    /*
     * MAIN METHOD TO TEST THE CODE
     * 
     * public static void main(String[] args) { RaisePOController rpc = new
     * RaisePOController(); rpc.setPurchaseOrderDetails(new
     * File("/home/anupam/Desktop/po.xls")); rpc.setVendorId("3"); rpc.create();
     * System.out.println(rpc.getResult()); }
     */

    public String create() {
        try {
            /*
             * Save the uploaded file to disk
             */
            FileInputStream is = new FileInputStream(purchaseOrderDetails);
            String filename = "/tmp/po-"
                    + Calendar.getInstance().getTime().toString() + ".xls";
            File f = new File(filename);
            FileOutputStream fos = null;
            fos = new FileOutputStream(f);
            byte[] buf = new byte[4096];
            int bytesRead;

            while ((bytesRead = is.read(buf)) != -1) {
                fos.write(buf, 0, bytesRead);
            }
            fos.close();

            int vendor = Integer.parseInt(vendorId);
            CatalogClient csc = new CatalogClient();
            in.shop2020.model.v1.catalog.InventoryService.Client catalogClient = csc
                    .getClient();
            setVendors(catalogClient.getAllVendors());
            if (vendor < 1 || vendor > vendors.size()) {
                setResult("Select a valid Vendor");
                return "result";
            }
            /*
             * Try to create the purchase order for given vendor
             */

            Long purchaseOrderId = null;
            String output = catalogClient
                    .processPurchaseOrder(filename, vendor);

            /*
             * If PO is generated then create the PDF receipt for it
             */
            if (output.contains("POId:")) {
                String[] arr = output.split(":");
                purchaseOrderId = Long.parseLong(arr[1]);
                PurchaseClient warehouseServiceClient = new PurchaseClient();
                Client client = warehouseServiceClient.getClient();
                PurchaseOrder purchaseOrder = client
                        .getPurchaseOrder(purchaseOrderId);
                Supplier supplier = client.getSupplier(purchaseOrder
                        .getSupplierId());
                String pdfFilename = in.shop2020.inventory.service.PdfPoSheetGenerator
                        .generatePdfSheet(purchaseOrder, supplier);

                /*
                 * Put pdf file in a buffer to send it in response
                 */
                File file = new File(pdfFilename);
                byte[] buffer = new byte[(int) file.length()];
                try {
                    InputStream input = null;
                    try {
                        int totalBytesRead = 0;
                        input = new BufferedInputStream(new FileInputStream(
                                file));
                        while (totalBytesRead < buffer.length) {
                            int bytesRemaining = buffer.length - totalBytesRead;
                            // input.read() returns -1, 0, or more :
                            int bytesRead1 = input.read(buffer, totalBytesRead,
                                    bytesRemaining);
                            if (bytesRead1 > 0) {
                                totalBytesRead = totalBytesRead + bytesRead1;
                            }
                        }
                        /*
                         * the above style is a bit tricky: it places bytes into
                         * the 'buffer' array; 'buffer' is an output parameter;
                         * the while loop usually has a single iteration only.
                         */
                    } finally {
                        input.close();
                    }
                } catch (FileNotFoundException ex) {
                    log.info("FILE NOT FOUND : " + pdfFilename, ex);
                    setResult(ex.getMessage());
                } catch (IOException ex) {
                    log.info("FILE NOT FOUND : " + pdfFilename);
                    setResult(ex.getMessage());
                }
                response.setHeader("Content-disposition",
                        "attachment; filename=" + pdfFilename);
                /*
                 * Send the pdf file in response
                 */
                ServletOutputStream sos;
                sos = response.getOutputStream();
                sos.write(buffer);
                sos.flush();
            }

        } catch (TTransportException e) {
            e.printStackTrace();
            setResult(e.getMessage());

        } catch (NumberFormatException e) {
            e.printStackTrace();
            setResult(e.getMessage());

        } catch (TException e) {
            e.printStackTrace();
            setResult(e.getMessage());

        } catch (InventoryServiceException e) {
            setResult(e.getMessage());

        } catch (IOException e) {
            log.error("Error occured");
            setResult(e.getMessage());
        } catch (PurchaseServiceException e) {
            setResult(e.getMessage());
        }
        return "result";
    }

    public File getPurchaseOrderDetails() {
        return purchaseOrderDetails;
    }

    public void setPurchaseOrderDetails(File purchaseOrderDetails) {
        this.purchaseOrderDetails = purchaseOrderDetails;
    }

    public String getVendorId() {
        return vendorId;
    }

    public void setVendorId(String vendorId) {
        this.vendorId = vendorId;
    }

    public void setResult(String result) {
        this.result = result;
    }

    public String getResult() {
        return result;
    }

    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }

    public List<Vendor> getVendors() {
        return vendors;
    }

    public void setVendors(List<Vendor> vendors) {
        this.vendors = vendors;
    }

}