29
29
import java .nio .file .Files ;
30
30
import java .nio .file .Path ;
31
31
import java .util .List ;
32
+ import java .util .Objects ;
32
33
import java .util .function .Predicate ;
33
34
import java .util .stream .Collectors ;
34
35
import java .util .stream .Stream ;
@@ -39,11 +40,15 @@ public class IdSchemaResolver {
39
40
private final UrnPredicate urnPredicate ;
40
41
41
42
public IdSchemaResolver (String functionName ) {
42
- this .urnPredicate = new UrnPredicate (functionName );
43
+ this .urnPredicate = new UrnPredicate (disc -> disc .endsWith ("all" ) || disc .endsWith (functionName ));
44
+ }
45
+
46
+ public IdSchemaResolver (Predicate <String > discrMatcher ) {
47
+ this .urnPredicate = new UrnPredicate (Objects .requireNonNull (discrMatcher ));
43
48
}
44
49
45
50
public List <Path > findProductSpecifications (Path rootPath ) {
46
- var walker = new FileWalker <>(Files ::isRegularFile , p -> urnPredicate . test ( p ) );
51
+ var walker = new FileWalker <>(Files ::isRegularFile , urnPredicate :: test );
47
52
48
53
try (Stream <Pair <Path , Boolean >> allFiles = walker .walk (rootPath )) {
49
54
return allFiles
@@ -61,15 +66,17 @@ static class UrnPredicate implements Predicate<Path> {
61
66
private final ObjectMapper json ;
62
67
private final ObjectMapper yaml ;
63
68
private final UrnBasedNamingStrategy namingStrategy ;
64
- private final String functionName ;
65
69
66
- private UrnPredicate (String functionName ) {
70
+ private final Predicate <String > discriminatorMatcher ;
71
+
72
+ private UrnPredicate (Predicate <String > discriminatorMatcher ) {
67
73
this .json = SerializationUtils .jsonMapper ();
68
74
this .yaml = SerializationUtils .yamlMapper ();
69
75
this .namingStrategy = new UrnBasedNamingStrategy ();
70
- this .functionName = functionName ;
76
+ this .discriminatorMatcher = discriminatorMatcher ;
71
77
}
72
78
79
+
73
80
@ Override
74
81
public boolean test (Path path ) {
75
82
var content = read (path );
@@ -80,11 +87,11 @@ public boolean test(Path path) {
80
87
var toInclude = namingStrategy .provideNameAndDiscriminator (null , content )
81
88
.map (n -> {
82
89
String disc = n .getDiscriminatorValue ();
83
- return ( disc . endsWith ( "all" ) || disc . endsWith ( functionName ) );
90
+ return discriminatorMatcher . test ( disc );
84
91
})
85
92
.orElse (false );
86
93
if (!toInclude ) {
87
- log .info ("{} is not a valid MEF URN for {} function . skipping" , path , functionName );
94
+ log .info ("{} is has no recognized ID . skipping" , path );
88
95
}
89
96
return toInclude ;
90
97
}
0 commit comments