private void doGetValue(final List<PipelineReference> pipelineReferences,
                            final LookupIdentifier lookupIdentifier,
                            final ReferenceDataResult referenceDataResult) {

        // An event pipeline can have multiple ref loader pipelines (PipelineReference) associated with it.
        // Each PipelineReference defines a feed to look for an effective stream in, based on the effective
        // date of the stream. Each ref stream can contain zero-many maps and a map may exist in a stream with
        // one effective date, but not in another.
        // Feeds for different PipelineReferences may contain the same maps and keys so the PipelineReferences
        // are used in strict order, with the result being taken from the first hit.
        // Once a stream has been loaded we can find out the distinct set of maps it contains and then
        // use this information to ignore it based on the lookupIdentifier. This state is held in
        // RefDataLoaderHolder.
        for (final PipelineReference pipelineReference : pipelineReferences) {

            LOGGER.trace("doGetValue - processing pipelineReference {} for {}",
                    pipelineReference, lookupIdentifier);

            // Try the state store if it is present.
            final DocRef pipeline = pipelineReference.getPipeline();
            final String mapName = lookupIdentifier.getPrimaryMapName();
            if (PlanBDoc.TYPE.equals(pipeline.getType())) {
                // TODO : @66 TEMPORARY INTEGRATION OF STATE LOOKUP USING PIPELINE AS STATE DOC REFERENCE.
                Objects.requireNonNull(planBLookup,
                        "Attempt to perform Plan B state lookup but Plan B service is not present");
                Objects.requireNonNull(pipeline.getName(), "Null name for Plan B doc ref in lookup");

                if (mapName.equalsIgnoreCase(pipeline.getName())) {
                    planBLookup.lookup(lookupIdentifier, referenceDataResult);
                }

            } else if (StateDoc.TYPE.equals(pipeline.getType())) {
                // TODO : @66 TEMPORARY INTEGRATION OF STATE LOOKUP USING PIPELINE AS STATE DOC REFERENCE.
                Objects.requireNonNull(stateLookup,
                        "Attempt to perform state lookup but state lookup service is not present");
                Objects.requireNonNull(pipeline.getName(), "Null name for state doc ref in lookup");

                if (mapName.equalsIgnoreCase(pipeline.getName())) {
                    stateLookup.lookup(lookupIdentifier, referenceDataResult);
                }

            } else if (NullSafe.test(pipelineReference.getStreamType(), StreamTypeNames.CONTEXT::equals)) {
                // Handle context data differently loading it from the current stream context.
                getValueFromNestedContextStream(
                        pipelineReference,
                        lookupIdentifier.getPrimaryMapName(),
                        lookupIdentifier.getKey(),
                        referenceDataResult);
            } else {
                getValueFromExternalRefStream(
                        pipelineReference,
                        lookupIdentifier.getEventTime(),
                        lookupIdentifier.getPrimaryMapName(),
                        lookupIdentifier.getKey(),
                        referenceDataResult);
            }

            // If a lookup is viable a RefDataValueProxy will have been added to the result
            LOGGER.trace(() -> LogUtil.message("refDataValueProxy: {}",
                    referenceDataResult.getRefDataValueProxy().orElse(null)));

            if (isTerminated()) {
                break;
            }
        }
    }
<p>
Given a {@link LookupIdentifier} and a list of ref data pipelines, ensure that
the data required to perform the lookup is in the ref store. This method will not
perform the lookup, instead it will populate the {@link ReferenceDataResult} with
a proxy object that can later be used to do the lookup.
</p>

@param pipelineReferences The references to look for reference data in.
@param lookupIdentifier   The identifier to lookup in the reference data
@param result             The reference result object containing the proxy object for performing the lookup
@return The passed result object
stroom-pipeline/src/main/java/stroom/pipeline/refdata/ReferenceData.java