Repository: syncope Updated Branches: refs/heads/master ef5784b1e -> bbee3af76
[SYNCOPE-935] provides fix for all attributes referring to JPA entities + hides realm, type and udynMembershipCond attributes among the available ones to be used to create search queries Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/bbee3af7 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/bbee3af7 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/bbee3af7 Branch: refs/heads/master Commit: bbee3af7676bf566554bfb429191002890d1b577 Parents: ef5784b Author: fmartelli <fabio.marte...@gmail.com> Authored: Wed Sep 7 12:55:45 2016 +0200 Committer: fmartelli <fabio.marte...@gmail.com> Committed: Wed Sep 7 12:55:45 2016 +0200 ---------------------------------------------------------------------- .../common/lib/search/SearchableFields.java | 2 +- .../persistence/jpa/dao/JPAAnySearchDAO.java | 35 +++++++++----------- 2 files changed, 17 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/bbee3af7/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java b/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java index 9f67cee..b4facfe 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java @@ -36,7 +36,7 @@ import org.apache.syncope.common.lib.types.AnyTypeKind; public final class SearchableFields { private static final String[] ATTRIBUTES_NOTINCLUDED = { - "serialVersionUID", "password" + "serialVersionUID", "password", "type", "realm", "udynMembershipCond" }; private static final Set<String> ANY_FIELDS = new HashSet<>(); http://git-wip-us.apache.org/repos/asf/syncope/blob/bbee3af7/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java index cc73bd4..745d82a 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java @@ -35,6 +35,7 @@ import javax.validation.constraints.Max; import javax.validation.constraints.Min; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ClassUtils; +import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.types.AnyTypeKind; @@ -885,16 +886,18 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO private String getQuery(final AnyCond cond, final boolean not, final List<Object> parameters, final SearchSupport svs) { + AnyCond condClone = SerializationUtils.clone(cond); + AnyUtils attrUtils = anyUtilsFactory.getInstance(svs.anyTypeKind()); // Keeps track of difference between entity's getKey() and JPA @Id fields - if ("key".equals(cond.getSchema())) { - cond.setSchema("id"); + if ("key".equals(condClone.getSchema())) { + condClone.setSchema("id"); } - Field anyField = ReflectionUtils.findField(attrUtils.anyClass(), cond.getSchema()); + Field anyField = ReflectionUtils.findField(attrUtils.anyClass(), condClone.getSchema()); if (anyField == null) { - LOG.warn("Ignoring invalid schema '{}'", cond.getSchema()); + LOG.warn("Ignoring invalid schema '{}'", condClone.getSchema()); return EMPTY_QUERY; } @@ -931,27 +934,21 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO LOG.error("Could not find {}#getKey", anyField.getType(), e); } - if (relMethod != null) { - if (Long.class.isAssignableFrom(relMethod.getReturnType())) { - cond.setSchema(cond.getSchema() + "_id"); - schema.setType(AttrSchemaType.Long); - } - if (String.class.isAssignableFrom(relMethod.getReturnType())) { - cond.setSchema(cond.getSchema() + "_id"); - schema.setType(AttrSchemaType.String); - } + if (relMethod != null && String.class.isAssignableFrom(relMethod.getReturnType())) { + condClone.setSchema(condClone.getSchema() + "_id"); + schema.setType(AttrSchemaType.String); } } PlainAttrValue attrValue = attrUtils.newPlainAttrValue(); - if (cond.getType() != AttributeCond.Type.LIKE - && cond.getType() != AttributeCond.Type.ISNULL - && cond.getType() != AttributeCond.Type.ISNOTNULL) { + if (condClone.getType() != AttributeCond.Type.LIKE + && condClone.getType() != AttributeCond.Type.ISNULL + && condClone.getType() != AttributeCond.Type.ISNOTNULL) { try { - schema.getValidator().validate(cond.getExpression(), attrValue); + schema.getValidator().validate(condClone.getExpression(), attrValue); } catch (ValidationException e) { - LOG.error("Could not validate expression '" + cond.getExpression() + "'", e); + LOG.error("Could not validate expression '" + condClone.getExpression() + "'", e); return EMPTY_QUERY; } } @@ -959,7 +956,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM "). append(svs.field().name).append(" WHERE "); - fillAttributeQuery(query, attrValue, schema, cond, not, parameters, svs); + fillAttributeQuery(query, attrValue, schema, condClone, not, parameters, svs); return query.toString(); }