[SYNCOPE-1040] Fix provided
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/58fa8e7b Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/58fa8e7b Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/58fa8e7b Branch: refs/heads/master Commit: 58fa8e7bf50eab0c156b5a3cbda3a0a93c2e9d7d Parents: 3be92ce Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Wed Mar 1 12:24:33 2017 +0100 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Wed Mar 1 12:24:41 2017 +0100 ---------------------------------------------------------------------- .../core/provisioning/api/DerAttrHandler.java | 3 ++- .../provisioning/java/DerAttrHandlerImpl.java | 24 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/58fa8e7b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/DerAttrHandler.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/DerAttrHandler.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/DerAttrHandler.java index c4f44bd..e31277d 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/DerAttrHandler.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/DerAttrHandler.java @@ -21,6 +21,7 @@ package org.apache.syncope.core.provisioning.api; import java.util.Map; import org.apache.syncope.core.persistence.api.entity.Any; import org.apache.syncope.core.persistence.api.entity.DerSchema; +import org.apache.syncope.core.persistence.api.entity.GroupableRelatable; import org.apache.syncope.core.persistence.api.entity.Membership; public interface DerAttrHandler { @@ -60,5 +61,5 @@ public interface DerAttrHandler { * @param membership membership * @return derived attribute values */ - Map<DerSchema, String> getValues(final Any<?> any, final Membership<?> membership); + Map<DerSchema, String> getValues(GroupableRelatable<?, ?, ?, ?, ?> any, Membership<?> membership); } http://git-wip-us.apache.org/repos/asf/syncope/blob/58fa8e7b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java index 0261752..42990d8 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DerAttrHandlerImpl.java @@ -28,6 +28,7 @@ import org.apache.syncope.core.provisioning.java.jexl.JexlUtils; import org.apache.syncope.core.persistence.api.entity.Any; import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory; import org.apache.syncope.core.persistence.api.entity.DerSchema; +import org.apache.syncope.core.persistence.api.entity.GroupableRelatable; import org.apache.syncope.core.persistence.api.entity.Membership; import org.apache.syncope.core.provisioning.api.DerAttrHandler; import org.slf4j.Logger; @@ -90,12 +91,31 @@ public class DerAttrHandlerImpl implements DerAttrHandler { anyUtilsFactory.getInstance(any).getAllowedSchemas(any, DerSchema.class).getForSelf()); } + private Map<DerSchema, String> getValues( + final GroupableRelatable<?, ?, ?, ?, ?> any, final Membership<?> membership, final Set<DerSchema> schemas) { + + Map<DerSchema, String> result = new HashMap<>(schemas.size()); + + for (DerSchema schema : schemas) { + JexlContext jexlContext = new MapContext(); + JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(membership), jexlContext); + JexlUtils.addFieldsToContext(any, jexlContext); + + result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext)); + } + + return result; + } + @Override - public Map<DerSchema, String> getValues(final Any<?> any, final Membership<?> membership) { + public Map<DerSchema, String> getValues( + final GroupableRelatable<?, ?, ?, ?, ?> any, final Membership<?> membership) { + return getValues( any, + membership, anyUtilsFactory.getInstance(any).getAllowedSchemas(any, DerSchema.class). - getForMembership(membership.getRightEnd())); + getForMembership(membership.getRightEnd())); } }