@PreAuthorize("hasRole('STORE')")
  @RequestMapping(
      value = "/admin/store/removeImage.html",
      method = RequestMethod.POST,
      produces = "application/json")
  public @ResponseBody String removeImage(
      HttpServletRequest request, HttpServletResponse response, Locale locale) {

    MerchantStore store = (MerchantStore) request.getAttribute(Constants.ADMIN_STORE);

    AjaxResponse resp = new AjaxResponse();

    try {

      contentService.removeFile(store.getCode(), FileContentType.LOGO, store.getStoreLogo());

      store.setStoreLogo(null);
      merchantStoreService.update(store);

    } catch (Exception e) {
      LOGGER.error("Error while deleting product", e);
      resp.setStatus(AjaxResponse.RESPONSE_STATUS_FAIURE);
      resp.setErrorMessage(e);
    }

    String returnString = resp.toJSONString();

    return returnString;
  }
  /**
   * Removes a static file from the CMS
   *
   * @param request
   * @param response
   * @param locale
   * @return
   */
  @PreAuthorize("hasRole('CONTENT')")
  @RequestMapping(
      value = "/admin/content/static/removeFile.html",
      method = RequestMethod.POST,
      produces = "application/json")
  public @ResponseBody String removeFile(
      HttpServletRequest request, HttpServletResponse response, Locale locale) {
    String fileName = request.getParameter("name");

    MerchantStore store = (MerchantStore) request.getAttribute(Constants.ADMIN_STORE);

    AjaxResponse resp = new AjaxResponse();

    try {

      contentService.removeFile(store.getCode(), FileContentType.STATIC_FILE, fileName);

      resp.setStatus(AjaxResponse.RESPONSE_OPERATION_COMPLETED);

    } catch (Exception e) {
      LOGGER.error("Error while deleting product", e);
      resp.setStatus(AjaxResponse.RESPONSE_STATUS_FAIURE);
      resp.setErrorMessage(e);
    }

    String returnString = resp.toJSONString();

    return returnString;
  }
  @Test
  public void createStoreLogo() throws ServiceException, FileNotFoundException, IOException {

    MerchantStore store = merchantService.getByCode(MerchantStore.DEFAULT_STORE);
    final File file1 = new File("/Users/csamson777/Pictures/peavey.jpg");

    if (!file1.exists() || !file1.canRead()) {
      throw new ServiceException("Can't read" + file1.getAbsolutePath());
    }

    byte[] is = IOUtils.toByteArray(new FileInputStream(file1));
    ByteArrayInputStream inputStream = new ByteArrayInputStream(is);
    InputContentFile cmsContentImage = new InputContentFile();

    cmsContentImage.setFileName(file1.getName());
    cmsContentImage.setFile(inputStream);

    // logo as a content
    contentService.addLogo(store.getCode(), cmsContentImage);

    store.setStoreLogo(file1.getName());
    merchantService.update(store);

    // query the store
    store = merchantService.getByCode(MerchantStore.DEFAULT_STORE);

    // get the logo
    String logo = store.getStoreLogo();

    OutputContentFile image =
        contentService.getContentFile(store.getCode(), FileContentType.LOGO, logo);

    // print image
    OutputStream outputStream =
        new FileOutputStream("/Users/csamson777/Pictures/mexique" + image.getFileName());

    ByteArrayOutputStream baos = image.getFile();
    baos.writeTo(outputStream);

    // remove image
    contentService.removeFile(store.getCode(), FileContentType.LOGO, store.getStoreLogo());
  }
  /**
   * Method responsible for adding content files to underlying Infinispan cache. It will add given
   * content file(s) for given merchant store in the cache. Following steps will be performed in
   * order to add files
   *
   * <pre>
   * 1. Validate form data
   * 2. Get Merchant Store based on merchant Id.
   * 3. Call {@link InputContentFile} to add file(s).
   * </pre>
   *
   * @param contentImages
   * @param bindingResult
   * @param model
   * @param request
   * @return
   * @throws Exception
   */
  @PreAuthorize("hasRole('CONTENT')")
  @RequestMapping(value = "/admin/content/static/saveFiles.html", method = RequestMethod.POST)
  public String saveFiles(
      @ModelAttribute(value = "contentFiles") @Valid final ContentFiles contentFiles,
      final BindingResult bindingResult,
      final Model model,
      final HttpServletRequest request)
      throws Exception {

    this.setMenu(model, request);
    if (bindingResult.hasErrors()) {
      LOGGER.info("Found {} Validation errors", bindingResult.getErrorCount());
      return ControllerConstants.Tiles.ContentFiles.contentFiles;
    }
    final List<InputContentFile> contentFilesList = new ArrayList<InputContentFile>();
    final MerchantStore store = (MerchantStore) request.getAttribute(Constants.ADMIN_STORE);
    if (CollectionUtils.isNotEmpty(contentFiles.getFile())) {
      LOGGER.info(
          "Saving {} content files for merchant {}", contentFiles.getFile().size(), store.getId());
      for (final MultipartFile multipartFile : contentFiles.getFile()) {
        if (!multipartFile.isEmpty()) {
          ByteArrayInputStream inputStream = new ByteArrayInputStream(multipartFile.getBytes());
          InputContentFile cmsContentImage = new InputContentFile();
          cmsContentImage.setFileName(multipartFile.getOriginalFilename());
          cmsContentImage.setFileContentType(FileContentType.STATIC_FILE);
          cmsContentImage.setFile(inputStream);
          contentFilesList.add(cmsContentImage);
        }
      }

      if (CollectionUtils.isNotEmpty(contentFilesList)) {
        contentService.addContentFiles(store.getCode(), contentFilesList);
      } else {
        // show error message on UI
      }
    }

    return ControllerConstants.Tiles.ContentFiles.contentFiles;
  }
  @PreAuthorize("hasRole('STORE')")
  @RequestMapping(value = "/admin/store/saveBranding.html", method = RequestMethod.POST)
  public String saveStoreBranding(
      @ModelAttribute(value = "contentImages") @Valid final ContentFiles contentImages,
      BindingResult result,
      Model model,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    setMenu(model, request);

    MerchantStore store = (MerchantStore) request.getAttribute(Constants.ADMIN_STORE);

    if (contentImages.getFile() != null && contentImages.getFile().size() > 0) {

      String imageName = contentImages.getFile().get(0).getOriginalFilename();
      InputStream inputStream = contentImages.getFile().get(0).getInputStream();
      InputContentFile cmsContentImage = new InputContentFile();
      cmsContentImage.setFileName(imageName);
      cmsContentImage.setMimeType(contentImages.getFile().get(0).getContentType());
      cmsContentImage.setFile(inputStream);
      contentService.addLogo(store.getCode(), cmsContentImage);

      // Update store
      store.setStoreLogo(imageName);
      merchantStoreService.update(store);
      request.getSession().setAttribute(Constants.ADMIN_STORE, store);
    }

    // display templates
    model.addAttribute("templates", templates);

    model.addAttribute("success", "success");
    model.addAttribute("store", store);

    return "admin-store-branding";
  }
  public List<OutputContentFile> getImages(MerchantStore store, FileContentType imageContentType)
      throws ServiceException {

    return getImages(store.getCode(), imageContentType);
  }
  /**
   * Display files in a List grid
   *
   * @param request
   * @param response
   * @return
   */
  @SuppressWarnings({"unchecked"})
  @PreAuthorize("hasRole('CONTENT')")
  @RequestMapping(
      value = "/admin/content/static/page.html",
      method = RequestMethod.POST,
      produces = "application/json;charset=UTF-8")
  public @ResponseBody String pageStaticContent(
      HttpServletRequest request, HttpServletResponse response) {
    AjaxResponse resp = new AjaxResponse();

    try {

      MerchantStore store = (MerchantStore) request.getAttribute(Constants.ADMIN_STORE);

      List<String> fileNames =
          contentService.getContentFilesNames(store.getCode(), FileContentType.STATIC_FILE);

      /*			Map<String,String> configurations = (Map<String, String>)request.getSession().getAttribute(Constants.STORE_CONFIGURATION);
      			String scheme = Constants.HTTP_SCHEME;
      			if(configurations!=null) {
      				scheme = (String)configurations.get("scheme");
      			}


      			StringBuilder storePath = new StringBuilder();
      			storePath.append(scheme).append("://")
      			.append(store.getDomainName())
      			.append(request.getContextPath());
      */

      if (fileNames != null) {

        for (String name : fileNames) {

          String mimeType = URLConnection.getFileNameMap().getContentTypeFor(name);

          // StringBuilder filePath = new StringBuilder();

          // filePath.append(storePath.toString()).append(filePathUtils.buildStaticFilePath(store,name));

          String filePath = imageUtils.buildStaticContentFilePath(store, name);

          // String filePath = filePathUtils.buildStaticFileAbsolutePath(store, name);

          @SuppressWarnings("rawtypes")
          Map entry = new HashMap();
          entry.put("name", name);
          entry.put("path", filePath.toString());
          entry.put("mimeType", mimeType);
          resp.addDataEntry(entry);
        }
      }

      resp.setStatus(AjaxResponse.RESPONSE_STATUS_SUCCESS);

    } catch (Exception e) {
      LOGGER.error("Error while paging content images", e);
      resp.setStatus(AjaxResponse.RESPONSE_STATUS_FAIURE);
    }

    String returnString = resp.toJSONString();

    return returnString;
  }