All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.codeborne.selenide.DownloadsFolder Maven / Gradle / Ivy

package com.codeborne.selenide;

import com.codeborne.selenide.files.FileFilter;

import javax.annotation.CheckReturnValue;
import javax.annotation.Nonnull;
import javax.annotation.ParametersAreNonnullByDefault;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;

import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static java.util.Locale.ROOT;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toMap;
import static org.apache.commons.io.FilenameUtils.getExtension;

@ParametersAreNonnullByDefault
public abstract class DownloadsFolder {
  protected final File folder;

  protected DownloadsFolder(File folder) {
    this.folder = folder.getAbsoluteFile();
  }

  @CheckReturnValue
  @Nonnull
  public File toFile() {
    return folder;
  }

  @CheckReturnValue
  @Nonnull
  public List files() {
    File[] files = folder.listFiles();
    return files == null ? emptyList() : asList(files);
  }

  public abstract void cleanupBeforeDownload();

  public abstract void deleteIfEmpty();

  @CheckReturnValue
  @Nonnull
  public File file(String fileName) {
    return new File(folder, fileName).getAbsoluteFile();
  }

  public boolean hasFiles(Set extensions, FileFilter excludingFilter) {
    return files().stream()
      .anyMatch(file -> extensions.contains(getExtension(file.getName()).toLowerCase(ROOT)) && excludingFilter.notMatch(file));
  }

  public Map modificationTimes() {
    File[] files = folder.listFiles();
    return files == null ? emptyMap() : Stream.of(files).collect(toMap(f -> f.getName(), f -> f.lastModified()));
  }

  public Optional lastModificationTime() {
    return modificationTimes().values().stream().max(Long::compare);
  }

  @Override
  public String toString() {
    return folder.getPath();
  }

  public String filesAsString() {
    return '[' + files().stream().map(f -> f.getName()).collect(joining(", ")) + ']';
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy