Skip to content

Commit aacc9f3

Browse files
committed
Create doWithinIfPossible method to remove duplicated logic.
1 parent e4739d5 commit aacc9f3

File tree

1 file changed

+32
-22
lines changed

1 file changed

+32
-22
lines changed

src/main/java/org/springframework/data/elasticsearch/repository/query/parser/ElasticsearchQueryCreator.java

+32-22
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import java.util.Collection;
1919
import java.util.Iterator;
20-
2120
import org.springframework.dao.InvalidDataAccessApiUsageException;
2221
import org.springframework.data.domain.Sort;
2322
import org.springframework.data.elasticsearch.core.geo.GeoBox;
@@ -63,8 +62,8 @@ public ElasticsearchQueryCreator(PartTree tree, MappingContext<?, ElasticsearchP
6362

6463
@Override
6564
protected CriteriaQuery create(Part part, Iterator<Object> iterator) {
66-
PersistentPropertyPath<ElasticsearchPersistentProperty> path = context
67-
.getPersistentPropertyPath(part.getProperty());
65+
PersistentPropertyPath<ElasticsearchPersistentProperty> path = context.getPersistentPropertyPath(
66+
part.getProperty());
6867
return new CriteriaQuery(from(part,
6968
new Criteria(path.toDotPath(ElasticsearchPersistentProperty.QueryPropertyToFieldNameConverter.INSTANCE)),
7069
iterator));
@@ -75,8 +74,8 @@ protected CriteriaQuery and(Part part, CriteriaQuery base, Iterator<Object> iter
7574
if (base == null) {
7675
return create(part, iterator);
7776
}
78-
PersistentPropertyPath<ElasticsearchPersistentProperty> path = context
79-
.getPersistentPropertyPath(part.getProperty());
77+
PersistentPropertyPath<ElasticsearchPersistentProperty> path = context.getPersistentPropertyPath(
78+
part.getProperty());
8079
return base.addCriteria(from(part,
8180
new Criteria(path.toDotPath(ElasticsearchPersistentProperty.QueryPropertyToFieldNameConverter.INSTANCE)),
8281
iterator));
@@ -155,14 +154,7 @@ private Criteria from(Part part, Criteria criteria, Iterator<?> parameters) {
155154
secondParameter = parameters.next();
156155
}
157156

158-
if (firstParameter instanceof GeoPoint geoPoint && secondParameter instanceof String string)
159-
return criteria.within(geoPoint, string);
160-
161-
if (firstParameter instanceof Point point && secondParameter instanceof Distance distance)
162-
return criteria.within(point, distance);
163-
164-
if (firstParameter instanceof String firstString && secondParameter instanceof String secondString)
165-
return criteria.within(firstString, secondString);
157+
return doWithinIfPossible(criteria, firstParameter, secondParameter);
166158
}
167159
case NEAR: {
168160
Object firstParameter = parameters.next();
@@ -177,15 +169,7 @@ private Criteria from(Part part, Criteria criteria, Iterator<?> parameters) {
177169

178170
Object secondParameter = parameters.next();
179171

180-
// "near" query can be the same query as the "within" query
181-
if (firstParameter instanceof GeoPoint geoPoint && secondParameter instanceof String string)
182-
return criteria.within(geoPoint, string);
183-
184-
if (firstParameter instanceof Point point && secondParameter instanceof Distance distance)
185-
return criteria.within(point, distance);
186-
187-
if (firstParameter instanceof String firstString && secondParameter instanceof String secondString)
188-
return criteria.within(firstString, secondString);
172+
return doWithinIfPossible(criteria, firstParameter, secondParameter);
189173
}
190174
case EXISTS:
191175
case IS_NOT_NULL:
@@ -201,6 +185,32 @@ private Criteria from(Part part, Criteria criteria, Iterator<?> parameters) {
201185
}
202186
}
203187

188+
/**
189+
* Do a within query if possible, otherwise return the criteria unchanged.
190+
*
191+
* @param criteria must not be {@literal null}
192+
* @param firstParameter must not be {@literal null}
193+
* @param secondParameter must not be {@literal null}
194+
* @return the criteria with the within query applied if possible.
195+
* @author Junghoon Ban
196+
*/
197+
private Criteria doWithinIfPossible(Criteria criteria, Object firstParameter, Object secondParameter) {
198+
199+
if (firstParameter instanceof GeoPoint geoPoint && secondParameter instanceof String string) {
200+
return criteria.within(geoPoint, string);
201+
}
202+
203+
if (firstParameter instanceof Point point && secondParameter instanceof Distance distance) {
204+
return criteria.within(point, distance);
205+
}
206+
207+
if (firstParameter instanceof String firstString && secondParameter instanceof String secondString) {
208+
return criteria.within(firstString, secondString);
209+
}
210+
211+
return criteria;
212+
}
213+
204214
private Object[] asArray(Object o) {
205215
if (o instanceof Collection) {
206216
return ((Collection<?>) o).toArray();

0 commit comments

Comments
 (0)