Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 48 additions & 10 deletions visitors/src/main/java/files/jvm/visitors/DirectoryVisitor.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package files.jvm.visitors;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
Expand All @@ -8,7 +9,12 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Stream;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

/** Visits Files and Directories in a single level,
* records the files and directories that were found.
Expand All @@ -19,18 +25,21 @@ public class DirectoryVisitor {
*/
public final boolean isValidDirectory;

private final List<String> mDirectories;
@Nullable
protected final List<String> mDirectories;

private final List<String> mFiles;
@Nullable
protected final List<String> mFiles;

private final Path mPath;
@Nonnull
protected final Path mPath;

/** Constructor.
* @param path The path to visit.
* @throws IOException Any Exception thrown while Visiting the Path.
*/
public DirectoryVisitor(
final Path path
@Nonnull final Path path
) throws IOException {
mPath = path;
if (!Files.isDirectory(path)) {
Expand Down Expand Up @@ -78,24 +87,27 @@ public FileVisitResult visitFile(
/** Obtain the directory names found at this Path.
* @return The List of directories, or an empty List.
*/
@Nonnull
public List<String> getDirectories() {
if (mDirectories == null)
return Collections.emptyList();
return mDirectories;
return Objects.requireNonNullElse(
mDirectories, Collections.emptyList()
);
}

/** Obtain the File names found at this Path.
* @return The List of File Names, or an empty List.
*/
@Nonnull
public List<String> getFiles() {
if (mFiles == null)
return Collections.emptyList();
return mFiles;
return Objects.requireNonNullElse(
mFiles, Collections.emptyList()
);
}

/** Obtain all files in this directory as a List of Paths.
* @return A List of Paths, or an empty list.
*/
@Nonnull
public List<Path> getFilePaths() {
if (mFiles == null)
return Collections.emptyList();
Expand All @@ -105,9 +117,23 @@ public List<Path> getFilePaths() {
.toList();
}

/** Obtain a Stream of all Files in the Directory.
* @return A Stream of File objects.
*/
@Nonnull
public Stream<File> getFileStream() {
if (mFiles == null)
return Stream.empty();
return mFiles
.parallelStream()
.map(mPath::resolve)
.map(Path::toFile);
}

/** Obtain all Directories in this directory as a List of Paths.
* @return A List of Paths, or an empty list.
*/
@Nonnull
public List<Path> getDirectoryPaths() {
if (mDirectories == null)
return Collections.emptyList();
Expand All @@ -117,4 +143,16 @@ public List<Path> getDirectoryPaths() {
.toList();
}

/** Obtain all Directories in this directory as a Stream of Paths.
* @return A Stream of Paths.
*/
@Nonnull
public Stream<Path> getDirectoryPathStream() {
if (mDirectories == null)
return Stream.empty();
return mDirectories
.parallelStream()
.map(mPath::resolve);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,15 @@ public void testGetFilePaths_InvalidDirectory_ReturnsEmptyList() throws IOExcept
);
}

@Test
public void testGetFileStream_() {
final var pathList = mInstance.getFileStream();
assertEquals(
numberOfFiles,
pathList.toList().size()
);
}

@Test
public void testGetDirectoryPaths_CorrectSize() {
final List<Path> pathList = mInstance.getDirectoryPaths();
Expand All @@ -136,4 +145,13 @@ public void testGetDirectoryPaths_InvalidPath_ReturnsEmptyList() throws IOExcept
);
}

@Test
public void testGetDirectoryPathStream_() {
final var pathList = mInstance.getDirectoryPathStream();
assertEquals(
numberOfSubDirectories,
pathList.toList().size()
);
}

}