Package org.gudy.azureus2.ui.console.multiuser.commands

Source Code of org.gudy.azureus2.ui.console.multiuser.commands.UserCommand$ModifyUserCommand

/*
* Created on 10/02/2005
* Created by Paul Duran
* Copyright (C) 2004 Aelitis, 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; 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.
*
* AELITIS, SARL au capital de 30,000 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/

package org.gudy.azureus2.ui.console.multiuser.commands;

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.gudy.azureus2.ui.console.ConsoleInput;
import org.gudy.azureus2.ui.console.UserProfile;
import org.gudy.azureus2.ui.console.commands.CommandCollection;
import org.gudy.azureus2.ui.console.commands.IConsoleCommand;
import org.gudy.azureus2.ui.console.commands.OptionsConsoleCommand;
import org.gudy.azureus2.ui.console.multiuser.UserManager;

/**
* container command for commands that deal with the add/modify/delete of users
* @author pauld
*/
public class UserCommand extends IConsoleCommand {

  private final CommandCollection subCommands = new CommandCollection();
  private final UserManager userManager;

  /**
   * @param _commandNames
   */
  public UserCommand(UserManager userManager) {
    super("user");
    this.userManager = userManager;
   
    subCommands.add(new AddUserCommand());
    subCommands.add(new DeleteUserCommand());
    subCommands.add(new ModifyUserCommand());
    subCommands.add(new ListUsersCommand());
  }

  /**
   * returns the UserManager object that is used
   * by our subcommands
   * @return
   */
  private UserManager getUserManager()
  {
    return userManager;
  }
 
  /**
   * write the user manager configuration back to the path that it was read from
   * @param out stream to print success/failure messages to
   */
  private void saveUserManagerConfig(PrintStream out)
  {
    try {
      userManager.save();
      out.println("> User Manager config saved");
    } catch (FileNotFoundException e) {
      out.println("> Error saving User Manager config: " + e);
      e.printStackTrace(out);
    }
  }
 
  /**
   * returns the string describing how this command can be used
   */
  public String getCommandDescriptions()
  {
    return "user add|delete|list|modify <options>\tmanage users able to log in via telnet ui";
  }

  /**
   * determine the correct subcommand and execute it
   */
  public void execute(String commandName, ConsoleInput ci, List args)
  {
    if( args.isEmpty() )
    {
      printHelp(ci.out, args);
    }
    else
    {
      commandName = (String) args.remove(0);
      subCommands.execute(commandName, ci, args);
    }
  }
 
  /**
   * prints out the help message showing the syntax for all subcommands
   */
  public void printHelpExtra(PrintStream out, List args)
  {
    out.println("> -----");
    out.println("'user' syntax:");
    if( args.size() > 0 ) {
      String command = (String) args.remove(0);
      IConsoleCommand cmd = subCommands.get(command);
      if( cmd != null )
        cmd.printHelp(out, args);
      return;
    }
    out.println("user <command> <command options>");
    out.println();
    out.println("Available <command>s:");
    for (Iterator iter = subCommands.iterator(); iter.hasNext();) {
      IConsoleCommand cmd = (IConsoleCommand) iter.next();
      out.println(cmd.getCommandDescriptions());
    }
    out.println("try 'help user <command>' for more information about a particular user command");
    out.println("> -----");
  }
 
  /**
   * command that adds new users to the user manager
   * @author pauld
   */
  private final class AddUserCommand extends OptionsConsoleCommand
  {

    public AddUserCommand()
    {
      super("add", "a");
      getOptions().addOption(new Option("u", "username", true, "name of new user"));
      getOptions().addOption(new Option("p", "password", true, "password for new user"));
      getOptions().addOption(new Option("t", "type", true, "user type (Admin / User / Guest)"));
      getOptions().addOption(new Option("d", "savedirectory", true, "default torrent save directory for this user"));
    }
   
    /**
     * adds a new user
     */
    public void execute(String commandName, ConsoleInput ci, CommandLine commandLine)
    {
      String userName = commandLine.getOptionValue('u');
      if( userName == null )
      {
        ci.out.println("> AddUser: (u)sername option not specified");
        return;
      }
     
      String password = commandLine.getOptionValue('p');
      if( password == null )
      {
        ci.out.println("> AddUser: (p)assword option not specified");
        return;
      }
     
      String userType = commandLine.getOptionValue('t', UserProfile.DEFAULT_USER_TYPE);
      if( ! UserProfile.isValidUserType(userType.toLowerCase()))
      {
        ci.out.println("> AddUser: invalid profile type '" + userType + "'. Valid values are: " + UserProfile.ADMIN + "," + UserProfile.USER + "," + UserProfile.GUEST);
        return;
      }
     
      // check that a user with that name doesnt already exist
      if( getUserManager().getUser(userName) != null )
      {       
        ci.out.println("> AddUser error: user '" + userName + "' already exists");
        return;
      }
     
      UserProfile profile = new UserProfile(userName, userType);
      profile.setPassword(password);
      String defaultSaveDirectory = commandLine.getOptionValue('d', null);
      profile.setDefaultSaveDirectory(defaultSaveDirectory);
     
      getUserManager().addUser(profile);
      ci.out.println("> AddUser: user '" + userName + "' added");
      saveUserManagerConfig(ci.out);
    }

    public String getCommandDescriptions() {
      return "add [-u user] <options>\t\ta\tadds a new user";
    }
  }
 
  /**
   * command that deletes a user from the user manager
   * @author pauld
   */
  private final class DeleteUserCommand extends OptionsConsoleCommand
  {

    public DeleteUserCommand()
    {
      super("delete", "d");
      getOptions().addOption(new Option("u", "username", true, "name of user to delete"));
    }

    public void execute(String commandName, ConsoleInput ci, CommandLine commandLine)
    {
      String userName = commandLine.getOptionValue('u');
      if( userName == null )
      {
        ci.out.println("> DeleteUser: (u)sername option not specified");
        return;
      }
     
      if( getUserManager().getUser(userName) == null )
      {       
        ci.out.println("> DeleteUser: error - user '" + userName + "' not found");
        return;
      }

      getUserManager().deleteUser( userName );
      ci.out.println("> DeleteUser: user '" + userName + "' deleted");
      saveUserManagerConfig(ci.out);
    }

    public String getCommandDescriptions() {
      return "delete [-u user]\t\td\tdeletes a user";
    }
  }
 
  /**
   * command that changes user's password or level or default save directory
   * @author pauld
   */
  private final class ModifyUserCommand extends OptionsConsoleCommand
  {

    public ModifyUserCommand()
    {
      super("modify", "m");
     
      getOptions().addOption(new Option("u", "username", true, "name of user to modify"));
      getOptions().addOption(new Option("p", "password", true, "password for new user"));
      getOptions().addOption(new Option("t", "type", true, "user type (Admin / User / Guest)"));
      getOptions().addOption(new Option("d", "savedirectory", true, "default torrent save directory for this user"));

    }

    public void execute(String commandName, ConsoleInput ci, CommandLine commandLine)
    {
      String userName = commandLine.getOptionValue('u');
      if( userName == null )
      {
        ci.out.println("> ModifyUser: (u)sername option not specified");
        return;
      }
     
      UserProfile profile = getUserManager().getUser(userName);
      if( profile == null )
      {       
        ci.out.println("> ModifyUser: error - user '" + userName + "' not found");
        return;
      }

      boolean modified = false;
     
      String userType = commandLine.getOptionValue('t');
      if( userType != null )
      {
        if( UserProfile.isValidUserType(userType.toLowerCase()))
        {
          profile.setUserType(userType.toLowerCase());
          modified = true;
        }
        else
        {
          ci.out.println("> ModifyUser: invalid profile type '" + userType + "'. Valid values are: " + UserProfile.ADMIN + "," + UserProfile.USER + "," + UserProfile.GUEST);
          return;
        }
      }     
     
      String password = commandLine.getOptionValue('p');
      if( password != null )
      {
        profile.setPassword(password);
        modified = true;
      }
      String defaultSaveDirectory = commandLine.getOptionValue('d');
     
      if( defaultSaveDirectory != null ){
       
        modified = true;

        if defaultSaveDirectory.length() > 0 ){
       
          profile.setDefaultSaveDirectory(defaultSaveDirectory);
        }else{
     
          profile.setDefaultSaveDirectory(null);
        }
      }
     
      if( modified )
      {
        ci.out.println("> ModifyUser: user '" + userName + "' modified");
        saveUserManagerConfig(ci.out);
      }
      else
        printHelp(ci.out, commandLine.getArgList());
    }

    public String getCommandDescriptions() {
      return "modify [-u user] <options>\tm\tmodifies a user";
    }
  }
 
  /**
   * command that prints out the list of users registered in this user manager
   * @author pauld
   */
  private final class ListUsersCommand extends IConsoleCommand
  {
    public ListUsersCommand()
    {
      super("list", "l");
    }

    public void execute(String commandName, ConsoleInput ci, List args)
    {
      ci.out.println("> -----");
      ci.out.println("> Username\tProfile\t\tSave Directory");
      for (Iterator iter = getUserManager().getUsers().iterator(); iter.hasNext();) {
        UserProfile profile = (UserProfile) iter.next();
        String saveDir = profile.getDefaultSaveDirectory();
        if( saveDir == null ) saveDir = "(default)";
        ci.out.println("> " + profile.getUsername() + "\t\t" + profile.getUserType() + "\t\t" + saveDir);
      }
      ci.out.println("> -----");
    }

    public String getCommandDescriptions() {
      return "list \t\t\t\tl  lists all users";
    }
  }

}
TOP

Related Classes of org.gudy.azureus2.ui.console.multiuser.commands.UserCommand$ModifyUserCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.