resourcehandlerimpl.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 748 行 · 第 1/2 页

JAVA
748
字号
          else if ((parts.length > start + 2) &&                   (parts[start + 1]).equals(rnParts[0]))            matchStart = start + 1;          else {            matchStart = -1;          }          if (matchStart != -1 && rnParts.length > 1) {            for (int k = 1; k < rnParts.length; k++) {              if (parts.length < matchStart + k + 1 ||                  !rnParts[k].equals(parts[matchStart + k])) {                matchStart = -1;                break;              }            }          }        }        if (matchStart == -1)          continue;        if (extaPartsCount == 2) {          String lver = parts[matchStart - 1];          String rver = parts[matchStart + rnParts.length];          if ((entryLibVer == null || (compareVersions(lver, entryLibVer)) > 0) &&              (entryResVer == null || (compareVersions(rver, entryResVer)) > 0))          {            entryLibVer = lver;            entryResVer = rver;            entryJarEntry = jarEntry;            entryUrl = url;          }        }        else if (extaPartsCount == 1) {          if ((matchStart + rnParts.length) == parts.length) {            String lver = parts[matchStart - 1];            if (entryLibVer == null ||                (compareVersions(lver, entryLibVer) > 0)) {              entryLibVer = lver;              entryResVer = null;              entryJarEntry = jarEntry;              entryUrl = url;            }          }          else {            String rver = parts[parts.length - 1];            if (entryLibVer == null &&                (entryResVer == null ||                 compareVersions(rver, entryResVer) > 0)              ) {              entryLibVer = null;              entryResVer = rver;              entryJarEntry = jarEntry;              entryUrl = url;            }          }        }        else if (extaPartsCount == 0) {          if (entryJarEntry == null) {            entryLibVer = null;            entryResVer = null;            entryJarEntry = jarEntry;            entryUrl = url;          }        }      }    }    if (entryJarEntry != null) {      if (path != null && entryUrl.equals(urls[0]))        result = Vfs.lookup(entryUrl);      else        result = Vfs.lookup(entryUrl + "/" + entryJarEntry);    }    return result;  }  private Path locateResource(final Path root,                              String resourceName,                              String libraryName,                              String locale)    throws IOException  {    Path result = null;    if (libraryName != null) {      Path libPath = root.lookup((locale == null ? "./" : "./" + locale + "/") +                                 libraryName);      if (libPath.exists()) {        String []paths = libPath.list();        String version = null;        Path base = null;        for (String s : paths) {          Path test = libPath.lookup("./" + s + "/" + resourceName);          if (test.exists() && (test.isFile() || test.list().length > 0)) {            if (version == null || compareVersions(s, version) > 0) {              base = test;              version = s;            }          }        }        if (base == null) {          Path temp = libPath.lookup("./" + resourceName);          if (temp.exists() && temp.isFile())            result = temp;          else            base = temp;        }        else if (base.isFile()) {          result = base;        }        if (result == null && base != null && base.isDirectory()) {          paths = base.list();          version = null;          for (String s : paths) {            Path test = base.lookup("./" + s);            if (test.isFile() &&                (version == null || compareVersions(s, version) > 0)) {              result = test;              version = s;            }          }        }      }    }    else {      Path base = root.lookup((locale == null ? "./" : "./" + locale + "/") +                              resourceName);      if (base.isDirectory()) {        String []paths = base.list();        String version = null;        for (String s : paths) {          Path test = base.lookup("./" + s);          if (test.isFile() &&              (version == null || compareVersions(s, version) > 0)) {            result = test;            version = s;          }        }      }      else if (base.isFile()) {        result = base;      }    }    return result;  }  private int compareVersions(String ver1, String ver2)  {    String []ver1Parts = _versionPattern.split(ver1);    String []ver2Parts = _versionPattern.split(ver2);    int len;    if (ver1Parts.length > ver2Parts.length)      len = ver2Parts.length;    else      len = ver1Parts.length;    for (int i = 0; i < len; i++) {      char []ver1Part = ver1Parts[i].toCharArray();      char []ver2Part = ver2Parts[i].toCharArray();      if (ver1Part.length == ver2Part.length) {        for (int j = 0; j < ver2Part.length; j++) {          char c1 = ver1Part[j];          char c2 = ver2Part[j];          if (c1 != c2)            return c1 - c2;        }      }      else {        return ver1Part.length - ver2Part.length;      }    }    return ver1Parts.length - ver2Parts.length;  }  public boolean isResourceRequest(FacesContext context)  {    ExternalContext extContext = context.getExternalContext();    String pathInfo = extContext.getRequestPathInfo();    if (pathInfo != null)      return pathInfo.indexOf(RESOURCE_IDENTIFIER) > -1;    else      return extContext.getRequestServletPath().indexOf(RESOURCE_IDENTIFIER) >             -1;  }  public void handleResourceRequest(FacesContext context)    throws IOException  {    ExternalContext extContext = context.getExternalContext();    HttpServletRequest request = (HttpServletRequest) extContext.getRequest();    HttpServletResponse response      = (HttpServletResponse) extContext.getResponse();    String method = request.getMethod();    if (!method.equalsIgnoreCase("GET") &&        !method.equalsIgnoreCase("POST") &&        !method.equalsIgnoreCase("HEAD")) {      response.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED,                         "Method not implemented");      return;    }    String resourceName;    String pathInfo = request.getPathInfo();    String servletPath = request.getServletPath();    if (pathInfo == null) {      int extIdx = servletPath.lastIndexOf('.');      resourceName = servletPath.substring(servletPath.indexOf(        RESOURCE_IDENTIFIER) + RESOURCE_IDENTIFIER.length(), extIdx);    }    else {      if ("".equals(servletPath)) {        String suffix          = extContext.getInitParameter(ViewHandler.DEFAULT_SUFFIX_PARAM_NAME);        if (suffix == null)          suffix = ViewHandler.DEFAULT_SUFFIX;        if (pathInfo.endsWith(suffix)) {          resourceName            = pathInfo.substring(pathInfo.indexOf(RESOURCE_IDENTIFIER) +                                 RESOURCE_IDENTIFIER.length(),                                 pathInfo.length() - suffix.length());        }        else {          resourceName            = pathInfo.substring(pathInfo.indexOf(RESOURCE_IDENTIFIER) +                                 RESOURCE_IDENTIFIER.length());        }      }      else {        resourceName          = pathInfo.substring(pathInfo.indexOf(RESOURCE_IDENTIFIER) +                               RESOURCE_IDENTIFIER.length());      }    }    String temp = request.getParameter("ln");    String libraryName;    String locale;    if (temp != null && !"".equals(temp))      libraryName = temp;    else      libraryName = null;    temp = request.getParameter("loc");    if (temp != null && !"".equals(temp))      locale = temp;    else      locale = null;    final Resource resource;    if (locale != null)      resource = createResource(context,                                resourceName,                                libraryName,                                null,                                locale);    else      resource = createResource(resourceName, libraryName);    if (resource != null) {      Map<String, String> headers = resource.getResponseHeaders();      for (Map.Entry<String, String> entry : headers.entrySet()) {        response.setHeader(entry.getKey(), entry.getValue());      }      response.setContentType(resource.getContentType());      if (resource.userAgentNeedsUpdate(context)) {        if (! method.equalsIgnoreCase("HEAD")) {          InputStream is = resource.getInputStream();          OutputStream os = response.getOutputStream();          TempBuffer tempBuffer = TempBuffer.allocate();          try {            byte []buffer = tempBuffer.getBuffer();            int length = buffer.length;            int len;            while ((len = is.read(buffer, 0, length)) > 0)              os.write(buffer, 0, len);          }          finally {            TempBuffer.free(tempBuffer);            tempBuffer = null;            is.close();          }        }      }      else {        response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);      }    }    else {      response.sendError(HttpServletResponse.SC_NOT_FOUND);    }  }  @Override  public String getRendererTypeForResourceName(String resourceName)  {    if (resourceName == null)      return null;    int suffixIdx = resourceName.lastIndexOf('.');    if (suffixIdx == -1)      return null;    String suffix = resourceName.substring(suffixIdx);    if (".js".equalsIgnoreCase(suffix))      return ("javax.faces.resource.Script");    else if (".css".equalsIgnoreCase(suffix))      return "javax.faces.resource.Stylesheet";    else      return null;  }  public String toString()  {    return "ResourceHandlerImpl[]";  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?