Rev 4408 | Blame | Last modification | View Log | RSS feed
/****/package in.shop2020.support.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.support.utils.ReportsUtils;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.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;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.apache.struts2.interceptor.ServletResponseAware;import org.apache.thrift.TException;import org.apache.thrift.transport.TTransportException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;@InterceptorRefs({@InterceptorRef("defaultStack"),@InterceptorRef("login")})@Results({@Result(name = "index", location = "raisePO-index.vm"),@Result(name = "result", location = "raisePO-result.vm")})public class RaisePOController implements ServletResponseAware, ServletRequestAware {private static Logger log = LoggerFactory.getLogger(RaisePOController.class);private File purchaseOrderDetails;private String vendorId;private String result;private List<Vendor> vendors;private HttpServletResponse response;private HttpServletRequest request;private HttpSession session;@Overridepublic void setServletRequest(HttpServletRequest req) {this.request = req;this.session = req.getSession();}public String index() {if (!ReportsUtils.canAccessReport((Long) session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {return "authfail";}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.support.services.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;}}