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;}}