1
2
3
4
5
6
7 package com.varmateo.yawg.core;
8
9 import java.nio.file.Path;
10
11 import io.vavr.Tuple2;
12 import io.vavr.collection.HashMap;
13 import io.vavr.collection.Map;
14 import io.vavr.control.Option;
15
16 import com.varmateo.yawg.util.GlobMatcher;
17
18
19
20
21
22 final class TemplateNameMatcher {
23
24
25 private final Map<String, GlobMatcher> _matchersByName;
26
27
28
29
30
31 TemplateNameMatcher(final Builder builder) {
32
33 _matchersByName = builder._matchersByName;
34 }
35
36
37
38
39
40 public static TemplateNameMatcher empty() {
41
42 return builder().build();
43 }
44
45
46
47
48
49 public static Builder builder() {
50
51 return new Builder();
52 }
53
54
55
56
57
58 public Option<String> templateNameFor(final Path path) {
59
60 return _matchersByName
61 .filter(entry -> entry._2().test(path))
62 .headOption()
63 .map(Tuple2::_1);
64 }
65
66
67
68
69
70 public static final class Builder {
71
72
73 private Map<String, GlobMatcher> _matchersByName;
74
75
76
77
78
79 Builder() {
80
81 _matchersByName = HashMap.empty();
82 }
83
84
85
86
87
88 public Builder addTemplateName(
89 final String templateName,
90 final GlobMatcher globMatcher) {
91
92 _matchersByName = _matchersByName.put(templateName, globMatcher);
93
94 return this;
95 }
96
97
98
99
100
101 public TemplateNameMatcher build() {
102
103 return new TemplateNameMatcher(this);
104 }
105
106
107 }
108
109
110 }