Skip to content

Commit 3a5e87a

Browse files
committed
Compact createPredicateForStringMatcher
1 parent 43440d8 commit 3a5e87a

File tree

1 file changed

+37
-66
lines changed
  • spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/query/criteria

1 file changed

+37
-66
lines changed

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/query/criteria/CriteriaByExample.java

Lines changed: 37 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import java.util.Collection;
2020
import java.util.Locale;
2121
import java.util.Map;
22+
import java.util.Objects;
2223
import java.util.Optional;
24+
import java.util.function.BiPredicate;
2325
import java.util.function.Predicate;
2426
import java.util.regex.Pattern;
2527

@@ -110,88 +112,57 @@ private <T> Predicate<ExampleMatcher.PropertySpecifier> createPredicateForSpecif
110112
return this.createPredicateForStringMatcher(
111113
specifier,
112114
setOrDefaultMatcher,
113-
transformedExampledValue,
114-
transformedValue);
115+
transformedExampledValue.get(),
116+
transformedValue.orElse(null));
115117
};
116118
}
117119

118120
private boolean createPredicateForStringMatcher(
119121
final ExampleMatcher.PropertySpecifier specifier,
120122
final ExampleMatcher.StringMatcher setOrDefaultMatcher,
121-
final Optional<Object> transformedExampledValue,
122-
final Optional<Object> transformedValue)
123+
final Object transformedExampledValue, // Never null
124+
final Object transformedValue) // Nullable
123125
{
124-
switch(setOrDefaultMatcher)
126+
// Check exact matches
127+
if(ExampleMatcher.StringMatcher.DEFAULT.equals(setOrDefaultMatcher)
128+
|| ExampleMatcher.StringMatcher.EXACT.equals(setOrDefaultMatcher))
125129
{
126-
case DEFAULT, EXACT ->
130+
if(transformedExampledValue instanceof String)
127131
{
128-
if(transformedExampledValue.get() instanceof String)
129-
{
130-
return this.valueToString(transformedValue, specifier).equals(this.valueToString(
131-
transformedExampledValue,
132-
specifier));
133-
}
134-
return transformedExampledValue.equals(transformedValue);
135-
}
136-
case STARTING ->
137-
{
138-
final Optional<String> valueAsString = this.valueToString(transformedValue, specifier);
139-
if(valueAsString.isEmpty())
140-
{
141-
return false;
142-
}
143-
return valueAsString.get()
144-
.startsWith(this.valueToString(transformedExampledValue, specifier).get());
145-
}
146-
case ENDING ->
147-
{
148-
final Optional<String> valueAsString = this.valueToString(transformedValue, specifier);
149-
if(valueAsString.isEmpty())
150-
{
151-
return false;
152-
}
153-
return valueAsString.get().endsWith(this.valueToString(transformedExampledValue, specifier).get());
154-
}
155-
case CONTAINING ->
156-
{
157-
final Optional<String> valueAsString = this.valueToString(transformedValue, specifier);
158-
if(valueAsString.isEmpty())
159-
{
160-
return false;
161-
}
162-
return valueAsString.get().contains(this.valueToString(transformedExampledValue, specifier).get());
163-
}
164-
case REGEX ->
165-
{
166-
final Optional<String> valueAsString = this.valueToString(transformedValue, specifier);
167-
if(valueAsString.isEmpty())
168-
{
169-
return false;
170-
}
171-
return Pattern.compile(
172-
this.valueToString(transformedExampledValue, specifier).get()
173-
)
174-
.matcher(valueAsString.get()).find();
175-
}
176-
default ->
177-
{
178-
return false;
132+
return Objects.equals(
133+
this.valueToString(transformedExampledValue, specifier),
134+
this.valueToString(transformedValue, specifier));
179135
}
136+
return Objects.equals(transformedExampledValue, transformedValue);
180137
}
138+
139+
// Check comparisons
140+
final BiPredicate<String, String> compareFunc = switch(setOrDefaultMatcher)
141+
{
142+
case STARTING -> String::startsWith;
143+
case ENDING -> String::endsWith;
144+
case CONTAINING -> String::contains;
145+
case REGEX -> (v, example) -> Pattern.compile(example).matcher(v).find();
146+
default -> null;
147+
};
148+
149+
return compareFunc != null
150+
&& Optional.ofNullable(this.valueToString(transformedValue, specifier))
151+
.map(v -> compareFunc.test(v, this.valueToString(transformedExampledValue, specifier)))
152+
.orElse(false);
181153
}
182154

183-
private Optional<String> valueToString(
184-
final Optional<Object> value,
155+
private String valueToString(
156+
final Object value,
185157
final ExampleMatcher.PropertySpecifier specifier)
186158
{
187-
if(value.isEmpty())
188-
{
189-
return Optional.empty();
190-
}
191-
if(specifier != null && Boolean.TRUE.equals(specifier.getIgnoreCase()))
159+
if(value == null)
192160
{
193-
return Optional.of(value.get().toString().toLowerCase(Locale.ROOT));
161+
return null;
194162
}
195-
return Optional.of(value.get().toString());
163+
164+
return (specifier != null && Boolean.TRUE.equals(specifier.getIgnoreCase()))
165+
? value.toString().toLowerCase(Locale.ROOT)
166+
: value.toString();
196167
}
197168
}

0 commit comments

Comments
 (0)