@Override
  public StoredObject createCombinedObject(CombinedStoredObject combinedObject) {
    Preconditions.checkNotNull(combinedObject, "combinedObject is null");
    Preconditions.checkArgument(
        !combinedObject.getSourceParts().isEmpty(), "combinedObject sourceParts is empty");

    boolean setIsSmall = combinedObject.getSourceParts().get(0).getSize() < 5 * 1024 * 1024;

    // verify size
    for (StoredObject newCombinedObjectPart : combinedObject.getSourceParts()) {
      boolean fileIsSmall = newCombinedObjectPart.getSize() < 5 * 1024 * 1024;
      Preconditions.checkArgument(
          fileIsSmall == setIsSmall,
          "combinedObject sourceParts contains mixed large and small files");
    }

    return setIsSmall
        ? createCombinedObjectSmall(combinedObject)
        : createCombinedObjectLarge(combinedObject);
  }