public IMarkupFragment getMarkup() {
   IMarkupFragment enclosureMarkup = null;
   if (this.enclosureMarkupAsString == null) {
     final IMarkupFragment markup = super.getMarkup();
     if (markup != null && markup != Markup.NO_MARKUP) {
       enclosureMarkup = markup;
       this.enclosureMarkupAsString = markup.toString(true);
     }
   } else {
     enclosureMarkup = Markup.of(this.enclosureMarkupAsString);
   }
   return enclosureMarkup;
 }
  /**
   * Gets the header part of the Panel/Border. Returns null if it doesn't have a header tag.
   *
   * @param container
   * @param id
   * @param markup
   * @return the header part for this panel/border or null if it doesn't have a wicket:head tag.
   */
  private HeaderPartContainer getHeaderPart(
      final WebMarkupContainer container, final String id, final IMarkupFragment markup) {
    // Create a HtmlHeaderContainer for the header tag found
    final MarkupElement element = markup.get(0);
    if (element instanceof WicketTag) {
      final WicketTag wTag = (WicketTag) element;
      if ((wTag.isHeadTag() == true) && (wTag.getNamespace() != null)) {
        // Create the header container and associate the markup with it
        return new HeaderPartContainer(id, container, markup);
      }
    }

    throw new WicketRuntimeException(
        "Programming error: expected a WicketTag: " + markup.toString());
  }
  /**
   * Search for the child's markup in the associated markup file.
   *
   * @param parent The container expected to contain the markup for child
   * @param child The child component to find the markup for
   * @return The markup associated with the child
   */
  @Override
  public IMarkupFragment getMarkup(final MarkupContainer parent, final Component child) {
    Args.notNull(tagName, "tagName");

    IMarkupFragment associatedMarkup = parent.getAssociatedMarkup();
    if (associatedMarkup == null) {
      throw new MarkupNotFoundException(
          "Failed to find markup file associated. "
              + Classes.simpleName(parent.getClass())
              + ": "
              + parent.toString());
    }

    // Find <wicket:panel>
    IMarkupFragment markup = MarkupUtil.findStartTag(associatedMarkup, tagName);
    if (markup == null) {
      throw new MarkupNotFoundException(
          "Expected to find <wicket:"
              + tagName
              + "> in associated markup file. Markup: "
              + associatedMarkup.toString());
    }

    // If child == null, than return the markup fragment starting with <wicket:panel>
    if (child == null) {
      return markup;
    }

    // Find the markup for the child component
    associatedMarkup = markup.find(child.getId());
    if (associatedMarkup != null) {
      return associatedMarkup;
    }

    associatedMarkup = searchMarkupInTransparentResolvers(parent, markup, child);
    if (associatedMarkup != null) {
      return associatedMarkup;
    }

    return findMarkupInAssociatedFileHeader(parent, child);
  }