org.hoteia.qalingo.web.mvc.controller.customer.CustomerDocumentController.java Source code

Java tutorial

Introduction

Here is the source code for org.hoteia.qalingo.web.mvc.controller.customer.CustomerDocumentController.java

Source

/**
 * Most of the code in the Qalingo project is copyrighted Hoteia and licensed
 * under the Apache License Version 2.0 (release version 0.8.0)
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 *                   Copyright (c) Hoteia, 2012-2014
 * http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
 *
 */
package org.hoteia.qalingo.web.mvc.controller.customer;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.hoteia.qalingo.core.domain.Customer;
import org.hoteia.qalingo.core.domain.OrderPurchase;
import org.hoteia.qalingo.core.domain.enumtype.OrderDocumentType;
import org.hoteia.qalingo.core.service.DocumentService;
import org.hoteia.qalingo.core.service.OrderPurchaseService;
import org.hoteia.qalingo.core.web.resolver.RequestData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * 
 */
@Controller("customerDetailsController.java")
public class CustomerDocumentController extends AbstractCustomerController {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    protected OrderPurchaseService orderPurchaseService;

    @Autowired
    protected DocumentService documentService;

    @RequestMapping(value = "/documents/**", method = RequestMethod.GET)
    public ResponseEntity<byte[]> customerDetails(final HttpServletRequest request, final Model model)
            throws Exception {
        final RequestData requestData = requestUtil.getRequestData(request);
        final String requestURL = request.getRequestURL().toString();
        final Customer customer = requestData.getCustomer();

        if (customer != null) {
            final List<OrderPurchase> orders = orderPurchaseService
                    .findOrdersByCustomerId(customer.getId().toString());
            for (Iterator<OrderPurchase> iterator = orders.iterator(); iterator.hasNext();) {
                OrderPurchase order = (OrderPurchase) iterator.next();
                if (requestURL.contains(order.getPrefixHashFolder())) {
                    String filename = null;
                    String filePath = null;
                    if (requestURL.contains(OrderDocumentType.ORDER_CONFIRMATION.getPropertyKey())) {
                        filename = documentService.buildOrderConfirmationFileName(order);
                        filePath = documentService.getOrderConfirmationFilePath(order);

                    } else if (requestURL.contains(OrderDocumentType.SHIPPING_CONFIRMATION.getPropertyKey())) {
                        filename = documentService.buildShippingConfirmationFileName(order);
                        filePath = documentService.getShippingConfirmationFilePath(order);

                    } else if (requestURL.contains(OrderDocumentType.INVOICE.getPropertyKey())) {
                        filename = documentService.buildInvoiceFileName(order);
                        filePath = documentService.getInvoiceFilePath(order);
                    }

                    if (StringUtils.isNotEmpty(filename) && StringUtils.isNotEmpty(filePath)) {
                        Path path = Paths.get(filePath);
                        byte[] contents = Files.readAllBytes(path);

                        HttpHeaders headers = new HttpHeaders();
                        headers.setContentType(MediaType.parseMediaType("application/pdf"));
                        headers.setContentDispositionFormData(filename, filename);
                        headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
                        ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(contents, headers,
                                HttpStatus.OK);
                        return response;
                    }
                }
            }
            logger.warn("This request can't be display, customer " + customer.getEmail()
                    + " is logged, but the Hash doesn't matched:" + requestURL);
        } else {
            logger.warn("This request can't be display, customer is not logged:" + requestURL);
        }
        return null;
    }

}