From b5bab6b85ebebdbf9985e75273bcd18e845c253b Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 30 Jun 2017 11:41:40 +0200 Subject: [PATCH] DATAES-369 - Adapt to API changes in mapping subsystem. --- .../core/DefaultResultMapper.java | 12 +++------ .../core/ElasticsearchTemplate.java | 26 +++++++++---------- .../ElasticsearchPersistentEntity.java | 8 +++--- .../SimpleElasticsearchPersistentEntity.java | 22 ++++++++-------- .../AbstractElasticsearchRepository.java | 2 +- ...MappingElasticsearchEntityInformation.java | 25 ++++-------------- ...pleElasticsearchPersistentEntityTests.java | 2 +- 7 files changed, 37 insertions(+), 60 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java b/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java index d19f4637d..3e21c5e79 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/DefaultResultMapper.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; -import java.util.Optional; import org.apache.commons.lang.StringUtils; import org.elasticsearch.action.get.GetResponse; @@ -176,15 +175,12 @@ public class DefaultResultMapper extends AbstractResultMapper { if (mappingContext != null && clazz.isAnnotationPresent(Document.class)) { ElasticsearchPersistentEntity persistentEntity = mappingContext.getRequiredPersistentEntity(clazz); - Optional idProperty = persistentEntity.getIdProperty(); + ElasticsearchPersistentProperty idProperty = persistentEntity.getIdProperty(); // Only deal with String because ES generated Ids are strings ! - - idProperty.ifPresent(property -> { - if (property.getType().isAssignableFrom(String.class)) { - persistentEntity.getPropertyAccessor(result).setProperty(property, Optional.ofNullable(id)); - } - }); + if (idProperty != null && idProperty.getType().isAssignableFrom(String.class)) { + persistentEntity.getPropertyAccessor(result).setProperty(idProperty, id); + } } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 84138fa99..aa07828c0 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -26,7 +26,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; -import java.util.Optional; import org.elasticsearch.action.ListenableActionFuture; import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest; import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest; @@ -187,12 +186,10 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati XContentBuilder xContentBuilder = null; try { - Optional idProperty = persistentEntity.getIdProperty(); - - ElasticsearchPersistentProperty property = idProperty.orElseThrow(() -> new IllegalArgumentException(String.format("No Id property for %s found", clazz.getSimpleName()))); + ElasticsearchPersistentProperty property = persistentEntity.getRequiredIdProperty(); xContentBuilder = buildMapping(clazz, persistentEntity.getIndexType(), - property.getFieldName(), persistentEntity.getParentType().orElse(null)); + property.getFieldName(), persistentEntity.getParentType()); } catch (Exception e) { throw new ElasticsearchException("Failed to build mapping for " + clazz.getSimpleName(), e); } @@ -1102,24 +1099,25 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, Applicati private String getPersistentEntityId(Object entity) { ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(entity.getClass()); - Optional identifier = persistentEntity.getIdentifierAccessor(entity).getIdentifier(); + Object identifier = persistentEntity.getIdentifierAccessor(entity).getIdentifier(); - return identifier.map(String::valueOf).orElse(null); + if (identifier != null){ + return identifier.toString(); + } + + return null; } private void setPersistentEntityId(Object entity, String id) { ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(entity.getClass()); - Optional idProperty = persistentEntity.getIdProperty(); + ElasticsearchPersistentProperty idProperty = persistentEntity.getIdProperty(); // Only deal with text because ES generated Ids are strings ! - idProperty.ifPresent(property -> { - - if (property.getType().isAssignableFrom(String.class)) { - persistentEntity.getPropertyAccessor(entity).setProperty(property, Optional.ofNullable(id)); - } - }); + if (idProperty != null && idProperty.getType().isAssignableFrom(String.class)) { + persistentEntity.getPropertyAccessor(entity).setProperty(idProperty, id); + } } private void setPersistentEntityIndexAndType(Query query, Class clazz) { 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 fe7a8484c..2769189f2 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 @@ -15,8 +15,6 @@ */ package org.springframework.data.elasticsearch.core.mapping; -import java.util.Optional; - import org.springframework.data.mapping.PersistentEntity; /** @@ -42,11 +40,11 @@ public interface ElasticsearchPersistentEntity extends PersistentEntity getVersionProperty(); + ElasticsearchPersistentProperty getVersionProperty(); - Optional getParentType(); + String getParentType(); - Optional getParentIdProperty(); + ElasticsearchPersistentProperty getParentIdProperty(); String settingPath(); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntity.java b/src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntity.java index f7dee0249..9839748d3 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntity.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntity.java @@ -57,8 +57,8 @@ public class SimpleElasticsearchPersistentEntity extends BasicPersistentEntit private short replicas; private String refreshInterval; private String indexStoreType; - private Optional parentType = Optional.empty(); - private Optional parentIdProperty = Optional.empty(); + private String parentType; + private ElasticsearchPersistentProperty parentIdProperty; private String settingPath; private boolean createIndexAndMapping; @@ -131,12 +131,12 @@ public class SimpleElasticsearchPersistentEntity extends BasicPersistentEntit } @Override - public Optional getParentType() { + public String getParentType() { return parentType; } @Override - public Optional getParentIdProperty() { + public ElasticsearchPersistentProperty getParentIdProperty() { return parentIdProperty; } @@ -154,15 +154,15 @@ public class SimpleElasticsearchPersistentEntity extends BasicPersistentEntit public void addPersistentProperty(ElasticsearchPersistentProperty property) { super.addPersistentProperty(property); - Optional annotation = property.findAnnotation(Parent.class); + Parent annotation = property.findAnnotation(Parent.class); - annotation.ifPresent(parent -> { - Assert.isTrue(!this.parentIdProperty.isPresent(), "Only one field can hold a @Parent annotation"); - Assert.isTrue(!this.parentType.isPresent(), "Only one field can hold a @Parent annotation"); + if (annotation != null) { + Assert.isNull(this.parentIdProperty, "Only one field can hold a @Parent annotation"); + Assert.isNull(this.parentType, "Only one field can hold a @Parent annotation"); Assert.isTrue(property.getType() == String.class, "Parent ID property should be String"); - this.parentIdProperty = Optional.of(property); - this.parentType = Optional.of(parent.type()); - }); + this.parentIdProperty = property; + this.parentType = annotation.type(); + } if (property.isVersionProperty()) { Assert.isTrue(property.getType() == Long.class, "Version property should be Long"); diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java index 58e03949f..065d85f8e 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java @@ -316,7 +316,7 @@ public abstract class AbstractElasticsearchRepository stringIdsRepresentation(Iterable ids) { diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/MappingElasticsearchEntityInformation.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/MappingElasticsearchEntityInformation.java index c1c52768a..34dbd6655 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/MappingElasticsearchEntityInformation.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/MappingElasticsearchEntityInformation.java @@ -15,8 +15,6 @@ */ package org.springframework.data.elasticsearch.repository.support; -import java.util.Optional; - import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity; import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty; import org.springframework.data.repository.core.support.PersistentEntityInformation; @@ -59,13 +57,7 @@ public class MappingElasticsearchEntityInformation extends PersistentEnti @Override public String getIdAttribute() { - - ElasticsearchPersistentProperty property = entityMetadata.getIdProperty() - .orElseThrow(() -> new IllegalArgumentException(String.format( - "Unable to identify 'id' property in class %s. Make sure the 'id' property is annotated with @Id or named as 'id' or 'documentId'", - entityMetadata.getType().getSimpleName()))); - - return property.getFieldName(); + return entityMetadata.getRequiredIdProperty().getFieldName(); } @Override @@ -81,13 +73,9 @@ public class MappingElasticsearchEntityInformation extends PersistentEnti @Override public Long getVersion(T entity) { - Optional versionProperty = entityMetadata.getVersionProperty(); + ElasticsearchPersistentProperty versionProperty = entityMetadata.getVersionProperty(); try { - - return (Long) versionProperty // - .flatMap(property -> entityMetadata.getPropertyAccessor(entity).getProperty(property)) // - .orElse(null); - + return versionProperty != null ? (Long) entityMetadata.getPropertyAccessor(entity).getProperty(versionProperty) : null; } catch (Exception e) { throw new IllegalStateException("failed to load version field", e); } @@ -96,12 +84,9 @@ public class MappingElasticsearchEntityInformation extends PersistentEnti @Override public String getParentId(T entity) { - Optional parentProperty = entityMetadata.getParentIdProperty(); + ElasticsearchPersistentProperty parentProperty = entityMetadata.getParentIdProperty(); try { - - return (String) parentProperty // - .flatMap(property -> entityMetadata.getPropertyAccessor(entity).getProperty(property)) // - .orElse(null); + return parentProperty != null ? (String) entityMetadata.getPropertyAccessor(entity).getProperty(parentProperty) : null; } catch (Exception e) { throw new IllegalStateException("failed to load parent ID: " + e, e); } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntityTests.java b/src/test/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntityTests.java index 288ae2275..983791d91 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntityTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchPersistentEntityTests.java @@ -19,7 +19,7 @@ import java.beans.IntrospectionException; import org.junit.Test; import org.springframework.data.annotation.Version; -import org.springframework.data.mapping.model.MappingException; +import org.springframework.data.mapping.MappingException; import org.springframework.data.mapping.model.Property; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.util.ClassTypeInformation;