@Override
  public int doEndTag() {
    try {
      SearchContainerRowTag<R> searchContainerRowTag =
          (SearchContainerRowTag<R>) findAncestorWithClass(this, SearchContainerRowTag.class);

      ResultRow resultRow = searchContainerRowTag.getRow();

      if (index <= -1) {
        List<SearchEntry> searchEntries = resultRow.getEntries();

        index = searchEntries.size();
      }

      if (resultRow.isRestricted()) {
        _href = null;
      }

      ImageSearchEntry imageSearchEntry = new ImageSearchEntry();

      imageSearchEntry.setAlign(getAlign());
      imageSearchEntry.setColspan(getColspan());
      imageSearchEntry.setCssClass(getCssClass());
      imageSearchEntry.setRequest((HttpServletRequest) pageContext.getRequest());
      imageSearchEntry.setResponse((HttpServletResponse) pageContext.getResponse());
      imageSearchEntry.setToggleRowChecker(isToggleRowChecker());

      ServletContext servletContext = ServletContextPool.get(PortalUtil.getServletContextName());

      imageSearchEntry.setServletContext(servletContext);

      imageSearchEntry.setSrc(_src);
      imageSearchEntry.setValign(getValign());

      resultRow.addSearchEntry(index, imageSearchEntry);

      return EVAL_PAGE;
    } finally {
      index = -1;
      _src = null;

      if (!ServerDetector.isResin()) {
        align = SearchEntry.DEFAULT_ALIGN;
        colspan = SearchEntry.DEFAULT_COLSPAN;
        cssClass = SearchEntry.DEFAULT_CSS_CLASS;
        _href = null;
        name = null;
        _toggleRowChecker = false;
        valign = SearchEntry.DEFAULT_VALIGN;
      }
    }
  }
  @Override
  public int doStartTag() throws JspException {
    if (_orderable && Validator.isNull(_orderableProperty)) {
      _orderableProperty = name;
    }

    SearchContainerRowTag<R> searchContainerRowTag =
        (SearchContainerRowTag<R>) findAncestorWithClass(this, SearchContainerRowTag.class);

    if (searchContainerRowTag == null) {
      throw new JspTagException("Requires liferay-ui:search-container-row");
    }

    if (!searchContainerRowTag.isHeaderNamesAssigned()) {
      List<String> headerNames = searchContainerRowTag.getHeaderNames();

      String name = getName();

      if (Validator.isNull(name) && Validator.isNotNull(_property)) {
        name = _property;
      }

      headerNames.add(name);

      if (_orderable) {
        Map<String, String> orderableHeaders = searchContainerRowTag.getOrderableHeaders();

        if (Validator.isNotNull(_orderableProperty)) {
          orderableHeaders.put(name, _orderableProperty);
        } else if (Validator.isNotNull(_property)) {
          orderableHeaders.put(name, _property);
        } else if (Validator.isNotNull(name)) {
          orderableHeaders.put(name, name);
        }
      }
    }

    if (Validator.isNotNull(_property)) {
      return SKIP_BODY;
    } else if (Validator.isNotNull(_buffer)) {
      _sb = new StringBundler();

      pageContext.setAttribute(_buffer, _sb);

      return EVAL_BODY_INCLUDE;
    } else if (Validator.isNull(_value)) {
      return EVAL_BODY_BUFFERED;
    } else {
      return SKIP_BODY;
    }
  }
  @Override
  public int doStartTag() throws JspException {
    SearchContainerRowTag<R> searchContainerRowTag =
        (SearchContainerRowTag<R>) findAncestorWithClass(this, SearchContainerRowTag.class);

    if (searchContainerRowTag == null) {
      throw new JspTagException("Requires liferay-ui:search-container-row");
    }

    if (!searchContainerRowTag.isHeaderNamesAssigned()) {
      List<String> headerNames = searchContainerRowTag.getHeaderNames();

      String name = getName();

      if (Validator.isNotNull(name)) {
        headerNames.add(name);
      }
    }

    return EVAL_BODY_INCLUDE;
  }
  @Override
  public int doEndTag() {
    try {
      SearchContainerRowTag<R> searchContainerRowTag =
          (SearchContainerRowTag<R>) findAncestorWithClass(this, SearchContainerRowTag.class);

      ResultRow resultRow = searchContainerRowTag.getRow();

      if (Validator.isNotNull(_property)) {
        _value = String.valueOf(BeanPropertiesUtil.getObject(resultRow.getObject(), _property));
      } else if (Validator.isNotNull(_buffer)) {
        _value = _sb.toString();
      } else if (_value == null) {
        BodyContent bodyContent = getBodyContent();

        if (bodyContent != null) {
          _value = bodyContent.getString();
        } else {
          Object object = BeanPropertiesUtil.getObject(resultRow.getObject(), getName());

          _value = String.valueOf(object);
        }
      }

      if (_translate) {
        ResourceBundle resourceBundle = TagResourceBundleUtil.getResourceBundle(pageContext);

        _value = LanguageUtil.get(resourceBundle, _value);
      }

      if (index <= -1) {
        List<SearchEntry> searchEntries = resultRow.getEntries();

        index = searchEntries.size();
      }

      if (resultRow.isRestricted()) {
        _href = null;
      }

      TextSearchEntry textSearchEntry = new TextSearchEntry();

      textSearchEntry.setAlign(getAlign());
      textSearchEntry.setColspan(getColspan());
      textSearchEntry.setCssClass(getCssClass());
      textSearchEntry.setHref(String.valueOf(getHref()));
      textSearchEntry.setName(getValue());
      textSearchEntry.setTarget(getTarget());
      textSearchEntry.setTitle(getTitle());
      textSearchEntry.setTruncate(getTruncate());
      textSearchEntry.setValign(getValign());

      resultRow.addSearchEntry(index, textSearchEntry);

      return EVAL_PAGE;
    } finally {
      index = -1;
      _value = null;

      if (!ServerDetector.isResin()) {
        align = SearchEntry.DEFAULT_ALIGN;
        _buffer = null;
        colspan = SearchEntry.DEFAULT_COLSPAN;
        cssClass = SearchEntry.DEFAULT_CSS_CLASS;
        _href = null;
        name = null;
        _orderable = false;
        _orderableProperty = null;
        _property = null;
        _sb = null;
        _target = null;
        _title = null;
        _translate = false;
        valign = SearchEntry.DEFAULT_VALIGN;
      }
    }
  }