Skip to content

Commit a4ed730

Browse files
authored
Code cleanup (Java 17).
Original Pull Request #2271 Closes #2270
1 parent b511756 commit a4ed730

File tree

120 files changed

+2990
-3264
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

120 files changed

+2990
-3264
lines changed

Diff for: src/main/asciidoc/reference/elasticsearch-migration-guide-4.4-5.0.adoc

+13
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,19 @@ adjust your imports as well.
4747
When working with the `NativeSearchQuery` class, you'll need to switch to the `NativeQuery` class, which can take a
4848
`Query` instance comign from the new Elasticsearch client libraries. You'll find plenty of examples in the test code.
4949

50+
=== Conversion to Java 17 records
51+
52+
The following classes have been converted to `Record`, you might need to adjust the use of getter methods from
53+
`getProp()` to `prop()`:
54+
55+
* `org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.IndexResponseMetaData`
56+
* `org.springframework.data.elasticsearch.core.ActiveShardCount`
57+
* `org.springframework.data.elasticsearch.support.Version`
58+
* `org.springframework.data.elasticsearch.support.ScoreDoc`
59+
* `org.springframework.data.elasticsearch.core.query.ScriptData`
60+
* `org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm`
61+
62+
5063
[[elasticsearch-migration-guide-4.4-5.0.new-clients]]
5164
== New Elasticsearch client
5265

Diff for: src/main/java/org/springframework/data/elasticsearch/client/DefaultClientConfiguration.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
import java.net.InetSocketAddress;
1919
import java.time.Duration;
20-
import java.util.ArrayList;
21-
import java.util.Collections;
2220
import java.util.List;
2321
import java.util.Optional;
2422
import java.util.function.Function;
@@ -63,7 +61,7 @@ class DefaultClientConfiguration implements ClientConfiguration {
6361
Function<WebClient, WebClient> webClientConfigurer, HttpClientConfigCallback httpClientConfigurer,
6462
List<ClientConfigurationCallback<?>> clientConfigurers, Supplier<HttpHeaders> headersSupplier) {
6563

66-
this.hosts = Collections.unmodifiableList(new ArrayList<>(hosts));
64+
this.hosts = List.copyOf(hosts);
6765
this.headers = new HttpHeaders(headers);
6866
this.useSsl = useSsl;
6967
this.sslContext = sslContext;

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/ChildTemplate.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import co.elastic.clients.ApiClient;
1919
import co.elastic.clients.elasticsearch.cluster.ElasticsearchClusterClient;
2020
import co.elastic.clients.json.JsonpMapper;
21+
import co.elastic.clients.transport.Transport;
2122

2223
import java.io.IOException;
2324

@@ -32,7 +33,7 @@
3233
* @author Peter-Josef Meisch
3334
* @since 4.4
3435
*/
35-
public abstract class ChildTemplate<CLIENT extends ApiClient> {
36+
public abstract class ChildTemplate<T extends Transport, CLIENT extends ApiClient<T, CLIENT>> {
3637

3738
protected final CLIENT client;
3839
protected final RequestConverter requestConverter;

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/ClusterTemplate.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import co.elastic.clients.elasticsearch.cluster.ElasticsearchClusterClient;
1919
import co.elastic.clients.elasticsearch.cluster.HealthRequest;
2020
import co.elastic.clients.elasticsearch.cluster.HealthResponse;
21+
import co.elastic.clients.transport.ElasticsearchTransport;
2122

2223
import org.springframework.data.elasticsearch.core.cluster.ClusterHealth;
2324
import org.springframework.data.elasticsearch.core.cluster.ClusterOperations;
@@ -29,7 +30,8 @@
2930
* @author Peter-Josef Meisch
3031
* @since 4.4
3132
*/
32-
public class ClusterTemplate extends ChildTemplate<ElasticsearchClusterClient> implements ClusterOperations {
33+
public class ClusterTemplate extends ChildTemplate<ElasticsearchTransport, ElasticsearchClusterClient>
34+
implements ClusterOperations {
3335

3436
public ClusterTemplate(ElasticsearchClusterClient client, ElasticsearchConverter elasticsearchConverter) {
3537
super(client, elasticsearchConverter);

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/CriteriaFilterProcessor.java

+19-25
Original file line numberDiff line numberDiff line change
@@ -130,37 +130,37 @@ private static Optional<Query> queryFor(Criteria.OperationKey key, Object value,
130130
ObjectBuilder<? extends QueryVariant> queryBuilder = null;
131131

132132
switch (key) {
133-
case WITHIN:
133+
case WITHIN -> {
134134
Assert.isTrue(value instanceof Object[], "Value of a geo distance filter should be an array of two values.");
135135
queryBuilder = withinQuery(fieldName, (Object[]) value);
136-
break;
137-
case BBOX:
136+
}
137+
case BBOX -> {
138138
Assert.isTrue(value instanceof Object[],
139139
"Value of a boundedBy filter should be an array of one or two values.");
140140
queryBuilder = boundingBoxQuery(fieldName, (Object[]) value);
141-
break;
142-
case GEO_INTERSECTS:
141+
}
142+
case GEO_INTERSECTS -> {
143143
Assert.isTrue(value instanceof GeoJson<?>, "value of a GEO_INTERSECTS filter must be a GeoJson object");
144144
queryBuilder = geoJsonQuery(fieldName, (GeoJson<?>) value, "intersects");
145-
break;
146-
case GEO_IS_DISJOINT:
145+
}
146+
case GEO_IS_DISJOINT -> {
147147
Assert.isTrue(value instanceof GeoJson<?>, "value of a GEO_IS_DISJOINT filter must be a GeoJson object");
148148
queryBuilder = geoJsonQuery(fieldName, (GeoJson<?>) value, "disjoint");
149-
break;
150-
case GEO_WITHIN:
149+
}
150+
case GEO_WITHIN -> {
151151
Assert.isTrue(value instanceof GeoJson<?>, "value of a GEO_WITHIN filter must be a GeoJson object");
152152
queryBuilder = geoJsonQuery(fieldName, (GeoJson<?>) value, "within");
153-
break;
154-
case GEO_CONTAINS:
153+
}
154+
case GEO_CONTAINS -> {
155155
Assert.isTrue(value instanceof GeoJson<?>, "value of a GEO_CONTAINS filter must be a GeoJson object");
156156
queryBuilder = geoJsonQuery(fieldName, (GeoJson<?>) value, "contains");
157-
break;
157+
}
158158
}
159159

160160
return Optional.ofNullable(queryBuilder != null ? queryBuilder.build()._toQuery() : null);
161161
}
162162

163-
private static ObjectBuilder<GeoDistanceQuery> withinQuery(String fieldName, Object[] values) {
163+
private static ObjectBuilder<GeoDistanceQuery> withinQuery(String fieldName, Object... values) {
164164

165165
Assert.noNullElements(values, "Geo distance filter takes 2 not null elements array as parameter.");
166166
Assert.isTrue(values.length == 2, "Geo distance filter takes a 2-elements array as parameter.");
@@ -176,8 +176,7 @@ private static ObjectBuilder<GeoDistanceQuery> withinQuery(String fieldName, Obj
176176
.distance(dist) //
177177
.distanceType(GeoDistanceType.Plane) //
178178
.location(location -> {
179-
if (values[0] instanceof GeoPoint) {
180-
GeoPoint loc = (GeoPoint) values[0];
179+
if (values[0]instanceof GeoPoint loc) {
181180
location.latlon(latlon -> latlon.lat(loc.getLat()).lon(loc.getLon()));
182181
} else if (values[0] instanceof Point) {
183182
GeoPoint loc = GeoPoint.fromPoint((Point) values[0]);
@@ -195,7 +194,7 @@ private static ObjectBuilder<GeoDistanceQuery> withinQuery(String fieldName, Obj
195194
});
196195
}
197196

198-
private static ObjectBuilder<GeoBoundingBoxQuery> boundingBoxQuery(String fieldName, Object[] values) {
197+
private static ObjectBuilder<GeoBoundingBoxQuery> boundingBoxQuery(String fieldName, Object... values) {
199198

200199
Assert.noNullElements(values, "Geo boundedBy filter takes a not null element array as parameter.");
201200

@@ -240,13 +239,12 @@ private static void oneParameterBBox(GeoBoundingBoxQuery.Builder queryBuilder, O
240239
)))));
241240
}
242241

243-
private static void twoParameterBBox(GeoBoundingBoxQuery.Builder queryBuilder, Object[] values) {
242+
private static void twoParameterBBox(GeoBoundingBoxQuery.Builder queryBuilder, Object... values) {
244243

245244
Assert.isTrue(allElementsAreOfType(values, GeoPoint.class) || allElementsAreOfType(values, String.class),
246245
" both elements of boundedBy filter must be type of GeoPoint or text(format lat,lon or geohash)");
247246

248-
if (values[0] instanceof GeoPoint) {
249-
GeoPoint topLeft = (GeoPoint) values[0];
247+
if (values[0]instanceof GeoPoint topLeft) {
250248
GeoPoint bottomRight = (GeoPoint) values[1];
251249
queryBuilder.boundingBox(bb -> bb //
252250
.tlbr(tlbr -> tlbr //
@@ -329,12 +327,8 @@ private static String extractDistanceString(Distance distance) {
329327
StringBuilder sb = new StringBuilder();
330328
sb.append((int) distance.getValue());
331329
switch ((Metrics) distance.getMetric()) {
332-
case KILOMETERS:
333-
sb.append("km");
334-
break;
335-
case MILES:
336-
sb.append("mi");
337-
break;
330+
case KILOMETERS -> sb.append("km");
331+
case MILES -> sb.append("mi");
338332
}
339333

340334
return sb.toString();

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/CriteriaQueryProcessor.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -288,8 +288,7 @@ private static Query.Builder queryFor(Criteria.CriteriaEntry entry, Field field,
288288

289289
break;
290290
case IN:
291-
if (value instanceof Iterable) {
292-
Iterable<?> iterable = (Iterable<?>) value;
291+
if (value instanceof Iterable<?> iterable) {
293292
if (isKeywordField) {
294293
queryBuilder.bool(bb -> bb //
295294
.must(mb -> mb //
@@ -310,8 +309,7 @@ private static Query.Builder queryFor(Criteria.CriteriaEntry entry, Field field,
310309
}
311310
break;
312311
case NOT_IN:
313-
if (value instanceof Iterable) {
314-
Iterable<?> iterable = (Iterable<?>) value;
312+
if (value instanceof Iterable<?> iterable) {
315313
if (isKeywordField) {
316314
queryBuilder.bool(bb -> bb //
317315
.mustNot(mnb -> mnb //

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/DocumentAdapters.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,12 @@ public static SearchDocument from(Hit<?> hit, JsonpMapper jsonpMapper) {
101101
EntityAsMap hitFieldsAsMap = fromFields.apply(hit.fields());
102102

103103
Map<String, List<Object>> documentFields = new LinkedHashMap<>();
104-
hitFieldsAsMap.entrySet().forEach(entry -> {
105-
if (entry.getValue() instanceof List) {
104+
hitFieldsAsMap.forEach((key, value) -> {
105+
if (value instanceof List) {
106106
// noinspection unchecked
107-
documentFields.put(entry.getKey(), (List<Object>) entry.getValue());
107+
documentFields.put(key, (List<Object>) value);
108108
} else {
109-
documentFields.put(entry.getKey(), Collections.singletonList(entry.getValue()));
109+
documentFields.put(key, Collections.singletonList(value));
110110
}
111111
});
112112

@@ -117,8 +117,7 @@ public static SearchDocument from(Hit<?> hit, JsonpMapper jsonpMapper) {
117117
} else {
118118
if (source instanceof EntityAsMap) {
119119
document = Document.from((EntityAsMap) source);
120-
} else if (source instanceof JsonData) {
121-
JsonData jsonData = (JsonData) source;
120+
} else if (source instanceof JsonData jsonData) {
122121
document = Document.from(jsonData.to(EntityAsMap.class));
123122
} else {
124123

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchClients.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,9 @@ public void process(HttpRequest request, HttpContext context) throws IOException
305305
+ ((header.getName().equals("Authorization")) ? ": *****" : ": " + header.getValue()))
306306
.collect(Collectors.joining(", ", "[", "]"));
307307

308-
if (request instanceof HttpEntityEnclosingRequest && ((HttpEntityEnclosingRequest) request).getEntity() != null) {
308+
if (request instanceof HttpEntityEnclosingRequest entityRequest
309+
&& ((HttpEntityEnclosingRequest) request).getEntity() != null) {
309310

310-
HttpEntityEnclosingRequest entityRequest = (HttpEntityEnclosingRequest) request;
311311
HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
312312
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
313313
entity.writeTo(buffer);
@@ -377,7 +377,6 @@ static ElasticsearchHttpClientConfigurationCallback from(
377377

378378
Assert.notNull(httpClientBuilderCallback, "httpClientBuilderCallback must not be null");
379379

380-
// noinspection NullableProblems
381380
return httpClientBuilderCallback::apply;
382381
}
383382
}
@@ -396,7 +395,6 @@ static ElasticsearchRestClientConfigurationCallback from(
396395

397396
Assert.notNull(restClientBuilderCallback, "restClientBuilderCallback must not be null");
398397

399-
// noinspection NullableProblems
400398
return restClientBuilderCallback::apply;
401399
}
402400
}

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchExceptionTranslator.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,14 @@ public DataAccessException translateExceptionIfPossible(RuntimeException ex) {
7272
return new OptimisticLockingFailureException("Cannot index a document due to seq_no+primary_term conflict", ex);
7373
}
7474

75-
if (ex instanceof ElasticsearchException) {
76-
ElasticsearchException elasticsearchException = (ElasticsearchException) ex;
75+
if (ex instanceof ElasticsearchException elasticsearchException) {
7776

7877
ErrorResponse response = elasticsearchException.response();
7978

8079
if (response.status() == HttpStatus.NOT_FOUND.value()
8180
&& "index_not_found_exception".equals(response.error().type())) {
8281

82+
// noinspection RegExpRedundantEscape
8383
Pattern pattern = Pattern.compile(".*no such index \\[(.*)\\]");
8484
String index = "";
8585
Matcher matcher = pattern.matcher(response.error().reason());
@@ -109,9 +109,7 @@ private boolean isSeqNoConflict(Throwable exception) {
109109
Integer status = null;
110110
String message = null;
111111

112-
113-
if (exception instanceof ResponseException) {
114-
ResponseException responseException = (ResponseException) exception;
112+
if (exception instanceof ResponseException responseException) {
115113
status = responseException.getResponse().getStatusLine().getStatusCode();
116114
message = responseException.getMessage();
117115
} else if (exception.getCause() != null) {

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java

+1-11
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package org.springframework.data.elasticsearch.client.elc;
1717

18-
import static co.elastic.clients.util.ApiTypeHelper.*;
1918
import static org.springframework.data.elasticsearch.client.elc.TypeUtils.*;
2019

2120
import co.elastic.clients.elasticsearch.ElasticsearchClient;
@@ -476,16 +475,7 @@ private List<SearchHits<?>> doMultiSearch(List<MultiSearchQueryParameter> multiS
476475
/**
477476
* value class combining the information needed for a single query in a multisearch request.
478477
*/
479-
static class MultiSearchQueryParameter {
480-
final Query query;
481-
final Class<?> clazz;
482-
final IndexCoordinates index;
483-
484-
public MultiSearchQueryParameter(Query query, Class<?> clazz, IndexCoordinates index) {
485-
this.query = query;
486-
this.clazz = clazz;
487-
this.index = index;
488-
}
478+
record MultiSearchQueryParameter(Query query, Class<?> clazz, IndexCoordinates index) {
489479
}
490480
// endregion
491481

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/IndicesTemplate.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.springframework.util.StringUtils.*;
1919

2020
import co.elastic.clients.elasticsearch.indices.*;
21+
import co.elastic.clients.transport.ElasticsearchTransport;
2122
import co.elastic.clients.transport.endpoints.BooleanResponse;
2223

2324
import java.util.List;
@@ -56,7 +57,8 @@
5657
* @author Peter-Josef Meisch
5758
* @since 4.4
5859
*/
59-
public class IndicesTemplate extends ChildTemplate<ElasticsearchIndicesClient> implements IndexOperations {
60+
public class IndicesTemplate extends ChildTemplate<ElasticsearchTransport, ElasticsearchIndicesClient>
61+
implements IndexOperations {
6062

6163
private static final Logger LOGGER = LoggerFactory.getLogger(IndicesTemplate.class);
6264

@@ -187,7 +189,6 @@ public Document createMapping(Class<?> clazz) {
187189
Assert.notNull(clazz, "clazz must not be null");
188190

189191
// load mapping specified in Mapping annotation if present
190-
// noinspection DuplicatedCode
191192
Mapping mappingAnnotation = AnnotatedElementUtils.findMergedAnnotation(clazz, Mapping.class);
192193

193194
if (mappingAnnotation != null) {

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveChildTemplate.java

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

1818
import co.elastic.clients.ApiClient;
1919
import co.elastic.clients.json.JsonpMapper;
20+
import co.elastic.clients.transport.Transport;
2021
import reactor.core.publisher.Flux;
2122

2223
import org.reactivestreams.Publisher;
@@ -29,18 +30,17 @@
2930
* @author Peter-Josef Meisch
3031
* @since 4.4
3132
*/
32-
public class ReactiveChildTemplate<CLIENT extends ApiClient> {
33+
public class ReactiveChildTemplate<T extends Transport, CLIENT extends ApiClient<T, CLIENT>> {
3334
protected final CLIENT client;
3435
protected final ElasticsearchConverter elasticsearchConverter;
3536
protected final RequestConverter requestConverter;
3637
protected final ResponseConverter responseConverter;
37-
private final JsonpMapper jsonpMapper;
3838
protected final ElasticsearchExceptionTranslator exceptionTranslator;
3939

4040
public ReactiveChildTemplate(CLIENT client, ElasticsearchConverter elasticsearchConverter) {
4141
this.client = client;
4242
this.elasticsearchConverter = elasticsearchConverter;
43-
jsonpMapper = client._transport().jsonpMapper();
43+
JsonpMapper jsonpMapper = client._transport().jsonpMapper();
4444
requestConverter = new RequestConverter(elasticsearchConverter, jsonpMapper);
4545
responseConverter = new ResponseConverter(jsonpMapper);
4646
exceptionTranslator = new ElasticsearchExceptionTranslator(jsonpMapper);

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveClusterTemplate.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import co.elastic.clients.elasticsearch.cluster.HealthRequest;
1919
import co.elastic.clients.elasticsearch.cluster.HealthResponse;
20+
import co.elastic.clients.transport.ElasticsearchTransport;
2021
import reactor.core.publisher.Mono;
2122

2223
import org.springframework.data.elasticsearch.client.erhlc.ReactiveClusterOperations;
@@ -27,7 +28,8 @@
2728
* @author Peter-Josef Meisch
2829
* @since 4.4
2930
*/
30-
public class ReactiveClusterTemplate extends ReactiveChildTemplate<ReactiveElasticsearchClusterClient>
31+
public class ReactiveClusterTemplate
32+
extends ReactiveChildTemplate<ElasticsearchTransport, ReactiveElasticsearchClusterClient>
3133
implements ReactiveClusterOperations {
3234

3335
public ReactiveClusterTemplate(ReactiveElasticsearchClusterClient client,

0 commit comments

Comments
 (0)