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