diff --git a/core/build.gradle b/core/build.gradle index 64803946..da7a8879 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -10,7 +10,6 @@ idea.module.excludeDirs = [ dependencies { compile "commons-logging:commons-logging:$commonsLoggingVersion", - "commons-lang:commons-lang:$commonsLangVersion", "org.springframework:spring-core:$springVersion", "org.springframework:spring-beans:$springVersion", "org.springframework:spring-tx:$springVersion" @@ -22,6 +21,7 @@ dependencies { "org.springframework:spring-orm:$springVersion" testCompile "junit:junit:$junitVersion", + "commons-lang:commons-lang:$commonsLangVersion", "gsbase:gsbase:$gsbaseVersion", "org.mockito:mockito-core:$mockitoVersion" } diff --git a/core/src/main/java/org/springframework/ldap/authentication/DefaultValuesAuthenticationSourceDecorator.java b/core/src/main/java/org/springframework/ldap/authentication/DefaultValuesAuthenticationSourceDecorator.java index 1d9ea7b8..4cb2bd1f 100644 --- a/core/src/main/java/org/springframework/ldap/authentication/DefaultValuesAuthenticationSourceDecorator.java +++ b/core/src/main/java/org/springframework/ldap/authentication/DefaultValuesAuthenticationSourceDecorator.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,10 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.authentication; -import org.apache.commons.lang.StringUtils; +import org.springframework.util.StringUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.ldap.core.AuthenticationSource; @@ -78,7 +77,7 @@ public class DefaultValuesAuthenticationSourceDecorator implements * defaultPassword otherwise. */ public String getCredentials() { - if (StringUtils.isNotEmpty(target.getPrincipal())) { + if (StringUtils.hasText(target.getPrincipal())) { return target.getCredentials(); } else { return defaultPassword; @@ -94,7 +93,7 @@ public class DefaultValuesAuthenticationSourceDecorator implements */ public String getPrincipal() { String principal = target.getPrincipal(); - if (StringUtils.isNotEmpty(principal)) { + if (StringUtils.hasText(principal)) { return principal; } else { return defaultUser; diff --git a/core/src/main/java/org/springframework/ldap/control/PagedResult.java b/core/src/main/java/org/springframework/ldap/control/PagedResult.java index 4d38cd1c..b401724f 100644 --- a/core/src/main/java/org/springframework/ldap/control/PagedResult.java +++ b/core/src/main/java/org/springframework/ldap/control/PagedResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -17,9 +17,6 @@ package org.springframework.ldap.control; import java.util.List; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; - /** * Bean to encapsulate a result List and a {@link PagedResultsCookie} to use for * returning the results when using {@link PagedResultsRequestControl}. @@ -65,28 +62,23 @@ public class PagedResult { return resultList; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - if (obj != null && this.getClass().equals(obj.getClass())) { - PagedResult that = (PagedResult) obj; - return new EqualsBuilder().append(this.resultList, that.resultList) - .append(this.cookie, that.cookie).isEquals(); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - return false; + PagedResult that = (PagedResult) o; + + if (cookie != null ? !cookie.equals(that.cookie) : that.cookie != null) return false; + if (resultList != null ? !resultList.equals(that.resultList) : that.resultList != null) return false; + + return true; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ + @Override public int hashCode() { - return new HashCodeBuilder().append(this.resultList) - .append(this.cookie).toHashCode(); + int result = resultList != null ? resultList.hashCode() : 0; + result = 31 * result + (cookie != null ? cookie.hashCode() : 0); + return result; } } diff --git a/core/src/main/java/org/springframework/ldap/control/PagedResultsCookie.java b/core/src/main/java/org/springframework/ldap/control/PagedResultsCookie.java index 470c1473..9ab314e2 100644 --- a/core/src/main/java/org/springframework/ldap/control/PagedResultsCookie.java +++ b/core/src/main/java/org/springframework/ldap/control/PagedResultsCookie.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,15 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.control; -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; - import com.sun.jndi.ldap.ctl.PagedResultsControl; +import java.util.Arrays; + /** * Wrapper class for the cookie returned when using the * {@link PagedResultsControl}. @@ -40,7 +37,11 @@ public class PagedResultsCookie { * the cookie returned by a PagedResultsResponseControl. */ public PagedResultsCookie(byte[] cookie) { - this.cookie = ArrayUtils.clone(cookie); + if (cookie != null) { + this.cookie = Arrays.copyOf(cookie, cookie.length); + } else { + this.cookie = null; + } } /** @@ -49,30 +50,27 @@ public class PagedResultsCookie { * @return the cookie. */ public byte[] getCookie() { - return ArrayUtils.clone(cookie); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - if (obj != null && this.getClass().equals(obj.getClass())) { - PagedResultsCookie that = (PagedResultsCookie) obj; - return new EqualsBuilder().append(this.cookie, that.cookie) - .isEquals(); + if (cookie != null) { + return Arrays.copyOf(cookie, cookie.length); + } else { + return null; } - - return false; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + PagedResultsCookie that = (PagedResultsCookie) o; + + if (!Arrays.equals(cookie, that.cookie)) return false; + + return true; + } + + @Override public int hashCode() { - return new HashCodeBuilder().append(this.cookie).toHashCode(); + return cookie != null ? Arrays.hashCode(cookie) : 0; } } diff --git a/core/src/main/java/org/springframework/ldap/core/ContextMapperCallbackHandler.java b/core/src/main/java/org/springframework/ldap/core/ContextMapperCallbackHandler.java index 1bf25f9e..0282d8ae 100644 --- a/core/src/main/java/org/springframework/ldap/core/ContextMapperCallbackHandler.java +++ b/core/src/main/java/org/springframework/ldap/core/ContextMapperCallbackHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,14 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.core; +import org.springframework.util.Assert; + import javax.naming.Binding; import javax.naming.NameClassPair; -import org.apache.commons.lang.Validate; - /** * A CollectingNameClassPairCallbackHandler to wrap a ContextMapper. That is, * the found object is extracted from each {@link Binding}, and then passed to @@ -41,7 +40,7 @@ public class ContextMapperCallbackHandler extends * the mapper to be called for each entry. */ public ContextMapperCallbackHandler(ContextMapper mapper) { - Validate.notNull(mapper, "Mapper must not be empty"); + Assert.notNull(mapper, "Mapper must not be empty"); this.mapper = mapper; } diff --git a/core/src/main/java/org/springframework/ldap/core/DirContextAdapter.java b/core/src/main/java/org/springframework/ldap/core/DirContextAdapter.java index 1e4ce734..393f92ad 100644 --- a/core/src/main/java/org/springframework/ldap/core/DirContextAdapter.java +++ b/core/src/main/java/org/springframework/ldap/core/DirContextAdapter.java @@ -13,16 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.core; -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.ldap.NoSuchAttributeException; import org.springframework.ldap.support.LdapUtils; +import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import javax.naming.Context; @@ -483,7 +480,7 @@ public class DirContextAdapter implements DirContextOperations { } else { // check all strings - if (!ArrayUtils.contains(values, obj)) { + if (!ObjectUtils.containsElement(values, obj)) { return true; } } @@ -513,7 +510,7 @@ public class DirContextAdapter implements DirContextOperations { } else { // check all strings - if (!ArrayUtils.contains(values, obj)) { + if (!ObjectUtils.containsElement(values, obj)) { return true; } } @@ -1300,26 +1297,36 @@ public class DirContextAdapter implements DirContextOperations { } - /** - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - // A subclass with identical values should NOT be considered equal. - // EqualsBuilder in commons-lang cannot handle subclasses correctly. - if (obj == null || obj.getClass() != this.getClass()) { - return false; - } - return EqualsBuilder.reflectionEquals(this, obj); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - /** - * @see Object#hashCode() - */ - public int hashCode() { - return HashCodeBuilder.reflectionHashCode(this); - } + DirContextAdapter that = (DirContextAdapter) o; - /** + if (updateMode != that.updateMode) return false; + if (base != null ? !base.equals(that.base) : that.base != null) return false; + if (dn != null ? !dn.equals(that.dn) : that.dn != null) return false; + if (originalAttrs != null ? !originalAttrs.equals(that.originalAttrs) : that.originalAttrs != null) + return false; + if (referralUrl != null ? !referralUrl.equals(that.referralUrl) : that.referralUrl != null) return false; + if (updatedAttrs != null ? !updatedAttrs.equals(that.updatedAttrs) : that.updatedAttrs != null) return false; + + return true; + } + + @Override + public int hashCode() { + int result = originalAttrs != null ? originalAttrs.hashCode() : 0; + result = 31 * result + (dn != null ? dn.hashCode() : 0); + result = 31 * result + (base != null ? base.hashCode() : 0); + result = 31 * result + (updateMode ? 1 : 0); + result = 31 * result + (updatedAttrs != null ? updatedAttrs.hashCode() : 0); + result = 31 * result + (referralUrl != null ? referralUrl.hashCode() : 0); + return result; + } + + /** * @see java.lang.Object#toString() */ public String toString() { diff --git a/core/src/main/java/org/springframework/ldap/core/DistinguishedName.java b/core/src/main/java/org/springframework/ldap/core/DistinguishedName.java index 9b668898..5745a363 100644 --- a/core/src/main/java/org/springframework/ldap/core/DistinguishedName.java +++ b/core/src/main/java/org/springframework/ldap/core/DistinguishedName.java @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.core; -import org.apache.commons.lang.StringUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.ldap.BadLdapGrammarException; @@ -138,8 +138,8 @@ public class DistinguishedName implements Name { public static final String KEY_CASE_FOLD_NONE = "none"; - private static final String[] MANGLED_DOUBLE_QUOTES = new String[]{"\\\\\""}; - private static final String[] PROPER_DOUBLE_QUOTES = new String[]{"\\\""}; + private static final String MANGLED_DOUBLE_QUOTES = "\\\\\""; + private static final String PROPER_DOUBLE_QUOTES = "\\\""; private static final Log log = LogFactory.getLog(DistinguishedName.class); @@ -169,7 +169,7 @@ public class DistinguishedName implements Name { * @param path a String corresponding to a (syntactically) valid LDAP path. */ public DistinguishedName(String path) { - if (StringUtils.isBlank(path)) { + if (!StringUtils.hasText(path)) { names = new LinkedList(); } else { @@ -247,7 +247,7 @@ public class DistinguishedName implements Name { tempPath = path; } - tempPath = StringUtils.replaceEach(tempPath, MANGLED_DOUBLE_QUOTES, PROPER_DOUBLE_QUOTES); + tempPath = StringUtils.replace(tempPath, MANGLED_DOUBLE_QUOTES, PROPER_DOUBLE_QUOTES); return tempPath; } @@ -273,7 +273,7 @@ public class DistinguishedName implements Name { public LdapRdn getLdapRdn(String key) { for (Iterator iter = names.iterator(); iter.hasNext();) { LdapRdn rdn = (LdapRdn) iter.next(); - if (StringUtils.equals(rdn.getKey(), key)) { + if (ObjectUtils.nullSafeEquals(rdn.getKey(), key)) { return rdn; } } @@ -317,7 +317,7 @@ public class DistinguishedName implements Name { */ public String toString() { String spacedFormatting = System.getProperty(SPACED_DN_FORMAT_PROPERTY); - if (StringUtils.isBlank(spacedFormatting)) { + if (!StringUtils.hasText(spacedFormatting)) { return format(COMPACT); } else { diff --git a/core/src/main/java/org/springframework/ldap/core/LdapRdn.java b/core/src/main/java/org/springframework/ldap/core/LdapRdn.java index 4c1a2861..37c508a9 100644 --- a/core/src/main/java/org/springframework/ldap/core/LdapRdn.java +++ b/core/src/main/java/org/springframework/ldap/core/LdapRdn.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -16,6 +16,10 @@ package org.springframework.ldap.core; +import org.springframework.ldap.BadLdapGrammarException; +import org.springframework.ldap.support.ListComparator; +import org.springframework.util.ObjectUtils; + import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; @@ -24,10 +28,6 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import org.apache.commons.lang.StringUtils; -import org.springframework.ldap.BadLdapGrammarException; -import org.springframework.ldap.support.ListComparator; - /** * Datatype for a LDAP name, a part of a path. * @@ -239,7 +239,7 @@ public class LdapRdn implements Serializable, Comparable { public String getValue(String key) { for (Iterator iter = components.iterator(); iter.hasNext();) { LdapRdnComponent component = (LdapRdnComponent) iter.next(); - if (StringUtils.equals(component.getKey(), key)) { + if (ObjectUtils.nullSafeEquals(component.getKey(), key)) { return component.getValue(); } } diff --git a/core/src/main/java/org/springframework/ldap/core/LdapRdnComponent.java b/core/src/main/java/org/springframework/ldap/core/LdapRdnComponent.java index f498fba1..142ad9b7 100644 --- a/core/src/main/java/org/springframework/ldap/core/LdapRdnComponent.java +++ b/core/src/main/java/org/springframework/ldap/core/LdapRdnComponent.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -15,15 +15,15 @@ */ package org.springframework.ldap.core; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + import java.io.Serializable; import java.net.URI; import java.net.URISyntaxException; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.Validate; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - /** * Represents part of an LdapRdn. As specified in RFC2253 an LdapRdn may be * composed of several attributes, separated by "+". An @@ -68,14 +68,14 @@ public class LdapRdnComponent implements Comparable, Serializable { * @see DistinguishedName#KEY_CASE_FOLD_PROPERTY */ public LdapRdnComponent(String key, String value, boolean decodeValue) { - Validate.notEmpty(key, "Key must not be empty"); - Validate.notEmpty(value, "Value must not be empty"); + Assert.hasText(key, "Key must not be empty"); + Assert.hasText(value, "Value must not be empty"); String caseFold = System.getProperty(DistinguishedName.KEY_CASE_FOLD_PROPERTY); - if (StringUtils.isBlank(caseFold) || caseFold.equals(DistinguishedName.KEY_CASE_FOLD_LOWER)) { - this.key = StringUtils.lowerCase(key); + if (!StringUtils.hasText(caseFold) || caseFold.equals(DistinguishedName.KEY_CASE_FOLD_LOWER)) { + this.key = key.toLowerCase(); } else if (caseFold.equals(DistinguishedName.KEY_CASE_FOLD_UPPER)) { - this.key = StringUtils.upperCase(key); + this.key = key.toUpperCase(); } else if (caseFold.equals(DistinguishedName.KEY_CASE_FOLD_NONE)) { this.key = key; } else { @@ -84,7 +84,7 @@ public class LdapRdnComponent implements Comparable, Serializable { + "; expected \"" + DistinguishedName.KEY_CASE_FOLD_LOWER + "\", \"" + DistinguishedName.KEY_CASE_FOLD_UPPER + "\", or \"" + DistinguishedName.KEY_CASE_FOLD_NONE + "\""); - this.key = StringUtils.lowerCase(key); + this.key = key.toLowerCase(); } if (decodeValue) { this.value = LdapEncoder.nameDecode(value); @@ -201,8 +201,10 @@ public class LdapRdnComponent implements Comparable, Serializable { // instances to equal mutable ones. if (obj != null && obj instanceof LdapRdnComponent) { LdapRdnComponent that = (LdapRdnComponent) obj; - return StringUtils.equalsIgnoreCase(this.key, that.key) - && StringUtils.equalsIgnoreCase(this.value, that.value); + // It's safe to compare directly against key and value, + // because they are validated not to be null on instance creation. + return this.key.equalsIgnoreCase(that.key) + && this.value.equalsIgnoreCase(that.value); } else { diff --git a/core/src/main/java/org/springframework/ldap/core/LdapTemplate.java b/core/src/main/java/org/springframework/ldap/core/LdapTemplate.java index 329e65b7..0f99bbcb 100644 --- a/core/src/main/java/org/springframework/ldap/core/LdapTemplate.java +++ b/core/src/main/java/org/springframework/ldap/core/LdapTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2012 the original author or authors. + * Copyright 2005-2013 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. @@ -15,7 +15,6 @@ */ package org.springframework.ldap.core; -import org.apache.commons.lang.Validate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; @@ -23,6 +22,7 @@ import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.ldap.NamingException; import org.springframework.ldap.support.LdapUtils; +import org.springframework.util.Assert; import javax.naming.Binding; import javax.naming.Name; @@ -1256,7 +1256,7 @@ public class LdapTemplate implements LdapOperations, InitializingBean { * @param controls the SearchControls to check. */ private void assureReturnObjFlagSet(SearchControls controls) { - Validate.notNull(controls); + Assert.notNull(controls, "controls must not be null"); if (!controls.getReturningObjFlag()) { log.debug("The returnObjFlag of supplied SearchControls is not set" + " but a ContextMapper is used - setting flag to true"); diff --git a/core/src/main/java/org/springframework/ldap/core/support/AbstractContextSource.java b/core/src/main/java/org/springframework/ldap/core/support/AbstractContextSource.java index 6d0cce3c..f86b731f 100644 --- a/core/src/main/java/org/springframework/ldap/core/support/AbstractContextSource.java +++ b/core/src/main/java/org/springframework/ldap/core/support/AbstractContextSource.java @@ -16,8 +16,7 @@ package org.springframework.ldap.core.support; -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.lang.StringUtils; +import org.springframework.util.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; @@ -26,6 +25,7 @@ import org.springframework.ldap.core.AuthenticationSource; import org.springframework.ldap.core.ContextSource; import org.springframework.ldap.core.DistinguishedName; import org.springframework.ldap.support.LdapUtils; +import org.springframework.util.ObjectUtils; import javax.naming.Context; import javax.naming.NamingException; @@ -335,7 +335,7 @@ public abstract class AbstractContextSource implements BaseLdapPathContextSource * the class outside of a Spring Context. */ public void afterPropertiesSet() throws Exception { - if (ArrayUtils.isEmpty(urls)) { + if (ObjectUtils.isEmpty(urls)) { throw new IllegalArgumentException("At least one server url must be set"); } @@ -345,10 +345,10 @@ public abstract class AbstractContextSource implements BaseLdapPathContextSource if (authenticationSource == null) { log.debug("AuthenticationSource not set - " + "using default implementation"); - if (StringUtils.isBlank(userDn)) { + if (!StringUtils.hasText(userDn)) { log.info("Property 'userDn' not set - " + "anonymous context will be used for read-write operations"); } - else if (StringUtils.isBlank(password)) { + else if (!StringUtils.hasText(password)) { log.info("Property 'password' not set - " + "blank password will be used"); } authenticationSource = new SimpleAuthenticationSource(); @@ -378,7 +378,7 @@ public abstract class AbstractContextSource implements BaseLdapPathContextSource env.put(Context.OBJECT_FACTORIES, dirObjectFactory.getName()); } - if (!StringUtils.isBlank(referral)) { + if (StringUtils.hasText(referral)) { env.put(Context.REFERRAL, referral); } diff --git a/core/src/main/java/org/springframework/ldap/filter/BinaryLogicalFilter.java b/core/src/main/java/org/springframework/ldap/filter/BinaryLogicalFilter.java index ce6d31e1..da7fded0 100644 --- a/core/src/main/java/org/springframework/ldap/filter/BinaryLogicalFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/BinaryLogicalFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,16 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.filter; import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; - /** * Abstract superclass for binary logical operations, that is "AND" * and "OR" operations. @@ -74,30 +70,24 @@ public abstract class BinaryLogicalFilter extends AbstractFilter { */ protected abstract String getLogicalOperator(); - /** - * Compares each filter in turn. - * - * @see org.springframework.ldap.filter.Filter#equals(java.lang.Object) - */ - public boolean equals(Object obj) { - if (obj instanceof BinaryLogicalFilter && this.getClass() == obj.getClass()) { - return EqualsBuilder.reflectionEquals(this, obj); - } - else { - return false; - } - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - /** - * Hashes all contained data. - * - * @see org.springframework.ldap.filter.Filter#hashCode() - */ - public int hashCode() { - return HashCodeBuilder.reflectionHashCode(this); - } + BinaryLogicalFilter that = (BinaryLogicalFilter) o; - /** + if (queryList != null ? !queryList.equals(that.queryList) : that.queryList != null) return false; + + return true; + } + + @Override + public int hashCode() { + return queryList != null ? queryList.hashCode() : 0; + } + + /** * Add a query to this logical operation. * * @param query the query to add. diff --git a/core/src/main/java/org/springframework/ldap/filter/CompareFilter.java b/core/src/main/java/org/springframework/ldap/filter/CompareFilter.java index b37ee2a5..ec5d0d25 100644 --- a/core/src/main/java/org/springframework/ldap/filter/CompareFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/CompareFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,11 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.filter; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; import org.springframework.ldap.core.LdapEncoder; /** @@ -81,39 +78,27 @@ public abstract class CompareFilter extends AbstractFilter { return buff; } - /** - * Compares key and value before encoding. - * - * @see org.springframework.ldap.filter.Filter#equals(java.lang.Object) - */ - public boolean equals(Object o) { - if (o == null) { - return false; - } - if (o == this) { - return true; - } - if (o.getClass() != getClass()) { - return false; - } - CompareFilter f = (CompareFilter) o; - EqualsBuilder builder = new EqualsBuilder(); - return builder.append(this.attribute, f.attribute).append(this.value, f.value).isEquals(); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - /** - * Calculate the hash code for the attribute and the value. - * - * @see org.springframework.ldap.filter.Filter#hashCode() - */ - public int hashCode() { - HashCodeBuilder builder = new HashCodeBuilder(); - builder.append(attribute); - builder.append(value); - return builder.toHashCode(); - } + CompareFilter that = (CompareFilter) o; - /** + if (attribute != null ? !attribute.equals(that.attribute) : that.attribute != null) return false; + if (value != null ? !value.equals(that.value) : that.value != null) return false; + + return true; + } + + @Override + public int hashCode() { + int result = attribute != null ? attribute.hashCode() : 0; + result = 31 * result + (value != null ? value.hashCode() : 0); + return result; + } + + /** * Implement this method in subclass to return a String representing the * operator. The {@link EqualsFilter#getCompareString()} would for example * return an equals sign, "=". diff --git a/core/src/main/java/org/springframework/ldap/filter/HardcodedFilter.java b/core/src/main/java/org/springframework/ldap/filter/HardcodedFilter.java index 75ec6126..c6c588f9 100644 --- a/core/src/main/java/org/springframework/ldap/filter/HardcodedFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/HardcodedFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -15,8 +15,6 @@ */ package org.springframework.ldap.filter; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; import org.springframework.util.StringUtils; /** @@ -73,28 +71,20 @@ public class HardcodedFilter extends AbstractFilter { return buff; } - /* - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object o) { - if (o == null) { - return false; - } - if (o == this) { - return true; - } - if (o.getClass() != getClass()) { - return false; - } - HardcodedFilter f = (HardcodedFilter) o; - return new EqualsBuilder().append(this.filter, f.filter).isEquals(); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - /* - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - HashCodeBuilder builder = new HashCodeBuilder().append(filter); - return builder.toHashCode(); - } + HardcodedFilter that = (HardcodedFilter) o; + + if (filter != null ? !filter.equals(that.filter) : that.filter != null) return false; + + return true; + } + + @Override + public int hashCode() { + return filter != null ? filter.hashCode() : 0; + } } diff --git a/core/src/main/java/org/springframework/ldap/filter/NotFilter.java b/core/src/main/java/org/springframework/ldap/filter/NotFilter.java index a6feea8e..4992f5e7 100644 --- a/core/src/main/java/org/springframework/ldap/filter/NotFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/NotFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,11 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.filter; -import org.apache.commons.lang.Validate; -import org.apache.commons.lang.builder.EqualsBuilder; +import org.springframework.util.Assert; /** * A filter for 'not'. The following code: @@ -39,15 +37,13 @@ public class NotFilter extends AbstractFilter { private final Filter filter; - static private final int HASH = "!".hashCode(); - /** * Create a filter that negates the outcome of the given filter. * * @param filter The filter that should be negated. */ public NotFilter(Filter filter) { - Validate.notNull(filter); + Assert.notNull(filter, "Filter must not be null"); this.filter = filter; } @@ -63,27 +59,20 @@ public class NotFilter extends AbstractFilter { return buff; } - /* - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object o) { - if (o == null) { - return false; - } - if (o == this) { - return true; - } - if (o.getClass() != getClass()) { - return false; - } - NotFilter f = (NotFilter) o; - return new EqualsBuilder().append(this.filter, f.filter).isEquals(); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - /* - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return HASH ^ filter.hashCode(); - } + NotFilter notFilter = (NotFilter) o; + + if (filter != null ? !filter.equals(notFilter.filter) : notFilter.filter != null) return false; + + return true; + } + + @Override + public int hashCode() { + return filter != null ? filter.hashCode() : 0; + } } diff --git a/core/src/main/java/org/springframework/ldap/filter/NotPresentFilter.java b/core/src/main/java/org/springframework/ldap/filter/NotPresentFilter.java index 96655d5e..db3e1d18 100644 --- a/core/src/main/java/org/springframework/ldap/filter/NotPresentFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/NotPresentFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -15,10 +15,6 @@ */ package org.springframework.ldap.filter; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; -import org.springframework.ldap.filter.AbstractFilter; - /** * A convenience class that combines {@code NOT} behavior with {@code present} * behavior to allow the user to check for the non-existence of a attribute. For @@ -59,28 +55,20 @@ public class NotPresentFilter extends AbstractFilter { return buff; } - /* - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object o) { - if (o == null) { - return false; - } - if (o == this) { - return true; - } - if (o.getClass() != getClass()) { - return false; - } - NotPresentFilter f = (NotPresentFilter) o; - return new EqualsBuilder().append(this.attribute, f.attribute).isEquals(); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - /* - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - HashCodeBuilder builder = new HashCodeBuilder().append(attribute); - return builder.toHashCode(); - } + NotPresentFilter that = (NotPresentFilter) o; + + if (attribute != null ? !attribute.equals(that.attribute) : that.attribute != null) return false; + + return true; + } + + @Override + public int hashCode() { + return attribute != null ? attribute.hashCode() : 0; + } } \ No newline at end of file diff --git a/core/src/main/java/org/springframework/ldap/filter/PresentFilter.java b/core/src/main/java/org/springframework/ldap/filter/PresentFilter.java index 9bc57509..a66ce096 100644 --- a/core/src/main/java/org/springframework/ldap/filter/PresentFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/PresentFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -15,9 +15,6 @@ */ package org.springframework.ldap.filter; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; - /** * Filter that allows the user to check for the existence of a attribute. For an * attribute to be {@code 'present'} it must contain a value. Attributes that do @@ -58,28 +55,20 @@ public class PresentFilter extends AbstractFilter { return buff; } - /* - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object o) { - if (o == null) { - return false; - } - if (o == this) { - return true; - } - if (o.getClass() != getClass()) { - return false; - } - PresentFilter f = (PresentFilter) o; - return new EqualsBuilder().append(this.attribute, f.attribute).isEquals(); - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - /* - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - HashCodeBuilder builder = new HashCodeBuilder().append(attribute); - return builder.toHashCode(); - } + PresentFilter that = (PresentFilter) o; + + if (attribute != null ? !attribute.equals(that.attribute) : that.attribute != null) return false; + + return true; + } + + @Override + public int hashCode() { + return attribute != null ? attribute.hashCode() : 0; + } } \ No newline at end of file diff --git a/core/src/main/java/org/springframework/ldap/filter/WhitespaceWildcardsFilter.java b/core/src/main/java/org/springframework/ldap/filter/WhitespaceWildcardsFilter.java index 74b7fce3..e70b8655 100644 --- a/core/src/main/java/org/springframework/ldap/filter/WhitespaceWildcardsFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/WhitespaceWildcardsFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,15 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.filter; +import org.springframework.util.StringUtils; +import org.springframework.ldap.core.LdapEncoder; + import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.lang.StringUtils; -import org.springframework.ldap.core.LdapEncoder; - /** * This filter automatically converts all whitespace to wildcards (*). The * following code: @@ -49,7 +48,7 @@ public class WhitespaceWildcardsFilter extends EqualsFilter { protected String encodeValue(String value) { // blank string means just ONE star - if (StringUtils.isBlank(value)) { + if (!StringUtils.hasText(value)) { return "*"; } diff --git a/core/src/main/java/org/springframework/ldap/pool/DelegatingContext.java b/core/src/main/java/org/springframework/ldap/pool/DelegatingContext.java index 0b237579..d88df0b1 100644 --- a/core/src/main/java/org/springframework/ldap/pool/DelegatingContext.java +++ b/core/src/main/java/org/springframework/ldap/pool/DelegatingContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,20 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.pool; -import java.util.Hashtable; +import org.apache.commons.pool.KeyedObjectPool; +import org.springframework.ldap.pool.factory.PoolingContextSource; +import org.springframework.util.Assert; import javax.naming.Context; import javax.naming.Name; import javax.naming.NameParser; import javax.naming.NamingEnumeration; import javax.naming.NamingException; - -import org.apache.commons.lang.Validate; -import org.apache.commons.pool.KeyedObjectPool; -import org.springframework.ldap.pool.factory.PoolingContextSource; +import java.util.Hashtable; /** * Used by {@link PoolingContextSource} to wrap a {@link Context}, delegating most methods @@ -50,9 +48,9 @@ public class DelegatingContext implements Context { * @throws IllegalArgumentException if any of the arguments are null */ public DelegatingContext(KeyedObjectPool keyedObjectPool, Context delegateContext, DirContextType dirContextType) { - Validate.notNull(keyedObjectPool, "keyedObjectPool may not be null"); - Validate.notNull(delegateContext, "delegateContext may not be null"); - Validate.notNull(dirContextType, "dirContextType may not be null"); + Assert.notNull(keyedObjectPool, "keyedObjectPool may not be null"); + Assert.notNull(delegateContext, "delegateContext may not be null"); + Assert.notNull(dirContextType, "dirContextType may not be null"); this.keyedObjectPool = keyedObjectPool; this.delegateContext = delegateContext; diff --git a/core/src/main/java/org/springframework/ldap/pool/DelegatingDirContext.java b/core/src/main/java/org/springframework/ldap/pool/DelegatingDirContext.java index 99582253..686e536a 100644 --- a/core/src/main/java/org/springframework/ldap/pool/DelegatingDirContext.java +++ b/core/src/main/java/org/springframework/ldap/pool/DelegatingDirContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,9 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.pool; +import org.apache.commons.pool.KeyedObjectPool; +import org.springframework.ldap.core.DirContextProxy; +import org.springframework.ldap.pool.factory.PoolingContextSource; +import org.springframework.util.Assert; + import javax.naming.Context; import javax.naming.Name; import javax.naming.NamingEnumeration; @@ -25,11 +29,6 @@ import javax.naming.directory.DirContext; import javax.naming.directory.ModificationItem; import javax.naming.directory.SearchControls; -import org.apache.commons.lang.Validate; -import org.apache.commons.pool.KeyedObjectPool; -import org.springframework.ldap.core.DirContextProxy; -import org.springframework.ldap.pool.factory.PoolingContextSource; - /** * Used by {@link PoolingContextSource} to wrap a {@link DirContext}, delegating most methods @@ -51,7 +50,7 @@ public class DelegatingDirContext extends DelegatingContext implements DirContex */ public DelegatingDirContext(KeyedObjectPool keyedObjectPool, DirContext delegateDirContext, DirContextType dirContextType) { super(keyedObjectPool, delegateDirContext, dirContextType); - Validate.notNull(delegateDirContext, "delegateDirContext may not be null"); + Assert.notNull(delegateDirContext, "delegateDirContext may not be null"); this.delegateDirContext = delegateDirContext; } diff --git a/core/src/main/java/org/springframework/ldap/pool/DelegatingLdapContext.java b/core/src/main/java/org/springframework/ldap/pool/DelegatingLdapContext.java index 96860946..3c374820 100644 --- a/core/src/main/java/org/springframework/ldap/pool/DelegatingLdapContext.java +++ b/core/src/main/java/org/springframework/ldap/pool/DelegatingLdapContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,9 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.pool; +import org.apache.commons.pool.KeyedObjectPool; +import org.springframework.ldap.pool.factory.PoolingContextSource; +import org.springframework.util.Assert; + import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.ldap.Control; @@ -23,10 +26,6 @@ import javax.naming.ldap.ExtendedRequest; import javax.naming.ldap.ExtendedResponse; import javax.naming.ldap.LdapContext; -import org.apache.commons.lang.Validate; -import org.apache.commons.pool.KeyedObjectPool; -import org.springframework.ldap.pool.factory.PoolingContextSource; - /** * Used by {@link PoolingContextSource} to wrap a {@link LdapContext}, delegating most methods * to the underlying context. This class extends {@link DelegatingDirContext} which handles returning @@ -47,7 +46,7 @@ public class DelegatingLdapContext extends DelegatingDirContext implements LdapC */ public DelegatingLdapContext(KeyedObjectPool keyedObjectPool, LdapContext delegateLdapContext, DirContextType dirContextType) { super(keyedObjectPool, delegateLdapContext, dirContextType); - Validate.notNull(delegateLdapContext, "delegateLdapContext may not be null"); + Assert.notNull(delegateLdapContext, "delegateLdapContext may not be null"); this.delegateLdapContext = delegateLdapContext; } diff --git a/core/src/main/java/org/springframework/ldap/pool/factory/DirContextPoolableObjectFactory.java b/core/src/main/java/org/springframework/ldap/pool/factory/DirContextPoolableObjectFactory.java index 3d32af4c..b113dc34 100644 --- a/core/src/main/java/org/springframework/ldap/pool/factory/DirContextPoolableObjectFactory.java +++ b/core/src/main/java/org/springframework/ldap/pool/factory/DirContextPoolableObjectFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,18 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.pool.factory; -import javax.naming.directory.DirContext; - -import org.apache.commons.lang.Validate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.pool.BaseKeyedPoolableObjectFactory; import org.springframework.ldap.core.ContextSource; import org.springframework.ldap.pool.DirContextType; import org.springframework.ldap.pool.validation.DirContextValidator; +import org.springframework.util.Assert; + +import javax.naming.directory.DirContext; /** * Factory that creates {@link DirContext} instances for pooling via a @@ -114,8 +113,8 @@ class DirContextPoolableObjectFactory extends BaseKeyedPoolableObjectFactory { * @see org.apache.commons.pool.BaseKeyedPoolableObjectFactory#makeObject(java.lang.Object) */ public Object makeObject(Object key) throws Exception { - Validate.notNull(this.contextSource, "ContextSource may not be null"); - Validate.isTrue(key instanceof DirContextType, + Assert.notNull(this.contextSource, "ContextSource may not be null"); + Assert.isTrue(key instanceof DirContextType, "key must be a DirContextType"); final DirContextType contextType = (DirContextType) key; @@ -155,11 +154,11 @@ class DirContextPoolableObjectFactory extends BaseKeyedPoolableObjectFactory { * java.lang.Object) */ public boolean validateObject(Object key, Object obj) { - Validate.notNull(this.dirContextValidator, + Assert.notNull(this.dirContextValidator, "DirContextValidator may not be null"); - Validate.isTrue(key instanceof DirContextType, + Assert.isTrue(key instanceof DirContextType, "key must be a DirContextType"); - Validate.isTrue(obj instanceof DirContext, + Assert.isTrue(obj instanceof DirContext, "The Object to validate must be of type '" + DirContext.class + "'"); @@ -181,7 +180,7 @@ class DirContextPoolableObjectFactory extends BaseKeyedPoolableObjectFactory { * java.lang.Object) */ public void destroyObject(Object key, Object obj) throws Exception { - Validate.isTrue(obj instanceof DirContext, + Assert.isTrue(obj instanceof DirContext, "The Object to validate must be of type '" + DirContext.class + "'"); diff --git a/core/src/main/java/org/springframework/ldap/pool/validation/DefaultDirContextValidator.java b/core/src/main/java/org/springframework/ldap/pool/validation/DefaultDirContextValidator.java index 61af55ff..f5939954 100644 --- a/core/src/main/java/org/springframework/ldap/pool/validation/DefaultDirContextValidator.java +++ b/core/src/main/java/org/springframework/ldap/pool/validation/DefaultDirContextValidator.java @@ -13,13 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.pool.validation; -import org.apache.commons.lang.Validate; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.ldap.pool.DirContextType; +import org.springframework.util.Assert; import javax.naming.NamingEnumeration; import javax.naming.directory.DirContext; @@ -159,8 +158,8 @@ public class DefaultDirContextValidator implements DirContextValidator { * @see DirContextValidator#validateDirContext(DirContextType, javax.naming.directory.DirContext) */ public boolean validateDirContext(DirContextType contextType, DirContext dirContext) { - Validate.notNull(contextType, "contextType may not be null"); - Validate.notNull(dirContext, "dirContext may not be null"); + Assert.notNull(contextType, "contextType may not be null"); + Assert.notNull(dirContext, "dirContext may not be null"); try { final NamingEnumeration searchResults = dirContext.search(this.base, this.filter, this.searchControls); diff --git a/core/src/main/java/org/springframework/ldap/support/LdapUtils.java b/core/src/main/java/org/springframework/ldap/support/LdapUtils.java index 64d3015a..b99ebcf8 100644 --- a/core/src/main/java/org/springframework/ldap/support/LdapUtils.java +++ b/core/src/main/java/org/springframework/ldap/support/LdapUtils.java @@ -16,21 +16,20 @@ package org.springframework.ldap.support; -import java.math.BigInteger; -import java.util.Collection; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.ldap.NamingException; +import org.springframework.ldap.NoSuchAttributeException; +import org.springframework.util.Assert; import javax.naming.CompositeName; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.ldap.LdapContext; - -import org.apache.commons.lang.ArrayUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.ldap.NamingException; -import org.springframework.ldap.NoSuchAttributeException; -import org.springframework.util.Assert; +import java.math.BigInteger; +import java.util.Arrays; +import java.util.Collection; /** * Generic utility methods for working with LDAP. Mainly for internal use within @@ -410,16 +409,23 @@ public final class LdapUtils { String[] parts = string.split("-"); byte sidRevision = (byte) Integer.parseInt(parts[1]); int subAuthCount = parts.length - 3; - - byte[] sid = new byte[] {sidRevision, (byte) subAuthCount}; - sid = ArrayUtils.addAll(sid, numberToBytes(parts[2], 6, true)); + + byte[] sid = new byte[] {sidRevision, (byte) subAuthCount}; + sid = addAll(sid, numberToBytes(parts[2], 6, true)); for (int i = 0; i < subAuthCount; i++) { - sid = ArrayUtils.addAll(sid, numberToBytes(parts[3 + i], 4, false)); + sid = addAll(sid, numberToBytes(parts[3 + i], 4, false)); } return sid; } - /** + private static byte[] addAll(byte[] array1, byte[] array2) { + byte[] joinedArray = new byte[array1.length + array2.length]; + System.arraycopy(array1, 0, joinedArray, 0, array1.length); + System.arraycopy(array2, 0, joinedArray, array1.length, array2.length); + return joinedArray; + } + + /** * Converts the given number to a binary representation of the specified * length and "endian-ness". * @@ -434,18 +440,31 @@ public final class LdapUtils { byte[] bytes = bi.toByteArray(); int remaining = length - bytes.length; if (remaining < 0) { - bytes = ArrayUtils.subarray(bytes, -remaining, bytes.length); + bytes = Arrays.copyOfRange(bytes, -remaining, bytes.length); } else { byte[] fill = new byte[remaining]; - bytes = ArrayUtils.addAll(fill, bytes); + bytes = addAll(fill, bytes); } if (!bigEndian) { - ArrayUtils.reverse(bytes); + reverse(bytes); } return bytes; } - - /** + + private static void reverse(byte[] array) { + int i = 0; + int j = array.length - 1; + byte tmp; + while (j > i) { + tmp = array[j]; + array[j] = array[i]; + array[i] = tmp; + j--; + i++; + } + } + + /** * Converts a byte into its hexadecimal representation, padding with a * leading zero to get an even number of characters. * diff --git a/core/src/main/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactory.java b/core/src/main/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactory.java index 8e75a498..20a883df 100644 --- a/core/src/main/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactory.java +++ b/core/src/main/java/org/springframework/ldap/transaction/compensating/LdapCompensatingTransactionOperationFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -16,9 +16,6 @@ package org.springframework.ldap.transaction.compensating; -import javax.naming.directory.DirContext; - -import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.ldap.core.LdapOperations; @@ -26,6 +23,9 @@ import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.SingleContextSource; import org.springframework.transaction.compensating.CompensatingTransactionOperationFactory; import org.springframework.transaction.compensating.CompensatingTransactionOperationRecorder; +import org.springframework.util.ObjectUtils; + +import javax.naming.directory.DirContext; /** * {@link CompensatingTransactionOperationRecorder} implementation for LDAP @@ -55,22 +55,22 @@ public class LdapCompensatingTransactionOperationFactory implements Compensating * #createRecordingOperation(java.lang.Object, java.lang.String) */ public CompensatingTransactionOperationRecorder createRecordingOperation(Object resource, String operation) { - if (StringUtils.equals(operation, LdapTransactionUtils.BIND_METHOD_NAME)) { + if (ObjectUtils.nullSafeEquals(operation, LdapTransactionUtils.BIND_METHOD_NAME)) { log.debug("Bind operation recorded"); return new BindOperationRecorder(createLdapOperationsInstance((DirContext) resource)); } - else if (StringUtils.equals(operation, LdapTransactionUtils.REBIND_METHOD_NAME)) { + else if (ObjectUtils.nullSafeEquals(operation, LdapTransactionUtils.REBIND_METHOD_NAME)) { log.debug("Rebind operation recorded"); return new RebindOperationRecorder(createLdapOperationsInstance((DirContext) resource), renamingStrategy); } - else if (StringUtils.equals(operation, LdapTransactionUtils.RENAME_METHOD_NAME)) { + else if (ObjectUtils.nullSafeEquals(operation, LdapTransactionUtils.RENAME_METHOD_NAME)) { log.debug("Rename operation recorded"); return new RenameOperationRecorder(createLdapOperationsInstance((DirContext) resource)); } - else if (StringUtils.equals(operation, LdapTransactionUtils.MODIFY_ATTRIBUTES_METHOD_NAME)) { + else if (ObjectUtils.nullSafeEquals(operation, LdapTransactionUtils.MODIFY_ATTRIBUTES_METHOD_NAME)) { return new ModifyAttributesOperationRecorder(createLdapOperationsInstance((DirContext) resource)); } - else if (StringUtils.equals(operation, LdapTransactionUtils.UNBIND_METHOD_NAME)) { + else if (ObjectUtils.nullSafeEquals(operation, LdapTransactionUtils.UNBIND_METHOD_NAME)) { return new UnbindOperationRecorder(createLdapOperationsInstance((DirContext) resource), renamingStrategy); } diff --git a/core/src/main/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtils.java b/core/src/main/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtils.java index 67b73c9b..27a8e6eb 100644 --- a/core/src/main/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtils.java +++ b/core/src/main/java/org/springframework/ldap/transaction/compensating/LdapTransactionUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -13,14 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.ldap.transaction.compensating; -import javax.naming.Name; - -import org.apache.commons.lang.StringUtils; import org.springframework.ldap.core.DistinguishedName; import org.springframework.util.Assert; +import org.springframework.util.ObjectUtils; + +import javax.naming.Name; /** * Utility methods for working with LDAP transactions. @@ -91,12 +90,11 @@ public final class LdapTransactionUtils { * false otherwise. */ public static boolean isSupportedWriteTransactionOperation(String methodName) { - return (StringUtils.equals(methodName, BIND_METHOD_NAME) - || StringUtils.equals(methodName, REBIND_METHOD_NAME) - || StringUtils.equals(methodName, RENAME_METHOD_NAME) - || StringUtils - .equals(methodName, MODIFY_ATTRIBUTES_METHOD_NAME) || StringUtils - .equals(methodName, UNBIND_METHOD_NAME)); + return (ObjectUtils.nullSafeEquals(methodName, BIND_METHOD_NAME) + || ObjectUtils.nullSafeEquals(methodName, REBIND_METHOD_NAME) + || ObjectUtils.nullSafeEquals(methodName, RENAME_METHOD_NAME) + || ObjectUtils.nullSafeEquals(methodName, MODIFY_ATTRIBUTES_METHOD_NAME) + || ObjectUtils.nullSafeEquals(methodName, UNBIND_METHOD_NAME)); } } diff --git a/gradle/java.gradle b/gradle/java.gradle index 0a5ec348..891a71b5 100644 --- a/gradle/java.gradle +++ b/gradle/java.gradle @@ -1,15 +1,15 @@ apply plugin: 'java' apply plugin: 'propdeps' -sourceCompatibility = '1.5' -targetCompatibility = '1.5' +sourceCompatibility = '1.6' +targetCompatibility = '1.6' -ext.springVersion = '3.0.6.RELEASE' -ext.springBatchVersion = '2.0.3.RELEASE' +ext.springVersion = '3.2.4.RELEASE' +ext.springBatchVersion = '2.0.4.RELEASE' ext.junitVersion = '4.10' ext.commonsPoolVersion = '1.5.4' ext.commonsLangVersion = '2.4' -ext.commonsLoggingVersion = '1.0.4' +ext.commonsLoggingVersion = '1.1.1' ext.gsbaseVersion = '2.0.1' ext.log4jVersion = '1.2.15' ext.mockitoVersion = '1.9.5' diff --git a/ldif/ldif-batch/build.gradle b/ldif/ldif-batch/build.gradle index 0f7e8cb3..ae5a9289 100644 --- a/ldif/ldif-batch/build.gradle +++ b/ldif/ldif-batch/build.gradle @@ -1,10 +1,20 @@ dependencies { compile project(':spring-ldap-ldif-core'), - "org.springframework.batch:spring-batch-core:$springBatchVersion", - "org.springframework.batch:spring-batch-infrastructure:$springBatchVersion" + "commons-lang:commons-lang:$commonsLangVersion" + compile("org.springframework.batch:spring-batch-infrastructure:$springBatchVersion") { + exclude group: "org.springframework", module: "spring-core" + exclude group: "org.springframework", module: "spring-context" + exclude group: "org.springframework", module: "spring-aop" + } testCompile "junit:junit:$junitVersion", - "org.springframework.batch:spring-batch-test:$springBatchVersion" + "org.springframework:spring-context:$springVersion", + "org.springframework:spring-aop:$springVersion", + "org.springframework:spring-test:$springVersion", + + testCompile("org.springframework.batch:spring-batch-test:$springBatchVersion") { + exclude group: "org.springframework", module: "spring-test" + } } \ No newline at end of file diff --git a/ldif/ldif-core/build.gradle b/ldif/ldif-core/build.gradle index 399346cc..6ebe3dcd 100644 --- a/ldif/ldif-core/build.gradle +++ b/ldif/ldif-core/build.gradle @@ -1,9 +1,6 @@ dependencies { - compile project(":spring-ldap-core"), - "commons-lang:commons-lang:$commonsLangVersion", - "org.springframework.batch:spring-batch-core:$springBatchVersion", - "org.springframework.batch:spring-batch-infrastructure:$springBatchVersion" + compile project(":spring-ldap-core") testCompile "junit:junit:$junitVersion", "commons-io:commons-io:2.4" diff --git a/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/parser/LdifParser.java b/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/parser/LdifParser.java index 2cca308d..33d9c32f 100644 --- a/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/parser/LdifParser.java +++ b/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/parser/LdifParser.java @@ -16,7 +16,6 @@ package org.springframework.ldap.ldif.parser; -import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; @@ -32,6 +31,7 @@ import org.springframework.ldap.ldif.support.SeparatorPolicy; import org.springframework.ldap.schema.DefaultSchemaSpecification; import org.springframework.ldap.schema.Specification; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; import javax.naming.NamingException; import javax.naming.directory.Attribute; @@ -324,7 +324,7 @@ public class LdifParser implements Parser, InitializingBean { private void addAttributeToRecord(String buffer, LdapAttributes record) { try { - if (StringUtils.isNotEmpty(buffer) && record != null) { + if (StringUtils.hasLength(buffer) && record != null) { //Validate previous attribute and add to record. Attribute attribute = attributePolicy.parse(buffer); diff --git a/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/DefaultAttributeValidationPolicy.java b/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/DefaultAttributeValidationPolicy.java index ef6416da..74090633 100644 --- a/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/DefaultAttributeValidationPolicy.java +++ b/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/DefaultAttributeValidationPolicy.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -15,6 +15,14 @@ */ package org.springframework.ldap.ldif.support; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.ldap.core.LdapAttribute; +import org.springframework.ldap.ldif.InvalidAttributeFormatException; +import org.springframework.util.StringUtils; +import sun.misc.BASE64Decoder; + +import javax.naming.directory.Attribute; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -23,16 +31,6 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.naming.directory.Attribute; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.ldap.core.LdapAttribute; -import org.springframework.ldap.ldif.InvalidAttributeFormatException; - -import sun.misc.BASE64Decoder; - /** * Ensures the buffer represents a valid attribute as defined by RFC2849. * @@ -322,7 +320,7 @@ public class DefaultAttributeValidationPolicy implements AttributeValidationPoli private LdapAttribute parseStringAttribute(Matcher matcher) { String id = matcher.group(1); String value = matcher.group(3); - List options = Arrays.asList((StringUtils.isEmpty(matcher.group(2)) ? new String[] {} : matcher.group(2).replaceFirst(";","").split(OPTION_SEPARATOR))); + List options = Arrays.asList((!StringUtils.hasLength(matcher.group(2)) ? new String[] {} : matcher.group(2).replaceFirst(";","").split(OPTION_SEPARATOR))); if (options.isEmpty()) { return new LdapAttribute(id, value, ordered); diff --git a/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/SeparatorPolicy.java b/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/SeparatorPolicy.java index aefeba5f..59c8dc47 100644 --- a/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/SeparatorPolicy.java +++ b/ldif/ldif-core/src/main/java/org/springframework/ldap/ldif/support/SeparatorPolicy.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2013 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. @@ -15,9 +15,9 @@ */ package org.springframework.ldap.ldif.support; -import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.util.StringUtils; /** * Policy object for enforcing LDIF record separation rules. Designed explicitly @@ -70,7 +70,7 @@ public class SeparatorPolicy { log.trace("Assessing --> [" + line + "]"); if (record) { - if (StringUtils.isEmpty(line)) { + if (!StringUtils.hasLength(line)) { record = false; skip = false; return LineIdentifier.EndOfRecord; @@ -99,11 +99,11 @@ public class SeparatorPolicy { } } } else { - if (StringUtils.isNotEmpty(line) && line.matches(VERSION_IDENTIFIER) && !skip) { + if (StringUtils.hasLength(line) && line.matches(VERSION_IDENTIFIER) && !skip) { //Version Identifiers are ignored by parser. return LineIdentifier.VersionIdentifier; - } else if (StringUtils.isNotEmpty(line) && line.matches(NewRecord)) { + } else if (StringUtils.hasLength(line) && line.matches(NewRecord)) { record = true; skip = false; return LineIdentifier.NewRecord; diff --git a/ldif/ldif-core/src/test/java/org/springframework/ldap/ldif/DefaultAttributeValidationPolicyTest.java b/ldif/ldif-core/src/test/java/org/springframework/ldap/ldif/DefaultAttributeValidationPolicyTest.java index 8eb52449..2f649aae 100644 --- a/ldif/ldif-core/src/test/java/org/springframework/ldap/ldif/DefaultAttributeValidationPolicyTest.java +++ b/ldif/ldif-core/src/test/java/org/springframework/ldap/ldif/DefaultAttributeValidationPolicyTest.java @@ -16,7 +16,6 @@ package org.springframework.ldap.ldif; -import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; @@ -25,6 +24,7 @@ import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.springframework.ldap.core.LdapAttribute; import org.springframework.ldap.ldif.support.DefaultAttributeValidationPolicy; +import org.springframework.util.StringUtils; import sun.misc.BASE64Decoder; import java.net.URI; @@ -138,7 +138,7 @@ public class DefaultAttributeValidationPolicyTest { assertTrue("IDs do not match: [expected: " + attribute.getID() + ", obtained: " + id + "]", id.equalsIgnoreCase(attribute.getID())); - String[] expected = StringUtils.isEmpty(options) ? new String[] {} : options.replaceFirst(";","").split(";"); + String[] expected = !StringUtils.hasLength(options) ? new String[] {} : options.replaceFirst(";","").split(";"); Arrays.sort(expected); String[] obtained = attribute.getOptions().toArray(new String[] {}); Arrays.sort(obtained); @@ -147,7 +147,7 @@ public class DefaultAttributeValidationPolicyTest { switch(type) { case STRING: assertTrue("Value is not a string.", attribute.get() instanceof String); - assertEquals("Values do not match: ", value, (String) attribute.get()); + assertEquals("Values do not match: ", value, attribute.get()); break; case BASE64: @@ -159,7 +159,7 @@ public class DefaultAttributeValidationPolicyTest { case URL: URI url = new URI(value); assertTrue("Value is not a URL.", attribute.get() instanceof URI); - assertEquals("Values do not match: ", url, (URI) attribute.get()); + assertEquals("Values do not match: ", url, attribute.get()); break; } diff --git a/odm/build.gradle b/odm/build.gradle index e3526bd2..31e1d2eb 100644 --- a/odm/build.gradle +++ b/odm/build.gradle @@ -8,14 +8,14 @@ dependencies { "org.springframework:spring-core:$springVersion", "org.freemarker:freemarker:2.3.9", "commons-logging:commons-logging:$commonsLoggingVersion", - "commons-lang:commons-lang:$commonsLangVersion", "commons-cli:commons-cli:1.2" runtime "org.springframework:spring-context:$springVersion" provided "commons-pool:commons-pool:$commonsPoolVersion", "com.sun:ldapbp:1.0", - "org.springframework:spring-context:$springVersion", + "commons-lang:commons-lang:$commonsLangVersion", + "org.springframework:spring-context:$springVersion", "org.springframework:spring-jdbc:$springVersion", "org.springframework:spring-orm:$springVersion" diff --git a/odm/src/main/java/org/springframework/ldap/odm/tools/AttributeSchema.java b/odm/src/main/java/org/springframework/ldap/odm/tools/AttributeSchema.java index 3b4399e1..1987abac 100755 --- a/odm/src/main/java/org/springframework/ldap/odm/tools/AttributeSchema.java +++ b/odm/src/main/java/org/springframework/ldap/odm/tools/AttributeSchema.java @@ -16,7 +16,7 @@ package org.springframework.ldap.odm.tools; -import org.apache.commons.lang.StringUtils; +import org.springframework.util.StringUtils; /** * Simple value class to hold the schema of an attribute.