The {@link QueryParameter} restricted by this condition.
- * - * @return - */ - QueryParameter getParameter(); + String getParameterName(); + void setParameterName(String parameterName); + + void applyCondition(StringBuilder filter); } \ No newline at end of file diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/QueryParameter.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/QueryParameter.java deleted file mode 100644 index bfc58f744ca4..000000000000 --- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/QueryParameter.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.keycloak.federation.ldap.idm.query; - -/** - * A marker interface indicating that the implementing class can be used as a - * parameter within an IdentityQuery or RelationshipQuery - * - * @author Shane Bryzak - * - */ -public class QueryParameter { - - private String name; - - public QueryParameter(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/Sort.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/Sort.java index dfd331ed59aa..2716cbae801d 100644 --- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/Sort.java +++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/Sort.java @@ -5,16 +5,16 @@ */ public class Sort { - private final QueryParameter parameter; + private final String paramName; private final boolean asc; - public Sort(QueryParameter parameter, boolean asc) { - this.parameter = parameter; + public Sort(String paramName, boolean asc) { + this.paramName = paramName; this.asc = asc; } - public QueryParameter getParameter() { - return this.parameter; + public String getParameter() { + return this.paramName; } public boolean isAscending() { diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/BetweenCondition.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/BetweenCondition.java index 672fdaa72bed..f8f9084d157f 100644 --- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/BetweenCondition.java +++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/BetweenCondition.java @@ -1,33 +1,36 @@ package org.keycloak.federation.ldap.idm.query.internal; -import org.keycloak.federation.ldap.idm.query.Condition; -import org.keycloak.federation.ldap.idm.query.QueryParameter; +import java.util.Date; + +import org.keycloak.federation.ldap.idm.store.ldap.LDAPUtil; /** * @author Pedro Igor */ -public class BetweenCondition implements Condition { +class BetweenCondition extends NamedParameterCondition { private final Comparable x; private final Comparable y; - private final QueryParameter parameter; - public BetweenCondition(QueryParameter parameter, Comparable x, Comparable y) { - this.parameter = parameter; + public BetweenCondition(String name, Comparable x, Comparable y) { + super(name); this.x = x; this.y = y; } @Override - public QueryParameter getParameter() { - return this.parameter; - } + public void applyCondition(StringBuilder filter) { + Comparable x = this.x; + Comparable y = this.y; - public Comparable getX() { - return this.x; - } + if (Date.class.isInstance(x)) { + x = LDAPUtil.formatDate((Date) x); + } + + if (Date.class.isInstance(y)) { + y = LDAPUtil.formatDate((Date) y); + } - public Comparable getY() { - return this.y; + filter.append("(").append(x).append("<=").append(getParameterName()).append("<=").append(y).append(")"); } } diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/CustomLDAPFilter.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/CustomLDAPFilter.java new file mode 100644 index 000000000000..17caa3c04453 --- /dev/null +++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/CustomLDAPFilter.java @@ -0,0 +1,29 @@ +package org.keycloak.federation.ldap.idm.query.internal; + +import org.keycloak.federation.ldap.idm.query.Condition; + +/** + * @author Marek Posolda + */ +class CustomLDAPFilter implements Condition { + + private final String customFilter; + + public CustomLDAPFilter(String customFilter) { + this.customFilter = customFilter; + } + + @Override + public String getParameterName() { + return null; + } + + @Override + public void setParameterName(String parameterName) { + } + + @Override + public void applyCondition(StringBuilder filter) { + filter.append(customFilter); + } +} diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/EqualCondition.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/EqualCondition.java index 9f6e6e754177..5387476caa5a 100644 --- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/EqualCondition.java +++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/EqualCondition.java @@ -1,34 +1,40 @@ package org.keycloak.federation.ldap.idm.query.internal; -import org.keycloak.federation.ldap.idm.query.Condition; -import org.keycloak.federation.ldap.idm.query.QueryParameter; +import java.util.Date; + +import org.keycloak.federation.ldap.idm.store.ldap.LDAPUtil; +import org.keycloak.models.LDAPConstants; /** * @author Pedro Igor */ -public class EqualCondition implements Condition { +public class EqualCondition extends NamedParameterCondition { - private final QueryParameter parameter; private final Object value; - public EqualCondition(QueryParameter parameter, Object value) { - this.parameter = parameter; + public EqualCondition(String name, Object value) { + super(name); this.value = value; } - @Override - public QueryParameter getParameter() { - return this.parameter; - } - public Object getValue() { return this.value; } + @Override + public void applyCondition(StringBuilder filter) { + Object parameterValue = value; + if (Date.class.isInstance(value)) { + parameterValue = LDAPUtil.formatDate((Date) parameterValue); + } + + filter.append("(").append(getParameterName()).append(LDAPConstants.EQUAL).append(parameterValue).append(")"); + } + @Override public String toString() { return "EqualCondition{" + - "parameter=" + parameter.getName() + + "paramName=" + getParameterName() + ", value=" + value + '}'; } diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/GreaterThanCondition.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/GreaterThanCondition.java index cbdf5407b687..4be2f83a8549 100644 --- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/GreaterThanCondition.java +++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/GreaterThanCondition.java @@ -1,34 +1,37 @@ package org.keycloak.federation.ldap.idm.query.internal; +import java.util.Date; + import org.keycloak.federation.ldap.idm.query.Condition; -import org.keycloak.federation.ldap.idm.query.QueryParameter; +import org.keycloak.federation.ldap.idm.store.ldap.LDAPUtil; /** * @author Pedro Igor */ -public class GreaterThanCondition implements Condition { +class GreaterThanCondition extends NamedParameterCondition { private final boolean orEqual; - private final QueryParameter parameter; private final Comparable value; - public GreaterThanCondition(QueryParameter parameter, Comparable value, boolean orEqual) { - this.parameter = parameter; + public GreaterThanCondition(String name, Comparable value, boolean orEqual) { + super(name); this.value = value; this.orEqual = orEqual; } @Override - public QueryParameter getParameter() { - return this.parameter; - } - - public Comparable getValue() { - return this.value; - } - - public boolean isOrEqual() { - return this.orEqual; + public void applyCondition(StringBuilder filter) { + Comparable parameterValue = value; + + if (Date.class.isInstance(parameterValue)) { + parameterValue = LDAPUtil.formatDate((Date) parameterValue); + } + + if (orEqual) { + filter.append("(").append(getParameterName()).append(">=").append(parameterValue).append(")"); + } else { + filter.append("(").append(getParameterName()).append(">").append(parameterValue).append(")"); + } } } \ No newline at end of file diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/InCondition.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/InCondition.java index 54d22342a987..5bf21d86f115 100644 --- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/InCondition.java +++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/InCondition.java @@ -1,28 +1,31 @@ package org.keycloak.federation.ldap.idm.query.internal; -import org.keycloak.federation.ldap.idm.query.Condition; -import org.keycloak.federation.ldap.idm.query.QueryParameter; +import org.keycloak.models.LDAPConstants; /** * @author Pedro Igor */ -public class InCondition implements Condition { +class InCondition extends NamedParameterCondition { - private final QueryParameter parameter; - private final Object[] value; + private final Object[] valuesToCompare; - public InCondition(QueryParameter parameter, Object[] value) { - this.parameter = parameter; - this.value = value; + public InCondition(String name, Object[] valuesToCompare) { + super(name); + this.valuesToCompare = valuesToCompare; } @Override - public QueryParameter getParameter() { - return this.parameter; - } + public void applyCondition(StringBuilder filter) { + + filter.append("(&("); + + for (int i = 0; i< valuesToCompare.length; i++) { + Object value = valuesToCompare[i]; + + filter.append("(").append(getParameterName()).append(LDAPConstants.EQUAL).append(value).append(")"); + } - public Object[] getValue() { - return this.value; + filter.append("))"); } } diff --git a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/LDAPQuery.java b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/LDAPQuery.java index be4ddcd59ce5..6939697db282 100644 --- a/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/LDAPQuery.java +++ b/federation/ldap/src/main/java/org/keycloak/federation/ldap/idm/query/internal/LDAPQuery.java @@ -47,14 +47,12 @@ public class LDAPQuery { private final List