@@ -4,24 +4,42 @@ A repository for my live-coding talk [Modern Java in Action](https://nipafx.dev/
4
4
5
5
## Next
6
6
7
- Sealed types:
8
- * ` sealed interface Page permits ErrorPage, SuccessfulPage ` with ` URI url() `
9
- * ` sealed interface SuccessfulPage extends Page permits ExternalPage, GitHubPage ` with ` String content() `
10
- * ` sealed interface GitHubPage extends SuccessfulPage permits GitHubIssuePage, GitHubPrPage ` with ` Set<Page> links() ` and
7
+ Operations:
8
+ * implement methods in ` Pretty ` :
11
9
```java
12
- default Stream<Page> subtree( ) {
13
- var subtree = new ArrayList<Page>(Set.of(this));
14
- var upcomingPages = new LinkedHashSet<>(this.links() );
10
+ public static String pageList(Page rootPage ) {
11
+ if (!(rootPage instanceof GitHubPage ghPage))
12
+ return pageName(rootPage );
15
13
16
- while (!upcomingPages.isEmpty()) {
17
- var nextPage = upcomingPages.removeFirst();
18
- if (!subtree.contains(nextPage) && nextPage instanceof GitHubPage nextGhPage)
19
- new LinkedHashSet<>(nextGhPage.links())
20
- .reversed()
21
- .forEach(upcomingPages::addFirst);
22
- subtree.add(nextPage);
23
- }
14
+ return ghPage
15
+ .subtree()
16
+ .map(Pretty::pageName)
17
+ .collect(joining("\n"));
18
+ }
19
+
20
+ public static String pageName(Page page) {
21
+ return switch (page) {
22
+ case ErrorPage(URI url, _) -> "💥 ERROR: " + url.getHost();
23
+ case ExternalPage(URI url, _) -> "💤 EXTERNAL: " + url.getHost();
24
+ case GitHubIssuePage(_, _, _, int nr) -> "🐈 ISSUE #" + nr;
25
+ case GitHubPrPage(_, _, _, int nr) -> "🐙 PR #" + nr;
26
+ };
27
+ }
28
+ ```
29
+ * implement ` Statistician::evaluatePage ` :
30
+ ```java
31
+ private void evaluatePage(Page page) {
32
+ if (evaluatedPages.contains(page))
33
+ return;
34
+ evaluatedPages.add(page);
24
35
25
- return subtree.stream();
36
+ switch (page) {
37
+ case ErrorPage _ -> numberOfErrors++;
38
+ case ExternalPage _ -> numberOfExternalLinks++;
39
+ case GitHubIssuePage _ -> numberOfIssues++;
40
+ case GitHubPrPage _ -> numberOfPrs++;
41
+ }
26
42
}
27
43
```
44
+
45
+ Run ` GitHubCrawl ` .
0 commit comments