diff --git a/src/main/java/org/springframework/data/ldap/repository/LdapRepository.java b/src/main/java/org/springframework/data/ldap/repository/LdapRepository.java index 61ca70b..c07e9f2 100644 --- a/src/main/java/org/springframework/data/ldap/repository/LdapRepository.java +++ b/src/main/java/org/springframework/data/ldap/repository/LdapRepository.java @@ -15,6 +15,7 @@ */ package org.springframework.data.ldap.repository; +import java.util.List; import java.util.Optional; import javax.naming.Name; @@ -23,13 +24,34 @@ import org.springframework.data.repository.CrudRepository; import org.springframework.ldap.query.LdapQuery; /** - * Ldap specific extensions to CrudRepository. + * Ldap specific extensions to {@link CrudRepository}. * * @author Mattias Hellborg Arthursson * @author Mark Paluch */ public interface LdapRepository extends CrudRepository { + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#saveAll(java.lang.Iterable) + */ + @Override + List saveAll(Iterable entities); + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#findAll() + */ + @Override + List findAll(); + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#findAllById() + */ + @Override + List findAllById(Iterable names); + /** * Find one entry matching the specified query. * diff --git a/src/main/java/org/springframework/data/ldap/repository/package-info.java b/src/main/java/org/springframework/data/ldap/repository/package-info.java new file mode 100644 index 0000000..4390d1e --- /dev/null +++ b/src/main/java/org/springframework/data/ldap/repository/package-info.java @@ -0,0 +1,5 @@ +/** + * LDAP specific repository implementation. + */ +@org.springframework.lang.NonNullApi +package org.springframework.data.ldap.repository; diff --git a/src/main/java/org/springframework/data/ldap/repository/support/LdapRepositoryFactory.java b/src/main/java/org/springframework/data/ldap/repository/support/LdapRepositoryFactory.java index b80e9b2..bd49aeb 100644 --- a/src/main/java/org/springframework/data/ldap/repository/support/LdapRepositoryFactory.java +++ b/src/main/java/org/springframework/data/ldap/repository/support/LdapRepositoryFactory.java @@ -96,7 +96,8 @@ public class LdapRepositoryFactory extends RepositoryFactorySupport { information.getDomainType()); } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.repository.core.support.RepositoryFactorySupport#getQueryLookupStrategy(org.springframework.data.repository.query.QueryLookupStrategy.Key, org.springframework.data.repository.query.EvaluationContextProvider) */ @Override diff --git a/src/main/java/org/springframework/data/ldap/repository/support/SimpleLdapRepository.java b/src/main/java/org/springframework/data/ldap/repository/support/SimpleLdapRepository.java index fe3497c..1db2581 100644 --- a/src/main/java/org/springframework/data/ldap/repository/support/SimpleLdapRepository.java +++ b/src/main/java/org/springframework/data/ldap/repository/support/SimpleLdapRepository.java @@ -15,6 +15,15 @@ */ package org.springframework.data.ldap.repository.support; +import static org.springframework.ldap.query.LdapQueryBuilder.*; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import javax.naming.Name; + import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.domain.Persistable; import org.springframework.data.ldap.repository.LdapRepository; @@ -28,14 +37,6 @@ import org.springframework.ldap.odm.core.ObjectDirectoryMapper; import org.springframework.ldap.query.LdapQuery; import org.springframework.util.Assert; -import javax.naming.Name; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.StreamSupport; - -import static org.springframework.ldap.query.LdapQueryBuilder.*; - /** * Base repository implementation for LDAP. * @@ -55,8 +56,8 @@ public class SimpleLdapRepository implements LdapRepository { * Creates a new {@link SimpleLdapRepository}. * * @param ldapOperations must not be {@literal null}. - * @param odm must not be {@literal null}. - * @param entityType must not be {@literal null}. + * @param odm must not be {@literal null}. + * @param entityType must not be {@literal null}. */ public SimpleLdapRepository(LdapOperations ldapOperations, ObjectDirectoryMapper odm, Class entityType) { @@ -69,31 +70,12 @@ public class SimpleLdapRepository implements LdapRepository { this.entityType = entityType; } - /* (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#count() - */ - @Override - public long count() { + // ------------------------------------------------------------------------- + // Methods from CrudRepository + // ------------------------------------------------------------------------- - Filter filter = odm.filterFor(entityType, null); - CountNameClassPairCallbackHandler callback = new CountNameClassPairCallbackHandler(); - LdapQuery query = query().attributes(OBJECTCLASS_ATTRIBUTE).filter(filter); - ldapOperations.search(query, callback); - - return callback.getNoOfRows(); - } - - private boolean isNew(S entity, @Nullable Name id) { - - if (entity instanceof Persistable) { - Persistable persistable = (Persistable) entity; - return persistable.isNew(); - } else { - return id == null; - } - } - - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object) */ @Override @@ -112,18 +94,20 @@ public class SimpleLdapRepository implements LdapRepository { return entity; } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.repository.CrudRepository#saveAll(java.lang.Iterable) */ @Override - public Iterable saveAll(Iterable entities) { + public List saveAll(Iterable entities) { return StreamSupport.stream(entities.spliterator(), false) // .map(this::save) // .collect(Collectors.toList()); } - /* (non-Javadoc) + /* + * (non-Javadoc) * @see org.springframework.data.repository.CrudRepository#findById(java.io.Serializable) */ @Override @@ -138,17 +122,118 @@ public class SimpleLdapRepository implements LdapRepository { } } - /* (non-Javadoc) - * @see org.springframework.data.ldap.repository.LdapRepository#findAll(org.springframework.ldap.query.LdapQuery) + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#existsById(java.io.Serializable) */ @Override - public List findAll(LdapQuery ldapQuery) { + public boolean existsById(Name name) { - Assert.notNull(ldapQuery, "LdapQuery must not be null"); - return ldapOperations.find(ldapQuery, entityType); + Assert.notNull(name, "Id must not be null"); + + return findById(name).isPresent(); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#findAll() + */ + @Override + public List findAll() { + return ldapOperations.findAll(entityType); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#findAllById(java.lang.Iterable) + */ + @Override + public List findAllById(Iterable names) { + + return StreamSupport.stream(names.spliterator(), false) // + .map(this::findById) // + .flatMap(Optionals::toStream) // + .collect(Collectors.toList()); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#count() + */ + @Override + public long count() { + + Filter filter = odm.filterFor(entityType, null); + CountNameClassPairCallbackHandler callback = new CountNameClassPairCallbackHandler(); + LdapQuery query = query().attributes(OBJECTCLASS_ATTRIBUTE).filter(filter); + ldapOperations.search(query, callback); + + return callback.getNoOfRows(); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#deleteById(java.io.Serializable) + */ + @Override + public void deleteById(Name name) { + + Assert.notNull(name, "Id must not be null"); + + ldapOperations.unbind(name); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#delete(java.lang.Object) + */ + @Override + public void delete(T entity) { + + Assert.notNull(entity, "Entity must not be null"); + + ldapOperations.delete(entity); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#deleteAllById(java.lang.Iterable) + */ + @Override + public void deleteAllById(Iterable names) { + + Assert.notNull(names, "Names must not be null."); + + names.forEach(this::deleteById); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#deleteAll(java.lang.Iterable) + */ + @Override + public void deleteAll(Iterable entities) { + + Assert.notNull(entities, "Entities must not be null."); + + entities.forEach(this::delete); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.repository.CrudRepository#deleteAll() + */ + @Override + public void deleteAll() { + deleteAll(findAll()); + } + + // ------------------------------------------------------------------------- + // Methods from LdapRepository + // ------------------------------------------------------------------------ + + /* + * (non-Javadoc) * @see org.springframework.data.ldap.repository.LdapRepository#findOne(org.springframework.ldap.query.LdapQuery) */ @Override @@ -163,83 +248,27 @@ public class SimpleLdapRepository implements LdapRepository { } } - /* (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#existsById(java.io.Serializable) + /* + * (non-Javadoc) + * @see org.springframework.data.ldap.repository.LdapRepository#findAll(org.springframework.ldap.query.LdapQuery) */ @Override - public boolean existsById(Name name) { + public List findAll(LdapQuery ldapQuery) { - Assert.notNull(name, "Id must not be null"); - - return findById(name).isPresent(); + Assert.notNull(ldapQuery, "LdapQuery must not be null"); + return ldapOperations.find(ldapQuery, entityType); } - /* (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#findAll() - */ - @Override - public List findAll() { - return ldapOperations.findAll(entityType); + + private boolean isNew(S entity, @Nullable Name id) { + + if (entity instanceof Persistable) { + Persistable persistable = (Persistable) entity; + return persistable.isNew(); + } else { + return id == null; + } } - /* (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#findAllById(java.lang.Iterable) - */ - @Override - public List findAllById(final Iterable names) { - return StreamSupport.stream(names.spliterator(), false) // - .map(this::findById) // - .flatMap(Optionals::toStream) // - .collect(Collectors.toList()); - } - - /* (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#deleteById(java.io.Serializable) - */ - @Override - public void deleteById(Name name) { - - Assert.notNull(name, "Id must not be null"); - - ldapOperations.unbind(name); - } - - /* (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#delete(java.lang.Object) - */ - @Override - public void delete(T entity) { - - Assert.notNull(entity, "Entity must not be null"); - - ldapOperations.delete(entity); - } - - /* (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#deleteAll(java.lang.Iterable) - */ - @Override - public void deleteAll(Iterable entities) { - - Assert.notNull(entities, "Entities must not be null."); - - entities.forEach(this::delete); - } - - @Override - public void deleteAllById(Iterable names) { - - Assert.notNull(names, "Names must not be null."); - - names.forEach(this::deleteById); - } - - /* (non-Javadoc) - * @see org.springframework.data.repository.CrudRepository#deleteAll() - */ - @Override - public void deleteAll() { - deleteAll(findAll()); - } }