001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: * $Header:$
018: */
019: package org.apache.beehive.netui.util.config;
020:
021: import org.apache.beehive.netui.util.config.bean.NetUIConfig;
022: import org.apache.beehive.netui.util.config.parser.NetUIConfigParser;
023: import org.apache.beehive.netui.util.logging.Logger;
024: import org.apache.beehive.netui.util.xml.XmlInputStreamResolver;
025:
026: /**
027: * <p>
028: * Utility class for reading properties from the NetUI configuration file.
029: * </p>
030: * <p>
031: * The webapp runtime is read from the {@link XmlInputStreamResolver} passed to the
032: * {@link #init(XmlInputStreamResolver)} method. The configuration should be initialized with
033: * this method before the first call to the {@link #getConfig()} method. If the configuration
034: * has not been initialized, {@link #getConfig()} will initialize a default, minimal runtime
035: * configuration. Depending on the web application, this default configuration
036: * may lead to runtime errors.
037: * </p>
038: */
039: public class ConfigUtil {
040:
041: private static final Logger LOGGER = Logger
042: .getInstance(ConfigUtil.class);
043: private static NetUIConfig CONFIG_BEAN = null;
044:
045: /* do not construct */
046: protected ConfigUtil() {
047: }
048:
049: /**
050: * <p>
051: * Initialize the NetUI configuration JavaBean.
052: * </p>
053: * <p>
054: * This method can be called exactly once in the a given J2EE web application. The provided
055: * {@link XmlInputStreamResolver} is used to resolve an {@link java.io.InputStream} that references
056: * a NetUI config file instance. If an error occurs loading the configuration, a
057: * {@link ConfigInitializationException} exception will be thrown.
058: * </p>
059: *
060: * @param xmlInputStreamResolver a resolver that can provide an InputStream to the config file
061: * @throws ConfigInitializationException thrown when an error occurs loading the configuration file
062: * or when the configuration is reinitialized.
063: */
064: public static void init(
065: XmlInputStreamResolver xmlInputStreamResolver)
066: throws ConfigInitializationException {
067:
068: if (CONFIG_BEAN != null)
069: throw new ConfigInitializationException(
070: "Config initialization already completed; unable to reload the NetUI config file.");
071:
072: internalInit(xmlInputStreamResolver);
073: }
074:
075: public static boolean isInit() {
076: return CONFIG_BEAN != null;
077: }
078:
079: /**
080: * Get the NetUI configuration JavaBean.
081: *
082: * @return a JavaBean that provides configuration information for the NetUI runtime.
083: */
084: public static NetUIConfig getConfig() {
085: if (CONFIG_BEAN != null)
086: return CONFIG_BEAN;
087: /*
088: If the config file wasn't initialized, attempt to initialize a configuration
089: from the default config file contained in the utility JAR.
090: */
091: else {
092: /*
093: This hopefully never happens and would only occur if the default config file isn't found in the util JAR.
094: */
095: LOGGER
096: .error("An error occurred parsing the default config file. "
097: + "The NetUI runtime is not properly configured.");
098:
099: throw new IllegalStateException(
100: "The NetUI runtime could not find the default config file. The webapp may not function properly.");
101: }
102: }
103:
104: protected static void internalInit(
105: XmlInputStreamResolver xmlInputStreamResolver) {
106: NetUIConfigParser configParser = new NetUIConfigParser();
107: CONFIG_BEAN = configParser.parse(xmlInputStreamResolver);
108: }
109: }
|