private void validatePutSuccess(final Supplier<MapDefinition> mapDefSupplier,
                                    final Supplier<String> keyTextSupplier,
                                    final PutOutcome putOutcome) {
        if (warnOnDuplicateKeys) {
            if (overrideExistingValues
                && putOutcome.isSuccess()
                && putOutcome.isDuplicate().orElse(false)) {

                final MapDefinition mapDefinition = mapDefSupplier.get();
                errorReceiverProxy.log(Severity.WARNING, null, getElementId(),
                        LogUtil.message(
                                "Replaced entry for {} in map {} from stream {} as an entry already exists in the " +
                                "store and overrideExistingValues is set to true on the reference " +
                                "loader pipeline. Set warnOnDuplicateKeys to false to hide these warnings.",
                                keyTextSupplier.get(),
                                mapDefinition.getMapName(),
                                mapDefinition.getRefStreamDefinition().getStreamId()), null);

            } else if (!overrideExistingValues
                       && putOutcome.isDuplicate().orElse(false)) {
                final MapDefinition mapDefinition = mapDefSupplier.get();
                errorReceiverProxy.log(Severity.WARNING, null, getElementId(),
                        LogUtil.message(
                                "Unable to load entry for {} into map {} from stream {} as an entry already exists " +
                                "in the store and overrideExistingValues is set to false on the reference " +
                                "loader pipeline. Set warnOnDuplicateKeys to false to hide these warnings.",
                                keyTextSupplier.get(),
                                mapDefinition.getMapName(),
                                mapDefinition.getRefStreamDefinition().getStreamId()), null);
            }
        }
    }
This method applies a post processing function if we are currently within
a function element. At this stage we should have details of the function
to apply from the corresponding start element and content to apply it to
from the characters event.

@param uri       The element's Namespace URI, or the empty string.
@param localName The element's local name, or the empty string.
@param qName     The element's qualified (prefixed) name, or the empty string.
@throws org.xml.sax.SAXException The client may throw an exception during processing.
@see stroom.pipeline.filter.AbstractXMLFilter#endElement(java.lang.String,
java.lang.String, java.lang.String)
stroom-pipeline/src/main/java/stroom/pipeline/refdata/ReferenceDataFilter.java