@Override
  public void initContextData(Session session, Context uiSharedContext) {
    selectedMethod = uiSharedContext.getSessionManagementMethod();
    if (log.isDebugEnabled())
      log.debug(
          "Initializing configuration panel for session management method: "
              + selectedMethod
              + " for context "
              + uiSharedContext.getName());

    // If something was already configured, find the type and set the UI accordingly
    if (selectedMethod != null) {
      // If the proper type is already selected, just rebind the data
      if (shownMethodType != null && shownMethodType.isTypeForMethod(selectedMethod)) {
        if (shownMethodType.hasOptionsPanel()) shownConfigPanel.bindMethod(selectedMethod);
        return;
      }

      // Select what needs to be selected
      for (SessionManagementMethodType type : extension.getSessionManagementMethodTypes())
        if (type.isTypeForMethod(selectedMethod)) {
          // Selecting the type here will also force the selection listener to run and
          // change the config panel accordingly
          getSessionManagementMethodsComboBox().setSelectedItem(type);
          break;
        }
    }
  }
  /**
   * Changes the shown method's configuration panel (used to display brief info about the method and
   * configure it) with a new one, based on a new method type. If {@code null} is provided as a
   * parameter, nothing is shown. If the provided method type does not require configuration, a
   * simple message is shown stating that no configuration is needed.
   *
   * @param newMethodType the new method type. If null, nothing is shown. If does not require
   *     config, a message is shown, on a panel returned by {@link
   *     #getNoMethodConfigurationPanel()}).
   */
  private void changeMethodConfigPanel(SessionManagementMethodType newMethodType) {
    // If there's no new method, don't display anything
    if (newMethodType == null) {
      getConfigContainerPanel().removeAll();
      getConfigContainerPanel().setVisible(false);
      this.shownMethodType = null;
      this.shownConfigPanel = null;
      return;
    }

    // If a panel of the correct type is already shown, do nothing
    if (shownMethodType != null && newMethodType.getClass().equals(shownMethodType.getClass())) {
      return;
    }

    log.debug("Creating new panel for configuring: " + newMethodType.getName());
    this.getConfigContainerPanel().removeAll();

    // show the panel according to whether the session management type needs configuration
    if (newMethodType.hasOptionsPanel()) {
      this.shownConfigPanel = newMethodType.buildOptionsPanel(getUISharedContext());
      getConfigContainerPanel().add(this.shownConfigPanel, BorderLayout.CENTER);
    } else {
      this.shownConfigPanel = null;
      getConfigContainerPanel()
          .add(new JLabel("<html><p>" + CONFIG_NOT_NEEDED + "</p></html>"), BorderLayout.CENTER);
    }
    this.shownMethodType = newMethodType;

    this.getConfigContainerPanel().setVisible(true);
    this.getConfigContainerPanel().revalidate();
  }