#ifndef INCLUDES_MYSQL_INSTANCE_MANAGER_USER_MANAGEMENT_CMD_H
#define INCLUDES_MYSQL_INSTANCE_MANAGER_USER_MANAGEMENT_CMD_H

/*
   Copyright (C) 2006 MySQL AB

   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; either version 2 of the License, or
   (at your option) any later version.

   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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

/*
  This header contains declarations of classes inteded to support
  user-management commands (such as add user, get list of users, etc).

  The general idea is to have one interface (pure abstract class) for such a
  command. Each concrete user-management command is implemented in concrete
  class, derived from the common interface.
*/

#if defined(__GNUC__) && defined(USE_PRAGMA_INTERFACE)
#pragma interface
#endif

/*************************************************************************
  User_management_cmd -- base class for User-management commands.
*************************************************************************/

class User_management_cmd
{
public:
  User_management_cmd()
  { }

  virtual ~User_management_cmd()
  { }

public:
  /*
    Executes user-management command.

    SYNOPSYS
      execute()

    RETURN
      See exit_codes.h for possible values.
  */

  virtual int execute() = 0;
};


/*************************************************************************
  Print_password_line_cmd: support for --print-password-line command-line
  option.
*************************************************************************/

class Print_password_line_cmd : public User_management_cmd
{
public:
  Print_password_line_cmd()
  { }

public:
  virtual int execute();
};


/*************************************************************************
  Add_user_cmd: support for --add-user command-line option.
*************************************************************************/

class Add_user_cmd : public User_management_cmd
{
public:
  Add_user_cmd()
  { }

public:
  virtual int execute();
};


/*************************************************************************
  Drop_user_cmd: support for --drop-user command-line option.
*************************************************************************/

class Drop_user_cmd : public User_management_cmd
{
public:
  Drop_user_cmd()
  { }

public:
  virtual int execute();
};


/*************************************************************************
  Edit_user_cmd: support for --edit-user command-line option.
*************************************************************************/

class Edit_user_cmd : public User_management_cmd
{
public:
  Edit_user_cmd()
  { }

public:
  virtual int execute();
};


/*************************************************************************
  Clean_db_cmd: support for --clean-db command-line option.
*************************************************************************/

class Clean_db_cmd : public User_management_cmd
{
public:
  Clean_db_cmd()
  { }

public:
  virtual int execute();
};


/*************************************************************************
  Check_db_cmd: support for --check-db command-line option.
*************************************************************************/

class Check_db_cmd : public User_management_cmd
{
public:
  Check_db_cmd()
  { }

public:
  virtual int execute();
};


/*************************************************************************
  List_users_cmd: support for --list-users command-line option.
*************************************************************************/

class List_users_cmd : public User_management_cmd
{
public:
  List_users_cmd()
  { }

public:
  virtual int execute();
};

#endif // INCLUDES_MYSQL_INSTANCE_MANAGER_USER_MANAGEMENT_CMD_H