it.jnrpe.server.config.CJNRPEConfiguration.java Source code

Java tutorial

Introduction

Here is the source code for it.jnrpe.server.config.CJNRPEConfiguration.java

Source

/*
 * Copyright (c) 2008 Massimiliano Ziccardi
 *  
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License.
 */
package it.jnrpe.server.config;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.InputSource;

/**
 * This class is a factory that all objects can use to access the whole server
 * configuration
 * 
 * @author Massimiliano Ziccardi
 */
public class CJNRPEConfiguration {
    private Log m_Logger = LogFactory.getLog(CJNRPEConfiguration.class);

    protected static CJNRPEConfiguration m_Instance = null;
    protected static CConfiguration m_Configuration = null;

    /**
     * Default constructor added so the class can be inheritable.
     */
    public CJNRPEConfiguration() {
    }

    private CJNRPEConfiguration(File fileName) {
        if (!fileName.exists() || !fileName.canRead()) {
            // TODO: throw an exception
            m_Logger.fatal("UNABLE TO READ CONFIGURATION FILE " + fileName.getAbsolutePath());
            System.exit(-1);
        }

        try {
            Digester digester = DigesterLoader.createDigester(
                    new InputSource(System.class.getResourceAsStream("/it/jnrpe/server/config/digester.xml")));
            // turn on XML schema validation
            digester.setFeature("http://xml.org/sax/features/validation", true);
            digester.setFeature("http://apache.org/xml/features/validation/schema", true);
            digester.setFeature("http://xml.org/sax/features/namespaces", true);
            digester.setEntityResolver(new CConfigValidationEntityResolver());
            digester.setErrorHandler(new CConfigErrorHandler());

            m_Configuration = (CConfiguration) digester.parse(fileName);
        } catch (Exception e) {
            // TODO: throw an exception
            m_Logger.fatal("UNABLE TO PARSE CONFIGURATION : " + e.getMessage());
            System.exit(-1);
        }
    }

    public static CJNRPEConfiguration getInstance() {
        return m_Instance;
    }

    public static void init(String sFileName) {
        m_Instance = new CJNRPEConfiguration(new File(sFileName));
    }

    /**
     * Returns a Map containing the definition of all the commands
     * @return
     */
    public Map getCommandDefinitions() {
        CCommands cc = m_Configuration.getCommands();

        if (cc != null)
            return cc.getCommandDefinitions();
        else
            return Collections.EMPTY_MAP;
        //return m_Configuration.getCommands().getCommandDefinitions();
    }

    /**
     * Returns a List containing all the directories that contains plugins
     * 
     * TODO: In the future will return a single directory
     * @return
     */
    public List getPluginDirs() {
        return m_Configuration.getServerConfiguration().getPluginDirs();
    }

    /**
     * Return a list containing all the couples ADDRESS - PORT that the server will 
     * listen to
     * @return
     */
    public List getServerBindings() {
        return m_Configuration.getServerConfiguration().getBindings();
    }

    /**
     * Return a list containing all the IPs that are allowed to connect to this 
     * server
     * @return
     */
    public List getAcceptedHosts() {
        return m_Configuration.getServerConfiguration().getAcceptedHosts();
    }

    /**
     * Returns <code>true</code> if MACROs must be expanded
     * @return
     */
    public boolean acceptParams() {
        return m_Configuration.getServerConfiguration().getAcceptParams().equalsIgnoreCase("true");
    }

    /**
     * Returns the number of seconds the server will wait for a plugin response
     * before the thread gets killed.
     * 
     * @return The number of seconds
     */
    public int getThreadTimeout() {
        return m_Configuration.getCommands().getCommandsTimeout();
    }
}