/*
* RHQ Management Platform
* Copyright (C) 2005-2011 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.coregui.client.gwt;
import java.util.ArrayList;
import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.plugin.CannedGroupExpression;
import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.domain.plugin.PluginKey;
import org.rhq.core.domain.plugin.ServerPlugin;
import org.rhq.core.domain.plugin.ServerPluginControlDefinition;
import org.rhq.core.domain.plugin.ServerPluginControlResults;
/**
* Functionality to manage both agent and server plugins.
*
* @author John Mazzitelli
*/
public interface PluginGWTService extends RemoteService {
/**
* Recycles the master plugin container, essentially shutting down all server plugins
* and then restarting them.
*/
void restartMasterPluginContainer() throws RuntimeException;
/**
* Given an agent plugin ID, this will return that plugin.
*
* @param pluginId identifies a known agent plugin
* @return the agent plugin or null if the given ID does not identify an agent plugin
*/
Plugin getAgentPlugin(int pluginId) throws RuntimeException;
/**
* Given a server plugin ID, this will return that plugin.
* Server plugins have additional data that you can optionally request. This related data
* includes things such as scheduled jobs and plugin configuration. If <code>includeRelationships</code>
* is <code>true</code>, that additional data will be loaded in the returned plugin object; otherwise
* that data will be <code>null</code> in the returned object.
*
* @param pluginId identifies a known server plugin
* @param includeRelationships include additional data (such as scheduled jobs and plugin config)
* @return the server plugin or null if the given ID does not identify a server plugin
*/
ServerPlugin getServerPlugin(int pluginId, boolean includeRelationships) throws RuntimeException;
/**
* Returns the list of all <em>agent</em> plugins.
*
* @param includeDeletedPlugins if true, even those plugins that have been deleted (but not purged)
* @return list of all agent plugins
*/
ArrayList<Plugin> getAgentPlugins(boolean includeDeletedPlugins) throws RuntimeException;
/**
* Returns the list of all <em>server</em> plugins.
*
* @param includeDeletedPlugins When a plugin is "undeployed", it still exists in the database, but is flagged as "deleted".
* If this is true, this method returns those deleted plugins in addition to those plugins
* that are still installed.
* @return list of all server plugins
*/
ArrayList<ServerPlugin> getServerPlugins(boolean includeDeletedPlugins) throws RuntimeException;
/**
* This will ask the server to scan for updates to its plugins and register the changes it finds.
*/
void scanAndRegister() throws RuntimeException;
/**
* Enables the agent plugins with the given IDs.
*
* @param selectedPluginIds the IDs of the plugins that are to be enabled
* @return list of names of those plugins that were enabled
*/
ArrayList<String> enableAgentPlugins(int[] selectedPluginIds) throws RuntimeException;
/**
* Disables the agent plugins with the given IDs.
*
* @param selectedPluginIds the IDs of the plugins that are to be disabled
* @return list of names of those plugins that were disabled
*/
ArrayList<String> disableAgentPlugins(int[] selectedPluginIds) throws RuntimeException;
/**
* Deletes the agent plugins with the given IDs.
* This method puts the plugins with the given IDs into a <i>deleted</i> state and removes the plugin JAR file
* from the file system but the plugin is not removed from the database (this is to support HA deployments).
*
* @param selectedPluginIds the IDs of the plugins that are to be deleted
* @return list of names of those plugins that were deleted
*/
ArrayList<String> deleteAgentPlugins(int[] selectedPluginIds) throws RuntimeException;
/**
* Enables the server plugins with the given IDs.
*
* @param selectedPluginIds the IDs of the plugins that are to be enabled
* @return list of names of those plugins that were enabled
*/
ArrayList<String> enableServerPlugins(int[] selectedPluginIds) throws RuntimeException;
/**
* Disables the server plugins with the given IDs.
*
* @param selectedPluginIds the IDs of the plugins that are to be disabled
* @return list of names of those plugins that were disabled
*/
ArrayList<String> disableServerPlugins(int[] selectedPluginIds) throws RuntimeException;
/**
* Removes the server plugins from the system and unschedules their jobs.
*
* @param selectedPluginIds the IDs of the server plugins that are to be undeployed
* @return list of names of those server plugins that were undeployed
*/
ArrayList<String> deleteServerPlugins(int[] selectedPluginIds) throws RuntimeException;
/**
* Returns the definition for the given plugin's global plugin configuration.
*
* @param pluginKey
* @return the plugin configuration definition
*/
ConfigurationDefinition getServerPluginConfigurationDefinition(PluginKey pluginKey) throws RuntimeException;
/**
* Returns the definition for the given plugin's scheduled jobs configuration.
*
* @param pluginKey
* @return the scheduled jobs definition
*/
ConfigurationDefinition getServerPluginScheduledJobsDefinition(PluginKey pluginKey) throws RuntimeException;
/**
* Obtains the available controls for a given server plugin. If a server plugin does not have any
* controls, an empty list will be returned.
*
* @param serverPluginKey identifies the server plugin
* @return information on all available controls for the given server plugin
* @throws RuntimeException
*/
ArrayList<ServerPluginControlDefinition> getServerPluginControlDefinitions(PluginKey serverPluginKey)
throws RuntimeException;
/**
* Invokes a control on a server plugin. A control is simply a runtime operation performed
* by a server plugin.
*
* @param serverPluginKey identifies the server plugin that is to execute the control.
* @param controlName the name of the control to execute
* @param params the parameters to pass to the control, if a control accepts parameters.
* @return the results of the operation; whether success or failure, this will be non-null.
* @throws RuntimeException if an abnormal failure occurred, such as the plugin does not support the named control
* of the plugin key does not identify a server plugin. If the control executed but
* it failed, no exception will be thrown and the results of the failed execution
* will be returned to the caller
*/
ServerPluginControlResults invokeServerPluginControl(PluginKey serverPluginKey, String controlName,
Configuration params) throws RuntimeException;
/**
* Updates the server plugin configuration with the given config.
*
* @param serverPluginKey identifies the plugin to update
* @param config the new config
*/
void updateServerPluginConfiguration(PluginKey serverPluginKey, Configuration config) throws RuntimeException;
/**
* Updates the server plugin scheduled jobs configuration with the given config.
*
* @param serverPluginKey identifies the plugin to update
* @param jobsConfig the new config containing the scheduled jobs configuration
*/
void updateServerPluginScheduledJobs(PluginKey serverPluginKey, Configuration jobsConfig) throws RuntimeException;
/**
* Updates the plugins on all agents after given delay
* @param delayInMilliseconds the delay in milliseconds.
*
* @since 4.11
*/
void updatePluginsOnAgents(long delayInMilliseconds);
/**
* returns canned group expressions
* @return
*/
ArrayList<CannedGroupExpression> getCannedGroupExpressions();
}