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

📄 configparser.java

📁 非常接近C/S操作方式的Java Ajax框架-ZK 用ZK框架使你的B/S应用程序更漂亮更易操作。 官网:www.zkoss.org
💻 JAVA
字号:
/* ConfigParser.java{{IS_NOTE	Purpose:			Description:			History:		Sun Mar 26 18:09:10     2006, Created by tomyeh}}IS_NOTECopyright (C) 2006 Potix Corporation. All Rights Reserved.{{IS_RIGHT	This program is distributed under GPL Version 2.0 in the hope that	it will be useful, but WITHOUT ANY WARRANTY.}}IS_RIGHT*/package org.zkoss.zk.ui.sys;import java.util.Iterator;import java.util.Map;import java.net.URL;import javax.servlet.jsp.el.ExpressionEvaluator;import org.zkoss.lang.Classes;import org.zkoss.util.resource.Locator;import org.zkoss.util.logging.Log;import org.zkoss.idom.Element;import org.zkoss.idom.input.SAXBuilder;import org.zkoss.idom.util.IDOMs;import org.zkoss.zk.ui.sys.UiEngine;import org.zkoss.zk.ui.sys.DesktopCacheProvider;import org.zkoss.zk.ui.sys.UiFactory;import org.zkoss.zk.ui.sys.LocaleProvider;import org.zkoss.zk.ui.sys.TimeZoneProvider;import org.zkoss.zk.ui.UiException;import org.zkoss.zk.ui.util.Configuration;import org.zkoss.zk.ui.metainfo.DefinitionLoaders;/** * Used to parse WEB-INF/zk.xml into {@link Configuration}. * * @author tomyeh */public class ConfigParser {	private static final Log log = Log.lookup(ConfigParser.class);	/** Parses zk.xml, specified by url, into the configuration.	 *	 * @param url the URL of zk.xml.	 */	public void parse(URL url, Configuration config, Locator locator)	throws Exception {		if (url == null || config == null)			throw new IllegalArgumentException("null");		log.info("Parsing "+url);		final Element root = new SAXBuilder(false, false, true)			.build(url).getRootElement();		for (Iterator it = root.getElements().iterator(); it.hasNext();) {			final Element el = (Element)it.next();			final String elnm = el.getName();			if ("listener".equals(elnm)) {				final String clsnm =					IDOMs.getRequiredElementValue(el, "listener-class");				try {					final Class cls = Classes.forNameByThread(clsnm);					config.addListener(cls);				} catch (Throwable ex) {					throw new UiException("Unable to load "+clsnm+", at "+el.getLocator(), ex);				}			} else if ("richlet".equals(elnm)) {				final String clsnm =					IDOMs.getRequiredElementValue(el, "richlet-class");				final String path =					IDOMs.getRequiredElementValue(el, "richlet-url");				final Map params =					IDOMs.parseParams(el, "init-param", "param-name", "param-value");				try {					config.addRichlet(path, clsnm, params);				} catch (Throwable ex) {					throw new UiException("Wrong richlet definition at "+el.getLocator(), ex);				}			} else if ("desktop-config".equals(elnm)) {			//desktop-config			//	theme-uri			//	desktop-timeout			//	file-check-period				parseThemeUri(config, el);				Integer v = parseInteger(el, "desktop-timeout", false);				if (v != null) config.setDesktopMaxInactiveInterval(v);				v = parseInteger(el, "file-check-period", true);				if (v != null) System.setProperty("org.zkoss.util.resource.checkPeriod", v.toString());					//System-wide property			} else if ("session-config".equals(elnm)) {			//session-config			//	session-timeout			//	max-desktops-per-session			//	timeout-uri				Integer v = parseInteger(el, "session-timeout", false);				if (v != null) config.setSessionMaxInactiveInterval(v);				v = parseInteger(el, "max-desktops-per-session", true);				if (v != null) config.setMaxDesktops(v);				final String s = el.getElementValue("timeout-uri", true);				if (s != null) config.setTimeoutURI(s);			} else if ("language-config".equals(elnm)) {			//language-config			//	addon-uri				parseLangAddon(locator, el);			} else if ("system-config".equals(elnm)) {			//system-config			//	max-event-threads			//  max-upload-size			//	response-charset			//  cache-provider-class			//  ui-factory-class			//	engine-class				Integer v = parseInteger(el, "max-event-threads", true);				if (v != null) config.setMaxEventThreads(v);								v = parseInteger(el, "max-upload-size", true);				if (v != null) config.setMaxUploadSize(v);				final String s = el.getElementValue("response-charset", true);				if (s != null) config.setCharset(s);				Class cls = parseClass(el, "cache-provider-class",					DesktopCacheProvider.class);				if (cls != null) config.setDesktopCacheProviderClass(cls);				cls = parseClass(el, "ui-factory-class", UiFactory.class);				if (cls != null) config.setUiFactoryClass(cls);				cls = parseClass(el, "engine-class", UiEngine.class);				if (cls != null) config.setUiEngineClass(cls);				cls = parseClass(el, "locale-provider-class", LocaleProvider.class);				if (cls != null) config.setLocaleProviderClass(cls);				cls = parseClass(el, "timeZone-provider-class", TimeZoneProvider.class);				if (cls != null) config.setTimeZoneProviderClass(cls);			} else if ("el-config".equals(elnm)) {			//el-config			//	evaluator-class				Class cls = parseClass(el, "evaluator-class", ExpressionEvaluator.class);				if (cls != null) System.setProperty("org.zkoss.el.ExpressionEvaluator.class", cls.getName());					//System-wide property; reason: used in zcommon.jar			} else if ("log".equals(elnm)) {				final String base = el.getElementValue("log-base", true);				if (base != null)					org.zkoss.util.logging.LogService.init(base, null); //start the log service			} else if ("error-page".equals(elnm)) {				final String clsnm =					IDOMs.getRequiredElementValue(el, "exception-type");				final String loc =					IDOMs.getRequiredElementValue(el, "location");				final Class cls;				try {					cls = Classes.forNameByThread(clsnm);				} catch (Throwable ex) {					throw new UiException("Unable to load "+clsnm+", at "+el.getLocator(), ex);				}				config.addErrorPage(cls, loc);			} else if ("preference".equals(elnm)) {				final String nm = IDOMs.getRequiredElementValue(el, "name");				final String val = IDOMs.getRequiredElementValue(el, "value");				config.setPreference(nm, val);			} else {				throw new UiException("Unknown element: "+elnm+", at "+el.getLocator());			}		}	}	/** Parse desktop-config/theme-uri. */	private static void parseThemeUri(Configuration config, Element conf) {		for (Iterator it = conf.getElements("theme-uri").iterator();		it.hasNext();) {			final Element el = (Element)it.next();			String uri = el.getText().trim();			if (uri.length() != 0) config.addThemeURI(uri);		}	}	/** Parse language-config/addon-uri. */	private static void parseLangAddon(Locator locator, Element conf) {		for (Iterator it = conf.getElements("addon-uri").iterator();		it.hasNext();) {			final Element el = (Element)it.next();			final String path = el.getText().trim();			final URL url = locator.getResource(path);			if (url == null)				log.error("File not found: "+path+", at "+el.getLocator());			else				DefinitionLoaders.addLanguage(locator, url);		}	}	/** Parse a class, if specified, whether it implements cls.	 */	private static Class parseClass(Element el, String elnm, Class cls) {		final String clsnm = el.getElementValue(elnm, true);		if (clsnm != null && clsnm.length() != 0) {			try {				final Class klass = Classes.forNameByThread(clsnm);				if (cls != null && !cls.isAssignableFrom(klass))					throw new UiException(clsnm+" must implement "+cls.getName()+", "+el.getLocator());				log.info("Using "+clsnm+" for "+cls);				return klass;			} catch (Throwable ex) {				throw new UiException("Unable to load "+clsnm+", at "+el.getLocator());			}		}		return null;	}	/** Configures an integer. */	private static Integer parseInteger(Element el, String subnm,	boolean positiveOnly) throws UiException {		String val = el.getElementValue(subnm, true);		if (val != null && val.length() > 0) {			try { 				final int v = Integer.parseInt(val);				if (positiveOnly && v <= 0)					throw new UiException("The "+subnm+" element must be a positive number, not "+val+", at "+el.getLocator());				return new Integer(v);			} catch (NumberFormatException ex) { //eat				throw new UiException("The "+subnm+" element must be a number, not "+val+", at "+el.getLocator());			}		}		return null;	}}

⌨️ 快捷键说明

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