From 99ed967b71157b8c29e4aa7ff38fd8e596d30a9e Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Fri, 7 Aug 2020 16:07:54 +0200 Subject: [PATCH] DATAES-433 - Polishing. --- .../annotations/JoinTypeRelation.java | 7 +-- .../annotations/JoinTypeRelations.java | 4 +- .../core/AbstractElasticsearchTemplate.java | 6 +- .../elasticsearch/core/RequestFactory.java | 1 + .../MappingElasticsearchConverter.java | 1 + .../core/index/MappingBuilder.java | 21 ++----- .../elasticsearch/core/join/JoinField.java | 62 +++++++++---------- .../ElasticsearchPersistentEntity.java | 8 +-- .../SimpleElasticsearchPersistentEntity.java | 10 +-- .../elasticsearch/core/query/IndexQuery.java | 1 + .../core/query/IndexQueryBuilder.java | 1 + .../data/elasticsearch/Utils.java | 2 +- .../core/ElasticsearchRestTemplateTests.java | 15 ++--- .../core/ElasticsearchTemplateTests.java | 59 +++++++++--------- 14 files changed, 95 insertions(+), 103 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/JoinTypeRelation.java b/src/main/java/org/springframework/data/elasticsearch/annotations/JoinTypeRelation.java index f3e75d439..05863d1e7 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/JoinTypeRelation.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/JoinTypeRelation.java @@ -17,7 +17,6 @@ package org.springframework.data.elasticsearch.annotations; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @@ -31,7 +30,7 @@ import java.lang.annotation.Target; @Target(ElementType.ANNOTATION_TYPE) public @interface JoinTypeRelation { - String parent(); + String parent(); - String[] children(); -} \ No newline at end of file + String[] children(); +} diff --git a/src/main/java/org/springframework/data/elasticsearch/annotations/JoinTypeRelations.java b/src/main/java/org/springframework/data/elasticsearch/annotations/JoinTypeRelations.java index d550a0888..072b984b9 100644 --- a/src/main/java/org/springframework/data/elasticsearch/annotations/JoinTypeRelations.java +++ b/src/main/java/org/springframework/data/elasticsearch/annotations/JoinTypeRelations.java @@ -32,5 +32,5 @@ import java.lang.annotation.Target; @Inherited public @interface JoinTypeRelations { - JoinTypeRelation[] relations(); -} \ No newline at end of file + JoinTypeRelation[] relations(); +} diff --git a/src/main/java/org/springframework/data/elasticsearch/core/AbstractElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/AbstractElasticsearchTemplate.java index 9819cc9fe..59702cb64 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/AbstractElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/AbstractElasticsearchTemplate.java @@ -39,8 +39,6 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.data.convert.EntityReader; import org.springframework.data.elasticsearch.BulkFailureException; -import org.springframework.data.elasticsearch.core.join.JoinField; -import org.springframework.data.elasticsearch.annotations.JoinTypeRelations; import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter; import org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter; import org.springframework.data.elasticsearch.core.document.Document; @@ -48,6 +46,7 @@ import org.springframework.data.elasticsearch.core.document.SearchDocumentRespon import org.springframework.data.elasticsearch.core.event.AfterConvertCallback; import org.springframework.data.elasticsearch.core.event.AfterSaveCallback; import org.springframework.data.elasticsearch.core.event.BeforeConvertCallback; +import org.springframework.data.elasticsearch.core.join.JoinField; import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity; import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; @@ -76,6 +75,7 @@ import org.springframework.util.Assert; * @author Sascha Woo * @author Peter-Josef Meisch * @author Roman Puchkovskiy + * @author Subhobrata Dey */ public abstract class AbstractElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware { @@ -542,7 +542,7 @@ public abstract class AbstractElasticsearchTemplate implements ElasticsearchOper if (joinProperty != null) { Object joinField = persistentEntity.getPropertyAccessor(entity).getProperty(joinProperty); if (joinField != null && JoinField.class.isAssignableFrom(joinField.getClass()) - && ((JoinField) joinField).getParent() != null) { + && ((JoinField) joinField).getParent() != null) { return elasticsearchConverter.convertId(((JoinField) joinField).getParent()); } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java b/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java index a171d89bf..7497a1713 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java @@ -121,6 +121,7 @@ import org.springframework.util.StringUtils; * @author Peter-Josef Meisch * @author Sascha Woo * @author Roman Puchkovskiy + * @author Subhobrata Dey * @since 4.0 */ class RequestFactory { diff --git a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java index 82458e5e3..910092a02 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java @@ -77,6 +77,7 @@ import org.springframework.util.ObjectUtils; * @author Mark Paluch * @author Roman Puchkovskiy * @author Konrad Kurdej + * @author Subhobrata Dey * @since 3.2 */ public class MappingElasticsearchConverter diff --git a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java index a1b59ab23..2bc5a5b31 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/index/MappingBuilder.java @@ -32,18 +32,7 @@ import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.data.annotation.Transient; import org.springframework.data.elasticsearch.ElasticsearchException; -import org.springframework.data.elasticsearch.annotations.CompletionContext; -import org.springframework.data.elasticsearch.annotations.CompletionField; -import org.springframework.data.elasticsearch.annotations.DynamicMapping; -import org.springframework.data.elasticsearch.annotations.DynamicTemplates; -import org.springframework.data.elasticsearch.annotations.Field; -import org.springframework.data.elasticsearch.annotations.FieldType; -import org.springframework.data.elasticsearch.annotations.GeoPointField; -import org.springframework.data.elasticsearch.annotations.InnerField; -import org.springframework.data.elasticsearch.annotations.JoinTypeRelation; -import org.springframework.data.elasticsearch.annotations.JoinTypeRelations; -import org.springframework.data.elasticsearch.annotations.Mapping; -import org.springframework.data.elasticsearch.annotations.MultiField; +import org.springframework.data.elasticsearch.annotations.*; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.data.elasticsearch.core.ResourceUtil; import org.springframework.data.elasticsearch.core.completion.Completion; @@ -347,13 +336,13 @@ public class MappingBuilder { builder.endObject(); } - private void addJoinFieldMapping(XContentBuilder builder, - ElasticsearchPersistentProperty property) throws IOException { + private void addJoinFieldMapping(XContentBuilder builder, ElasticsearchPersistentProperty property) + throws IOException { JoinTypeRelation[] joinTypeRelations = property.getRequiredAnnotation(JoinTypeRelations.class).relations(); if (joinTypeRelations.length == 0) { logger.warn("Property {}s type is JoinField but its annotation JoinTypeRelation is " + // - "not properly maintained", // + "not properly maintained", // property.getFieldName()); return; } @@ -363,7 +352,7 @@ public class MappingBuilder { builder.startObject(JOIN_TYPE_RELATIONS); - for (JoinTypeRelation joinTypeRelation: joinTypeRelations) { + for (JoinTypeRelation joinTypeRelation : joinTypeRelations) { String parent = joinTypeRelation.parent(); String[] children = joinTypeRelation.children(); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/join/JoinField.java b/src/main/java/org/springframework/data/elasticsearch/core/join/JoinField.java index 6792f0d77..9a08dbadd 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/join/JoinField.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/join/JoinField.java @@ -15,53 +15,53 @@ */ package org.springframework.data.elasticsearch.core.join; -import org.springframework.lang.Nullable; - import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.springframework.lang.Nullable; + /** * @author Subhobrata Dey * @since 4.1 */ public class JoinField { - private final String name; + private final String name; - @Nullable private ID parent; + @Nullable private ID parent; - public JoinField() { - this("default", null); - } + public JoinField() { + this("default", null); + } - public JoinField(String name) { - this(name, null); - } + public JoinField(String name) { + this(name, null); + } - public JoinField(String name, @Nullable ID parent) { - this.name = name; - this.parent = parent; - } + public JoinField(String name, @Nullable ID parent) { + this.name = name; + this.parent = parent; + } - public void setParent(@Nullable ID parent) { - this.parent = parent; - } + public void setParent(@Nullable ID parent) { + this.parent = parent; + } - @Nullable - public ID getParent() { - return parent; - } + @Nullable + public ID getParent() { + return parent; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public Map getAsMap() { - Map joinMap = new HashMap<>(); - joinMap.put("name", getName()); - joinMap.put("parent", getParent()); + public Map getAsMap() { + Map joinMap = new HashMap<>(); + joinMap.put("name", getName()); + joinMap.put("parent", getParent()); - return Collections.unmodifiableMap(joinMap); - } -} \ No newline at end of file + return Collections.unmodifiableMap(joinMap); + } +} diff --git a/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java b/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java index fcbea9724..ddad0ad52 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/mapping/ElasticsearchPersistentEntity.java @@ -122,8 +122,8 @@ public interface ElasticsearchPersistentEntity extends PersistentEntity extends PersistentEntity extends BasicPersistentEntity implements ElasticsearchPersistentEntity { @@ -237,10 +238,11 @@ public class SimpleElasticsearchPersistentEntity extends BasicPersistentEntit ElasticsearchPersistentProperty joinProperty = this.joinFieldProperty; if (joinProperty != null) { - throw new MappingException(String.format( - "Attempt to add Join property %s but already have property %s registered " - + "as Join property. Check your entity configuration!", - property.getField(), joinProperty.getField())); + throw new MappingException( + String.format( + "Attempt to add Join property %s but already have property %s registered " + + "as Join property. Check your entity configuration!", + property.getField(), joinProperty.getField())); } this.joinFieldProperty = property; diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/IndexQuery.java b/src/main/java/org/springframework/data/elasticsearch/core/query/IndexQuery.java index 8370c6ea4..fb5e00b31 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/IndexQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/IndexQuery.java @@ -24,6 +24,7 @@ import org.springframework.lang.Nullable; * @author Mohsin Husen * @author Peter-Josef Meisch * @author Roman Puchkovskiy + * @author Subhobrata Dey */ public class IndexQuery { diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/IndexQueryBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/query/IndexQueryBuilder.java index 08b6317c4..2ac6926ba 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/IndexQueryBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/IndexQueryBuilder.java @@ -24,6 +24,7 @@ import org.springframework.lang.Nullable; * @author Mohsin Husen * @author Peter-Josef Meisch * @author Roman Puchkovskiy + * @author Subhobrata Dey */ public class IndexQueryBuilder { diff --git a/src/test/java/org/springframework/data/elasticsearch/Utils.java b/src/test/java/org/springframework/data/elasticsearch/Utils.java index 7875f2b82..3aedcabb9 100644 --- a/src/test/java/org/springframework/data/elasticsearch/Utils.java +++ b/src/test/java/org/springframework/data/elasticsearch/Utils.java @@ -16,7 +16,6 @@ package org.springframework.data.elasticsearch; import java.util.Arrays; -import java.util.Collections; import java.util.UUID; import org.elasticsearch.client.Client; @@ -33,6 +32,7 @@ import org.springframework.data.elasticsearch.client.NodeClientFactoryBean; * @author Ilkang Na * @author Peter-Josef Meisch * @author Roman Puchkovskiy + * @author Subhobrata Dey */ public class Utils { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java index 4f576a65b..e773fa98a 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplateTests.java @@ -19,28 +19,25 @@ import static org.assertj.core.api.Assertions.*; import static org.springframework.data.elasticsearch.annotations.FieldType.*; import static org.springframework.data.elasticsearch.utils.IdGenerator.*; -import lombok.*; +import lombok.Builder; +import lombok.Data; +import lombok.val; import java.lang.Object; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import org.elasticsearch.action.support.ActiveShardCount; import org.elasticsearch.action.support.WriteRequest; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.common.unit.TimeValue; -import org.elasticsearch.index.query.SimpleQueryStringBuilder; import org.junit.jupiter.api.Test; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.UncategorizedElasticsearchException; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; -import org.springframework.data.elasticsearch.annotations.JoinTypeRelation; -import org.springframework.data.elasticsearch.annotations.JoinTypeRelations; -import org.springframework.data.elasticsearch.core.join.JoinField; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; -import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.UpdateQuery; import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration; import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest; diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java index 0f0b1d591..7137b3b4f 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -50,7 +50,6 @@ import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.cluster.metadata.AliasMetadata; import org.elasticsearch.index.VersionType; -import org.elasticsearch.index.query.SimpleQueryStringBuilder; import org.elasticsearch.join.query.ParentIdQueryBuilder; import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptType; @@ -71,8 +70,15 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Order; import org.springframework.data.elasticsearch.ElasticsearchException; -import org.springframework.data.elasticsearch.annotations.*; +import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.FieldType; +import org.springframework.data.elasticsearch.annotations.InnerField; +import org.springframework.data.elasticsearch.annotations.JoinTypeRelation; +import org.springframework.data.elasticsearch.annotations.JoinTypeRelations; +import org.springframework.data.elasticsearch.annotations.MultiField; +import org.springframework.data.elasticsearch.annotations.Score; +import org.springframework.data.elasticsearch.annotations.ScriptedField; import org.springframework.data.elasticsearch.core.geo.GeoPoint; import org.springframework.data.elasticsearch.core.index.AliasAction; import org.springframework.data.elasticsearch.core.index.AliasActionParameters; @@ -81,7 +87,6 @@ import org.springframework.data.elasticsearch.core.index.AliasData; import org.springframework.data.elasticsearch.core.join.JoinField; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.*; -import org.springframework.data.elasticsearch.core.query.Query; import org.springframework.data.util.StreamUtils; import org.springframework.lang.Nullable; @@ -108,6 +113,7 @@ import org.springframework.lang.Nullable; * @author Farid Azaza * @author Gyula Attila Csorogi * @author Roman Puchkovskiy + * @author Subhobrata Dey */ public abstract class ElasticsearchTemplateTests { @@ -138,9 +144,9 @@ public abstract class ElasticsearchTemplateTests { indexOpsSearchHitsEntity.create(); indexOpsSearchHitsEntity.putMapping(SearchHitsEntity.class); - IndexOperations indexOpsJoinEntity = operations.indexOps(ElasticsearchRestTemplateTests.SampleJoinEntity.class); + IndexOperations indexOpsJoinEntity = operations.indexOps(SampleJoinEntity.class); indexOpsJoinEntity.create(); - indexOpsJoinEntity.putMapping(ElasticsearchRestTemplateTests.SampleJoinEntity.class); + indexOpsJoinEntity.putMapping(SampleJoinEntity.class); } @AfterEach @@ -3350,14 +3356,14 @@ public abstract class ElasticsearchTemplateTests { myAJoinField2.setParent(qId1); sampleAnswerEntity2.setMyJoinField(myAJoinField2); - operations.save(Arrays.asList(sampleQuestionEntity1, sampleQuestionEntity2, - sampleAnswerEntity1, sampleAnswerEntity2), IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)); - indexOperations.refresh(); - Thread.sleep(5000); + operations.save( + Arrays.asList(sampleQuestionEntity1, sampleQuestionEntity2, sampleAnswerEntity1, sampleAnswerEntity2), + IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)); + operations.indexOps(IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)).refresh(); - SearchHits hits = operations.search(new NativeSearchQueryBuilder().withQuery( - new ParentIdQueryBuilder("answer", qId1)) - .build(), SampleJoinEntity.class); + SearchHits hits = operations.search( + new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId1)).build(), + SampleJoinEntity.class); List hitIds = hits.getSearchHits().stream().map(new Function, String>() { @Override @@ -3376,8 +3382,7 @@ public abstract class ElasticsearchTemplateTests { document.put("myJoinField", new JoinField<>("answer", qId2).getAsMap()); UpdateQuery updateQuery = UpdateQuery.builder(aId2) // .withDocument(document) // - .withRouting(qId2) - .build(); + .withRouting(qId2).build(); List queries = new ArrayList<>(); queries.add(updateQuery); @@ -3387,9 +3392,9 @@ public abstract class ElasticsearchTemplateTests { indexOperations.refresh(); Thread.sleep(5000); - SearchHits updatedHits = operations.search(new NativeSearchQueryBuilder().withQuery( - new ParentIdQueryBuilder("answer", qId2)) - .build(), SampleJoinEntity.class); + SearchHits updatedHits = operations.search( + new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId2)).build(), + SampleJoinEntity.class); List hitIds = updatedHits.getSearchHits().stream().map(new Function, String>() { @Override @@ -3400,9 +3405,9 @@ public abstract class ElasticsearchTemplateTests { assertThat(hitIds.size()).isEqualTo(1); assertThat(hitIds.get(0)).isEqualTo(aId2); - updatedHits = operations.search(new NativeSearchQueryBuilder().withQuery( - new ParentIdQueryBuilder("answer", qId1)) - .build(), SampleJoinEntity.class); + updatedHits = operations.search( + new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId1)).build(), + SampleJoinEntity.class); hitIds = updatedHits.getSearchHits().stream().map(new Function, String>() { @Override @@ -3415,17 +3420,15 @@ public abstract class ElasticsearchTemplateTests { } void shouldDeleteEntityWithJoinFields(String qId2, String aId2) throws Exception { - Query query = new NativeSearchQueryBuilder() - .withQuery(new ParentIdQueryBuilder("answer", qId2)) - .withRoute(qId2) + Query query = new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId2)).withRoute(qId2) .build(); operations.delete(query, SampleJoinEntity.class, IndexCoordinates.of(INDEX_NAME_JOIN_SAMPLE_ENTITY)); indexOperations.refresh(); Thread.sleep(5000); - SearchHits deletedHits = operations.search(new NativeSearchQueryBuilder().withQuery( - new ParentIdQueryBuilder("answer", qId2)) - .build(), SampleJoinEntity.class); + SearchHits deletedHits = operations.search( + new NativeSearchQueryBuilder().withQuery(new ParentIdQueryBuilder("answer", qId2)).build(), + SampleJoinEntity.class); List hitIds = deletedHits.getSearchHits().stream().map(new Function, String>() { @Override @@ -3625,9 +3628,7 @@ public abstract class ElasticsearchTemplateTests { static class SampleJoinEntity { @Id @Field(type = Keyword) private String uuid; @JoinTypeRelations(relations = { - @JoinTypeRelation(parent = "question", children = {"answer"}) - }) - private JoinField myJoinField; + @JoinTypeRelation(parent = "question", children = { "answer" }) }) private JoinField myJoinField; @Field(type = Text) private String text; } }