1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package org.apache.log4j.plugins; 19 20 import org.apache.log4j.spi.LoggerRepository; 21 import org.apache.log4j.spi.OptionHandler; 22 23 import java.beans.PropertyChangeListener; 24 25 26 /** 27 * Defines the required interface for all Plugin objects. 28 * <p> 29 * <p>A plugin implements some specific functionality to extend 30 * the log4j framework. Each plugin is associated with a specific 31 * LoggerRepository, which it then uses/acts upon. The functionality 32 * of the plugin is up to the developer.</p> 33 * <p> 34 * <p>Examples of plugins are Receiver and Watchdog. Receiver plugins 35 * allow for remote logging events to be received and processed by 36 * a repository as if the event was sent locally. Watchdog plugins 37 * allow for a repository to be reconfigured when some "watched" 38 * configuration data changes.</p> 39 * 40 * @author Mark Womack (mwomack@apache.org) 41 * @author Nicko Cadell 42 * @author Paul Smith (psmith@apache.org) 43 */ 44 public interface Plugin extends OptionHandler { 45 /** 46 * Gets the name of the plugin. 47 * 48 * @return String the name of the plugin. 49 */ 50 String getName(); 51 52 /** 53 * Sets the name of the plugin. 54 * 55 * @param name the name of the plugin. 56 */ 57 void setName(String name); 58 59 /** 60 * Gets the logger repository for this plugin. 61 * 62 * @return the logger repository to which this plugin is attached. 63 */ 64 LoggerRepository getLoggerRepository(); 65 66 /** 67 * Sets the logger repository used by this plugin. This 68 * repository will be used by the plugin functionality. 69 * 70 * @param repository the logger repository to attach this plugin to. 71 */ 72 void setLoggerRepository(LoggerRepository repository); 73 74 /** 75 * Adds a PropertyChangeListener to this instance which is 76 * notified only by changes of the property with name propertyName. 77 * 78 * @param propertyName the name of the property in standard JavaBean syntax 79 * (e.g. for setName(), property="name") 80 * @param l listener 81 */ 82 void addPropertyChangeListener( 83 String propertyName, PropertyChangeListener l); 84 85 /** 86 * Adds a PropertyChangeListener that will be notified of all property 87 * changes. 88 * 89 * @param l The listener to add. 90 */ 91 void addPropertyChangeListener(PropertyChangeListener l); 92 93 /** 94 * Removes a specific PropertyChangeListener from this instances 95 * registry that has been mapped to be notified of all property 96 * changes. 97 * 98 * @param l The listener to remove. 99 */ 100 void removePropertyChangeListener(PropertyChangeListener l); 101 102 /** 103 * Removes a specific PropertyChangeListener from this instance's 104 * registry which has been previously registered to be notified 105 * of only a specific property change. 106 * 107 * @param propertyName property name, may not be null. 108 * @param l listener to be removed. 109 */ 110 void removePropertyChangeListener( 111 String propertyName, PropertyChangeListener l); 112 113 /** 114 * True if the plugin is active and running. 115 * 116 * @return boolean true if the plugin is currently active. 117 */ 118 boolean isActive(); 119 120 /** 121 * Returns true if the testPlugin is considered to be "equivalent" to the 122 * this plugin. 123 * <p> 124 * <p>The equivalency test is at the discretion of the plugin 125 * implementation. The PluginRegistry will use this method when starting 126 * new plugins to see if a given plugin is considered equivalent to an 127 * already running plugin with the same name. If they are considered to 128 * be equivalent, the currently running plugin will be left in place, and 129 * the new plugin will not be started.</p> 130 * <p> 131 * <p>It is possible to override the equals() method, however this has 132 * more meaning than is required for this simple test and would also 133 * require the overriding of the hashCode() method as well. All of this 134 * is more work than is needed, so this simple method is used instead.</p> 135 * 136 * @param testPlugin The plugin to test equivalency against. 137 * @return Returns true if testPlugin is considered to be equivelent. 138 */ 139 boolean isEquivalent(Plugin testPlugin); 140 141 /** 142 * Call when the plugin should be stopped. 143 */ 144 void shutdown(); 145 }