// LogODBC.cpp : implementation file // #include "stdafx.h" #include #include "logui.h" #include "LogODBC.h" #include "CnfrmPsD.h" #include "wrapmb.h" #include "metatool.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLogODBC property page IMPLEMENT_DYNCREATE(CLogODBC, CPropertyPage) //-------------------------------------------------------------------------- CLogODBC::CLogODBC() : CPropertyPage(CLogODBC::IDD), m_fInitialized( FALSE ) { //{{AFX_DATA_INIT(CLogODBC) m_sz_datasource = _T(""); m_sz_password = _T(""); m_sz_table = _T(""); m_sz_username = _T(""); //}}AFX_DATA_INIT m_szOrigPass.Empty(); m_bPassTyped = FALSE; } //-------------------------------------------------------------------------- CLogODBC::~CLogODBC() { } //-------------------------------------------------------------------------- void CLogODBC::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLogODBC) DDX_Control(pDX, IDC_ODBC_PASSWORD, m_cedit_password); DDX_Text(pDX, IDC_ODBC_DATASOURCE, m_sz_datasource); DDX_Text(pDX, IDC_ODBC_PASSWORD, m_sz_password); DDX_Text(pDX, IDC_ODBC_TABLE, m_sz_table); DDX_Text(pDX, IDC_ODBC_USERNAME, m_sz_username); //}}AFX_DATA_MAP } //-------------------------------------------------------------------------- BEGIN_MESSAGE_MAP(CLogODBC, CPropertyPage) //{{AFX_MSG_MAP(CLogODBC) ON_EN_CHANGE(IDC_ODBC_DATASOURCE, OnChangeOdbcDatasource) ON_EN_CHANGE(IDC_ODBC_PASSWORD, OnChangeOdbcPassword) ON_EN_CHANGE(IDC_ODBC_TABLE, OnChangeOdbcTable) ON_EN_CHANGE(IDC_ODBC_USERNAME, OnChangeOdbcUsername) //}}AFX_MSG_MAP ON_COMMAND(ID_HELP_FINDER, DoHelp) ON_COMMAND(ID_HELP, DoHelp) ON_COMMAND(ID_CONTEXT_HELP, DoHelp) ON_COMMAND(ID_DEFAULT_HELP, DoHelp) END_MESSAGE_MAP() //--------------------------------------------------------------------------- void CLogODBC::DoHelp() { WinHelp( HIDD_LOGUI_ODBC ); } //-------------------------------------------------------------------------- void CLogODBC::Init() { UpdateData( TRUE ); DWORD dw; LPCTSTR pstr; // we will just be pulling stuff out of the metabase here // prepare the metabase wrapper CWrapMetaBase mbWrap; if ( !mbWrap.FInit(m_pMB) ) return; // open the target if ( mbWrap.Open( m_szMeta, METADATA_PERMISSION_READ ) ) { // datasources pstr = (LPCTSTR)mbWrap.GetData( _T(""), MD_LOGSQL_DATA_SOURCES, IIS_MD_UT_SERVER, STRING_METADATA, &dw, METADATA_INHERIT ); if ( pstr ) { m_sz_datasource = pstr; // free it mbWrap.FreeWrapData( (PVOID)pstr ); } // password pstr = (LPCTSTR)mbWrap.GetData( _T(""), MD_LOGSQL_PASSWORD, IIS_MD_UT_SERVER, STRING_METADATA, &dw, METADATA_INHERIT ); if ( pstr ) { m_sz_password = pstr; // free it mbWrap.FreeWrapData( (PVOID)pstr ); m_szOrigPass = m_sz_password; if ( !m_sz_password.IsEmpty() ) m_sz_password.LoadString( IDS_SHOWN_PASSWORD ); } // table name pstr = (LPCTSTR)mbWrap.GetData( _T(""), MD_LOGSQL_TABLE_NAME, IIS_MD_UT_SERVER, STRING_METADATA, &dw, METADATA_INHERIT ); if ( pstr ) { m_sz_table = pstr; // free it mbWrap.FreeWrapData( (PVOID)pstr ); } // user name pstr = (LPCTSTR)mbWrap.GetData( _T(""), MD_LOGSQL_USER_NAME, IIS_MD_UT_SERVER, STRING_METADATA, &dw, METADATA_INHERIT ); if ( pstr ) { m_sz_username = pstr; // free it mbWrap.FreeWrapData( (PVOID)pstr ); } // close the metabase mbWrap.Close(); } // put the data into place UpdateData( FALSE ); } ///////////////////////////////////////////////////////////////////////////// // CLogODBC message handlers //-------------------------------------------------------------------------- BOOL CLogODBC::OnApply() { BOOL f; UpdateData( TRUE ); // confirm the password if ( m_bPassTyped ) { CConfirmPassDlg dlgPass; dlgPass.m_szOrigPass = m_sz_password; if ( dlgPass.DoModal() != IDOK ) { m_cedit_password.SetFocus(); m_cedit_password.SetSel(0, -1); return FALSE; } } // prepare and open the metabase object CWrapMetaBase mb; if ( !mb.FInit(m_pMB) ) return FALSE; // open the target if ( OpenAndCreate( &mb, m_szMeta, METADATA_PERMISSION_WRITE | METADATA_PERMISSION_READ, TRUE ) ) { // prepare for the inheritence checks CCheckInheritList listInherit; f = SetMBString(&mb, &listInherit, _T(""), MD_LOGSQL_DATA_SOURCES, IIS_MD_UT_SERVER, m_sz_datasource, FALSE); if ( m_bPassTyped ) { f = SetMBString(&mb, &listInherit, _T(""), MD_LOGSQL_PASSWORD, IIS_MD_UT_SERVER, m_sz_password, TRUE); } f = SetMBString(&mb, &listInherit, _T(""), MD_LOGSQL_TABLE_NAME, IIS_MD_UT_SERVER, m_sz_table, FALSE); f = SetMBString(&mb, &listInherit, _T(""), MD_LOGSQL_USER_NAME, IIS_MD_UT_SERVER, m_sz_username, FALSE); // close the metabase mb.Close(); // do all the inheritence checks listInherit.CheckInheritence( m_szServer, m_szMeta ); } // clear the modified flag SetModified( FALSE ); // reset the internal password-typed flag m_szOrigPass = m_sz_password; m_bPassTyped = FALSE; return CPropertyPage::OnApply(); } //-------------------------------------------------------------------------- BOOL CLogODBC::OnSetActive() { if ( !m_fInitialized ) { Init(); m_fInitialized = TRUE; } return CPropertyPage::OnSetActive(); } //-------------------------------------------------------------------------- void CLogODBC::OnChangeOdbcDatasource() { SetModified(); } //-------------------------------------------------------------------------- void CLogODBC::OnChangeOdbcPassword() { m_bPassTyped = TRUE; SetModified(); } //-------------------------------------------------------------------------- void CLogODBC::OnChangeOdbcTable() { SetModified(); } //-------------------------------------------------------------------------- void CLogODBC::OnChangeOdbcUsername() { SetModified(); }