From db9d256a4f177e4b77f5ede651d2df6108b65b4c Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Tue, 15 Feb 2022 15:52:19 +0100 Subject: [PATCH] Adapt to changes in entity creation metadata APIs in Spring Data Commons. --- .../query/DtoInstantiatingConverter.java | 101 ------------------ .../repository/query/LdapQueryExecution.java | 1 + .../QuerydslLdapPredicateExecutor.java | 2 +- 3 files changed, 2 insertions(+), 102 deletions(-) delete mode 100644 src/main/java/org/springframework/data/ldap/repository/query/DtoInstantiatingConverter.java diff --git a/src/main/java/org/springframework/data/ldap/repository/query/DtoInstantiatingConverter.java b/src/main/java/org/springframework/data/ldap/repository/query/DtoInstantiatingConverter.java deleted file mode 100644 index 6b57511..0000000 --- a/src/main/java/org/springframework/data/ldap/repository/query/DtoInstantiatingConverter.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2015-2021 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.ldap.repository.query; - -import org.springframework.core.convert.converter.Converter; -import org.springframework.data.mapping.PersistentEntity; -import org.springframework.data.mapping.PersistentProperty; -import org.springframework.data.mapping.PersistentPropertyAccessor; -import org.springframework.data.mapping.PreferredConstructor; -import org.springframework.data.mapping.PreferredConstructor.Parameter; -import org.springframework.data.mapping.SimplePropertyHandler; -import org.springframework.data.mapping.context.MappingContext; -import org.springframework.data.mapping.model.EntityInstantiator; -import org.springframework.data.mapping.model.EntityInstantiators; -import org.springframework.data.mapping.model.ParameterValueProvider; -import org.springframework.util.Assert; - -/** - * {@link Converter} to instantiate DTOs from fully equipped domain objects. - * - * @author Mark Paluch - */ -public class DtoInstantiatingConverter implements Converter { - - private final Class targetType; - private final MappingContext, ? extends PersistentProperty> context; - private final EntityInstantiator instantiator; - - /** - * Creates a new {@link Converter} to instantiate DTOs. - * - * @param dtoType must not be {@literal null}. - * @param context must not be {@literal null}. - * @param entityInstantiators must not be {@literal null}. - */ - public DtoInstantiatingConverter(Class dtoType, - MappingContext, ? extends PersistentProperty> context, - EntityInstantiators entityInstantiators) { - - Assert.notNull(dtoType, "DTO type must not be null!"); - Assert.notNull(context, "MappingContext must not be null!"); - Assert.notNull(entityInstantiators, "EntityInstantiators must not be null!"); - - this.targetType = dtoType; - this.context = context; - this.instantiator = entityInstantiators.getInstantiatorFor(context.getRequiredPersistentEntity(dtoType)); - } - - /* - * (non-Javadoc) - * @see org.springframework.core.convert.converter.Converter#convert(java.lang.Object) - */ - @Override - @SuppressWarnings({ "rawtypes", "unchecked" }) - public Object convert(Object source) { - - if (targetType.isInterface()) { - return source; - } - - PersistentEntity sourceEntity = context.getRequiredPersistentEntity(source.getClass()); - PersistentPropertyAccessor sourceAccessor = sourceEntity.getPropertyAccessor(source); - PersistentEntity targetEntity = context.getRequiredPersistentEntity(targetType); - PreferredConstructor> constructor = targetEntity.getPersistenceConstructor(); - - Object dto = instantiator.createInstance(targetEntity, new ParameterValueProvider() { - - @Override - public Object getParameterValue(Parameter parameter) { - return sourceAccessor.getProperty(sourceEntity.getPersistentProperty(parameter.getName())); - } - }); - - PersistentPropertyAccessor dtoAccessor = targetEntity.getPropertyAccessor(dto); - - targetEntity.doWithProperties((SimplePropertyHandler) property -> { - - if (constructor.isConstructorParameter(property)) { - return; - } - - dtoAccessor.setProperty(property, - sourceAccessor.getProperty(sourceEntity.getPersistentProperty(property.getName()))); - }); - - return dto; - } -} diff --git a/src/main/java/org/springframework/data/ldap/repository/query/LdapQueryExecution.java b/src/main/java/org/springframework/data/ldap/repository/query/LdapQueryExecution.java index a39960c..1c6fc1d 100644 --- a/src/main/java/org/springframework/data/ldap/repository/query/LdapQueryExecution.java +++ b/src/main/java/org/springframework/data/ldap/repository/query/LdapQueryExecution.java @@ -17,6 +17,7 @@ package org.springframework.data.ldap.repository.query; import org.springframework.core.convert.converter.Converter; import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.data.convert.DtoInstantiatingConverter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.context.MappingContext; diff --git a/src/main/java/org/springframework/data/ldap/repository/support/QuerydslLdapPredicateExecutor.java b/src/main/java/org/springframework/data/ldap/repository/support/QuerydslLdapPredicateExecutor.java index 8aba774..852e58c 100644 --- a/src/main/java/org/springframework/data/ldap/repository/support/QuerydslLdapPredicateExecutor.java +++ b/src/main/java/org/springframework/data/ldap/repository/support/QuerydslLdapPredicateExecutor.java @@ -27,11 +27,11 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.springframework.dao.IncorrectResultSizeDataAccessException; +import org.springframework.data.convert.DtoInstantiatingConverter; import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.ldap.repository.query.DtoInstantiatingConverter; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.context.MappingContext;