@Nonnull
  @Override
  protected Event doExecute(
      final @Nonnull RequestContext springRequestContext,
      final @Nonnull ProfileRequestContext profileRequestContext) {

    final ParameterMap params = springRequestContext.getRequestParameters();
    final String service = params.get(ProtocolParam.Service.id());
    if (service == null) {
      return ProtocolError.ServiceNotSpecified.event(this);
    }
    final String ticket = params.get(ProtocolParam.Ticket.id());
    if (ticket == null) {
      return ProtocolError.TicketNotSpecified.event(this);
    }
    final TicketValidationRequest ticketValidationRequest =
        new TicketValidationRequest(service, ticket);

    final String renew = params.get(ProtocolParam.Renew.id());
    if (renew != null) {
      ticketValidationRequest.setRenew(true);
    }
    ticketValidationRequest.setPgtUrl(params.get(ProtocolParam.PgtUrl.id()));

    final MessageContext messageContext = new MessageContext();
    messageContext.setMessage(ticketValidationRequest);
    profileRequestContext.setInboundMessageContext(messageContext);
    FlowStateSupport.setTicketValidationRequest(springRequestContext, ticketValidationRequest);
    return ActionSupport.buildProceedEvent(this);
  }