//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2000 - 2001. // // File: Rolecont.h // // Contents: Class declaration of Base Container class // // History: 07-26-2001 Hiteshr Created // //---------------------------------------------------------------------------- //forward declarations class CRolePropertyPageHolder; class CAdminManagerNode; /****************************************************************************** Class: CBaseNode Purpose: This common base class for all snapins node ******************************************************************************/ class CBaseNode { public: CBaseNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode, CBaseAz* pBaseAz, BOOL bDeleteBaseAzInDestructor = TRUE); virtual ~CBaseNode(); virtual CBaseAz* GetBaseAzObject() { return m_pBaseAz; } virtual CSidHandler* GetSidHandler(); CRoleComponentDataObject* GetComponentDataObject() { return m_pComponentDataObject; } CAdminManagerNode* GetAdminManagerNode() { return m_pAdminManagerNode; } void SetComponentDataObject(CRoleComponentDataObject * pComponentDataObject) { m_pComponentDataObject = pComponentDataObject; } void SetAdminManagerNode(CAdminManagerNode* pAdminManagerNode) { m_pAdminManagerNode = pAdminManagerNode; } virtual HRESULT DeleteAssociatedBaseAzObject(); virtual BOOL IsNodeDeleteable(){ return TRUE;}; private: CRoleComponentDataObject * m_pComponentDataObject; CAdminManagerNode* m_pAdminManagerNode; CBaseAz* m_pBaseAz; BOOL m_bDeleteBaseAzInDestructor; }; /****************************************************************************** Class: CBaseContainerNode Purpose: This is the base class for snapin nodes which can contain child nodes. ******************************************************************************/ class CBaseContainerNode: public CContainerNode, public CBaseNode { public: CBaseContainerNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode, CContainerAz* pContainerAz, OBJECT_TYPE_AZ* pChildObjectTypes, LPCONTEXTMENUITEM2 pContextMenu, BOOL bDeleteBaseAzInDestructor = TRUE); virtual ~CBaseContainerNode(); CContainerAz* GetContainerAzObject(){return (CContainerAz*)GetBaseAzObject();} protected: //Get Type/Name/Description virtual const CString& GetType() = 0; virtual const CString& GetName() = 0; virtual const CString& GetDesc() = 0; virtual void DoCommand(LONG , CComponentDataObject*, CNodeList*){}; //Helper Functions for enumeration HRESULT AddChildNodes(); HRESULT AddAzCollectionNode(OBJECT_TYPE_AZ eObjectType); HRESULT EnumAndAddAzObjectNodes(OBJECT_TYPE_AZ eObjectType); private: OBJECT_TYPE_AZ* m_pChildObjectTypes; LPCONTEXTMENUITEM2 m_pContextMenu; public: // //CTreeNode method overrides // virtual HRESULT GetResultViewType(CComponentDataObject* pComponentData, LPOLESTR* ppViewType, long* pViewOptions); virtual BOOL OnAddMenuItem(LPCONTEXTMENUITEM2, long*); virtual CColumnSet* GetColumnSet(); virtual LPCWSTR GetColumnID() { return GetColumnSet()->GetColumnID(); } virtual LPCWSTR GetString(int nCol); virtual int GetImageIndex(BOOL bOpenImage); // // Verb handlers // virtual void OnDelete(CComponentDataObject* pComponentData, CNodeList* pNodeList); virtual HRESULT OnCommand(long, DATA_OBJECT_TYPES, CComponentDataObject*, CNodeList*); virtual BOOL OnSetRefreshVerbState(DATA_OBJECT_TYPES /*type*/, BOOL* pbHide, CNodeList* /*pNodeList*/) { *pbHide = FALSE; return TRUE; } LPCONTEXTMENUITEM2 OnGetContextMenuItemTable() { return m_pContextMenu; } virtual BOOL OnSetDeleteVerbState(DATA_OBJECT_TYPES type, BOOL* pbHide, CNodeList* pNodeList); virtual BOOL CanCloseSheets(); virtual BOOL OnEnumerate(CComponentDataObject*, BOOL bAsync = TRUE); private: CColumnSet* m_pColumnSet; }; /****************************************************************************** Class: CAzContainerNode Purpose: Snapin Nodes for BaseAz Objects which can contain other child objects use CAzContainerNode as base class ******************************************************************************/ class CAzContainerNode: public CBaseContainerNode { public: CAzContainerNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode, OBJECT_TYPE_AZ* pChildObjectTypes, LPCONTEXTMENUITEM2 pContextMenu, CContainerAz* pContainerAz); virtual ~CAzContainerNode(); protected: virtual HRESULT AddOnePageToList(CRolePropertyPageHolder * /*pHolder*/, UINT /*nPageNumber*/) { return HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS); } //Get Type/Name/Description virtual const CString& GetType() { return GetBaseAzObject()->GetType(); } virtual const CString& GetName() { return GetBaseAzObject()->GetName(); } virtual const CString& GetDesc() { return GetBaseAzObject()->GetDescription(); } private: public: virtual BOOL HasPropertyPages(DATA_OBJECT_TYPES type, BOOL* pbHideVerb, CNodeList* pNodeList); virtual HRESULT CreatePropertyPages(LPPROPERTYSHEETCALLBACK, LONG_PTR, CNodeList*); virtual void OnPropertyChange(CComponentDataObject* pComponentData, BOOL bScopePane, long changeMask); }; /****************************************************************************** Class: CCollectionNode Purpose: Base Class for snapin nodes which are used to group objects of same type. ******************************************************************************/ class CCollectionNode: public CBaseContainerNode { public: CCollectionNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode, OBJECT_TYPE_AZ* pChildObjectTypes, LPCONTEXTMENUITEM2 pContextMenu, CContainerAz* pContainerAzObject, UINT nNameStringID, UINT nTypeStringID, UINT nDescStringID); virtual ~CCollectionNode(); virtual BOOL IsNodeDeleteable(){ return FALSE;}; virtual int GetImageIndex(BOOL /*bOpenImage*/) { return iIconContainer; } protected: virtual const CString& GetType(){return m_strType;} virtual const CString& GetName(){return m_strName;} virtual const CString& GetDesc(){return m_strDesc;} private: CString m_strName; CString m_strType; CString m_strDesc; }; //+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2000 - 2001. // // File: AdminMangerCont.h // // Contents: // // History: 08-2001 Hiteshr Created // //---------------------------------------------------------------------------- //Forward Declarations class CGroupNode; class CTaskNode; class CRoleNode; class COperationNode; class CRolePropertyPageHolder; /****************************************************************************** Class: CAdminManagerNode Purpose: Snapin Node for AdminManager object ******************************************************************************/ class CAdminManagerNode : public CAzContainerNode { public: static OBJECT_TYPE_AZ childObjectTypes[]; CAdminManagerNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerAz* pAdminManagerAz); ~CAdminManagerNode(); static HRESULT CreateFromStream(IN IStream* pStm, IN CRootData* pRootData, IN CComponentDataObject * pComponentDataObject); HRESULT SaveToStream(IStream* pStm); const CString& GetScriptDirectory(); void SetScriptDirectory(const CString& strScriptDirectory) { m_strScriptDirectory = strScriptDirectory; } void DoCommand(LONG nCommandID, CComponentDataObject*, CNodeList*); HRESULT DeleteAssociatedBaseAzObject(); CSidHandler* GetSidHandler() { return ((CAdminManagerAz*)GetContainerAzObject())->GetSidHandler(); } virtual const CString& GetName() { return ((CAdminManagerAz*)GetContainerAzObject())->GetDisplayName();} DECLARE_NODE_GUID() protected: virtual HRESULT AddOnePageToList(CRolePropertyPageHolder *pHolder, UINT nPageNumber); virtual BOOL OnAddMenuItem(LPCONTEXTMENUITEM2 pContextMenuItem2, long *pInsertionAllowed); private: CString m_strScriptDirectory; }; /****************************************************************************** Class: CApplicationNode Purpose: Snapin Node for Application object ******************************************************************************/ class CApplicationNode: public CAzContainerNode { public: static OBJECT_TYPE_AZ childObjectTypes[]; CApplicationNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode, CApplicationAz* pApplicationAz); virtual ~CApplicationNode(); void DoCommand(LONG nCommandID, CComponentDataObject*, CNodeList*); DECLARE_NODE_GUID() protected: virtual HRESULT AddOnePageToList(CRolePropertyPageHolder *pHolder, UINT nPageNumber); }; /****************************************************************************** Class: CScopeNode Purpose: Snapin Node for Scope object ******************************************************************************/ class CScopeNode: public CAzContainerNode { public: static OBJECT_TYPE_AZ childObjectTypes[]; CScopeNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode, CScopeAz* pApplicationAz); virtual ~CScopeNode(); DECLARE_NODE_GUID() protected: virtual HRESULT AddOnePageToList(CRolePropertyPageHolder *pHolder, UINT nPageNumber); }; /****************************************************************************** Class: CGroupCollectionNode Purpose: Snapin Node under which all the groups will be listed ******************************************************************************/ class CGroupCollectionNode:public CCollectionNode { public: static OBJECT_TYPE_AZ childObjectTypes[]; CGroupCollectionNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode,CContainerAz* pContainerAzObject); virtual ~CGroupCollectionNode(); enum {IDS_NAME = IDS_NAME_GROUP_CONTAINER, IDS_TYPE = IDS_TYPE_GROUP_CONTAINER, IDS_DESC = IDS_DESC_GROUP_CONTAINER}; void DoCommand(LONG nCommandID, CComponentDataObject*, CNodeList*); DECLARE_NODE_GUID() }; /****************************************************************************** Class: CRoleDefinitionCollectionNode Purpose: Snapin Node under which all the Role definitions will be listed ******************************************************************************/ class CRoleDefinitionCollectionNode:public CCollectionNode { public: static OBJECT_TYPE_AZ childObjectTypes[]; CRoleDefinitionCollectionNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode,CContainerAz* pContainerAzObject); virtual ~CRoleDefinitionCollectionNode(); enum {IDS_NAME = IDS_NAME_ROLE_DEFINITION_CONTAINER, IDS_TYPE = IDS_TYPE_ROLE_DEFINITION_CONTAINER, IDS_DESC = IDS_DESC_ROLE_DEFINITION_CONTAINER}; void DoCommand(LONG nCommandID, CComponentDataObject*, CNodeList*); BOOL OnEnumerate(CComponentDataObject*, BOOL ); DECLARE_NODE_GUID() }; /****************************************************************************** Class: CTaskCollectionNode Purpose: Snapin Node under which all the Tasks will be listed ******************************************************************************/ class CTaskCollectionNode:public CCollectionNode { public: static OBJECT_TYPE_AZ childObjectTypes[]; CTaskCollectionNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode,CContainerAz* pContainerAzObject); virtual ~CTaskCollectionNode(); enum {IDS_NAME = IDS_NAME_TASK_CONTAINER, IDS_TYPE = IDS_TYPE_TASK_CONTAINER, IDS_DESC = IDS_DESC_TASK_CONTAINER}; void DoCommand(LONG nCommandID, CComponentDataObject*, CNodeList*); BOOL OnEnumerate(CComponentDataObject*, BOOL ); DECLARE_NODE_GUID() }; /****************************************************************************** Class: CRoleCollectionNode Purpose: Snapin Node under which all the Roles will be listed ******************************************************************************/ class CRoleCollectionNode:public CCollectionNode { public: static OBJECT_TYPE_AZ childObjectTypes[]; CRoleCollectionNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode,CContainerAz* pContainerAzObject); virtual ~CRoleCollectionNode(); enum {IDS_NAME = IDS_NAME_ROLE_CONTAINER, IDS_TYPE = IDS_TYPE_ROLE_CONTAINER, IDS_DESC = IDS_DESC_ROLE_CONTAINER}; void DoCommand(LONG nCommandID, CComponentDataObject*, CNodeList*); DECLARE_NODE_GUID() private: BOOL CreateNewRoleObject(CBaseAz* pBaseAz); }; /****************************************************************************** Class: COperationCollectionNode Purpose: Snapin Node under which all the Operations will be listed ******************************************************************************/ class COperationCollectionNode:public CCollectionNode { public: static OBJECT_TYPE_AZ childObjectTypes[]; COperationCollectionNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode,CContainerAz* pContainerAzObject); virtual ~COperationCollectionNode(); enum {IDS_NAME = IDS_NAME_OPERATION_CONTAINER, IDS_TYPE = IDS_TYPE_OPERATION_CONTAINER, IDS_DESC = IDS_DESC_OPERATION_CONTAINER}; VOID DoCommand(LONG nCommandID, CComponentDataObject*, CNodeList*); DECLARE_NODE_GUID() }; /****************************************************************************** Class: CDefinitionCollectionNode Purpose: Snapin Node under which all the Definions nodes will be listed ******************************************************************************/ class CDefinitionCollectionNode: public CCollectionNode { public: CDefinitionCollectionNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode,CContainerAz* pContainerAz); virtual ~CDefinitionCollectionNode(); enum {IDS_NAME = IDS_NAME_DEFINITION_CONTAINER, IDS_TYPE = IDS_TYPE_DEFINITION_CONTAINER, IDS_DESC = IDS_DESC_DEFINITION_CONTAINER}; BOOL OnEnumerate(CComponentDataObject*, BOOL bAsync = TRUE); DECLARE_NODE_GUID() }; /****************************************************************************** Class: CRoleNode Purpose: Snapin Node for RoleAz object ******************************************************************************/ class CRoleNode:public CContainerNode, public CBaseNode { public: CRoleNode(CRoleComponentDataObject * pComponentDataObject, CAdminManagerNode* pAdminManagerNode, CRoleAz* pRoleAz); virtual ~CRoleNode(); //CTreeNode method overrides virtual HRESULT GetResultViewType(CComponentDataObject* pComponentData, LPOLESTR* ppViewType, long* pViewOptions); virtual BOOL OnAddMenuItem(LPCONTEXTMENUITEM2,long*); virtual CColumnSet* GetColumnSet(); virtual LPCWSTR GetColumnID(){return GetColumnSet()->GetColumnID();} virtual LPCWSTR GetString(int nCol); virtual int GetImageIndex(BOOL bOpenImage); // Verb handlers BOOL OnSetDeleteVerbState(DATA_OBJECT_TYPES type, BOOL* pbHide, CNodeList* pNodeList); virtual void OnDelete(CComponentDataObject* pComponentData, CNodeList* pNodeList); virtual HRESULT OnCommand(long, DATA_OBJECT_TYPES, CComponentDataObject*, CNodeList*); virtual BOOL OnSetRefreshVerbState(DATA_OBJECT_TYPES /*type*/, BOOL* pbHide, CNodeList* /*pNodeList*/) { *pbHide = FALSE; return TRUE; } LPCONTEXTMENUITEM2 OnGetContextMenuItemTable() { return CRoleNodeMenuHolder::GetContextMenuItem(); } virtual BOOL OnEnumerate(CComponentDataObject*, BOOL bAsync = TRUE); BOOL HasPropertyPages(DATA_OBJECT_TYPES /*type*/, BOOL* pbHideVerb, CNodeList* pNodeList); HRESULT CreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider, LONG_PTR handle, CNodeList* pNodeList); void OnPropertyChange(CComponentDataObject* pComponentData, BOOL bScopePane, long changeMask); DECLARE_NODE_GUID() private: void AssignUsersAndGroups(IN CComponentDataObject* pComponentData, IN ULONG nCommandID); void AddObjectsFromListToSnapin(CList &listObjects, CComponentDataObject* pComponentData, BOOL bAddToUI); CColumnSet* m_pColumnSet; }; void GenericDeleteRoutine(CBaseNode* pBaseNode, CComponentDataObject* pComponentData, CNodeList* pNodeList, BOOL bConfirmDelete);