Skip to content

Commit 9b4a166

Browse files
Refactor: keep single implementation
1 parent adac516 commit 9b4a166

35 files changed

+409
-712
lines changed

README.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ A lightweight Java library for printing directory structures in a clean, tree-li
1010
- Compact directory chains
1111
- Maximum depth
1212

13-
> **ℹ️ Was developed just for fun, has not been thoroughly tested! May not be suitable for production code 😊**
13+
> [!CAUTION]
14+
> This lib was developed just for fun, and has not been thoroughly tested! May not be suitable for production code 😊
1415
1516
* [Usage](#usage)
1617
* [Import dependency](#import-dependency)
@@ -53,7 +54,7 @@ For Maven, import this dependency to your `pom.xml`:
5354
<dependency>
5455
<groupId>com.github.computerdaddyguy</groupId>
5556
<artifactId>jfiletreeprettyprinter</artifactId>
56-
<version>0.1.0</version>
57+
<version>0.0.1</version>
5758
</dependency>
5859
```
5960

@@ -91,7 +92,8 @@ tree_format/
9192
`-- subFile_2
9293
```
9394

94-
💡 *Idea for a future version: option to allow usage of custom format*
95+
> [!TIP]
96+
> *Idea for a future version: option to allow usage of custom format*
9597
9698

9799
## Emojis ❤️
@@ -122,7 +124,8 @@ var prettyPrinter = FileTreePrettyPrinter.builder()
122124
└─ 🎬 file.avi
123125
```
124126

125-
💡 *Idea for a future version: option to allow custom emoji mapping*
127+
> [!TIP]
128+
> *Idea for a future version: option to allow custom emoji mapping*
126129
127130
## Children limit
128131
You can set a fixed limit to the number of children displayed for each directory.
@@ -176,7 +179,8 @@ children_limit_dynamic/
176179
└─ ... (9 files skipped)
177180
```
178181

179-
💡 *Idea for a future version: helper for custom basic functions (by name, prefix, regex, etc.)*
182+
> [!TIP]
183+
> *Idea for a future version: helper for custom basic functions (by name, prefix, regex, etc.)*
180184
181185
## Compact directories
182186
Directories chain with single directory child are fully expanded by default, but you can compact them into a single tree entry.

ROADMAP.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
# Roadmap
22

3-
## Next version
3+
## Initial version
44
- [x] Use JSpecify annotations
55
- [x] Regroup all formatting work under single "LineFormatter"
66
- [x] Builder with options (depth symbols, emoji, child limit)
77
- [x] Unit tests, using @TempDir
8-
- [x] Better "isLastChild" detection algorithm
98
- [x] Pre-defined Path predicates
109
- [x] Add examples & README
1110
- [x] Implement emojis for files
1211
- [x] Unify dir-in-a-row into a single entry option
1312
- [x] Max depth options
1413
- [x] Alternative implementation option, just for fun (using DirectoryStream instead of Files.walkFileTree's Visitor)
15-
- [ ] Cleaner code
16-
- [ ] Refactor unit tests (custom assert?)
14+
- [x] Cleaner code
1715
- [ ] Publish on Maven Central!
1816

1917
## Other ideas
18+
- [ ] Directory children limitation function helper
2019
- [ ] Custom tree format option
2120
- [ ] Custom emojis option
2221
- [ ] Color option
2322
- [ ] Filtering
2423
- [ ] Follow symlink option
2524
- [ ] Print optional legend for symlink/other file types symbols (at the end of the tree)
2625
- [ ] File attributes LineRenderer (size, author, createAt, etc.)
26+
- [ ] Refactor unit tests (custom assert?)
27+
- [ ] Mutation testing

src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.computerdaddyguy.jfiletreeprettyprinter.example;
22

33
import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter;
4-
import io.github.computerdaddyguy.jfiletreeprettyprinter.options.RenderingOptions.TreeFormat;
4+
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.RenderingOptions.TreeFormat;
55

66
public class FileTreeFormat {
77

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.github.computerdaddyguy.jfiletreeprettyprinter;
2+
3+
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.TreeEntryRenderer;
4+
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.PathToTreeScanner;
5+
import java.nio.file.Path;
6+
import java.util.Objects;
7+
import org.jspecify.annotations.NullMarked;
8+
9+
@NullMarked
10+
class DefaultFileTreePrettyPrinter implements FileTreePrettyPrinter {
11+
12+
private final PathToTreeScanner scanner;
13+
private final TreeEntryRenderer renderer;
14+
15+
public DefaultFileTreePrettyPrinter(PathToTreeScanner scanner, TreeEntryRenderer renderer) {
16+
this.scanner = Objects.requireNonNull(scanner, "scanner cannot be null");
17+
this.renderer = Objects.requireNonNull(renderer, "renderer cannot be null");
18+
}
19+
20+
@Override
21+
public String prettyPrint(Path path) {
22+
var tree = scanner.scan(path);
23+
return renderer.renderTree(tree);
24+
}
25+
26+
}

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,6 @@ default String prettyPrint(String path) {
2727
return prettyPrint(Path.of(path));
2828
}
2929

30-
/**
31-
* Get the options of this pretty printer.
32-
*/
33-
PrettyPrintOptions getOptions();
34-
3530
/**
3631
* Create a pretty printer with default options.
3732
*

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.computerdaddyguy.jfiletreeprettyprinter;
22

3-
import io.github.computerdaddyguy.jfiletreeprettyprinter.impl.recursive.RecursiveFileTreePrettyPrinter;
4-
import io.github.computerdaddyguy.jfiletreeprettyprinter.impl.visitor.VisitingFileTreePrettyPrinter;
3+
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.TreeEntryRenderer;
4+
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.PathToTreeScanner;
55
import java.util.Objects;
66
import java.util.function.Function;
77
import org.jspecify.annotations.NullMarked;
@@ -12,10 +12,9 @@ public class FileTreePrettyPrinterBuilder {
1212
private PrettyPrintOptions options = PrettyPrintOptions.createDefault();
1313

1414
public FileTreePrettyPrinter build() {
15-
return switch (options.getImplementation()) {
16-
case VISITOR -> new VisitingFileTreePrettyPrinter(options);
17-
case RECURSIVE -> new RecursiveFileTreePrettyPrinter(options);
18-
};
15+
var scanner = PathToTreeScanner.create(options);
16+
var renderer = TreeEntryRenderer.create(options);
17+
return new DefaultFileTreePrettyPrinter(scanner, renderer);
1918
}
2019

2120
public FileTreePrettyPrinterBuilder withOptions(PrettyPrintOptions options) {

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathPredicates.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import java.nio.file.Path;
44
import java.util.function.Predicate;
55
import java.util.regex.Pattern;
6+
import org.jspecify.annotations.NullMarked;
67

8+
@NullMarked
79
public final class PathPredicates {
810

911
private PathPredicates() {

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PrettyPrintOptions.java

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
package io.github.computerdaddyguy.jfiletreeprettyprinter;
22

3-
import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ImplementationOptions;
4-
import io.github.computerdaddyguy.jfiletreeprettyprinter.options.RenderingOptions;
5-
import io.github.computerdaddyguy.jfiletreeprettyprinter.options.VisitingOptions;
3+
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.RenderingOptions;
4+
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.ScanningOptions;
65
import java.nio.file.Path;
76
import java.util.Objects;
87
import java.util.function.Function;
98
import org.jspecify.annotations.NullMarked;
109

1110
@NullMarked
12-
public class PrettyPrintOptions implements VisitingOptions, RenderingOptions, ImplementationOptions {
11+
public class PrettyPrintOptions implements ScanningOptions, RenderingOptions {
1312

1413
private Function<Path, Integer> childrenLimitFunction = p -> -1;
1514

16-
private Implementation impl = Implementation.RECURSIVE;
17-
// private Implementation impl = Implementation.VISITOR;
18-
1915
private TreeFormat treeFormat = TreeFormat.UNICODE_BOX_DRAWING;
2016
private boolean emojis = false;
2117
private boolean compactDirectories = false;
@@ -34,23 +30,6 @@ public static PrettyPrintOptions createDefault() {
3430

3531
// ----------------------------------------------
3632

37-
public enum Implementation {
38-
VISITOR,
39-
RECURSIVE;
40-
}
41-
42-
@Override
43-
public Implementation getImplementation() {
44-
return impl;
45-
}
46-
47-
public PrettyPrintOptions withImplementation(Implementation impl) {
48-
this.impl = Objects.requireNonNull(impl, "implementation is null");
49-
return this;
50-
}
51-
52-
// ----------------------------------------------
53-
5433
@Override
5534
public Function<Path, Integer> getChildrenLimitFunction() {
5635
return childrenLimitFunction;

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/impl/recursive/RecursiveFileTreePrettyPrinter.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/impl/recursive/TreeEntryRenderer.java

Lines changed: 0 additions & 103 deletions
This file was deleted.

0 commit comments

Comments
 (0)