1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.metaschema.schemagen;
28
29 import gov.nist.secauto.metaschema.core.model.IFlagInstance;
30 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
31
32 import java.util.Collection;
33 import java.util.function.Predicate;
34 import java.util.stream.Collectors;
35
36 import edu.umd.cs.findbugs.annotations.NonNull;
37
38 public final class FlagInstanceFilter {
39 private FlagInstanceFilter() {
40
41 }
42
43 @NonNull
44 public static Collection<? extends IFlagInstance> filterFlags(
45 @NonNull Collection<? extends IFlagInstance> flags,
46 IFlagInstance jsonKeyFlag) {
47 Predicate<IFlagInstance> filter = null;
48
49
50 if (jsonKeyFlag != null) {
51 filter = filterFlag(jsonKeyFlag);
52 }
53 return applyFilter(flags, filter);
54 }
55
56 @NonNull
57 public static Collection<? extends IFlagInstance> filterFlags(
58 @NonNull Collection<? extends IFlagInstance> flags,
59 IFlagInstance jsonKeyFlag,
60 IFlagInstance jsonValueKeyFlag) {
61 Predicate<IFlagInstance> filter = null;
62
63
64 if (jsonKeyFlag != null) {
65 filter = filterFlag(jsonKeyFlag);
66 }
67
68
69 if (jsonValueKeyFlag != null) {
70 Predicate<IFlagInstance> jsonValueKeyFilter
71 = filterFlag(jsonValueKeyFlag);
72 if (filter == null) {
73 filter = jsonValueKeyFilter;
74 } else {
75 filter = filter.and(jsonValueKeyFilter);
76 }
77 }
78
79 return applyFilter(flags, filter);
80 }
81
82 @NonNull
83 private static Predicate<IFlagInstance>
84 filterFlag(@NonNull IFlagInstance flagToFilter) {
85 return flag -> flag != flagToFilter;
86 }
87
88 @NonNull
89 private static Collection<? extends IFlagInstance> applyFilter(
90 @NonNull Collection<? extends IFlagInstance> flags,
91 Predicate<IFlagInstance> filter) {
92 Collection<? extends IFlagInstance> retval;
93 if (filter == null) {
94 retval = flags;
95 } else {
96 retval = ObjectUtils.notNull(flags.stream()
97 .filter(filter)
98 .collect(Collectors.toList()));
99 }
100 return retval;
101 }
102 }