package com.salesmanager.shop.controller;
import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.business.services.catalog.product.image.ProductImageService;
import com.salesmanager.core.business.services.content.ContentService;
import com.salesmanager.core.model.catalog.product.file.ProductImageSize;
import com.salesmanager.core.model.content.FileContentType;
import com.salesmanager.core.model.content.OutputContentFile;
/**
* When handling images and files from the application server
* @author c.samson
*
*/
@Controller
public class ImagesController {
private static final Logger LOGGER = LoggerFactory.getLogger(ImagesController.class);
@Inject
private ContentService contentService;
@Inject
private ProductImageService productImageService;
/**
* Logo, content image
* @param storeId
* @param imageType (LOGO, CONTENT, IMAGE)
* @param imageName
* @return
* @throws IOException
* @throws ServiceException
*/
@RequestMapping("/static/files/{storeCode}/{imageType}/{imageName}.{extension}")
public @ResponseBody byte[] printImage(@PathVariable final String storeCode, @PathVariable final String imageType, @PathVariable final String imageName, @PathVariable final String extension) throws IOException, ServiceException {
// example -> /static/files/DEFAULT/CONTENT/myImage.png
FileContentType imgType = null;
if(FileContentType.LOGO.name().equals(imageType)) {
imgType = FileContentType.LOGO;
}
if(FileContentType.IMAGE.name().equals(imageType)) {
imgType = FileContentType.IMAGE;
}
if(FileContentType.PROPERTY.name().equals(imageType)) {
imgType = FileContentType.PROPERTY;
}
OutputContentFile image =contentService.getContentFile(storeCode, imgType, new StringBuilder().append(imageName).append(".").append(extension).toString());
if(image!=null) {
return image.getFile().toByteArray();
} else {
//empty image placeholder
return null;
}
}
/**
* For product images
* @Deprecated
* @param storeCode
* @param productCode
* @param imageType
* @param imageName
* @param extension
* @return
* @throws IOException
*/
@RequestMapping("/static/{storeCode}/{imageType}/{productCode}/{imageName}.{extension}")
public @ResponseBody byte[] printImage(@PathVariable final String storeCode, @PathVariable final String productCode, @PathVariable final String imageType, @PathVariable final String imageName, @PathVariable final String extension) throws IOException {
// product image
// example small product image -> /static/DEFAULT/products/TB12345/product1.jpg
// example large product image -> /static/DEFAULT/products/TB12345/product1.jpg
/**
* List of possible imageType
*
*/
ProductImageSize size = ProductImageSize.SMALL;
if(imageType.equals(FileContentType.PRODUCTLG.name())) {
size = ProductImageSize.LARGE;
}
OutputContentFile image = null;
try {
image = productImageService.getProductImage(storeCode, productCode, new StringBuilder().append(imageName).append(".").append(extension).toString(), size);
} catch (ServiceException e) {
LOGGER.error("Cannot retrieve image " + imageName, e);
}
if(image!=null) {
return image.getFile().toByteArray();
} else {
//empty image placeholder
return null;
}
}
/**
* Exclusive method for dealing with product images
* @param storeCode
* @param productCode
* @param imageName
* @param extension
* @param request
* @return
* @throws IOException
*/
@RequestMapping("/static/products/{storeCode}/{productCode}/{imageSize}/{imageName}.{extension}")
public @ResponseBody byte[] printImage(@PathVariable final String storeCode, @PathVariable final String productCode, @PathVariable final String imageSize, @PathVariable final String imageName, @PathVariable final String extension, HttpServletRequest request) throws IOException {
// product image small
// example small product image -> /static/products/DEFAULT/TB12345/SMALL/product1.jpg
// example large product image -> /static/products/DEFAULT/TB12345/LARGE/product1.jpg
/**
* List of possible imageType
*
*/
ProductImageSize size = ProductImageSize.SMALL;
if(FileContentType.PRODUCTLG.name().equals(imageSize)) {
size = ProductImageSize.LARGE;
}
OutputContentFile image = null;
try {
image = productImageService.getProductImage(storeCode, productCode, new StringBuilder().append(imageName).append(".").append(extension).toString(), size);
} catch (ServiceException e) {
LOGGER.error("Cannot retrieve image " + imageName, e);
}
if(image!=null) {
return image.getFile().toByteArray();
} else {
//empty image placeholder
return null;
}
}
/**
* Exclusive method for dealing with product images
* @param storeCode
* @param productCode
* @param imageName
* @param extension
* @param request
* @return
* @throws IOException
*/
@RequestMapping("/static/products/{storeCode}/{productCode}/{imageName}.{extension}")
public @ResponseBody byte[] printImage(@PathVariable final String storeCode, @PathVariable final String productCode, @PathVariable final String imageName, @PathVariable final String extension, HttpServletRequest request) throws IOException {
// product image
// example small product image -> /static/products/DEFAULT/TB12345/product1.jpg?size=small
// example large product image -> /static/products/DEFAULT/TB12345/product1.jpg
// or
//example large product image -> /static/products/DEFAULT/TB12345/product1.jpg?size=large
/**
* List of possible imageType
*
*/
ProductImageSize size = ProductImageSize.LARGE;
if(StringUtils.isNotBlank(request.getParameter("size"))) {
String requestSize = request.getParameter("size");
if(requestSize.equals(ProductImageSize.SMALL.name())) {
size = ProductImageSize.SMALL;
}
}
OutputContentFile image = null;
try {
image = productImageService.getProductImage(storeCode, productCode, new StringBuilder().append(imageName).append(".").append(extension).toString(), size);
} catch (ServiceException e) {
LOGGER.error("Cannot retrieve image " + imageName, e);
}
if(image!=null) {
return image.getFile().toByteArray();
} else {
//empty image placeholder
return null;
}
}
}