public int createFileContent(CreateFileContentParams params) {
    validateCreateFileContentParams(params);

    CategoryEntity category = categoryDao.findByKey(new CategoryKey(params.categoryKey));

    UserEntity runningUser = securityService.getImpersonatedPortalUser();

    LegacyFileContentData contentdata =
        (LegacyFileContentData) fileContentResolver.resolveContentdata(params.fileContentData);
    List<BinaryDataAndBinary> binaryDataEntries = new ArrayList<BinaryDataAndBinary>();
    binaryDataEntries.add(
        BinaryDataAndBinary.convertFromFileBinaryInput(params.fileContentData.binary));

    CreateContentCommand createCommand = new CreateContentCommand();
    createCommand.setAccessRightsStrategy(
        CreateContentCommand.AccessRightsStrategy.INHERIT_FROM_CATEGORY);
    createCommand.setCreator(runningUser);
    createCommand.setStatus(ContentStatus.get(params.status));
    createCommand.setPriority(0);
    createCommand.setCategory(category);
    createCommand.setLanguage(category.getUnitExcludeDeleted().getLanguage());
    createCommand.setAvailableFrom(params.publishFrom);
    createCommand.setAvailableTo(params.publishTo);
    createCommand.setContentData(contentdata);
    createCommand.setContentName(
        new PrettyPathNameCreator(transliterate).generatePrettyPathName(contentdata.getTitle()));
    createCommand.setBinaryDatas(binaryDataEntries);
    createCommand.setUseCommandsBinaryDataToAdd(true);
    if (params.siteKey != null) {
      createCommand.setSiteKey(new SiteKey(params.siteKey));
    }

    ContentKey contentKey = contentService.createContent(createCommand);
    return contentKey.toInt();
  }
  public int updateFileContent(UpdateFileContentParams params) {
    validateUpdateFileContentParams(params);

    ContentVersionKey contentVersionKey =
        resolveContentVersionKey(
            params.createNewVersion, params.contentKey, params.contentVersionKey);

    UpdateContentCommand command;
    if (params.createNewVersion) {
      command = UpdateContentCommand.storeNewVersionEvenIfUnchanged(contentVersionKey);
    } else {
      command = UpdateContentCommand.updateExistingVersion2(contentVersionKey);
    }

    command.setContentKey(new ContentKey(params.contentKey));
    command.setSyncRelatedContent(false);
    command.setSyncAccessRights(false);
    command.setModifier(securityService.getImpersonatedPortalUser());
    command.setAvailableFrom(params.publishFrom);
    command.setAvailableTo(params.publishTo);
    command.setStatus(ContentStatus.get(params.status));
    if (params.siteKey != null) {
      command.setSiteKey(new SiteKey(params.siteKey));
    }

    LegacyFileContentData newContentData;
    List<BinaryDataAndBinary> binariesToAdd = null;
    List<BinaryDataKey> binariesToRemove = null;
    if (params.fileContentData != null) {
      newContentData =
          (LegacyFileContentData) fileContentResolver.resolveContentdata(params.fileContentData);
      command.setContentData(newContentData);
      if (!params.createNewVersion) {
        // only delete previous binaries if we are overwriting current version
        ContentVersionEntity persistedVersion = contentVersionDao.findByKey(contentVersionKey);
        LegacyFileContentData previousContentData =
            (LegacyFileContentData) persistedVersion.getContentData();
        binariesToRemove = previousContentData.getRemovedBinaries(newContentData);
      }
      // Find new binaries
      binariesToAdd = newContentData.getBinaryDataAndBinaryList();
    } else {
      // only update the meta data in this case..
    }

    command.setUpdateAsMainVersion(params.setAsCurrentVersion);
    command.setUseCommandsBinaryDataToAdd(true);
    command.setBinaryDataToAdd(binariesToAdd);

    command.setUseCommandsBinaryDataToRemove(true);
    command.setBinaryDataToRemove(binariesToRemove);
    if (params.siteKey != null) {
      command.setSiteKey(new SiteKey(params.siteKey));
    }

    UpdateContentResult updateContentResult = contentService.updateContent(command);

    if (updateContentResult.isAnyChangesMade()) {
      new PageCacheInvalidatorForContent(pageCacheService)
          .invalidateForContent(updateContentResult.getTargetedVersion());
    }

    return updateContentResult.getTargetedVersionKey().toInt();
  }