You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2022/06/28 05:59:03 UTC
[syncope] branch master updated: [SYNCOPE-1685] Powering up JexlUtils and JEXLItemTransformerImpl (#356)
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push:
new 2a350f216d [SYNCOPE-1685] Powering up JexlUtils and JEXLItemTransformerImpl (#356)
2a350f216d is described below
commit 2a350f216d0a063e0d6996bda71aec1332504335
Author: Francesco Chicchiriccò <il...@users.noreply.github.com>
AuthorDate: Tue Jun 28 07:58:58 2022 +0200
[SYNCOPE-1685] Powering up JexlUtils and JEXLItemTransformerImpl (#356)
---
.../provisioning/api/data/ItemTransformer.java | 6 +-
.../core/provisioning/api/jexl/JexlUtils.java | 13 ++-
.../core/provisioning/api/utils/JexlUtilsTest.java | 5 +-
.../provisioning/java/DefaultDerAttrHandler.java | 4 +-
.../provisioning/java/DefaultMappingManager.java | 11 +--
.../java/data/JEXLItemTransformerImpl.java | 98 +++++++++++++++-------
.../LDAPMembershipPropagationActions.java | 2 +-
.../provisioning/java/utils/TemplateUtils.java | 10 +--
.../core/reference/DateToDateItemTransformer.java | 12 +--
.../core/reference/DateToLongItemTransformer.java | 24 +++---
.../syncope/fit/core/PropagationTaskITCase.java | 4 +-
.../test/resources/PrefixItemTransformer.groovy | 25 +++---
.../wa/starter/config/WARefreshContextJob.java | 3 -
13 files changed, 124 insertions(+), 93 deletions(-)
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ItemTransformer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ItemTransformer.java
index 786d8cbe5f..409cb43fe1 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ItemTransformer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ItemTransformer.java
@@ -22,7 +22,7 @@ import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.to.EntityTO;
import org.apache.syncope.common.lib.types.AttrSchemaType;
-import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
import org.apache.syncope.core.persistence.api.entity.resource.Item;
@@ -38,14 +38,14 @@ public interface ItemTransformer {
* Invoked while preparing attribute values to be sent out to external resource during propagation.
*
* @param item mapping item
- * @param entity entity
+ * @param any any
* @param schemaType schema type
* @param values original values
* @return transformed values
*/
default Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
Item item,
- Entity entity,
+ Any<?> any,
AttrSchemaType schemaType,
List<PlainAttrValue> values) {
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtils.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtils.java
index ed8a5e5207..4692f82876 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtils.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtils.java
@@ -103,16 +103,13 @@ public final class JexlUtils {
return result;
}
- public static String evaluate(final String expression, final JexlContext jexlContext) {
- String result = StringUtils.EMPTY;
+ public static Object evaluate(final String expression, final JexlContext jexlContext) {
+ Object result = null;
if (StringUtils.isNotBlank(expression) && jexlContext != null) {
try {
JexlExpression jexlExpression = getEngine().createExpression(expression);
- Object evaluated = jexlExpression.evaluate(jexlContext);
- if (evaluated != null) {
- result = evaluated.toString();
- }
+ result = jexlExpression.evaluate(jexlContext);
} catch (Exception e) {
LOG.error("Error while evaluating JEXL expression: " + expression, e);
}
@@ -120,7 +117,7 @@ public final class JexlUtils {
LOG.debug("Expression not provided or invalid context");
}
- return result;
+ return result == null ? StringUtils.EMPTY : result;
}
public static void addFieldsToContext(final Object object, final JexlContext jexlContext) {
@@ -254,7 +251,7 @@ public final class JexlUtils {
addPlainAttrsToContext(any.getPlainAttrs(), jexlContext);
addDerAttrsToContext(any, derAttrHandler, jexlContext);
- return Boolean.parseBoolean(evaluate(mandatoryCondition, jexlContext));
+ return Boolean.parseBoolean(evaluate(mandatoryCondition, jexlContext).toString());
}
/**
diff --git a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/utils/JexlUtilsTest.java b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/utils/JexlUtilsTest.java
index e9334be44a..54b352dd8e 100644
--- a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/utils/JexlUtilsTest.java
+++ b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/utils/JexlUtilsTest.java
@@ -73,11 +73,10 @@ public class JexlUtilsTest extends AbstractTest {
@Test
public void evaluate() {
- String result = StringUtils.EMPTY;
- assertEquals(result, JexlUtils.evaluate(expression, context));
+ assertEquals(StringUtils.EMPTY, JexlUtils.evaluate(expression, context));
expression = "6 * 12 + 5 / 2.6";
- result = "73.92307692307692";
+ double result = 73.92307692307692;
assertEquals(result, JexlUtils.evaluate(expression, context));
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultDerAttrHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultDerAttrHandler.java
index 29717f35df..a6b4329d5c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultDerAttrHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultDerAttrHandler.java
@@ -47,7 +47,7 @@ public class DefaultDerAttrHandler implements DerAttrHandler {
JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(), jexlContext);
JexlUtils.addFieldsToContext(any, jexlContext);
- result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext));
+ result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext).toString());
});
return result;
@@ -100,7 +100,7 @@ public class DefaultDerAttrHandler implements DerAttrHandler {
JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(membership), jexlContext);
JexlUtils.addFieldsToContext(any, jexlContext);
- result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext));
+ result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext).toString());
});
return result;
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
index 1d78e338dc..27756d3e54 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
@@ -246,7 +246,7 @@ public class DefaultMappingManager implements MappingManager {
JexlUtils.addFieldsToContext(any, jexlContext);
JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(), jexlContext);
JexlUtils.addDerAttrsToContext(any, derAttrHandler, jexlContext);
- evalConnObjectLink = JexlUtils.evaluate(connObjectLink, jexlContext);
+ evalConnObjectLink = JexlUtils.evaluate(connObjectLink, jexlContext).toString();
}
return getName(evalConnObjectLink, connObjectKey);
@@ -274,7 +274,7 @@ public class DefaultMappingManager implements MappingManager {
if (StringUtils.isNotBlank(connObjectLink)) {
JexlContext jexlContext = new MapContext();
JexlUtils.addFieldsToContext(realm, jexlContext);
- evalConnObjectLink = JexlUtils.evaluate(connObjectLink, jexlContext);
+ evalConnObjectLink = JexlUtils.evaluate(connObjectLink, jexlContext).toString();
}
return getName(evalConnObjectLink, connObjectKey);
@@ -849,17 +849,18 @@ public class DefaultMappingManager implements MappingManager {
LOG.debug("Internal values: {}", values);
- Pair<AttrSchemaType, List<PlainAttrValue>> trans = Pair.of(schemaType, values);
+ Pair<AttrSchemaType, List<PlainAttrValue>> transformed = Pair.of(schemaType, values);
if (transform) {
for (ItemTransformer transformer : MappingUtils.getItemTransformers(mapItem)) {
- trans = transformer.beforePropagation(mapItem, any, trans.getLeft(), trans.getRight());
+ transformed = transformer.beforePropagation(
+ mapItem, any, transformed.getLeft(), transformed.getRight());
}
LOG.debug("Transformed values: {}", values);
} else {
LOG.debug("No transformation occurred");
}
- return trans;
+ return transformed;
}
protected String getGroupOwnerValue(final Provision provision, final Any<?> any) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/JEXLItemTransformerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/JEXLItemTransformerImpl.java
index 0f2dd54cdc..8e3e82af72 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/JEXLItemTransformerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/JEXLItemTransformerImpl.java
@@ -18,18 +18,19 @@
*/
package org.apache.syncope.core.provisioning.java.data;
+import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
import org.apache.commons.jexl3.JexlContext;
import org.apache.commons.jexl3.MapContext;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.EntityTO;
-import org.apache.syncope.common.lib.to.RealmTO;
import org.apache.syncope.common.lib.types.AttrSchemaType;
import org.apache.syncope.core.persistence.api.entity.Any;
-import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
import org.apache.syncope.core.persistence.api.entity.resource.Item;
import org.apache.syncope.core.provisioning.api.DerAttrHandler;
@@ -42,6 +43,9 @@ public class JEXLItemTransformerImpl implements JEXLItemTransformer {
@Autowired
private DerAttrHandler derAttrHandler;
+ @Autowired
+ private AnyUtilsFactory anyUtilsFactory;
+
private String propagationJEXL;
private String pullJEXL;
@@ -56,40 +60,76 @@ public class JEXLItemTransformerImpl implements JEXLItemTransformer {
this.pullJEXL = pullJEXL;
}
+ protected AttrSchemaType beforePropagation(final PlainAttrValue value, final Any<?> any) {
+ JexlContext jexlContext = new MapContext();
+ if (any != null) {
+ JexlUtils.addFieldsToContext(any, jexlContext);
+ JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(), jexlContext);
+ JexlUtils.addDerAttrsToContext(any, derAttrHandler, jexlContext);
+ }
+ jexlContext.set("value", value.getValue());
+
+ Object tValue = JexlUtils.evaluate(propagationJEXL, jexlContext);
+
+ value.setBinaryValue(null);
+ value.setBooleanValue(null);
+ value.setDateValue(null);
+ value.setDoubleValue(null);
+ value.setLongValue(null);
+ value.setStringValue(null);
+
+ if (tValue instanceof byte[]) {
+ value.setBinaryValue((byte[]) tValue);
+ return AttrSchemaType.Binary;
+ }
+
+ if (tValue instanceof Boolean) {
+ value.setBooleanValue((Boolean) tValue);
+ return AttrSchemaType.Boolean;
+ }
+
+ if (tValue instanceof OffsetDateTime) {
+ value.setDateValue((OffsetDateTime) tValue);
+ return AttrSchemaType.Date;
+ }
+
+ if (tValue instanceof Double) {
+ value.setDoubleValue((Double) tValue);
+ return AttrSchemaType.Double;
+ }
+
+ if (tValue instanceof Long) {
+ value.setLongValue((Long) tValue);
+ return AttrSchemaType.Long;
+ }
+
+ if (tValue != null) {
+ value.setStringValue(tValue.toString());
+ }
+ return AttrSchemaType.String;
+ }
+
@Override
public Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
final Item item,
- final Entity entity,
+ final Any<?> any,
final AttrSchemaType schemaType,
final List<PlainAttrValue> values) {
- if (StringUtils.isNotBlank(propagationJEXL) && values != null) {
- values.forEach(value -> {
- Object originalValue = value.getValue();
- if (originalValue != null) {
- JexlContext jexlContext = new MapContext();
- if (entity != null) {
- JexlUtils.addFieldsToContext(entity, jexlContext);
- if (entity instanceof Any) {
- JexlUtils.addPlainAttrsToContext(((Any<?>) entity).getPlainAttrs(), jexlContext);
- JexlUtils.addDerAttrsToContext(((Any<?>) entity), derAttrHandler, jexlContext);
- }
- }
- jexlContext.set("value", originalValue);
-
- value.setBinaryValue(null);
- value.setBooleanValue(null);
- value.setDateValue(null);
- value.setDoubleValue(null);
- value.setLongValue(null);
- value.setStringValue(JexlUtils.evaluate(propagationJEXL, jexlContext));
- }
- });
+ if (StringUtils.isBlank(propagationJEXL)) {
+ return JEXLItemTransformer.super.beforePropagation(item, any, schemaType, values);
+ }
- return Pair.of(AttrSchemaType.String, values);
+ AtomicReference<AttrSchemaType> tType = new AtomicReference<>();
+ if (values.isEmpty()) {
+ PlainAttrValue value = anyUtilsFactory.getInstance(any).newPlainAttrValue();
+ tType.set(beforePropagation(value, any));
+ values.add(value);
+ } else {
+ values.forEach(value -> tType.set(beforePropagation(value, any)));
}
- return JEXLItemTransformer.super.beforePropagation(item, entity, schemaType, values);
+ return Pair.of(tType.get(), values);
}
@Override
@@ -103,13 +143,11 @@ public class JEXLItemTransformerImpl implements JEXLItemTransformer {
values.forEach(value -> {
JexlContext jexlContext = new MapContext();
jexlContext.set("value", value);
+ JexlUtils.addFieldsToContext(entityTO, jexlContext);
if (entityTO instanceof AnyTO) {
- JexlUtils.addFieldsToContext((AnyTO) entityTO, jexlContext);
JexlUtils.addAttrsToContext(((AnyTO) entityTO).getPlainAttrs(), jexlContext);
JexlUtils.addAttrsToContext(((AnyTO) entityTO).getDerAttrs(), jexlContext);
JexlUtils.addAttrsToContext(((AnyTO) entityTO).getVirAttrs(), jexlContext);
- } else if (entityTO instanceof RealmTO) {
- JexlUtils.addFieldsToContext((RealmTO) entityTO, jexlContext);
}
newValues.add(JexlUtils.evaluate(pullJEXL, jexlContext));
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
index 2b0c1bf8c2..70aa90477b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
@@ -146,7 +146,7 @@ public class LDAPMembershipPropagationActions implements PropagationActions {
JexlUtils.addPlainAttrsToContext(group.getPlainAttrs(), jexlContext);
JexlUtils.addDerAttrsToContext(group, derAttrHandler, jexlContext);
- return JexlUtils.evaluate(connObjectLinkTemplate, jexlContext);
+ return JexlUtils.evaluate(connObjectLinkTemplate, jexlContext).toString();
}
private void buildManagedGroupConnObjectLinks(final ExternalResource externalResource,
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
index f118fec405..873287a73f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
@@ -50,7 +50,7 @@ public class TemplateUtils {
if (template.getValues() != null && !template.getValues().isEmpty()) {
template.getValues().forEach(value -> {
- String evaluated = JexlUtils.evaluate(value, jexlContext);
+ String evaluated = JexlUtils.evaluate(value, jexlContext).toString();
if (StringUtils.isNotBlank(evaluated)) {
result.getValues().add(evaluated);
}
@@ -68,7 +68,7 @@ public class TemplateUtils {
JexlUtils.addAttrsToContext(realmMember.getVirAttrs(), jexlContext);
if (template.getRealm() != null) {
- String evaluated = JexlUtils.evaluate(template.getRealm(), jexlContext);
+ String evaluated = JexlUtils.evaluate(template.getRealm(), jexlContext).toString();
if (StringUtils.isNotBlank(evaluated)) {
realmMember.setRealm(evaluated);
}
@@ -156,7 +156,7 @@ public class TemplateUtils {
fillMemberships((GroupableRelatableTO) realmMember, ((GroupableRelatableTO) template));
} else if (template instanceof UserTO) {
if (StringUtils.isNotBlank(((UserTO) template).getUsername())) {
- String evaluated = JexlUtils.evaluate(((UserTO) template).getUsername(), jexlContext);
+ String evaluated = JexlUtils.evaluate(((UserTO) template).getUsername(), jexlContext).toString();
if (StringUtils.isNotBlank(evaluated)) {
if (realmMember instanceof UserTO) {
((UserTO) realmMember).setUsername(evaluated);
@@ -167,7 +167,7 @@ public class TemplateUtils {
}
if (StringUtils.isNotBlank(((UserTO) template).getPassword())) {
- String evaluated = JexlUtils.evaluate(((UserTO) template).getPassword(), jexlContext);
+ String evaluated = JexlUtils.evaluate(((UserTO) template).getPassword(), jexlContext).toString();
if (StringUtils.isNotBlank(evaluated)) {
if (realmMember instanceof UserTO) {
((UserTO) realmMember).setPassword(evaluated);
@@ -186,7 +186,7 @@ public class TemplateUtils {
}
} else if (template instanceof GroupTO) {
if (StringUtils.isNotBlank(((GroupTO) template).getName())) {
- String evaluated = JexlUtils.evaluate(((GroupTO) template).getName(), jexlContext);
+ String evaluated = JexlUtils.evaluate(((GroupTO) template).getName(), jexlContext).toString();
if (StringUtils.isNotBlank(evaluated)) {
if (realmMember instanceof GroupTO) {
((GroupTO) realmMember).setName(evaluated);
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToDateItemTransformer.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToDateItemTransformer.java
index 686aecbffb..6582b984e2 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToDateItemTransformer.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToDateItemTransformer.java
@@ -21,7 +21,7 @@ package org.apache.syncope.fit.core.reference;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.types.AttrSchemaType;
-import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
import org.apache.syncope.core.persistence.api.entity.resource.Item;
import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
@@ -31,15 +31,15 @@ public class DateToDateItemTransformer implements ItemTransformer {
@Override
public Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
final Item item,
- final Entity entity,
+ final Any<?> any,
final AttrSchemaType schemaType,
final List<PlainAttrValue> values) {
if (values == null || values.isEmpty() || values.get(0).getDateValue() == null) {
- return ItemTransformer.super.beforePropagation(item, entity, schemaType, values);
- } else {
- values.get(0).setDateValue(values.get(0).getDateValue().plusDays(1));
- return Pair.of(schemaType, values);
+ return ItemTransformer.super.beforePropagation(item, any, schemaType, values);
}
+
+ values.get(0).setDateValue(values.get(0).getDateValue().plusDays(1));
+ return Pair.of(schemaType, values);
}
}
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToLongItemTransformer.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToLongItemTransformer.java
index 5324419ebe..054d142b0b 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToLongItemTransformer.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToLongItemTransformer.java
@@ -21,7 +21,7 @@ package org.apache.syncope.fit.core.reference;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.types.AttrSchemaType;
-import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
import org.apache.syncope.core.persistence.api.entity.resource.Item;
import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
@@ -31,21 +31,21 @@ public class DateToLongItemTransformer implements ItemTransformer {
@Override
public Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
final Item item,
- final Entity entity,
+ final Any<?> any,
final AttrSchemaType schemaType,
final List<PlainAttrValue> values) {
if (values == null || values.isEmpty() || values.get(0).getDateValue() == null) {
- return ItemTransformer.super.beforePropagation(item, entity, schemaType, values);
- } else {
- values.get(0).setLongValue(values.get(0).getDateValue().toInstant().toEpochMilli());
- values.get(0).setBinaryValue(null);
- values.get(0).setBooleanValue(null);
- values.get(0).setDateValue(null);
- values.get(0).setDoubleValue(null);
- values.get(0).setStringValue(null);
-
- return Pair.of(AttrSchemaType.Long, values);
+ return ItemTransformer.super.beforePropagation(item, any, schemaType, values);
}
+
+ values.get(0).setLongValue(values.get(0).getDateValue().toInstant().toEpochMilli());
+ values.get(0).setBinaryValue(null);
+ values.get(0).setBooleanValue(null);
+ values.get(0).setDateValue(null);
+ values.get(0).setDoubleValue(null);
+ values.get(0).setStringValue(null);
+
+ return Pair.of(AttrSchemaType.Long, values);
}
}
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
index 88af5f60ea..f5db2a3d42 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
@@ -473,7 +473,7 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
provision.getMapping().getItems().removeIf(item -> "mail".equals(item.getExtAttrName()));
provision.getVirSchemas().clear();
- // Date -> long (JEXL expression) -> string (as all JEXL in Syncope)
+ // Date -> long (JEXL expression) -> string
ItemTO loginDateForJexlAsLong = new ItemTO();
loginDateForJexlAsLong.setPurpose(MappingPurpose.PROPAGATION);
loginDateForJexlAsLong.setIntAttrName("loginDate");
@@ -536,7 +536,7 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
Attribute employeeNumber = AttributeUtil.find("employeeNumber", propagationAttrs);
assertNotNull(employeeNumber);
- assertEquals(String.valueOf(loginDate.toInstant().toEpochMilli()), employeeNumber.getValue().get(0));
+ assertEquals(loginDate.toInstant().toEpochMilli(), employeeNumber.getValue().get(0));
Attribute street = AttributeUtil.find("street", propagationAttrs);
assertNotNull(street);
diff --git a/fit/core-reference/src/test/resources/PrefixItemTransformer.groovy b/fit/core-reference/src/test/resources/PrefixItemTransformer.groovy
index e35e54dc8a..94e3a1dce4 100644
--- a/fit/core-reference/src/test/resources/PrefixItemTransformer.groovy
+++ b/fit/core-reference/src/test/resources/PrefixItemTransformer.groovy
@@ -23,7 +23,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair
import org.apache.syncope.common.lib.to.EntityTO
import org.apache.syncope.common.lib.types.AttrSchemaType
-import org.apache.syncope.core.persistence.api.entity.Entity
+import org.apache.syncope.core.persistence.api.entity.Any
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue
import org.apache.syncope.core.persistence.api.entity.resource.Item
import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
@@ -36,18 +36,18 @@ class PrefixItemTransformer implements ItemTransformer {
@Override
Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
Item item,
- Entity entity,
+ Any<?> any,
AttrSchemaType schemaType,
List<PlainAttrValue> values) {
if (values == null || values.isEmpty() || values.get(0).getStringValue() == null) {
- return Pair.of(schemaType, values);
- } else {
- String value = values.get(0).getStringValue();
- values.get(0).setStringValue(PREFIX + value);
-
return Pair.of(schemaType, values);
}
+
+ String value = values.get(0).getStringValue();
+ values.get(0).setStringValue(PREFIX + value);
+
+ return Pair.of(schemaType, values);
}
@Override
@@ -58,12 +58,11 @@ class PrefixItemTransformer implements ItemTransformer {
if (values == null || values.isEmpty() || values.get(0) == null) {
return values;
- } else {
- List<Object> newValues = new ArrayList<>(values);
- newValues.set(0, StringUtils.substringAfter(values.get(0).toString(), PREFIX));
-
- return newValues;
}
+
+ List<Object> newValues = new ArrayList<>(values);
+ newValues.set(0, StringUtils.substringAfter(values.get(0).toString(), PREFIX));
+
+ return newValues;
}
}
-
diff --git a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
index 6acac0dc9f..bca830d3de 100644
--- a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
+++ b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
@@ -42,9 +42,6 @@ public class WARefreshContextJob implements Job {
@Autowired
private SamlIdPMetadataGenerator metadataGenerator;
- public WARefreshContextJob() {
- }
-
@Override
public void execute(final JobExecutionContext jobExecutionContext) throws JobExecutionException {
try {