[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()));
     }
 
 }

Reply via email to