📄 resourcecatalog.java
字号:
if (temp != null) { for (int i=0; i<temp.length; i++) { filename += "__O" + temp[i]; } } temp = dreq.getArch(); if (temp != null) { for (int i=0; i<temp.length; i++) { filename += "__A" + temp[i]; } } temp = dreq.getLocale(); if (temp != null) { for (int i=0; i<temp.length; i++) { filename += "__L" + temp[i]; } } if (ext != null) { filename += "." + ext; } path += filename; return path; } public List scanDirectory(String dirPath, DownloadRequest dreq) { ArrayList list = new ArrayList(); // fix for 4474021 if (_servletContext.getRealPath(dirPath) == null) { String path = jnlpGetPath(dreq); String name = dreq.getPath().substring(path.lastIndexOf("/") + 1); JnlpResource jnlpres = new JnlpResource(_servletContext, name, dreq.getVersion(), dreq.getOS(), dreq.getArch(), dreq.getLocale(), path, dreq.getVersion()); // the file does not exist if (jnlpres.getResource() == null) return null; list.add(jnlpres); return list; } File dir = new File(_servletContext.getRealPath(dirPath)); _log.addDebug("File directory: " + dir); if (dir.exists() && dir.isDirectory()) { File[] entries = dir.listFiles(); for(int i = 0; i < entries.length; i++) { JnlpResource jnlpres = parseFileEntry(dirPath, entries[i].getName()); if (jnlpres != null) { if (_log.isDebugLevel()) { _log.addDebug("Read file resource: " + jnlpres); } list.add(jnlpres); } } } return list; } private JnlpResource parseFileEntry(String dir, String filename) { int idx = filename .indexOf("__"); if (idx == -1) return null; // Cut out name String name = filename.substring(0, idx); String rest = filename.substring(idx); // Cut out extension idx = rest.lastIndexOf('.'); String extension = ""; if (idx != -1 ) { extension = rest.substring(idx); rest = rest .substring(0, idx); } // Parse options String versionId = null; ArrayList osList = new ArrayList(); ArrayList archList = new ArrayList(); ArrayList localeList = new ArrayList(); while(rest.length() > 0) { /* Must start with __ at this point */ if (!rest.startsWith("__")) return null; rest = rest.substring(2); // Get option and argument char option = rest.charAt(0); idx = rest.indexOf("__"); String arg = null; if (idx == -1) { arg = rest.substring(1); rest = ""; } else { arg = rest.substring(1, idx); rest = rest.substring(idx); } switch(option) { case 'V': versionId = arg; break; case 'O': osList.add(arg); break; case 'A': archList.add(arg); break; case 'L': localeList.add(arg); break; default: return null; // error } } return new JnlpResource(_servletContext, name + extension, /* Resource name in URL request */ versionId, listToStrings(osList), listToStrings(archList), listToStrings(localeList), dir + filename, /* Resource name in WAR file */ versionId); } private String[] listToStrings(List list) { if (list.size() == 0) return null; return (String[])list.toArray(new String[list.size()]); } // Returns false if parsing failed private void parseVersionXML(final List versionList, final List platformList, final String dir, final JnlpResource versionRes) { if (!versionRes.exists()) return; // Parse XML into a more understandable format XMLNode root = null; try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse(new BufferedInputStream(versionRes.getResource().openStream())); doc.getDocumentElement().normalize(); // Convert document into an XMLNode structure, since we already got utility methods // to handle these. We should really use the data-binding stuff here - but that will come // later // root = XMLParsing.convert(doc.getDocumentElement()); } catch (SAXParseException err) { _log.addWarning("servlet.log.warning.xml.parsing", versionRes.getPath(), Integer.toString(err.getLineNumber()), err.getMessage()); return; } catch (Throwable t) { _log.addWarning("servlet.log.warning.xml.reading", versionRes.getPath(), t); return; } // Check that root element is a <jnlp> tag if (!root.getName().equals("jnlp-versions")) { _log.addWarning("servlet.log.warning.xml.missing-jnlp", versionRes.getPath()); return; } // Visit all <resource> elements XMLParsing.visitElements(root, "<resource>", new XMLParsing.ElementVisitor() { public void visitElement(XMLNode node) { XMLNode pattern = XMLParsing.findElementPath(node, "<pattern>"); if (pattern == null) { _log.addWarning("servlet.log.warning.xml.missing-pattern", versionRes.getPath()); } else { // Parse pattern String name = XMLParsing.getElementContent(pattern , "<name>", ""); String versionId = XMLParsing.getElementContent(pattern , "<version-id>"); String[] os = XMLParsing.getMultiElementContent(pattern, "<os>"); String[] arch = XMLParsing.getMultiElementContent(pattern, "<arch>"); String[] locale = XMLParsing.getMultiElementContent(pattern, "<locale>"); // Get return request String file = XMLParsing.getElementContent(node, "<file>"); if (versionId == null || file == null) { _log.addWarning("servlet.log.warning.xml.missing-elems", versionRes.getPath()); } else { JnlpResource res = new JnlpResource(_servletContext, name, versionId, os, arch, locale, dir + file, versionId); if (res.exists()) { versionList.add(res); if (_log.isDebugLevel()) { _log.addDebug("Read resource: " + res); } } else { _log.addWarning("servlet.log.warning.missing-file", file, versionRes.getPath()); } } } } }); // Visit all <resource> elements XMLParsing.visitElements(root, "<platform>", new XMLParsing.ElementVisitor() { public void visitElement(XMLNode node) { XMLNode pattern = XMLParsing.findElementPath(node, "<pattern>"); if (pattern == null) { _log.addWarning("servlet.log.warning.xml.missing-pattern", versionRes.getPath()); } else { // Parse pattern String name = XMLParsing.getElementContent(pattern , "<name>", ""); String versionId = XMLParsing.getElementContent(pattern , "<version-id>"); String[] os = XMLParsing.getMultiElementContent(pattern, "<os>"); String[] arch = XMLParsing.getMultiElementContent(pattern, "<arch>"); String[] locale = XMLParsing.getMultiElementContent(pattern, "<locale>"); // Get return request String file = XMLParsing.getElementContent(node, "<file>"); String productId = XMLParsing.getElementContent(node, "<product-version-id>"); if (versionId == null || file == null || productId == null) { _log.addWarning("servlet.log.warning.xml.missing-elems2", versionRes.getPath()); } else { JnlpResource res = new JnlpResource(_servletContext, name, versionId, os, arch, locale, dir + file, productId); if (res.exists()) { platformList.add(res); if (_log.isDebugLevel()) { _log.addDebug("Read platform resource: " + res); } } else { _log.addWarning("servlet.log.warning.missing-file", file, versionRes.getPath()); } } } } }); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -