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 103e7d5a..684cb833 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-2013 the original author or authors. + * Copyright 2005-2025 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,6 +17,7 @@ package org.springframework.ldap.filter; import org.springframework.ldap.support.LdapEncoder; +import org.springframework.util.Assert; /** * Abstract superclass for filters that compare values. @@ -31,6 +32,12 @@ public abstract class CompareFilter extends AbstractFilter { private final String encodedValue; + private String operator; + + /** + * @deprecated please use the {@code protected} constructor instead + */ + @Deprecated(since = "3.3") public CompareFilter(String attribute, String value) { this.attribute = attribute; this.value = value; @@ -49,7 +56,9 @@ public abstract class CompareFilter extends AbstractFilter { * Override to perform special encoding in subclass. * @param value the value to encode. * @return properly escaped value. + * @deprecated please provide the encoded value in the constructor */ + @Deprecated(forRemoval = true, since = "3.3") protected String encodeValue(String value) { return LdapEncoder.filterEncode(value); } @@ -58,13 +67,30 @@ public abstract class CompareFilter extends AbstractFilter { * Convenience constructor for int values. * @param attribute Name of attribute in filter. * @param value The value of the attribute in the filter. + * @deprecated please use the {@code protected} constructor instead */ + @Deprecated(since = "3.3") public CompareFilter(String attribute, int value) { this.attribute = attribute; this.value = String.valueOf(value); this.encodedValue = LdapEncoder.filterEncode(this.value); } + /** + * Construct a filter, specifying the comparison {@code operator} as well as the + * already-encoded value + * @param attribute the attribute name + * @param operator the comparison operator; for example, {@code =}, {@code ~=} + * @param encodedValue the already-encoded value + * @since 3.3 + */ + protected CompareFilter(String attribute, String operator, String value, String encodedValue) { + this.attribute = attribute; + this.value = value; + this.encodedValue = encodedValue; + this.operator = operator; + } + /* * @see org.springframework.ldap.filter.AbstractFilter#encode(java.lang.StringBuffer) */ @@ -109,7 +135,13 @@ public abstract class CompareFilter extends AbstractFilter { * {@link EqualsFilter#getCompareString()} would for example return an equals sign, * "=". * @return the String to use as operator in the comparison for the specific subclass. + * @deprecated please specify the operator in the constructor */ - protected abstract String getCompareString(); + @Deprecated(forRemoval = true, since = "3.3") + protected String getCompareString() { + Assert.notNull(this.operator, + "Please supply the operator in the constructor. If needed, override getCompareString instead."); + return this.operator; + } } diff --git a/core/src/main/java/org/springframework/ldap/filter/EqualsFilter.java b/core/src/main/java/org/springframework/ldap/filter/EqualsFilter.java index 3ad2065b..6904bb71 100644 --- a/core/src/main/java/org/springframework/ldap/filter/EqualsFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/EqualsFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2025 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. @@ -40,6 +40,10 @@ public class EqualsFilter extends CompareFilter { super(attribute, value); } + EqualsFilter(String attribute, String value, String encodedValue) { + super(attribute, EQUALS_SIGN, value, encodedValue); + } + /** * Convenience constructor for int values. * @param attribute Name of attribute in filter. @@ -49,9 +53,11 @@ public class EqualsFilter extends CompareFilter { super(attribute, value); } - /* + /** + * @deprecated please extend {@link CompareFilter} instead * @see org.springframework.ldap.filter.CompareFilter#getCompareString() */ + @Deprecated(forRemoval = true, since = "3.3") protected String getCompareString() { return EQUALS_SIGN; } diff --git a/core/src/main/java/org/springframework/ldap/filter/GreaterThanOrEqualsFilter.java b/core/src/main/java/org/springframework/ldap/filter/GreaterThanOrEqualsFilter.java index 6b6e96af..e8b66a6d 100644 --- a/core/src/main/java/org/springframework/ldap/filter/GreaterThanOrEqualsFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/GreaterThanOrEqualsFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2013 the original author or authors. + * Copyright 2005-2025 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,8 @@ package org.springframework.ldap.filter; +import org.springframework.ldap.support.LdapEncoder; + /** * A filter to compare >=. LDAP RFC does not allow > comparison. The following code: * @@ -37,13 +39,18 @@ public class GreaterThanOrEqualsFilter extends CompareFilter { private static final String GREATER_THAN_OR_EQUALS = ">="; public GreaterThanOrEqualsFilter(String attribute, String value) { - super(attribute, value); + super(attribute, GREATER_THAN_OR_EQUALS, value, LdapEncoder.filterEncode(value)); } public GreaterThanOrEqualsFilter(String attribute, int value) { - super(attribute, value); + this(attribute, String.valueOf(value)); } + /** + * @deprecated please extend {@link CompareFilter} instead + * @see org.springframework.ldap.filter.CompareFilter#getCompareString() + */ + @Deprecated(forRemoval = true, since = "3.3") protected String getCompareString() { return GREATER_THAN_OR_EQUALS; } diff --git a/core/src/main/java/org/springframework/ldap/filter/LessThanOrEqualsFilter.java b/core/src/main/java/org/springframework/ldap/filter/LessThanOrEqualsFilter.java index ccc28ba3..b203ac5d 100644 --- a/core/src/main/java/org/springframework/ldap/filter/LessThanOrEqualsFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/LessThanOrEqualsFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2013 the original author or authors. + * Copyright 2005-2025 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,8 @@ package org.springframework.ldap.filter; +import org.springframework.ldap.support.LdapEncoder; + /** * A filter to compare <=. LDAP RFC does not allow < comparison. The following code: * @@ -37,13 +39,18 @@ public class LessThanOrEqualsFilter extends CompareFilter { private static final String LESS_THAN_OR_EQUALS = "<="; public LessThanOrEqualsFilter(String attribute, String value) { - super(attribute, value); + super(attribute, LESS_THAN_OR_EQUALS, value, LdapEncoder.filterEncode(value)); } public LessThanOrEqualsFilter(String attribute, int value) { - super(attribute, value); + this(attribute, String.valueOf(value)); } + /** + * @deprecated please extend {@link CompareFilter} instead + * @see org.springframework.ldap.filter.CompareFilter#getCompareString() + */ + @Deprecated(forRemoval = true, since = "3.3") protected String getCompareString() { return LESS_THAN_OR_EQUALS; } diff --git a/core/src/main/java/org/springframework/ldap/filter/LikeFilter.java b/core/src/main/java/org/springframework/ldap/filter/LikeFilter.java index 274a6e19..a0692a45 100644 --- a/core/src/main/java/org/springframework/ldap/filter/LikeFilter.java +++ b/core/src/main/java/org/springframework/ldap/filter/LikeFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2013 the original author or authors. + * Copyright 2005-2025 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. @@ -39,10 +39,10 @@ import org.springframework.ldap.support.LdapEncoder; public class LikeFilter extends EqualsFilter { public LikeFilter(String attribute, String value) { - super(attribute, value); + super(attribute, value, encodeValueInternal(value)); } - protected String encodeValue(String value) { + private static String encodeValueInternal(String value) { // just return if blank string if (value == null) { return ""; @@ -65,4 +65,12 @@ public class LikeFilter extends EqualsFilter { return buff.toString(); } + /** + * @deprecated please extend {@link CompareFilter} instead + */ + @Deprecated(forRemoval = true, since = "3.3") + protected String encodeValue(String value) { + return encodeValueInternal(value); + } + }