/**
   * 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";
  }