package org.rhq.core.pluginapi.plugin; import java.io.File; import org.rhq.core.system.SystemInfo; /** * A global context containing information about a plugin. * * @author John Mazzitelli * * @since 1.2 */ public class PluginContext { private final String pluginName; private final SystemInfo systemInformation; private final File temporaryDirectory; private final File dataDirectory; private final String pluginContainerName; /** * Creates a new {@link PluginContext} object. The plugin container is responsible for instantiating these * objects; plugin writers should never have to actually create context objects. * * @param pluginName the name of the plugin that corresponds to this context * @param systemInfo information about the system on which the plugin and its plugin container are * running * @param temporaryDirectory a temporary directory for plugin use that is destroyed at agent shutdown * @param dataDirectory a directory where plugins can store persisted data that survives agent restarts * @param pluginContainerName the name of the plugin container in which the plugin is running. * You can be assured this name is unique across <b>all</b> plugin * containers/agents running in the RHQ environment. */ public PluginContext(String pluginName, SystemInfo systemInfo, File temporaryDirectory, File dataDirectory, String pluginContainerName) { this.pluginName = pluginName; this.systemInformation = systemInfo; this.dataDirectory = dataDirectory; this.pluginContainerName = pluginContainerName; if (temporaryDirectory == null) { this.temporaryDirectory = new File(System.getProperty("java.io.tmpdir"), "AGENT_TMP"); this.temporaryDirectory.mkdirs(); } else { this.temporaryDirectory = temporaryDirectory; } } /** * The name of the plugin which corresponds to this context object. * * @return plugin name as it is specified in the plugin descriptor */ public String getPluginName() { return pluginName; } /** * Returns a {@link SystemInfo} object that contains information about the platform/operating system that the * plugin is running on. With this object, you can natively obtain things such as the operating system name, its * hostname,and other things. Please refer to the javadoc on {@link SystemInfo} for more details on the types of * information you can access. * * @return system information object */ public SystemInfo getSystemInformation() { return this.systemInformation; } /** * A temporary directory for plugin use that is destroyed at agent shutdown. Plugins should use this if they need to * write temporary files that they do not expect to remain after the agent is restarted. This directory is shared * among all plugins - plugins must ensure they write unique files here, as other plugins may be using this same * directory. Typically, plugins will use the {@link File#createTempFile(String, String, File)} API when writing to * this directory. * * @return location for plugin temporary files */ public File getTemporaryDirectory() { return temporaryDirectory; } /** * Directory where plugins can store persisted data that survives agent restarts. Each plugin will have their own * data directory. The returned directory may not yet exist - it is up to each individual plugin to manage this * directory as they see fit (this includes performing the initial creation when the directory is first needed). * * @return location for plugins to store persisted data */ public File getDataDirectory() { return this.dataDirectory; } /** * The name of the plugin container in which the plugin is running. You * can be assured this name is unique across <b>all</b> plugin containers/agents running * in the RHQ environment. * * @return the name of the plugin container */ public String getPluginContainerName() { return this.pluginContainerName; } }