@Override
  public void onUrlMapped(RequestCycle cycle, IRequestHandler handler, Url url) {
    Conversation conversation = container.getCurrentConversation(cycle);

    if (conversation == null || conversation.isTransient()) {
      return;
    }

    if (propagation == ConversationPropagation.ALL) {
      // propagate cid to bookmarkable pages via urls
      url.setQueryParameter(CID, conversation.getId());
    }
  }
  @Override
  public void onRequestHandlerExecuted(RequestCycle cycle, IRequestHandler handler) {
    Conversation conversation = container.getCurrentConversation(cycle);

    if (conversation == null) {
      return;
    }

    // propagate a conversation across non-bookmarkable page instances

    Page page = getPage(handler);
    if (!conversation.isTransient() && page != null) {
      page.setMetaData(CID_KEY, conversation.getId());
    }
  }
  public void onRequestHandlerScheduled(RequestCycle cycle, IRequestHandler handler) {
    Conversation conversation = container.getCurrentConversation(cycle);

    if (conversation == null || conversation.isTransient()) {
      return;
    }

    // propagate a converastion across non-bookmarkable page instances

    Page page = getPage(handler);
    if (page != null && !conversation.isTransient()) {
      page.setMetaData(CID_KEY, conversation.getId());
    }

    if (propagation == ConversationPropagation.ALL) {
      // propagate cid to a scheduled bookmarkable page

      PageParameters parameters = getPageParameters(handler);
      if (parameters != null) {
        parameters.add(CID, conversation.getId());
      }
    }
  }