Subversion Repositories SmartDukaan

Rev

Rev 5711 | Rev 10689 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 * 
 */
package in.shop2020.inventory.controllers;

import in.shop2020.thrift.clients.WarehouseClient;
import in.shop2020.warehouse.InventoryAge;
import in.shop2020.warehouse.WarehouseService.Client;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletOutputStream;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author mandeep
 *
 */
public class InventoryAgeController extends BaseController {
    private static Log logger = LogFactory.getLog(InventoryAgeController.class);
    
    public String index() {
        try {
            Client client = new WarehouseClient().getClient();
            List<InventoryAge> inventoryAge = client.getInventoryAge();
            byte[] buffer = null;
            File file = createFile(inventoryAge);
            buffer = new byte[(int) file.length()];
            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 bytesRead = input.read(buffer, totalBytesRead,
                            bytesRemaining);
                    if (bytesRead > 0) {
                        totalBytesRead = totalBytesRead + bytesRead;
                    }
                }
                /*
                 * 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();
            }

            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "inline; filename="
                    + file.getName());

            ServletOutputStream sos = response.getOutputStream();
            sos.write(buffer);
            sos.flush();            
        }
        catch (Exception e) {
        }

        return null;
    }

    /**
     * @param inventoryAge
     * @return
     */
    private File createFile(List<InventoryAge> inventoryAge) {
        try {
            File file = new File("InventoryAge.xls");
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
            bufferedWriter.write(StringUtils.join(new String[] {
                    "Item Id",
                    "Category",
                    "Brand",
                    "Model Name",
                    "Model Number",
                    "Color",
                    "Fresh",
                    "1-2 week",
                    "2-3 week",
                    "3-4 week",
                    "4+ week",
                    "1+ week",
                    "1+ week cost",
                    "All",
                    "All cost" }, '\t'));

            for (InventoryAge item : inventoryAge) {
                bufferedWriter.newLine();

                bufferedWriter.write(StringUtils.join(
                        new String[] {
                                String.valueOf(item.getItemId()),
                                item.getCategory(),
                                item.getBrand(),
                                item.getModelName(),
                                item.getModelNumber(),
                                item.getColor(),
                                String.valueOf(item.getFreshCount()),
                                String.valueOf(item.getOneToTwoCount()),
                                String.valueOf(item.getTwoToThreeCount()),
                                String.valueOf(item.getThreeToFourCount()),
                                String.valueOf(item.getFourPlusCount()),
                                String.valueOf(item.getOnePlusCount()),
                                String.valueOf(item.getOnePlusCost()),
                                String.valueOf(item.getZeroPlusCount()),
                                String.valueOf(item.getZeroPlusCost())}, '\t'));
            }

            bufferedWriter.close();
            return file;
        } catch (Exception e) {
            return null;
        }
    }
}