class OperationConductor implements OnOperationCompleteListener {

    protected void loadPriorProgress()
    {
        AgendaProgress agendaProgress = executorContext.getLaunchDataWrapper().getLastProgressObject(AgendaProgress.class);

        if(agendaProgress == null
            || agendaProgress.getOperationProgress() == null
            || pendingOperations.size() == 0)
        {
            logger.debug("No prior progress loaded");
            return;
        }

        logger.debug("Processing prior progress");

        Map<String, OperationWrapper> operationWrapperMap = new HashMap<>();
        pendingOperations.forEach(opWrapper -> operationWrapperMap.put(opWrapper.getOperation().getName(), opWrapper));

        // Successful Ops
        Arrays.stream(agendaProgress.getOperationProgress())
            .filter(operationProgress ->
                isOperationSuccessful(operationProgress)
                && operationProgress.getOperation() != null)
            .forEach(operationProgress ->
            {
                OperationWrapper operationWrapper = operationWrapperMap.get(operationProgress.getOperation());
                if(operationWrapper != null)
                {
                    operationWrapper.setSuccess(true);
                    operationWrapper.setOutputPayload(operationProgress.getResultPayload());
                    postProcessCompletedOperation(operationWrapper);
                }
            });

        if(completedOperations.size() > 0)
        {
            logger.info("Completed Operation Progress found for operations: {}",
                completedOperations.stream().map(ow -> ow.getOperation().getName()).collect(Collectors.joining(",")));
            // increment the completed count in the reporter (no reporting will be performed for already completed operations, for now this is just a numeric)
            executorContext.getAgendaProgressReporter().incrementCompletedOperationCount(completedOperations.size());
        }

        // Incomplete / Failed Ops (everything else, other than WAITING)
        Arrays.stream(agendaProgress.getOperationProgress())
            .filter(operationProgress ->
                !isOperationSuccessful(operationProgress)
                && operationProgress.getProcessingState() != ProcessingState.WAITING
                && operationProgress.getOperation() != null)
            .forEach(operationProgress ->
            {
                OperationWrapper operationWrapper = operationWrapperMap.get(operationProgress.getOperation());
                if(operationWrapper != null)
                {
                    operationWrapper.setPriorExecutionOperationProgress(operationProgress);
                }
            });
    }

    public  OperationConductor(Collection<Operation> operations, ExecutorContext executorContext,
        List<OperationConductorModifier> completedOperationModifiers);
    public  OperationConductor(Collection<Operation> operations, ExecutorContext executorContext);

}