Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4370 anupam.sin 1
/**
2
 * 
3
 */
4
 
5
package in.shop2020.support.controllers;
6
 
7
import in.shop2020.model.v1.catalog.InventoryServiceException;
8
import in.shop2020.support.utils.ReportsUtils;
9
import in.shop2020.thrift.clients.CatalogClient;
10
import in.shop2020.thrift.clients.WarehouseClient;
11
import in.shop2020.warehouse.Supplier;
12
import in.shop2020.warehouse.WarehouseServiceException;
13
 
14
import java.io.BufferedInputStream;
15
import java.io.File;
16
import java.io.FileInputStream;
17
import java.io.FileNotFoundException;
18
import java.io.FileOutputStream;
19
import java.io.IOException;
20
import java.io.InputStream;
21
import java.util.Calendar;
22
import javax.servlet.ServletOutputStream;
23
import javax.servlet.http.HttpServletRequest;
24
import javax.servlet.http.HttpServletResponse;
25
import javax.servlet.http.HttpSession;
26
 
27
import org.apache.struts2.convention.annotation.InterceptorRef;
28
import org.apache.struts2.convention.annotation.InterceptorRefs;
29
import org.apache.struts2.convention.annotation.Result;
30
import org.apache.struts2.convention.annotation.Results;
31
import org.apache.struts2.interceptor.ServletRequestAware;
32
import org.apache.struts2.interceptor.ServletResponseAware;
33
import org.apache.thrift.TException;
34
import org.apache.thrift.transport.TTransportException;
35
import org.slf4j.Logger;
36
import org.slf4j.LoggerFactory;
37
 
38
@InterceptorRefs({
39
    @InterceptorRef("defaultStack"),
40
    @InterceptorRef("login")
41
})
42
@Results({
43
    @Result(name = "index", location = "raisePO-index.vm"),
44
    @Result(name = "result", location = "raisePO-result.vm")
45
})
46
 
47
public class RaisePOController implements ServletResponseAware, ServletRequestAware {
48
 
49
    private static Logger log = LoggerFactory.getLogger(RaisePOController.class);
50
 
51
    private File purchaseOrderDetails;
52
    private String vendorId;
53
    private String result;
54
 
55
    private HttpServletResponse response;
56
 
57
    private HttpServletRequest request;
58
 
59
    private HttpSession session;
60
 
61
    @Override
62
    public void setServletRequest(HttpServletRequest req) {
63
        this.request = req;
64
        this.session = req.getSession();
65
    }
66
 
67
 
68
    public String index() {
69
        if (!ReportsUtils.canAccessReport((Long) session.getAttribute(ReportsUtils.ROLE), request.getServletPath()))    {
70
            return "authfail";
71
        }        
72
        return "index";
73
    }
74
 
75
    /* MAIN METHOD TO TEST THE CODE 
76
     * 
77
     * public static void main(String[] args) {
78
        RaisePOController rpc = new RaisePOController();
79
        rpc.setPurchaseOrderDetails(new File("/home/anupam/Desktop/po.xls"));
80
        rpc.setVendorId("3");
81
        rpc.create();
82
        System.out.println(rpc.getResult());
83
    }*/
84
 
85
    public String create() {
86
        try {
87
            /*
88
             * Save the uploaded file to disk
89
             * 
90
             */
91
            FileInputStream is = new FileInputStream(purchaseOrderDetails);
92
            String filename = "/tmp/po-" +  Calendar.getInstance().getTime().toString() + ".xls";
93
            File f = new File(filename);
94
            FileOutputStream fos = null;
95
            fos = new FileOutputStream(f);
96
            byte[] buf = new byte[4096];
97
            int bytesRead;
98
 
99
            while((bytesRead = is.read(buf)) != -1) {
100
                fos.write(buf, 0, bytesRead);
101
            }
102
            fos.close();
103
 
104
            int vendor = Integer.parseInt(vendorId);
105
            if (vendor < 1 || vendor > 5) {
106
                setResult("Select a valid Vendor");
107
                return "result";
108
            }
109
            /*
110
             * Try to create the purchase order for given vendor
111
             * 
112
             */
113
 
114
            Long purchaseOrderId = null;
115
            CatalogClient csc = new CatalogClient();
116
            in.shop2020.model.v1.catalog.InventoryService.Client catalogClient= csc.getClient();
117
            String output = catalogClient.processPurchaseOrder(filename, vendor);
118
 
119
            /*
120
             * If PO is generated then create the PDF receipt for it
121
             * 
122
             */
123
            if(output.contains("POId:")) {
124
                String [] arr = output.split(":");
125
                purchaseOrderId = Long.parseLong(arr[1]);
126
                WarehouseClient warehouseServiceClient = new WarehouseClient();
127
                in.shop2020.warehouse.WarehouseService.Client client = warehouseServiceClient.getClient();
128
                in.shop2020.warehouse.PurchaseOrder purchaseOrder = client.getPurchaseOrder(purchaseOrderId);
129
                Supplier supplier = client.getSupplier(purchaseOrder.getSupplierId());
130
                String pdfFilename = in.shop2020.support.services.PdfPoSheetGenerator.generatePdfSheet(purchaseOrder, supplier);
131
 
132
                /*
133
                 * Put pdf file in a buffer to send it in response 
134
                 * 
135
                 */
136
                File file = new File(pdfFilename);
137
                byte[] buffer = new byte[(int)file.length()];
138
                try {
139
                    InputStream input = null;
140
                    try {
141
                        int totalBytesRead = 0;
142
                        input = new BufferedInputStream(new FileInputStream(file));
143
                        while(totalBytesRead < buffer.length){
144
                            int bytesRemaining = buffer.length - totalBytesRead;
145
                            //input.read() returns -1, 0, or more :
146
                            int bytesRead1 = input.read(buffer, totalBytesRead, bytesRemaining); 
147
                            if (bytesRead1 > 0){
148
                                totalBytesRead = totalBytesRead + bytesRead1;
149
                            }
150
                        }
151
                        /*
152
                         the above style is a bit tricky: it places bytes into the 'buffer' array; 
153
                         'buffer' is an output parameter;
154
                         the while loop usually has a single iteration only.
155
                         */
156
                    }
157
                    finally {
158
                        input.close();
159
                    }
160
                }
161
                catch (FileNotFoundException ex) {
162
                    log.info("FILE NOT FOUND : " + pdfFilename, ex);
163
                    setResult(ex.getMessage());
164
                }
165
                catch (IOException ex) {
166
                    log.info("FILE NOT FOUND : " + pdfFilename);
167
                    setResult(ex.getMessage());
168
                }
4371 anupam.sin 169
                response.setHeader("Content-disposition", "attachment; filename=" + pdfFilename );
4370 anupam.sin 170
                /*
171
                 * Send the pdf file in response  
172
                 * 
173
                 */
174
                ServletOutputStream sos;
175
                sos = response.getOutputStream();
176
                sos.write(buffer);
177
                sos.flush();
178
            }
179
 
180
        } catch (TTransportException e) {
181
            e.printStackTrace();
182
            setResult(e.getMessage());
183
 
184
        } catch (NumberFormatException e) {
185
            e.printStackTrace();
186
            setResult(e.getMessage());
187
 
188
        } catch (TException e) {
189
            e.printStackTrace();
190
            setResult(e.getMessage());
191
 
192
        } catch (WarehouseServiceException e) {
193
            e.printStackTrace();
194
            setResult(e.getMessage());
195
 
196
        } catch (InventoryServiceException e) {
197
            setResult(e.getMessage());
198
 
199
        } catch(IOException e) {
200
            log.error("Error occured");
201
            setResult(e.getMessage());
202
        }
203
        return "result";
204
    }
205
 
206
    public File getPurchaseOrderDetails() {
207
        return purchaseOrderDetails;
208
    }
209
 
210
    public void setPurchaseOrderDetails(File purchaseOrderDetails) {
211
        this.purchaseOrderDetails = purchaseOrderDetails;
212
    }
213
 
214
    public String getVendorId() {
215
        return vendorId;
216
    }
217
 
218
    public void setVendorId(String vendorId) {
219
        this.vendorId = vendorId;
220
    }
221
 
222
    public void setResult(String result) {
223
        this.result = result;
224
    }
225
 
226
    public String getResult() {
227
        return result;
228
    }
229
 
230
    public void setServletResponse(HttpServletResponse response) {
231
        this.response = response;
232
    }
233
}