private Purpose mergePurposes(final Purpose base, final Purpose override) {
        if (base == null || override == null) {
            if (base == null && override == null) {
                return null;
            }

            return Objects.requireNonNullElse(override, base);
        } else {
            final Purpose purpose = base.newCopyBuilder().build();
            mergeValue(override::getAuthorisations, purpose::setAuthorisations);
            mergeValue(override::getClassification, purpose::setClassification);
            mergeValue(override::getJustification, purpose::setJustification);
            mergeValue(override::getStakeholders, purpose::setStakeholders);
            mergeValue(override::getExpectedOutcome, purpose::setExpectedOutcome);
            mergeValue(override::getSubject, purpose::setSubject);

            // Combine the list of Data items from each
            purpose.getData().clear();
            purpose.getData().addAll(base.getData());
            purpose.getData().addAll(override.getData());
            return purpose;
        }
    }
Shallow merge of the two Purpose objects
stroom-event-logging/stroom-event-logging-impl/src/main/java/stroom/event/logging/impl/StroomEventLoggingServiceImpl.java