⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resourcecatalog.java

📁 编写程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		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 + -