/*
   * (non-Javadoc)
   *
   * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
   */
  public int doStartTag() throws JspException {

    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();

    if (null == pageContext.getServletContext().getAttribute(getResourceHandlerAttributeName()))
      throw new IllegalStateException(
          "ResourceBundlesHandler not present in servlet context. Initialization of Jawr either failed or never occurred.");

    ResourceBundlesHandler rsHandler =
        (ResourceBundlesHandler)
            pageContext.getServletContext().getAttribute(getResourceHandlerAttributeName());
    JawrConfig jawrConfig = rsHandler.getConfig();

    if (RendererRequestUtils.refreshConfigIfNeeded(request, jawrConfig)) {
      rsHandler =
          (ResourceBundlesHandler)
              pageContext.getServletContext().getAttribute(getResourceHandlerAttributeName());
      jawrConfig = rsHandler.getConfig();
    }

    Boolean useRandomFlag = null;
    if (StringUtils.isNotEmpty(useRandomParam)) {
      useRandomFlag = Boolean.valueOf(useRandomParam);
    }
    // Renderer istance which takes care of generating the response
    BundleRenderer renderer = createRenderer(rsHandler, useRandomFlag);

    // set the debug override
    RendererRequestUtils.setRequestDebuggable(request, jawrConfig);

    try {
      BundleRendererContext ctx = RendererRequestUtils.getBundleRendererContext(request, renderer);
      renderer.renderBundleLinks(src, ctx, pageContext.getOut());
    } catch (IOException ex) {
      throw new JspException("Unexpected IOException when writing script tags for path " + src, ex);
    }

    return SKIP_BODY;
  }