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