/****************************************************************************
Copyright information		: Copyright (c) 1998-1999 Microsoft Corporation 
File Name					: CommandSwitches.h 
Project Name				: WMI Command Line
Author Name					: Ch. Sriramachandramurthy
Date of Creation (dd/mm/yy) : 27th-September-2000
Version Number				: 1.0 
Brief Description			: This file consist of class declaration of
							  class GlobalSwitches
Revision History			: 
	Last Modified by		: Ch. Sriramachandramurthy 
	Last Modified on		: 17th-November-2000
****************************************************************************/ 

/*-------------------------------------------------------------------
 Class Name			: CGlobalSwitches
 Class Type			: Concrete 
 Brief Description	: This class encapsulates the functionality needed
					  for accessing and storing the global switches 
					  information, which will be used by Parsing, 
					  Execution and Format Engines depending upon the 
					  applicablity.
 Super Classes		: None
 Sub Classes		: None
 Classes Used		: None
 Interfaces Used    : None
 --------------------------------------------------------------------*/

#pragma once

class CGlobalSwitches
{
public:
// Construction
	CGlobalSwitches();

// Destruction
	~CGlobalSwitches();

// Restrict Assignment
	CGlobalSwitches& operator=(CGlobalSwitches& rGlblSwitches);

// Attributes
private:
	// Mapping b/w allowed strings for implevel and
	// the corresponding integer values.
	CHARINTMAP  m_cimImpLevel;

	// Mapping b/w allowed strings for authlevel and
	// the corresponding integer values.
	CHARINTMAP	m_cimAuthLevel;

	//String type, It stores the authority value.
	_TCHAR*		m_pszAuthority;

    //String type, It stores Namespace specified in the command.
	_TCHAR*		m_pszNameSpace;

    //String type, It stores Role specified in the command.
	_TCHAR*		m_pszRole;

    //String type, It stores Node specified in the command.
	_TCHAR*		m_pszNode;

    //CHARVECTOR type, It stores the Nodes specified in the command.
	CHARVECTOR	m_cvNodesList;

    //String type, It stores User specified in the command.
	_TCHAR*		m_pszUser;

    //String type, It stores Password specified in the command.
	_TCHAR*		m_pszPassword;

    //String type, It stores Locale value specified
	//in the command
 	_TCHAR*		m_pszLocale;

    //String type, It stores the Record  specified in the command.
	_TCHAR*		m_pszRecordPath;

    //Boolean type, It stores the value of the Privileges option specified
	//in the conmmand
    BOOL		m_bPrivileges;

	//Boolean type, It stores the value of the Aggregate option specified
	//in the conmmand
	BOOL		m_bAggregateFlag;

    //enumerated data type, It stores the value of the ImpersonationLevel 
	//specified in the command.
	IMPLEVEL	m_ImpLevel;

    //enumerated data type, It stores the value of the Authentication Level
	//specified in the command.
	AUTHLEVEL	m_AuthLevel;

    // Boolean type, It specifies presence of the Interactive option  
    //in the command
	BOOL		m_bInteractive;

    //Boolean type, It specifies presence of the trace option  in
    //the command
	BOOL		m_bTrace;

	//Boolean type, It specifies Help(/?) option in the command
	BOOL		m_bHelp;

    //HELPOPTION type, to specify type of help needed ( help option ).
	HELPOPTION	m_HelpOption;

	//CONNECTION information flag
	UINT		m_uConnInfoFlag;

	// role change flag
	BOOL		m_bRoleFlag;

	// namespace change flag
	BOOL		m_bNSFlag;

	// locale change flag
	BOOL		m_bLocaleFlag;

	// prompt for password flag
	BOOL		m_bAskForPassFlag;

	// change of recordpath flag
	BOOL		m_bRPChange;
	
	// FailFast flag.
	BOOL		m_bFailFast;

	// Output option.
	OUTPUTSPEC	m_opsOutputOpt;

	// Append option.
	OUTPUTSPEC	m_opsAppendOpt;

	// Output file name.
	_TCHAR*		m_pszOutputFileName;

	// File pointer to output file stream..
	FILE*		m_fpOutFile;

	// Append file name.
	_TCHAR*		m_pszAppendFileName;

	// File pointer to append file stream..
	FILE*		m_fpAppendFile;

	WMICLIINT	m_nSeqNum;

	_TCHAR*		m_pszLoggedOnUser;
	
	_TCHAR*		m_pszNodeName;
	
	_TCHAR*		m_pszStartTime;
// Operations
public:

	//Sets the authority value
	BOOL		SetAuthority(_TCHAR* pszAuthority);

	//Sets the namespace passed in parameter to m_pszNameSpace.
	BOOL		SetNameSpace(_TCHAR* pszNameSpace);

    //Sets the role passed in parameter to m_pszRole.
	BOOL		SetRole(_TCHAR* pszRole);

    //Assigns the locale passed in parameter to m_pszLocale.
	BOOL		SetLocale(_TCHAR* pszLocale);

    //Assigns the node passed in parameter to m_pszNode
	BOOL		SetNode(_TCHAR* pszNode);

    //Adds the node passed in parameter to m_cvNodesList vector.
	BOOL		AddToNodesList(_TCHAR* pszNode);

    //Assigns the user passed in parameter to m_pszUser
	BOOL		SetUser(_TCHAR* pszUser);

    //Assigns the password passed in parameter to m_pszPassword
	BOOL		SetPassword(_TCHAR* pszPassword);

    //Assigns the record file passed in parameter to m_pszRecordPath
	BOOL		SetRecordPath(_TCHAR* pszRecordPath);

    //Assigns the bool value passed in parameter to m_bPrivileges
	void		SetPrivileges(BOOL bEnable);
	
    //Assigns the impersonation level passed in parameter to
    //m_ImpLevel.
 	BOOL		SetImpersonationLevel(_TCHAR* const pszImpLevel);

    //Assigns the authentication level passed in parameter to
    //m_AuthLevel.
	BOOL		SetAuthenticationLevel(_TCHAR* const pszAuthLevel);

    //This function sets the m_bTrace to TRUE,If Trace mode
    //is specified in the command 
	void		SetTraceMode(BOOL bTrace);

    //This function sets the m_bInteractive to TRUE,If 
    //interactive mode is specified in the command          
	void		SetInteractiveMode(BOOL bInteractive);

    //sets the m_bHelp to TRUE, If /? is specified in the
    //command 
	void		SetHelpFlag(BOOL bHelp);

	// Sets the namespace change status flag with bNSFlag value
	void		SetNameSpaceFlag(BOOL bNSFlag);

	// Sets the role change status flag with bRoleFlag value
	void		SetRoleFlag(BOOL bRoleFlag);

	// Sets the locale change status flag with bLocaleFlag value
	void		SetLocaleFlag(BOOL bLocaleFlag);

	// Sets the recordpath change status flag with bRPChange value
	void		SetRPChangeStatus(BOOL bRPChange);

    //This function specifies whether the help should
    //be brief or full 
	void		SetHelpOption(HELPOPTION helpOption);

	//This function sets the Connection Info flag
	void		SetConnInfoFlag(UINT uFlag);

	// Set AskForPass flag.
	void		SetAskForPassFlag(BOOL bFlag);

	// Set m_bFailFast
	void		SetFailFast(BOOL bFlag);

	//This function returns the Connection Info flag
	UINT		GetConnInfoFlag();

	//Returns the string held in m_pszAuthority
	_TCHAR*		GetAuthority();

    //Returns the string held in m_pszNameSpace	
	_TCHAR*		GetNameSpace();

    //Returns the string held in m_pszRole
	_TCHAR*		GetRole();

    //Returns the string held in m_pszLocale
	_TCHAR*		GetLocale();

    //Returns the string held in m_pszNode
	_TCHAR*		GetNode();

    //Returns the referrence to m_cvNodesList.
	CHARVECTOR& GetNodesList();

    //Returns the string held in m_pszUser
	_TCHAR*		GetUser();

    //Returns the string held in m_pszPassword
	_TCHAR*		GetPassword();

    //Returns the string held in m_pszRecordPath
	_TCHAR*		GetRecordPath();

    //Returns the m_bPrivileges value
	BOOL		GetPrivileges();

	// Return the string equivalent of the boolean value
	// contained in m_bPrivilges flag
	void		GetPrivilegesTextDesc(_bstr_t& bstrPriv);

	// Return the string equivalent of the boolean value
	// contained in m_bFailFast flag
	void		GetFailFastTextDesc(_bstr_t& bstrFailFast);

	// Return the string equivalent of the OUTPUTSPEC value
	// contained in m_opsOutputOpt member.
	void		GetOutputOrAppendTextDesc(_bstr_t& bstrOutputOpt, 
										  BOOL bIsOutput);

	// Return the string equivalent of the boolean value
	// contained in m_bTrace flag
	void		GetTraceTextDesc(_bstr_t& bstrTrace);

	// Return the string equivalent of the boolean value
	// contained in m_bInteractive flag
	void		GetInteractiveTextDesc(_bstr_t& bstrInteractive);

	// Returns the string equivalent of the implevel value
	// contained in m_ImpLevel
	void		GetImpLevelTextDesc(_bstr_t& bstrImpLevel);

	// Returns the string equivalent of the authlevel value
	// contained in m_AuthLevel
	void		GetAuthLevelTextDesc(_bstr_t& bstrAuthLevel);

	// Returns the ',' separated node string of the available
	// nodes
	void		GetNodeString(_bstr_t& bstrNString);

	// Returns the content of the m_pszRecordPath
	// if NULL returns "N/A"
	void		GetRecordPathDesc(_bstr_t& bstrRP);

    //Returns impersonation level held in m_ImpLevel
	LONG		GetImpersonationLevel();

    //Returns authentication level held in m_AuthLevel
	LONG		GetAuthenticationLevel();

    //Returns Trace status held in m_bTrace	
	BOOL		GetTraceStatus();

    //Returns Interactive status held in m_bInteractive
	BOOL		GetInteractiveStatus();

    //Returns helpflag held in m_bHelp
	BOOL		GetHelpFlag();

	// Returns the change of role status
	BOOL		GetRoleFlag();

	// Returns the change of namespace status
	BOOL		GetNameSpaceFlag();

	// Returns TRUE if message for password 
	// needs to be prompted.
	BOOL		GetAskForPassFlag();

	// Returns the change of locale status flag
	BOOL		GetLocaleFlag();

	// Returns the change of recordpath status flag
	BOOL		GetRPChangeStatus();

    //Returns helpflagOption held in m_bHelpOption
	HELPOPTION	GetHelpOption();

	// Returns the m_bFailFast flag.
	BOOL		GetFailFast();

	// Initialize the necessary member varialbes
	void		Initialize();

	// General functions
	void		Uninitialize();
	
	// Clears the Nodes List
	BOOL		ClearNodesList();

	// Set Output option.
	void		SetOutputOrAppendOption(OUTPUTSPEC opsOpt,
										BOOL bIsOutput);

	// Get Output option.
	OUTPUTSPEC	GetOutputOrAppendOption(BOOL bIsOutput);

	// Set Output or append File Name, bOutput == TRUE for Output FALSE 
	// for Append.
	BOOL		SetOutputOrAppendFileName(const _TCHAR* pszFileName, 
										  BOOL	bOutput);

	// Get Output or append file name, bOutput == TRUE for Output FALSE for
	// Append.
	_TCHAR*		GetOutputOrAppendFileName(BOOL	bOutput);

	// Set output or append file pointer, bOutput == TRUE for Output FALSE 
	// for Append.
	void		SetOutputOrAppendFilePointer(FILE* fpOutFile, BOOL	bOutput);

	// Get output file pointer, bOutput == TRUE for Output FALSE for Append.
	FILE*		GetOutputOrAppendFilePointer(BOOL	bOutput);


	WMICLIINT	GetSequenceNumber();
	_TCHAR*		GetLoggedonUser();
	_TCHAR*		GetMgmtStationName();
	_TCHAR*		GetStartTime();

	BOOL		SetStartTime();

	//Assigns the Aggregate flag passed in parameter to m_bAggregateFlag
	void		SetAggregateFlag(BOOL bAggregateFlag);

	//Gets the agregate flag contained in m_bAggregateFlag
	BOOL		GetAggregateFlag();

	// This function checks and Returns the string equivalent of the 
	// boolean value contained in m_bAggregateFlag flag
	void GetAggregateTextDesc(_bstr_t& bstrAggregate);
};