public static List<ItemTransformer> getItemTransformers(final Item item) { List<ItemTransformer> result = new ArrayList<>(); // First consider the JEXL transformation expressions if (StringUtils.isNotBlank(item.getPropagationJEXLTransformer()) || StringUtils.isNotBlank(item.getPullJEXLTransformer())) { JEXLItemTransformer jexlTransformer = (JEXLItemTransformer) ApplicationContextProvider.getBeanFactory(). createBean(JEXLItemTransformerImpl.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false); jexlTransformer.setPropagationJEXL(item.getPropagationJEXLTransformer()); jexlTransformer.setPullJEXL(item.getPullJEXLTransformer()); result.add(jexlTransformer); } // Then other custom transformers item.getTransformers().forEach(impl -> { try { result.add(ImplementationManager.build(impl)); } catch (Exception e) { LOG.error("While building {}", impl, e); } }); return result; }
@Override public List<Object> beforePull( final Item item, final EntityTO entityTO, final List<Object> values) { if (StringUtils.isNotBlank(pullJEXL) && values != null) { List<Object> newValues = new ArrayList<>(values.size()); values.forEach(value -> { JexlContext jexlContext = new MapContext(); jexlContext.set("value", value); if (entityTO instanceof AnyTO) { JexlUtils.addFieldsToContext((AnyTO) entityTO, jexlContext); JexlUtils.addAttrTOsToContext(((AnyTO) entityTO).getPlainAttrs(), jexlContext); JexlUtils.addAttrTOsToContext(((AnyTO) entityTO).getDerAttrs(), jexlContext); JexlUtils.addAttrTOsToContext(((AnyTO) entityTO).getVirAttrs(), jexlContext); } else if (entityTO instanceof RealmTO) { JexlUtils.addFieldsToContext((RealmTO) entityTO, jexlContext); } newValues.add(JexlUtils.evaluate(pullJEXL, jexlContext)); }); return newValues; } return JEXLItemTransformer.super.beforePull(item, entityTO, values); } }
@Override public List<PlainAttrValue> beforePropagation( final Item item, final Entity entity, 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), jexlContext); } } jexlContext.set("value", originalValue.toString()); value.setBinaryValue(null); value.setBooleanValue(null); value.setDateValue(null); value.setDoubleValue(null); value.setLongValue(null); value.setStringValue(JexlUtils.evaluate(propagationJEXL, jexlContext)); } }); return values; } return JEXLItemTransformer.super.beforePropagation(item, entity, values); }