/*
* RHQ Management Platform
* Copyright (C) 2005-2009 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.server.plugin.pc;
import java.io.File;
import java.util.List;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.enterprise.server.xmlschema.ScheduledJobDefinition;
/**
* A global context containing information about a server-side plugin.
*
* This is an immutable object, plugins are not allowed to alter these values.
*
* @author John Mazzitelli
*/
public class ServerPluginContext {
private final ServerPluginEnvironment pluginEnvironment;
private final File temporaryDirectory;
private final File dataDirectory;
private final Configuration pluginConfiguration;
private final List<ScheduledJobDefinition> schedules;
/**
* Creates a new {@link ServerPluginContext} object. The plugin container is responsible for instantiating these
* objects; plugin writers should never have to actually create context objects.
*
* @param env the environment of the plugin - includes the plugin name and other info
* @param dataDirectory a directory where plugins can store persisted data that survives server restarts
* @param tmpDirectory a temporary directory for plugin use
* @param pluginConfiguration the configuration for the plugin itself
* @param schedules if not <code>null</code>, the plugin will be invoked periodically via these schedules
*/
public ServerPluginContext(ServerPluginEnvironment env, File dataDirectory, File tmpDirectory,
Configuration pluginConfiguration, List<ScheduledJobDefinition> schedules) {
this.pluginEnvironment = env;
this.dataDirectory = dataDirectory;
this.pluginConfiguration = pluginConfiguration;
if (schedules != null && schedules.size() == 0) {
schedules = null; // null means no schedules
}
this.schedules = schedules;
if (tmpDirectory == null) {
this.temporaryDirectory = new File(System.getProperty("java.io.tmpdir"), "SERVERPLUGIN_TMP");
this.temporaryDirectory.mkdirs();
} else {
this.temporaryDirectory = tmpDirectory;
}
}
/**
* The environment of the plugin, including its name and other information.
*
* @return plugin environment
*/
public ServerPluginEnvironment getPluginEnvironment() {
return pluginEnvironment;
}
/**
* A temporary directory for plugin use. Plugins should use this if they need to
* write temporary files that they do not expect to remain after the server 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;
}
/**
* Returns the configuration for the plugin itself. This may return <code>null</code> if the plugin did not
* define configuration metadata in its plugin descriptor.
*
* @return the configuration for the entire plugin (may be <code>null</code>)
*/
public Configuration getPluginConfiguration() {
return this.pluginConfiguration;
}
/**
* The schedules in which the plugin component should be periodically invoked.
* When this is non-null, the plugin's component must be prepared to be periodically
* invoked by the plugin container's scheduler.
*
* @return the schedule, or <code>null</code> if the plugin should not be scheduled
*/
public List<ScheduledJobDefinition> getSchedules() {
return this.schedules;
}
}