/** {@inheritDoc} */
  public void handleEvent(@Observes FlexOfferRevocationEvent event) {
    LOGGER.info(LOG_COORDINATOR_START_HANDLING_EVENT, event);
    FlexOfferRevocation flexOfferRevocation = event.getFlexOfferRevocation();

    DispositionAcceptedRejected responseResult = DispositionAcceptedRejected.ACCEPTED;
    String responseResultMessage = "Flex Offer has been revoked.";

    List<PlanboardMessage> flexOfferMessages = null;

    try {
      long flexOfferSequence = flexOfferRevocation.getSequence();
      String senderDomain = flexOfferRevocation.getMessageMetadata().getSenderDomain();

      // Retrieving related flex offer details.
      Map<Integer, PtuFlexOffer> flexOffers =
          planboardBusinessService.findPtuFlexOffer(flexOfferSequence, senderDomain);

      // Checking whether flex offers exist
      planboardValidatorService.checkRelatedFlexOffersExist(flexOfferRevocation, flexOffers);

      // Retrieving related plan board messages
      flexOfferMessages =
          planboardBusinessService.findPlanboardMessages(
              flexOfferSequence, DocumentType.FLEX_OFFER, senderDomain);

      validateIfOrdered(flexOfferSequence, senderDomain);

      // Checking whether plan board messages exist
      planboardValidatorService.checkRelatedPlanboardMessagesExist(
          flexOfferRevocation, flexOfferMessages);

      // Checking that no flex offer has a PTU in the operate or later phase.
      // Making sure that all PTUs are not in the operate or later phase we make sure that all PTUs
      // are in the future
      planboardValidatorService.checkPtuPhase(flexOfferRevocation, flexOffers);
    } catch (BusinessValidationException e) {
      LOGGER.warn("Validation error for a flex offer: " + e.getMessage(), e);
      responseResult = DispositionAcceptedRejected.REJECTED;
      responseResultMessage = e.getMessage();
    }

    // Setting the status REVOKED
    if (responseResult == DispositionAcceptedRejected.ACCEPTED) {
      setPlanboardMessageStatus(flexOfferMessages);
    }

    // Sending the response
    FlexOfferRevocationResponse response = buildResponse(flexOfferRevocation);
    response.setResult(responseResult);
    response.setMessage(responseResultMessage);
    jmsHelperService.sendMessageToOutQueue(XMLUtil.messageObjectToXml(response));
    LOGGER.info(LOG_COORDINATOR_FINISHED_HANDLING_EVENT, event);
  }
 private FlexOfferRevocationResponse buildResponse(FlexOfferRevocation flexOfferRevocation) {
   FlexOfferRevocationResponse response = new FlexOfferRevocationResponse();
   response.setSequence(flexOfferRevocation.getSequence());
   MessageMetadata metadata =
       new MessageMetadataBuilder()
           .messageID()
           .timeStamp()
           .conversationID(flexOfferRevocation.getMessageMetadata().getConversationID())
           .senderDomain(config.getProperty(ConfigParam.HOST_DOMAIN))
           .senderRole(USEFRole.DSO)
           .recipientDomain(flexOfferRevocation.getMessageMetadata().getSenderDomain())
           .recipientRole(flexOfferRevocation.getMessageMetadata().getSenderRole())
           .precedence(ROUTINE)
           .build();
   response.setMessageMetadata(metadata);
   return response;
 }