11package io .split .engine .experiments ;
22
33import io .split .client .dtos .DataType ;
4+ import io .split .client .dtos .MatcherCombiner ;
45import io .split .client .dtos .MatcherType ;
56import io .split .client .dtos .Partition ;
67import io .split .client .dtos .MatcherGroup ;
3536
3637import java .util .ArrayList ;
3738import java .util .List ;
39+ import java .util .Objects ;
3840
3941public final class ParserUtils {
4042
@@ -79,99 +81,127 @@ public static CombiningMatcher toMatcher(MatcherGroup matcherGroup) {
7981 toCombine .add (toMatcher (matcher ));
8082 }
8183
82- return new CombiningMatcher (CombiningMatcher . Combiner . AND , toCombine );
84+ return new CombiningMatcher (toCombiner ( matcherGroup . combiner ) , toCombine );
8385 }
8486
8587
8688 private static io .split .rules .model .DataType toRulesDataType (DataType dt ) {
8789 return io .split .rules .model .DataType .valueOf (dt .name ());
8890 }
8991
92+ private static CombiningMatcher .Combiner toCombiner (MatcherCombiner combiner ) {
93+ return CombiningMatcher .Combiner .valueOf (combiner .name ());
94+ }
95+
9096 public static AttributeMatcher toMatcher (Matcher matcher ) {
9197 io .split .rules .matchers .Matcher delegate = null ;
9298 switch (matcher .matcherType ) {
9399 case ALL_KEYS :
94100 delegate = new AllKeysMatcher ();
95101 break ;
96102 case IN_SEGMENT :
103+ Objects .requireNonNull (matcher .userDefinedSegmentMatcherData );
97104 String segmentName = matcher .userDefinedSegmentMatcherData .segmentName ;
98105 delegate = new UserDefinedSegmentMatcher (segmentName );
99106 break ;
100107 case WHITELIST :
108+ Objects .requireNonNull (matcher .whitelistMatcherData );
101109 delegate = new WhitelistMatcher (matcher .whitelistMatcherData .whitelist );
102110 break ;
103111 case EQUAL_TO :
112+ Objects .requireNonNull (matcher .unaryNumericMatcherData );
104113 delegate = new EqualToMatcher (matcher .unaryNumericMatcherData .value , toRulesDataType (matcher .unaryNumericMatcherData .dataType ));
105114 break ;
106115 case GREATER_THAN_OR_EQUAL_TO :
116+ Objects .requireNonNull (matcher .unaryNumericMatcherData );
107117 delegate = new GreaterThanOrEqualToMatcher (
108118 matcher .unaryNumericMatcherData .value , toRulesDataType (matcher .unaryNumericMatcherData .dataType ));
109119 break ;
110120 case LESS_THAN_OR_EQUAL_TO :
121+ Objects .requireNonNull (matcher .unaryNumericMatcherData );
111122 delegate = new LessThanOrEqualToMatcher (
112123 matcher .unaryNumericMatcherData .value , toRulesDataType (matcher .unaryNumericMatcherData .dataType ));
113124 break ;
114125 case BETWEEN :
126+ Objects .requireNonNull (matcher .betweenMatcherData );
115127 delegate = new BetweenMatcher (matcher .betweenMatcherData .start ,
116128 matcher .betweenMatcherData .end , toRulesDataType (matcher .betweenMatcherData .dataType ));
117129 break ;
118130 case EQUAL_TO_SET :
131+ Objects .requireNonNull (matcher .whitelistMatcherData );
119132 delegate = new EqualToSetMatcher (matcher .whitelistMatcherData .whitelist );
120133 break ;
121134 case PART_OF_SET :
135+ Objects .requireNonNull (matcher .whitelistMatcherData );
122136 delegate = new PartOfSetMatcher (matcher .whitelistMatcherData .whitelist );
123137 break ;
124138 case CONTAINS_ALL_OF_SET :
139+ Objects .requireNonNull (matcher .whitelistMatcherData );
125140 delegate = new ContainsAllOfSetMatcher (matcher .whitelistMatcherData .whitelist );
126141 break ;
127142 case CONTAINS_ANY_OF_SET :
143+ Objects .requireNonNull (matcher .whitelistMatcherData );
128144 delegate = new ContainsAnyOfSetMatcher (matcher .whitelistMatcherData .whitelist );
129145 break ;
130146 case STARTS_WITH :
147+ Objects .requireNonNull (matcher .whitelistMatcherData );
131148 delegate = new StartsWithAnyOfMatcher (matcher .whitelistMatcherData .whitelist );
132149 break ;
133150 case ENDS_WITH :
151+ Objects .requireNonNull (matcher .whitelistMatcherData );
134152 delegate = new EndsWithAnyOfMatcher (matcher .whitelistMatcherData .whitelist );
135153 break ;
136154 case CONTAINS_STRING :
155+ Objects .requireNonNull (matcher .whitelistMatcherData );
137156 delegate = new ContainsAnyOfMatcher (matcher .whitelistMatcherData .whitelist );
138157 break ;
139158 case MATCHES_STRING :
159+ Objects .requireNonNull (matcher .stringMatcherData );
140160 delegate = new RegularExpressionMatcher (matcher .stringMatcherData );
141161 break ;
142162 case IN_SPLIT_TREATMENT :
143- if (matcher .dependencyMatcherData == null ) throw new NullPointerException (
144- "MatcherType is " + matcher .matcherType + ". matcher.dependencyMatcherData() MUST NOT BE null" );
163+ Objects .requireNonNull (matcher .dependencyMatcherData ,
164+ "MatcherType is " + matcher .matcherType
165+ + ". matcher.dependencyMatcherData() MUST NOT BE null" );
145166 delegate = new DependencyMatcher (matcher .dependencyMatcherData .split , matcher .dependencyMatcherData .treatments );
146167 break ;
147168 case EQUAL_TO_BOOLEAN :
148- if (matcher .booleanMatcherData == null ) throw new NullPointerException (
149- "MatcherType is " + matcher .matcherType + ". matcher.booleanMatcherData() MUST NOT BE null" );
169+ Objects .requireNonNull (matcher .booleanMatcherData ,
170+ "MatcherType is " + matcher .matcherType
171+ + ". matcher.booleanMatcherData() MUST NOT BE null" );
150172 delegate = new BooleanMatcher (matcher .booleanMatcherData );
151173 break ;
152174 case EQUAL_TO_SEMVER :
175+ Objects .requireNonNull (matcher .stringMatcherData , "stringMatcherData is required for EQUAL_TO_SEMVER matcher type" );
153176 delegate = new EqualToSemverMatcher (matcher .stringMatcherData );
154177 break ;
155178 case GREATER_THAN_OR_EQUAL_TO_SEMVER :
179+ Objects .requireNonNull (matcher .stringMatcherData , "stringMatcherData is required for GREATER_THAN_OR_EQUAL_TO_SEMVER matcher type" );
156180 delegate = new GreaterThanOrEqualToSemverMatcher (matcher .stringMatcherData );
157181 break ;
158182 case LESS_THAN_OR_EQUAL_TO_SEMVER :
183+ Objects .requireNonNull (matcher .stringMatcherData , "stringMatcherData is required for LESS_THAN_OR_EQUAL_SEMVER matcher type" );
159184 delegate = new LessThanOrEqualToSemverMatcher (matcher .stringMatcherData );
160185 break ;
161186 case IN_LIST_SEMVER :
187+ Objects .requireNonNull (matcher .whitelistMatcherData , "whitelistMatcherData is required for IN_LIST_SEMVER matcher type" );
162188 delegate = new InListSemverMatcher (matcher .whitelistMatcherData .whitelist );
163189 break ;
164190 case BETWEEN_SEMVER :
191+ Objects .requireNonNull (matcher .betweenStringMatcherData , "betweenStringMatcherData is required for BETWEEN_SEMVER matcher type" );
165192 delegate = new BetweenSemverMatcher (matcher .betweenStringMatcherData .start , matcher .betweenStringMatcherData .end );
166193 break ;
167194 case IN_RULE_BASED_SEGMENT :
195+ Objects .requireNonNull (matcher .userDefinedSegmentMatcherData );
168196 String ruleBasedSegmentName = matcher .userDefinedSegmentMatcherData .segmentName ;
169197 delegate = new RuleBasedSegmentMatcher (ruleBasedSegmentName );
170198 break ;
171199 default :
172200 throw new IllegalArgumentException ("Unknown matcher type: " + matcher .matcherType );
173201 }
174202
203+ Objects .requireNonNull (delegate , "We were not able to create a matcher for: " + matcher .matcherType );
204+
175205 String attribute = null ;
176206 if (matcher .keySelector != null && matcher .keySelector .attribute != null ) {
177207 attribute = matcher .keySelector .attribute ;
@@ -182,4 +212,4 @@ public static AttributeMatcher toMatcher(Matcher matcher) {
182212
183213 return new AttributeMatcher (attribute , delegate , negate );
184214 }
185- }
215+ }
0 commit comments