All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.jnrpe.JNRPEBuilder Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2007, 2014 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;

import it.jnrpe.commands.CommandRepository;
import it.jnrpe.plugins.IPluginRepository;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;

/**
 * Builder for the {@link JNRPE} object.
 * 
 * @author Massimiliano Ziccardi
 * @version $Revision: 1.0 $
 */
public final class JNRPEBuilder {

    /**
     * Default read timeout is 10 seconds.
     */
    private static final int DEFAULT_READ_TIMEOUT = 10;

    /**
     * Default write timeout is 60 seconds.
     */
    private static final int DEFAULT_WRITE_TIMEOUT = 60;

    /**
     * The plugin repository.
     */
    private final IPluginRepository pluginRepository;

    /**
     * The command repository.
     */
    private final CommandRepository commandRepository;

    /**
     * The list of accepted hosts.
     */
    private final Collection acceptedHosts = new ArrayList();

    /**
     * The collection of listener objects.
     */
    private final Collection eventListeners = new ArrayList(); 
    
    /**
     * Sets if macros ($ARGxx$) should be expanded or not.
     */
    private boolean acceptParams = false;

    /**
     * Maximum number of concurrent connections.
     */
    private int maxAcceptedConnections = JNRPE.DEFAULT_MAX_ACCEPTED_CONNECTIONS;

    /**
     * The JNRPE charset.
     */
    private Charset charset = Charset.defaultCharset();

    /**
     * Read timeout in seconds.
     */
    private int readTimeout = DEFAULT_READ_TIMEOUT;

    /**
     * Write timeout in seconds.
     */
    private int writeTimeout = DEFAULT_WRITE_TIMEOUT;

    /**
     * Constructor.
     * 
     * @param jnrpePluginRepository
     *            The plugin repository
     * @param jnrpeCommandRepository
     *            The command repository
     */
    private JNRPEBuilder(final IPluginRepository jnrpePluginRepository, final CommandRepository jnrpeCommandRepository) {

        if (jnrpePluginRepository == null || jnrpeCommandRepository == null) {
            throw new IllegalArgumentException("Both plugin and command repository can't be null");
        }

        pluginRepository = jnrpePluginRepository;
        commandRepository = jnrpeCommandRepository;
    }

    /**
     * Entry point for the builder.
     * 
     * @param pluginRepository
     *            The plugin repository
     * @param commandRepository
     *            The command repository
    
     * @return this */
    public static JNRPEBuilder forRepositories(final IPluginRepository pluginRepository, final CommandRepository commandRepository) {

        return new JNRPEBuilder(pluginRepository, commandRepository);
    }

    /**
     * Pass true if $ARGxx$ macros should be expanded.
     * 
     * @param accept
     *            true if $ARGxx$ macros should be expanded.
    
     * @return this */
    public JNRPEBuilder acceptParams(final boolean accept) {
        acceptParams = accept;
        return this;
    }

    /**
     * Adds a client host to the list of accepted hosts.
     * 
     * @param hostName
     *            the hostname or ip address
    
     * @return this */
    public JNRPEBuilder acceptHost(final String hostName) {
        acceptedHosts.add(hostName);
        return this;
    }

    /**
     * Sets the charset to be used.
     * 
     * @param newCharset
     *            the charset to be used
    
     * @return this */
    public JNRPEBuilder withCharset(final Charset newCharset) {
        charset = newCharset;
        return this;
    }

    /**
     * Sets the maximum number of accepted connections.
     * 
     * @param maxConnections
     *            the maximum number of accepted connections.
    
     * @return this */
    public JNRPEBuilder withMaxAcceptedConnections(final int maxConnections) {
        maxAcceptedConnections = maxConnections;
        return this;
    }

    /**
     * Sets the read timeout in seconds. Default is
     * {@link #DEFAULT_READ_TIMEOUT} seconds.
     * 
     * @param readTimeoutSecs
     *            the new read timeout in seconds
    
     * @return this */
    public JNRPEBuilder withReadTimeout(final int readTimeoutSecs) {
        readTimeout = readTimeoutSecs;
        return this;
    }

    /**
     * Sets the write timeout in seconds. Default is
     * {@link #DEFAULT_WRITE_TIMEOUT} seconds.
     * 
     * @param writeTimeoutSecs
     *            the new write timeout in seconds
    
     * @return this */
    public JNRPEBuilder withWriteTimeout(final int writeTimeoutSecs) {
        writeTimeout = writeTimeoutSecs;
        return this;
    }

    /**
     * Adds a listener to the collection of listeners.
     * 
     * @param listener the listener object
    
     * @return this */
    public JNRPEBuilder withListener(final Object listener) {
        eventListeners.add(listener);
        return this;
    }
    
    /**
     * Builds the configured JNRPE instance.
     * 
    
     * @return the configured JNRPE instance */
    public JNRPE build() {
        JNRPE jnrpe = new JNRPE(pluginRepository, commandRepository, charset, acceptParams, acceptedHosts, maxAcceptedConnections, readTimeout,
                writeTimeout);

        IJNRPEEventBus eventBus = jnrpe.getExecutionContext().getEventBus();
        
        for (Object obj : eventListeners) {
            eventBus.register(obj);
        }
        
        return jnrpe;
    }

    /**
     * Method toString.
     * @return String
     */
    @Override
    public String toString() {
        return "JNRPEBuilder [pluginRepository=" + pluginRepository + ", commandRepository=" + commandRepository + ", acceptedHosts=" + acceptedHosts
                + ", eventListeners=" + eventListeners + ", acceptParams=" + acceptParams + ", maxAcceptedConnections=" + maxAcceptedConnections
                + ", charset=" + charset + ", readTimeout=" + readTimeout + ", writeTimeout=" + writeTimeout + "]";
    }
}