blob: e1b6a6f83d9b9fb49aa2f957d579a3920be95e8f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.log4j.plugins;
import org.apache.log4j.spi.LoggerRepository;
import org.apache.log4j.spi.OptionHandler;
import java.beans.PropertyChangeListener;
/**
* Defines the required interface for all Plugin objects.
* <p/>
* <p>A plugin implements some specific functionality to extend
* the log4j framework. Each plugin is associated with a specific
* LoggerRepository, which it then uses/acts upon. The functionality
* of the plugin is up to the developer.
* <p/>
* <p>Examples of plugins are Receiver and Watchdog. Receiver plugins
* allow for remote logging events to be received and processed by
* a repository as if the event was sent locally. Watchdog plugins
* allow for a repository to be reconfigured when some "watched"
* configuration data changes.
*
* @author Mark Womack (mwomack@apache.org)
* @author Nicko Cadell
* @author Paul Smith (psmith@apache.org)
*/
public interface Plugin extends OptionHandler {
/**
* Gets the name of the plugin.
*
* @return String the name of the plugin.
*/
String getName();
/**
* Sets the name of the plugin.
*
* @param name the name of the plugin.
*/
void setName(String name);
/**
* Gets the logger repository for this plugin.
*
* @return the logger repository to which this plugin is attached.
*/
LoggerRepository getLoggerRepository();
/**
* Sets the logger repository used by this plugin. This
* repository will be used by the plugin functionality.
*
* @param repository the logger repository to attach this plugin to.
*/
void setLoggerRepository(LoggerRepository repository);
/**
* Adds a PropertyChangeListener to this instance which is
* notified only by changes of the property with name propertyName.
*
* @param propertyName
* the name of the property in standard JavaBean syntax
* (e.g. for setName(), property="name")
* @param l listener
*/
void addPropertyChangeListener(
String propertyName, PropertyChangeListener l);
/**
* Adds a PropertyChangeListener that will be notified of all property
* changes.
*
* @param l The listener to add.
*/
void addPropertyChangeListener(PropertyChangeListener l);
/**
* Removes a specific PropertyChangeListener from this instances
* registry that has been mapped to be notified of all property
* changes.
*
* @param l The listener to remove.
*/
void removePropertyChangeListener(PropertyChangeListener l);
/**
* Removes a specific PropertyChangeListener from this instance's
* registry which has been previously registered to be notified
* of only a specific property change.
*
* @param propertyName property name, may not be null.
* @param l listener to be removed.
*/
void removePropertyChangeListener(
String propertyName, PropertyChangeListener l);
/**
* True if the plugin is active and running.
*
* @return boolean true if the plugin is currently active.
*/
boolean isActive();
/**
* Returns true if the testPlugin is considered to be "equivalent" to the
* this plugin. The equivalency test is at the discretion of the plugin
* implementation. The PluginRegistry will use this method when starting
* new plugins to see if a given plugin is considered equivalent to an
* already running plugin with the same name. If they are considered to
* be equivalent, the currently running plugin will be left in place, and
* the new plugin will not be started.
* <p/>
* It is possible to override the equals() method, however this has
* more meaning than is required for this simple test and would also
* require the overriding of the hashCode() method as well. All of this
* is more work than is needed, so this simple method is used instead.
*
* @param testPlugin The plugin to test equivalency against.
* @return Returns true if testPlugin is considered to be equivelent.
*/
boolean isEquivalent(Plugin testPlugin);
/**
* Call when the plugin should be stopped.
*/
void shutdown();
}