All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.glassfish.api.admin.CommandRunner Maven / Gradle / Ivy

There is a newer version: 8.0.0-JDK17-M7
Show newest version
/*
 * Copyright (c) 2008, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package org.glassfish.api.admin;

import java.io.BufferedReader;
import java.util.logging.Logger;

import javax.security.auth.Subject;

import org.glassfish.api.ActionReport;
import org.jvnet.hk2.annotations.Contract;

/**
 * CommandRunner is a service that allows you to run administrative commands.
 *
 * @author Jerome Dochez
 */
@Contract
public interface CommandRunner {

    /**
     * Returns an initialized ActionReport instance for the passed type or null if it cannot be found.
     *
     * @param name actiopn report type name
     * @return uninitialized action report or null
     */
    ActionReport getActionReport(String name);

    /**
     * Returns the command model for a command name for the null scope
     *
     * @param name command name
     * @param logger logger to log any error messages
     * @return model for this command (list of parameters,etc...), null if command is not found
     */
    CommandModel getModel(String name, Logger logger);

    /**
     * Returns the command model for a command name
     *
     * @param scope the scope (or namespace) for the command
     * @param name command name
     * @param logger logger to log any error messages
     * @return model for this command (list of parameters,etc...), null if command is not found
     */
    CommandModel getModel(String scope, String name, Logger logger);

    /**
     * Returns manpage for the command.
     *
     * @param model of command
     * @return Formated manpage
     */
    BufferedReader getHelp(CommandModel model);

    /**
     * Checks if given command model eTag is equal to current command model eTag
     *
     * @param command Command to be checked
     * @param eTag ETag to validate
     */
    boolean validateCommandModelETag(AdminCommand command, String eTag);

    /**
     * Checks if given command model eTag is equal to current command model eTag
     *
     * @param model of command to be checked
     * @param eTag ETag to validate
     */
    boolean validateCommandModelETag(CommandModel model, String eTag);

    /**
     * Obtain and return the command implementation defined by the passed commandName for the null scope
     *
     * @param commandName command name as typed by users
     * @param report report used to communicate command status back to the user
     * @param logger logger to log
     * @return command registered under commandName or null if not found.
     */
    AdminCommand getCommand(String commandName, ActionReport report, Logger logger);

    /**
     * Obtain and return the command implementation defined by the passed commandName
     *
     * @param scope the scope (or namespace) for the command
     * @param commandName command name as typed by users
     * @param report report used to communicate command status back to the user
     * @param logger logger to log
     * @return command registered under commandName or null if not found.
     */
    AdminCommand getCommand(String scope, String commandName, ActionReport report, Logger logger);

    /**
     * Obtain a new command invocation object for the null scope. Command invocations can be configured and used to trigger
     * a command execution.
     *
     * @param name name of the requested command to invoke
     * @param report where to place the status of the command execution
     * @param subject the Subject under which to execute the command
     * @return a new command invocation for that command name.
     */
    CommandInvocation getCommandInvocation(String name, ActionReport report, Subject subject);

    /**
     * Obtain a new command invocation object. Command invocations can be configured and used to trigger a command
     * execution.
     *
     * @param scope the scope (or namespace) for the command
     * @param name name of the requested command to invoke
     * @param report where to place the status of the command execution
     * @param subject the Subject under which to execute the command
     * @return a new command invocation for that command name.
     */
    CommandInvocation getCommandInvocation(String scope, String name, ActionReport report, Subject subject);

    /**
     * Obtain a new command invocation object for the null scope. Command invocations can be configured and used to trigger
     * a command execution.
     *
     * @param name name of the requested command to invoke
     * @param report where to place the status of the command execution
     * @param subject the Subject under which to execute the command
     * @param isNotify should notification be enabled
     * @return a new command invocation for that command name.
     */
    CommandInvocation getCommandInvocation(String name, ActionReport report, Subject subject, boolean isNotify);

    /**
     * Obtain a new command invocation object. Command invocations can be configured and used to trigger a command
     * execution.
     *
     * @param scope the scope (or namespace) for the command
     * @param name name of the requested command to invoke
     * @param report where to place the status of the command execution
     * @param subject the Subject under which to execute the command
     * @param isNotify should notification be enabled
     * @return a new command invocation for that command name.
     */
    CommandInvocation getCommandInvocation(String scope, String name, ActionReport report, Subject subject, boolean isNotify);

    /**
     * CommandInvocation defines a command excecution context like the requested name of the command to execute, the
     * parameters of the command, etc...
     *
     */
    public interface CommandInvocation {

        /**
         * Sets the command parameters as a typed inteface
         *
         * @param params the parameters
         * @return itself
         */
        CommandInvocation parameters(CommandParameters params);

        /**
         * Sets the command parameters as a ParameterMap.
         *
         * @param params the parameters
         * @return itself
         */
        CommandInvocation parameters(ParameterMap params);

        /**
         * Sets the data carried with the request (could be an attachment)
         *
         * @param inbound inbound data
         * @return itself
         */
        CommandInvocation inbound(Payload.Inbound inbound);

        /**
         * Sets the data carried with the response
         *
         * @param outbound outbound data
         * @return itself
         */
        CommandInvocation outbound(Payload.Outbound outbound);

        /**
         * Register new event listener.
         *
         * @param nameRegexp
         * @param listener
         * @return itself
         */
        CommandInvocation listener(String nameRegexp, AdminCommandEventBroker.AdminCommandListener listener);

        /**
         * Register child of ProgressStatus. Usable for command from command execution.
         *
         * @param ps
         * @return
         */
        CommandInvocation progressStatusChild(ProgressStatus ps);

        /**
         * Set the AdminCommand to be a managed job
         */
        CommandInvocation managedJob();

        /**
         * Current report. After command execution report can be changed by command
         */
        ActionReport report();

        /**
         * Executes the command and populate the report with the command execution result. Parameters must have been set before
         * invoking this method.
         */
        void execute();

        /**
         * Executes the passed command with this context and populates the report with the execution result. Parameters must be
         * set before invoking this command.
         *
         * @param command command implementation to execute
         */
        void execute(AdminCommand command);

    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy