#pragma once #include "globals.h" #include "delebase.h" #include #include #include using namespace std; #define WEBSERVER_LIST_DELIM _T( '%' ) #define NULL_TERMINATOR _T( '\0' ) class CUDDIServicesNode; typedef map CConfigMap; class CUDDIWebServerNode; typedef map CUDDIWebServerNodeMap; typedef pair CUDDIWebServerNodeMapEntry; // // Utility class. // class CStringCollection { public: CStringCollection( const wstring& strDelimitedStrings, const wstring& strDelim = L"%" ); virtual ~CStringCollection(); void DeleteString( const wstring& str ); void AddString( const wstring& str ); wstring GetDelimitedString() const; BOOL Exists( const wstring& str ) const; inline int Size() const {return _coll.size();} inline const wstring& operator[]( const int &idx ) const {return _coll[idx];} private: CStringCollection(); CStringCollection( const CStringCollection& copy ); CStringCollection& operator=( const CStringCollection& rhs ); vector< wstring > _coll; wstring _strDelim; }; // // Helper class for working with versions. // class CDBSchemaVersion { public: CDBSchemaVersion(); BOOL Parse( const tstring& versionString ); BOOL IsCompatible( const CDBSchemaVersion& version ); public: int m_major; int m_minor; int m_build; int m_rev; tstring szVersion; private: int GetPart( const _TCHAR* token ); }; class CUDDISiteNode : public CDelegationBase { public: CUDDISiteNode( _TCHAR *szName, _TCHAR *szInstanceName, int id, CUDDIServicesNode *parent, BOOL bExtension ); virtual ~CUDDISiteNode(); static CUDDISiteNode* Create( _TCHAR *szName, _TCHAR *szInstanceName, int id, CUDDIServicesNode* parent, BOOL bExtension ); static BOOL IsDatabaseServer( PTCHAR szName ); static BOOL IsDatabaseServer( PTCHAR szName, PTCHAR szInstance ); static BOOL CALLBACK NewDatabaseServerDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static BOOL GetFullyQualifiedInstanceName( LPCTSTR szName, tstring& strInstanceName ); static BOOL AddWebServerToSite( const wstring& strSite, const wstring& strWebServer, HWND hwndConsole ); virtual const _TCHAR *GetDisplayName( int nCol = 0 ); virtual const GUID & getNodeType() { return thisGuid; } virtual const int GetBitmapIndex() { return INDEX_DBSERVER; } virtual BOOL ChildExists( const WCHAR *pwszName ); virtual BOOL HasChildren(); BOOL IsDeleted() { return m_isDeleted; } HRESULT GetData(); HRESULT SaveData(); HRESULT AddChildrenToScopePane( IConsoleNameSpace *pConsoleNameSpace, HSCOPEITEM parent ); BOOL ResetCryptography(); tstring GetConnectionString(); CConfigMap& GetConfigMap(); const LPCTSTR GetName(); const _TCHAR *GetInstanceName(); size_t PublishToActiveDirectory(); void RemoveFromActiveDirectory(); BOOL CanPublishToActiveDirectory(); CUDDIWebServerNode* FindChild( LPCTSTR szName ); CUDDIServicesNode *GetStaticNode(); void OnDeleteChild( const tstring& szName ); void AddChild( const wstring& strName, IConsole *pConsole ); public: // // Virtual functions go here (for MMCN_*) // virtual HRESULT OnSelect( CComponent *pComponent, IConsole *pConsole, BOOL bScope, BOOL bSelect ); virtual HRESULT OnPropertyChange( IConsole *pConsole, CComponent *pComponent ); virtual HRESULT OnUpdateItem( IConsole *pConsole, long item, ITEM_TYPE itemtype ); virtual HRESULT OnRefresh( IConsole *pConsole ); virtual HRESULT OnDelete( IConsoleNameSpace *pConsoleNameSpace, IConsole *pConsoleComp ); virtual HRESULT OnShowContextHelp(IDisplayHelp *pDisplayHelp, LPOLESTR helpFile); virtual HRESULT OnShow( IConsole *pConsole, BOOL bShow, HSCOPEITEM scopeitem ); virtual HRESULT OnExpand( IConsoleNameSpace *pConsoleNameSpace, IConsole *pConsole, HSCOPEITEM parent ); virtual HRESULT OnAddMenuItems( IContextMenuCallback *pContextMenuCallback, long *pInsertionsAllowed ); virtual HRESULT OnMenuCommand( IConsole *pConsole, IConsoleNameSpace *pConsoleNameSpace, long lCommandID, IDataObject *pDataObject ); virtual HRESULT CreatePropertyPages( IPropertySheetCallback *lpProvider, LONG_PTR handle ); virtual HRESULT HasPropertySheets(); virtual HRESULT GetWatermarks( HBITMAP *lphWatermark, HBITMAP *lphHeader, HPALETTE *lphPalette, BOOL *bStretch ); virtual HRESULT RemoveChildren( IConsoleNameSpace *pNS ); private: void ClearChildMap(); BOOL LoadChildMap( const tstring& szWebServers ); BOOL SaveChildMap( tstring& szWebServers ); static HRESULT GetConfig( CConfigMap& configMap, const tstring& connectionString ); static HRESULT SaveConfig( CConfigMap& configMap, const tstring& connectionString ); const _TCHAR* GetNextWebServer( tstring& webServerList, int& position ); void AddWebServer( tstring& webServerList, const tstring& webServer ); BOOL AddChildEntry( CUDDIWebServerNode *pNode, UINT position = -1 ); tstring GetConnectionStringOLEDB(); static void HandleOLEDBError( HRESULT hrErr ); private: // // Property page dialog procedures // static BOOL CALLBACK GeneralDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static BOOL CALLBACK RolesDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static BOOL CALLBACK SecurityDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static BOOL CALLBACK ActiveDirectoryDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static BOOL CALLBACK CryptographyDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static BOOL CALLBACK AdvancedDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static BOOL CALLBACK PropertyEditDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); static const GUID thisGuid; enum menuItems { IDM_NEW_WEBSERVER = 1, IDM_DEBUG }; static UINT m_nNextChildID; _TCHAR* m_szName; _TCHAR* m_szInstanceName; tstring m_strDisplayName; LONG_PTR m_ppHandle; CUDDIServicesNode* m_pParent; BOOL m_isDeleted; CConfigMap m_mapConfig; CConfigMap m_mapChanges; CUDDIWebServerNodeMap m_mapChildren; CDBSchemaVersion m_siteVersion; public: BOOL m_bIsDirty; BOOL m_bStdSvr; };