/****************************************************************************
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 CommandSwitches
Revision History			: 
		Last Modified By	: Ch. Sriramachandramurthy
		Last Modified Date	: 20th-March-2001
****************************************************************************/ 

// CommandSwitches.h : header file
//
/*-------------------------------------------------------------------
 Class Name			: CCommandSwitches
 Class Type			: Concrete 
 Brief Description	: This class encapsulates the functionality needed
					  for accessing and storing the command switches 
					  information, which will be used by Parsing, 
					  Execution and Format Engines depending upon the 
					  applicability.
 Super Classes		: None
 Sub Classes		: None
 Classes Used		: None
 Interfaces Used    : None
 --------------------------------------------------------------------*/
#pragma once

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

// Destruction
	~CCommandSwitches();

// Restrict Assignment
   CCommandSwitches& operator=(CCommandSwitches& rCmdSwitches);

// Attributes
private:
	//command string
	_TCHAR				*m_pszCommandInput;

	//alias name
	_TCHAR				*m_pszAliasName;

	//alias description
	_TCHAR				*m_pszAliasDesc;

    //class path
	_TCHAR				*m_pszClassPath;

    //path expression
	_TCHAR				*m_pszPathExpr;

    //where expression
	_TCHAR				*m_pszWhereExpr;

    //verb name - standard|userdefined verb 
	_TCHAR				*m_pszVerb;

    //method name
	_TCHAR				*m_pszMethodName;

    //XSLT details vector.
	XSLTDETVECTOR		m_xdvXSLTDetVec;

    //alias target class
	_TCHAR				*m_pszAliasTarget;

    //XML stream 
	BSTR				m_bstrXML;

    //session success - flag.
	BOOL				m_bSuccess;

    //HRESULT 
	HRESULT				m_hResult;

    //friendly names|trasnlate tables - map
	BSTRMAP				m_bmAlsFrnNmsDesOrTrnsTblEntrs;

    //property(s) details - map
	PROPDETMAP			m_pdmPropDet;

    //method(s) details - map
	METHDETMAP			m_mdmMethDet;

    //input property(s) - vector
	CHARVECTOR			m_cvProperties;

	//PWhere param(s) - vector
	CHARVECTOR			m_cvPWhereParams;

	//Translate table entry(s) - vector
	CHARVECTOR			m_cvTrnsTablesList;

    //input method param(s) - map
	BSTRMAP				m_bmParameters;

    //verb interactive mode
	WMICLIINT			m_nInteractiveMode;

    ///EVERY interval value
	ULONG				m_ulInterval;

    ///tablename - TRANSLATE:<tablename> 
	_TCHAR				*m_pszTransTableName;

    //listformat - LISTFORMAT type
	_TCHAR				*m_pszListFormat;

	// Errata code
	UINT				m_uErrataCode;

	// Message code
	UINT				m_uInformationCode;
	
	// Credentials flag
	BOOL				m_bCredFlag;

	// parameterized string with '#' as place holder(s) for input value(s)  
	_TCHAR				*m_pszPWhereExpr;

	// COM error object
	_com_error			*m_pComError;

	// IWbemClassObject, to store output parameters of method execution.
	IWbemClassObject	*m_pIMethOutParam;

	// alias connection information
	// alias user name
	_TCHAR				*m_pszUser;

	// alias user password
	_TCHAR				*m_pszPassword;

	// alias node
	_TCHAR				*m_pszNode;

	// alias locale
	_TCHAR				*m_pszLocale;

	// alias namespace
	_TCHAR				*m_pszNamespace;

	// Type of the verb ( CLASSMETHOD/STDVERB/CMDLINE ).
	VERBTYPE			m_vtVerbType;

	// Verb derivation string
	_TCHAR				*m_pszVerbDerivation;

	// flag to check that WHERE is specified explicitly
	BOOL				m_bExplicitWhereExpr;

	ALSFMTDETMAP		m_afdAlsFmtDet;

	BOOL				m_bTranslateFirst;

	// /RESULTCLASS switch value of ASSOC verb
	_TCHAR				*m_pszResultClassName;
     
	// /RESULTROLE  switch value of ASSOC verb
	_TCHAR				*m_pszResultRoleName;

	// /ASSOCCLASS switch value of ASSOC verb
	_TCHAR				*m_pszAssocClassName;

	// count for /REPEAT:N
	ULONG				m_ulRepeatCount;

	// Flag for availibility of methods.
	BOOL				m_bMethAvail;

	// Flag for availibility of writable properties.
	BOOL				m_bWritePropsAvail;

	// Flag for availibility list formats.
	BOOL				m_bLISTFrmsAvail;

    //input property(s) - vector
	CHARVECTOR			m_cvInteractiveProperties;

	// Flag to specify Named Parameter List.
	BOOL				m_bNamedParamList;

	// Flag to check if every switch is specified.
	BOOL                m_bEverySwitch ;     

	// Flag to check if output switch is specified.
	BOOL                m_bOutputSwitch ;   
	
	//the query formed of the given command .
	BSTR				m_bstrFormedQuery;

	BOOL				m_bSysProp;

	// Operations
public:

	//Assigns the parameter passed to m_pszCommandInput
	BOOL	SetCommandInput(const _TCHAR* pszCommandInput);

    //Assigns the parameter passed to m_pszAliasName that represents 
    //Alias object.
	BOOL	SetAliasName(const _TCHAR* pszAliasName);

	// Sets the alias description
	BOOL	SetAliasDesc(const _TCHAR* pszAliasDesc);

	// Sets the alias credentials information
	BOOL	SetAliasUser(const _TCHAR* pszUserName);
	BOOL	SetAliasNode(const _TCHAR* pszNode);
	BOOL	SetAliasPassword(const _TCHAR* pszPassword);
	BOOL	SetAliasLocale(const _TCHAR* pszLocale);
	BOOL	SetAliasNamespace(const _TCHAR* pszNamespace);

    //Assigns the parameter passed to m_pszClassPath.
	BOOL	SetClassPath(const _TCHAR* pszClassPath);

    //Assigns the parameter passed to m_pszPathExpr.
	BOOL	SetPathExpression(const _TCHAR* pszPathExpr);

    //Assigns the parameter passed to m_pszWhereExpr
	BOOL	SetWhereExpression(const _TCHAR* pszWhereExpr);

    //Assigns the parameter passed to m_pszMathodName.
	BOOL	SetMethodName(const _TCHAR* pszMethodName);

    //Adds to vector held by m_xdvXSLDetVec.
	void	AddToXSLTDetailsVector(XSLTDET xdXSLTDet);

    //Assigns the parameter passed to m_pszVerbName.
	BOOL	SetVerbName(const _TCHAR* pszVerbName);

    //Assigns the parameter passed to m_pszSesionFilePath
	BOOL	SetSessionFilePath(const _TCHAR* pszSessionFilePath);

    //Assigns the parameter passed to m_bstrXML, is used to store XML file 
	//Name that contains result set.
	BOOL	SetXMLResultSet(const BSTR bstrXMLResultSet);

    //Assigns the parameter passed to m_pszAliasTarget, is used in Parsing
	//Engine to avail the alias object informations.
	BOOL	SetAliasTarget(const _TCHAR* pszAliasTarget);

    //Adds string that passed through parameter to m_bmParameters, which is 
    //a data member of type BSTRMAP
	BOOL	AddToPropertyList(_TCHAR* const pszProperty);

	BOOL	AddToTrnsTablesList(_TCHAR* const pszTableName);

    //Adds bstrKey and bstrValue passed as parameters to m_bmParameters,which 
    //is type of BSTRMAP data structure
	BOOL	AddToParameterMap(_bstr_t bstrKey, _bstr_t bstrValue);

    //Adds bstrKey and bstrValue passed as parameters to m_bmParameters,which 
    //is type of ALSFMTDETMAP data structure
	BOOL	AddToAliasFormatDetMap(_bstr_t bstrKey, BSTRVECTOR bvProps);

    //Adds bstrKey and bstrValue passed as parameters to 
	//m_bmAlsFrnNmsDesOrTrnsTblEntrs,
    //which is type of BSTRMAP
	BOOL	AddToAlsFrnNmsOrTrnsTblMap(_bstr_t bstrKey, _bstr_t bstrValue);

    //Adds bstrKey and mdMethDet passed as parameters to m_mdmMethDet,
	//which is type of METHDETMAP.
	BOOL	AddToMethDetMap(_bstr_t bstrKey, METHODDETAILS mdMethDet);

    //Adds bstrKey and pdPropDet passed as parameters to m_pdmPropDet,
	//which is type of PROPERTYDETALS
	BOOL	AddToPropDetMap(_bstr_t bstrKey, PROPERTYDETAILS pdPropDet);

    //Assigns the Boolean variable to m_bSuccess
	void	SetSuccessFlag(BOOL bSuccess);
	
    //Assigns the string variable to m_pszTransTableName.
	BOOL	SetTranslateTableName(const _TCHAR* pszTransTableName);

    //Assigns the integer value to m_nInterval 
  	BOOL	SetRetrievalInterval(const ULONG lInterval);

    //Assigns the parameter value to m_ListFormat
	BOOL	SetListFormat(const _TCHAR *pszListFormat);

    //Set|Reset the verb interactive mode
	void	SetInteractiveMode(WMICLIINT nInteractiveMode);

    //Stores the parameter in map array
	BOOL	AddToPWhereParamsList(_TCHAR* const pszParameter);

    //Assigns the value to m_uErrataCode
	void	SetErrataCode(const UINT uErrataCode);

	//Assigns the value to m_uInformationCode
	void	SetInformationCode(const UINT uInformationCode);

	// Assigns the string to m_pszPWhereExpr
	BOOL	SetPWhereExpr(const _TCHAR* pszPWhereExpr);

	// Assigns the parameter passed to m_pComError that consist of 
	// error info
	void	SetCOMError(_com_error& rComError);

	// Set m_pIMethExecOutParam.
	BOOL	SetMethExecOutParam(IWbemClassObject* pIMethOutParam);

	// Set m_vtVerbType to passed flag.
	void	SetVerbType( VERBTYPE vtVerbType);

	// Set m_pszVerbDerivation.
	BOOL	SetVerbDerivation( const _TCHAR* pszVerbDerivation );

	//Set the credential flag status
	void	SetCredentialsFlag(BOOL bCredFlag);

	// Set the explicit where flag
	void	SetExplicitWhereExprFlag(BOOL bWhere);

	//Assigns the string variable to m_pszResultClassName.
	BOOL	SetResultClassName(const _TCHAR* pszResultClassName);

	//Assigns the string variable to m_pszResultRoleName.
	BOOL	SetResultRoleName(const _TCHAR* pszResultRoleName);
     
	//Assigns the string variable to m_pszAssocClassName.
	BOOL	SetAssocClassName(const _TCHAR* pszAssocClassName);

	// Set repeat count.
	BOOL	SetRepeatCount(const ULONG lRepCount);

	// Set methods available.
	void	SetMethodsAvailable(BOOL bFlag);

	// Retruns the alias description
	_TCHAR*	GetAliasDesc();

    //Returns the alias name held by the object	
	_TCHAR*	GetAliasName();

    //Returns the class path held by the object
	_TCHAR*	GetClassPath();

	// Return the alias credentials information.
	_TCHAR*	GetAliasUser();
	_TCHAR*	GetAliasNode();
	_TCHAR*	GetAliasPassword();
	_TCHAR*	GetAliasLocale();
	_TCHAR* GetAliasNamespace();

    //Returns the path expression held by the object
	_TCHAR*	GetPathExpression();

    //Returns the where expression held by the object
	_TCHAR*	GetWhereExpression();

    //Returns the method name held by the object
	_TCHAR*	GetMethodName();

    //Returns the XSLTDetVec held by the object.
	XSLTDETVECTOR&	GetXSLTDetailsVector();

    //Returns the verb name held by the object
	_TCHAR*	GetVerbName();

    //Returns the session file path held by the object
 	_TCHAR*	GetSessionFilePath();

    //Returns the alias target held by the object
	_TCHAR*	GetAliasTarget();

    //Returns the command input held by the object
	_TCHAR*	GetCommandInput();

    //Returns the XML result set held by the object.
	BSTR	GetXMLResultSet();

    //Returns the property held by the object.
	CHARVECTOR& GetPropertyList();

    //Returns the tables held by the object.
	CHARVECTOR& GetTrnsTablesList();

    //Returns the parameter map containing both key and value
	BSTRMAP&    GetParameterMap();

	//Returns the alias formats map
	ALSFMTDETMAP&	GetAliasFormatDetMap();

    //Returns the alias friendly names map held by the object
	BSTRMAP&	GetAlsFrnNmsOrTrnsTblMap();

    //Returns the method details map held by the object
	METHDETMAP&	GetMethDetMap();

    //Returns the alias property details map held by the object
	PROPDETMAP&	GetPropDetMap();

    //Returns the success flag held by the object
	BOOL	GetSuccessFlag();

    //Returns the value of m_ulInterval.
	ULONG	GetRetrievalInterval();

    //Returns the value of m_pszTransTableName.
 	_TCHAR*	GetTranslateTableName();

   //Returns the list format type m_ListFormat
	_TCHAR*	GetListFormat();

    //Returns the name of XSL file used for specifying format for dumping.
	_TCHAR*	GetDumpXSLFormat();

    //returns the verb interactive mode
	WMICLIINT	GetInteractiveMode();

    //Returns the PWhereParameters list
	CHARVECTOR& GetPWhereParamsList();

    //This function gets the class of Alias
	void	GetClassOfAliasTarget(_bstr_t& bstrClassName);

    //returns the error code
	UINT	GetErrataCode();

	//returns the information code
	UINT	GetInformationCode();

	// returns the PWhere expression - m_pszPWhereExpr
	_TCHAR*    GetPWhereExpr();

	// Get m_pIMethExecOutParam.
	IWbemClassObject* GetMethExecOutParam();

	// Get m_vtVerbType.
	VERBTYPE	GetVerbType();

	// Get m_pszVerbDerivation.
	_TCHAR*	GetVerbDerivation();

	// Returns the credential flag status
	BOOL	GetCredentialsFlagStatus();

	// Returns the explicit where flag status		
	BOOL	GetExplicitWhereExprFlag();

	// Get m_uRepeatCount count.
	ULONG	GetRepeatCount();

	// This function returns the COMError object
	_com_error* CCommandSwitches::GetCOMError();

	// Update the parameter value
	BOOL	UpdateParameterValue(_bstr_t bstrKey, _bstr_t bstrValue);

	// Free the COM error
	void	FreeCOMError();

	// Clear cvPropertyList.
	void	ClearPropertyList();

	// Initiliaze the necessary member variables
	void	Initialize();

    // Free the member variables
	void	Uninitialize();

	// This function sets the the order of the format and 
	// translate switch flag
	void SetTranslateFirstFlag(BOOL bTranslateFirst);

	// This function returns the order of the format and 
	// translate switch flag
	BOOL GetTranslateFirstFlag();

	//Returns the value of m_pszResultClassName.
	_TCHAR*	GetResultClassName();

	//Returns the value of  m_pszResultRoleName.
	_TCHAR*	GetResultRoleName();
     
	//Returns the value of  m_pszAssocClassName.
	_TCHAR*	GetAssocClassName();

	// Get methods available.
	BOOL	GetMethodsAvailable();

	// Set writable properties available flag.
	void	SetWriteablePropsAvailable(BOOL bFlag);

	// Get writable properties available flag.
	BOOL	GetWriteablePropsAvailable();

	// Set LIST Formats available flag.
	void	SetLISTFormatsAvailable(BOOL bFlag);

	// Get LIST Formats Available flag.
	BOOL	GetLISTFormatsAvailable();

	BOOL AddToInteractivePropertyList(_TCHAR* const pszProperty);

	CHARVECTOR& GetInteractivePropertyList();

	// Set m_bNamedParamList flag.
	void	SetNamedParamListFlag(BOOL bFlag);

	// Get m_bNamedParamList flag.
	BOOL	GetNamedParamListFlag();

	// Clear or nullify XSL Details vector.
	void	ClearXSLTDetailsVector();

	//every 
	// Set m_bEverySwitch flag.
	void	SetEverySwitchFlag(BOOL bFlag);

	// Get m_bEverySwitch  flag.
	BOOL	GetEverySwitchFlag();

	// Set m_bOutputSwitch flag.
	void	SetOutputSwitchFlag(BOOL bFlag);

	// Get m_bOutputSwitch  flag.
	BOOL	GetOutputSwitchFlag();

 	//Sets the m_bstrFormedQuery
	BOOL	SetFormedQuery(const BSTR bstrFormedQuery);
	
	//Returns the query formed for the given command.
	BSTR	GetFormedQuery();

	// Get the status of sytem properties flag
	BOOL	GetSysPropFlag();

	// Sets the status of system properties flag
	void	SetSysPropFlag(BOOL bSysProp);
};