/** {@inheritDoc} */
  public void action(Prognosis prognosis, Message savedMessage) throws BusinessException {
    LOGGER.info("Prognosis received");
    String entityAddress = prognosis.getCongestionPoint();
    String errorMessage = null;

    try {
      corePlanboardValidatorService.validatePTUDuration(prognosis.getPTUDuration());
      corePlanboardValidatorService.validateTimezone(prognosis.getTimeZone());
      dsoPlanboardValidatorService.validatePtus(prognosis.getPTU());
      dsoPlanboardValidatorService.validateCongestionPoint(entityAddress);
      dsoPlanboardValidatorService.validateAggregator(
          prognosis.getMessageMetadata().getSenderDomain(), entityAddress, prognosis.getPeriod());
      dsoPlanboardValidatorService.validatePeriod(prognosis.getPeriod());
      dsoPlanboardValidatorService.validatePrognosisSequenceNumber(prognosis);
    } catch (BusinessValidationException e) {
      errorMessage = e.getBusinessError().getError();
      LOGGER.debug(errorMessage, e);
    }

    sendPrognosisResponse(prognosis, errorMessage);
    if (errorMessage != null) {
      return;
    }

    coordinator.invokeWorkflow(prognosis, savedMessage);
  }
 /**
  * Sends the prognosis response XML to AGR.
  *
  * @param prognosis
  * @param errorMessage
  */
 public void sendPrognosisResponse(Prognosis prognosis, String errorMessage) {
   PrognosisResponse prognosisResponse =
       createPrognosisResponse(
           prognosis.getCongestionPoint(),
           prognosis.getMessageMetadata().getConversationID(),
           prognosis.getMessageMetadata().getSenderDomain(),
           errorMessage);
   prognosisResponse.setPrognosisSequence(prognosis.getSequence());
   putMessageIntoOutgoingQueue(prognosisResponse);
 }