@Override
  public URL getURL(String source) throws IOException {
    int pos = source.indexOf(TemplateConstants.SERVLET_SEPARATOR);

    if (pos == -1) {
      return null;
    }

    String servletContextName = source.substring(0, pos);

    if (servletContextName.equals(PortalUtil.getPathContext())) {
      servletContextName = PortalUtil.getServletContextName();
    }

    ServletContext servletContext = ServletContextPool.get(servletContextName);

    if (servletContext == null) {
      _log.error(
          source
              + " is not valid because "
              + servletContextName
              + " does not map to a servlet context");

      return null;
    }

    String name = source.substring(pos + TemplateConstants.SERVLET_SEPARATOR.length());

    if (_log.isDebugEnabled()) {
      _log.debug(
          name
              + " is associated with the servlet context "
              + servletContextName
              + " "
              + servletContext);
    }

    URL url = servletContext.getResource(name);

    if ((url == null) && name.endsWith("/init_custom.vm")) {
      if (_log.isWarnEnabled()) {
        _log.warn("The template " + name + " should be created");
      }

      ServletContext themeClassicServletContext =
          PortalWebResourcesUtil.getServletContext(
              PortalWebResourceConstants.RESOURCE_TYPE_THEME_CLASSIC);

      url = themeClassicServletContext.getResource("/classic/templates/init_custom.vm");
    }

    return url;
  }