/*++ © 1998 Seagate Software, Inc. All rights reserved. Module Name: PrCar.cpp Abstract: Cartridge Property Pages. Author: Rohde Wakefield [rohde] 15-Sep-1997 Revision History: --*/ #include "stdafx.h" #include "metalib.h" #include "PrCar.h" #include "ca.h" static void RsAddDisabledText( CString & StatusString, BOOL Disabled ) { if( Disabled ) { CString disabledText; CString tempText; disabledText.LoadString( IDS_RECREATE_LOCATION_DISABLED ); AfxFormatString2( tempText, IDS_RECREATE_STATUS_FORMAT, StatusString, disabledText ); StatusString = tempText; } } static DWORD pStatusHelpIds[] = { IDC_NAME, idh_media_master_name, IDC_NAME_LABEL, idh_media_master_name, IDC_STATUS, idh_media_master_status, IDC_STATUS_LABEL, idh_media_master_status, IDC_CAPACITY, idh_media_master_capacity, IDC_CAPACITY_LABEL, idh_media_master_capacity, IDC_FREESPACE, idh_media_master_free_space, IDC_FREESPACE_LABEL, idh_media_master_free_space, IDC_MODIFIED, idh_media_master_last_modified, IDC_MODIFIED_LABEL, idh_media_master_last_modified, IDC_STATUS_1, idh_media_copy1_status, IDC_COPY_1, idh_media_copy1_status, IDC_STATUS_2, idh_media_copy2_status, IDC_COPY_2, idh_media_copy2_status, IDC_STATUS_3, idh_media_copy3_status, IDC_COPY_3, idh_media_copy3_status, 0, 0 }; static DWORD pCopiesHelpIds[] = { IDC_MODIFIED, idh_media_master_last_modified, IDC_MODIFIED_LABEL, idh_media_master_last_modified, IDC_NAME_1_LABEL, idh_media_copy1_name, IDC_NAME_1, idh_media_copy1_name, IDC_NAME_2_LABEL, idh_media_copy2_name, IDC_NAME_2, idh_media_copy2_name, IDC_NAME_3_LABEL, idh_media_copy3_name, IDC_NAME_3, idh_media_copy3_name, IDC_STATUS_1, idh_media_copy1_status, IDC_STATUS_1_LABEL, idh_media_copy1_status, IDC_STATUS_2, idh_media_copy2_status, IDC_STATUS_2_LABEL, idh_media_copy2_status, IDC_STATUS_3, idh_media_copy3_status, IDC_STATUS_3_LABEL, idh_media_copy3_status, IDC_DELETE_1, idh_media_copy1_delete_button, IDC_DELETE_2, idh_media_copy2_delete_button, IDC_DELETE_3, idh_media_copy3_delete_button, IDC_MODIFIED_1, idh_media_copy1_last_modified, IDC_MODIFIED_1_LABEL, idh_media_copy1_last_modified, IDC_MODIFIED_2, idh_media_copy2_last_modified, IDC_MODIFIED_2_LABEL, idh_media_copy2_last_modified, IDC_MODIFIED_3, idh_media_copy3_last_modified, IDC_MODIFIED_3_LABEL, idh_media_copy3_last_modified, 0, 0 }; static DWORD pRecoverHelpIds[] = { IDC_RECREATE_MASTER, idh_media_recreate_master_button, 0, 0 }; ///////////////////////////////////////////////////////////////////////////// // CPropCartStatus property page CPropCartStatus::CPropCartStatus( long resourceId ) : CSakPropertyPage( resourceId ) { //{{AFX_DATA_INIT(CPropCartStatus) //}}AFX_DATA_INIT m_pHelpIds = pStatusHelpIds; m_DlgID = resourceId; } CPropCartStatus::~CPropCartStatus() { } void CPropCartStatus::DoDataExchange(CDataExchange* pDX) { CSakPropertyPage::DoDataExchange(pDX ); //{{AFX_DATA_MAP(CPropCartStatus) //}}AFX_DATA_MAP if( IDD_PROP_CAR_STATUS == m_DlgID ) { DDX_Control(pDX, IDC_DESCRIPTION, m_Description); DDX_Control(pDX, IDC_NAME, m_Name); } } BEGIN_MESSAGE_MAP(CPropCartStatus, CSakPropertyPage) //{{AFX_MSG_MAP(CPropCartStatus) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPropCartStatus message handlers typedef struct { int label, status; } CONTROL_SET_GENERAL; CONTROL_SET_GENERAL copyGeneral[] = { { IDC_COPY_1, IDC_STATUS_1 }, { IDC_COPY_2, IDC_STATUS_2 }, { IDC_COPY_3, IDC_STATUS_3 } }; BOOL CPropCartStatus::OnInitDialog( ) { WsbTraceIn( L"CPropCartStatus::OnInitDialog", L"" ); HRESULT hr = S_OK; CSakPropertyPage::OnInitDialog( ); try { // // Get the Hsm Server // WsbAffirmHr( m_pParent->GetHsmServer( &m_pHsmServer ) ); // // Get the Rms Server // WsbAffirmHr( ( (CUiCarSheet *)m_pParent )->GetRmsServer( &m_pRmsServer ) ); // // Set multi-select boolean // m_bMultiSelect = ( m_pParent->IsMultiSelect() == S_OK ); Refresh(); } WsbCatch( hr ); WsbTraceOut( L"CPropCartStatus::OnInitDialog", L"hr = <%ls>", WsbHrAsString( hr ) ); return( TRUE ); } HRESULT CPropCartStatus::Refresh () { WsbTraceIn( L"CPropCartStatus::Refresh", L"" ); GUID mediaId; USHORT status; CString statusString; CMediaInfoObject mio; CString sText; HRESULT hr = S_OK; AFX_MANAGE_STATE( AfxGetStaticModuleState() ); try { // // If refresh is called and the node is not initialized, do nothing // if( m_pHsmServer ) { // // Get the number of media copies from the sheet object // WsbAffirmHr( ( (CUiCarSheet *)m_pParent )->GetNumMediaCopies( &m_NumMediaCopies ) ); if( !m_bMultiSelect ) { // // SINGLE SELECT // // // Get media info // ( (CUiCarSheet *)m_pParent )->GetMediaId( &mediaId ); mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ); // // Get info and set controls // SetDlgItemText( IDC_DESCRIPTION, mio.m_MasterDescription ); SetDlgItemText( IDC_NAME, mio.m_MasterName ); status = RsGetCartStatus( mio.m_LastHr, mio.m_ReadOnly, mio.m_Recreating, mio.m_NextDataSet, mio.m_LastGoodNextDataSet ); WsbAffirmHr( RsGetCartStatusString( status, statusString ) ); RsAddDisabledText( statusString, mio.m_Disabled ); SetDlgItemText( IDC_STATUS, statusString ); // // Show capacity statistics // WsbAffirmHr( RsGuiFormatLongLong4Char( mio.m_Capacity, sText ) ); SetDlgItemText( IDC_CAPACITY, sText ); WsbAffirmHr( RsGuiFormatLongLong4Char( mio.m_FreeSpace, sText ) ); SetDlgItemText( IDC_FREESPACE, sText ); CTime time( mio.m_Modify ); SetDlgItemText( IDC_MODIFIED, time.Format( L"%#c" ) ); for( int index = 0; index < HSMADMIN_MAX_COPY_SETS; index++ ) { GetDlgItem( copyGeneral[index].label )->EnableWindow( index < m_NumMediaCopies ); GetDlgItem( copyGeneral[index].status )->EnableWindow( index < m_NumMediaCopies ); status = RsGetCopyStatus( mio.m_CopyInfo[index].m_RmsId, mio.m_CopyInfo[index].m_Hr, mio.m_CopyInfo[index].m_NextDataSet, mio.m_LastGoodNextDataSet ); WsbAffirmHr( RsGetCopyStatusString( status, statusString ) ); RsAddDisabledText( statusString, mio.m_CopyInfo[index].m_Disabled ); SetDlgItemText( copyGeneral[index].status, statusString ); } } else { // // Multi-Select // GUID mediaId; LONGLONG totalCapacity = 0; LONGLONG totalFreeSpace = 0; USHORT statusCartRecreate = 0; USHORT statusCartReadOnly = 0; USHORT statusCartNormal = 0; USHORT statusCartRO = 0; USHORT statusCartRW = 0; USHORT statusCartMissing = 0; USHORT statusCopyNone[ HSMADMIN_MAX_COPY_SETS ]; USHORT statusCopyError[ HSMADMIN_MAX_COPY_SETS ]; USHORT statusCopyMissing[ HSMADMIN_MAX_COPY_SETS ]; USHORT statusCopyOutSync[ HSMADMIN_MAX_COPY_SETS ]; USHORT statusCopyInSync[ HSMADMIN_MAX_COPY_SETS ]; // // initialize copy totals // for( int i = 0; i < HSMADMIN_MAX_COPY_SETS; i++ ) { statusCopyNone[i] = 0; statusCopyError[i] = 0; statusCopyOutSync[i] = 0; statusCopyInSync[i] = 0; } int bookMark = 0; int numMedia = 0; while( m_pParent->GetNextObjectId( &bookMark, &mediaId ) == S_OK ) { numMedia++; mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ); // // total up statuses // status = RsGetCartStatus( mio.m_LastHr, mio.m_ReadOnly, mio.m_Recreating, mio.m_NextDataSet, mio.m_LastGoodNextDataSet ); switch( status ) { case RS_MEDIA_STATUS_RECREATE: statusCartRecreate++; break; case RS_MEDIA_STATUS_READONLY: statusCartReadOnly++; break; case RS_MEDIA_STATUS_NORMAL: statusCartNormal++; break; case RS_MEDIA_STATUS_ERROR_RO: statusCartRO++; break; case RS_MEDIA_STATUS_ERROR_RW: statusCartRW++; break; case RS_MEDIA_STATUS_ERROR_MISSING: statusCartMissing++; break; } for( int index = 0; index < HSMADMIN_MAX_COPY_SETS; index++ ) { int status = RsGetCopyStatus( mio.m_CopyInfo[index].m_RmsId, mio.m_CopyInfo[index].m_Hr, mio.m_CopyInfo[index].m_NextDataSet, mio.m_LastGoodNextDataSet ); // // Total up the statuses // switch( status ) { case RS_MEDIA_COPY_STATUS_NONE: statusCopyNone[index]++; break; case RS_MEDIA_COPY_STATUS_ERROR: statusCopyError[index]++; break; case RS_MEDIA_COPY_STATUS_MISSING: statusCopyMissing[index]++; break; case RS_MEDIA_COPY_STATUS_OUTSYNC: statusCopyOutSync[index]++; break; case RS_MEDIA_COPY_STATUS_INSYNC: statusCopyInSync[index]++; break; } } totalCapacity += mio.m_Capacity; totalFreeSpace += mio.m_FreeSpace; } // While // // Display number of media selected // sText.Format( IDS_MEDIA, numMedia ); SetDlgItemText( IDC_DESCRIPTION_MULTI, sText ); // // Show the accumulated statistics // CString sText; WsbAffirmHr( RsGuiFormatLongLong4Char( totalCapacity, sText ) ); SetDlgItemText( IDC_CAPACITY, sText ); WsbAffirmHr( RsGuiFormatLongLong4Char( totalFreeSpace, sText ) ); SetDlgItemText( IDC_FREESPACE, sText ); // // Show the accumulated cart statuses // RsGetCartMultiStatusString( statusCartRecreate, statusCartReadOnly, statusCartNormal, statusCartRO, statusCartRW, statusCartMissing, statusString ); SetDlgItemText( IDC_STATUS, statusString ); for( i = 0; i < HSMADMIN_MAX_COPY_SETS; i++ ) { WsbAffirmHr( RsGetCopyMultiStatusString( statusCopyNone[i], statusCopyError[i], statusCopyOutSync[i], statusCopyInSync[i], statusString ) ); SetDlgItemText( copyGeneral[i].status, statusString ); GetDlgItem( copyGeneral[i].label )->EnableWindow( i < m_NumMediaCopies ); GetDlgItem( copyGeneral[i].status )->EnableWindow( i < m_NumMediaCopies ); } // for } } } WsbCatch( hr ); WsbTraceOut( L"CPropCartStatus::Refresh", L"hr = <%ls>", WsbHrAsString( hr ) ); return( hr ); } BOOL CPropCartStatus::OnApply( ) { WsbTraceIn( L"CPropCartStatus::OnApply", L"" ); BOOL retVal = CSakPropertyPage::OnApply( ); WsbTraceOut( L"CPropCartStatus::OnApply", L"" ); return( retVal ); } ///////////////////////////////////////////////////////////////////////////// // CPropCartCopies property page CPropCartCopies::CPropCartCopies( long resourceId ) : CSakPropertyPage( resourceId ) { //{{AFX_DATA_INIT(CPropCartCopies) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pHelpIds = pCopiesHelpIds; m_DlgID = resourceId; } CPropCartCopies::~CPropCartCopies() { } void CPropCartCopies::DoDataExchange(CDataExchange* pDX) { CSakPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropCartCopies) //}}AFX_DATA_MAP if( IDD_PROP_CAR_COPIES == m_DlgID ) { DDX_Control(pDX, IDC_NAME_3, m_Name3); DDX_Control(pDX, IDC_NAME_2, m_Name2); DDX_Control(pDX, IDC_NAME_1, m_Name1); DDX_Control(pDX, IDC_STATUS_3, m_Status3); DDX_Control(pDX, IDC_STATUS_2, m_Status2); DDX_Control(pDX, IDC_STATUS_1, m_Status1); } } BEGIN_MESSAGE_MAP(CPropCartCopies, CSakPropertyPage) //{{AFX_MSG_MAP(CPropCartCopies) ON_BN_CLICKED(IDC_DELETE_1, OnDelete1) ON_BN_CLICKED(IDC_DELETE_2, OnDelete2) ON_BN_CLICKED(IDC_DELETE_3, OnDelete3) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPropCartCopies message handlers typedef struct { int group, nameLabel, name, statusLabel, status, modifyLabel, modify, deleteCopy; } CONTROL_SET_COPIES; CONTROL_SET_COPIES copyCopies[] = { { IDC_COPY_1, IDC_NAME_1_LABEL, IDC_NAME_1, IDC_STATUS_1_LABEL, IDC_STATUS_1, IDC_MODIFIED_1_LABEL, IDC_MODIFIED_1, IDC_DELETE_1 }, { IDC_COPY_2, IDC_NAME_2_LABEL, IDC_NAME_2, IDC_STATUS_2_LABEL, IDC_STATUS_2, IDC_MODIFIED_2_LABEL, IDC_MODIFIED_2, IDC_DELETE_2 }, { IDC_COPY_3, IDC_NAME_3_LABEL, IDC_NAME_3, IDC_STATUS_3_LABEL, IDC_STATUS_3, IDC_MODIFIED_3_LABEL, IDC_MODIFIED_3, IDC_DELETE_3 } }; BOOL CPropCartCopies::OnInitDialog() { WsbTraceIn( L"CPropCartCopies::OnInitDialog", L"" ); HRESULT hr = S_OK; CSakPropertyPage::OnInitDialog( ); AFX_MANAGE_STATE( AfxGetStaticModuleState() ); try { // // Get the Hsm Server // WsbAffirmHr( m_pParent->GetHsmServer( &m_pHsmServer ) ); // // Get the Rms Server // WsbAffirmHr( ( (CUiCarSheet* ) m_pParent )->GetRmsServer( &m_pRmsServer ) ); // // Set multi-select boolean // m_bMultiSelect = ( m_pParent->IsMultiSelect() == S_OK ); Refresh(); } WsbCatch( hr ); WsbTraceOut( L"CPropCartCopies::OnInitDialog", L"hr = <%ls>", WsbHrAsString( hr ) ); return( TRUE ); } HRESULT CPropCartCopies::Refresh( ) { WsbTraceIn( L"CPropCartCopies::Refresh", L"" ); HRESULT hr = S_OK; GUID mediaId; CMediaInfoObject mio; try { // // Only refresh if we've been intialized // if( m_pHsmServer ) { // // Get the number of media copies from the sheet object // WsbAffirmHr( ( (CUiCarSheet *)m_pParent )->GetNumMediaCopies( &m_NumMediaCopies ) ); if( !m_bMultiSelect ) { // // SINGLE SELECT // // // Get the media Id and initialize the info object // ( (CUiCarSheet *)m_pParent )->GetMediaId( &mediaId ); mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ); // // Get info and set controls // CTime time( mio.m_Modify ); SetDlgItemText( IDC_MODIFIED, time.Format( L"%#c" ) ); // // Disable the controls for displaying info on non-existant // Copies. Fill in the info for copies that exist. // for( int index = 0; index < HSMADMIN_MAX_COPY_SETS; index++ ) { BOOL mediaMissing = IsEqualGUID( mio.m_CopyInfo[index].m_RmsId, GUID_NULL ); GetDlgItem( copyCopies[index].group )->EnableWindow( index < m_NumMediaCopies ); GetDlgItem( copyCopies[index].nameLabel )->EnableWindow( index < m_NumMediaCopies ); GetDlgItem( copyCopies[index].name )->EnableWindow( index < m_NumMediaCopies ); GetDlgItem( copyCopies[index].statusLabel )->EnableWindow( index < m_NumMediaCopies ); GetDlgItem( copyCopies[index].status )->EnableWindow( index < m_NumMediaCopies ); GetDlgItem( copyCopies[index].modifyLabel )->EnableWindow( index < m_NumMediaCopies ); GetDlgItem( copyCopies[index].modify )->EnableWindow( index < m_NumMediaCopies ); GetDlgItem( copyCopies[index].deleteCopy )->EnableWindow( ! mediaMissing ); SetDlgItemText( copyCopies[index].name, L"" ); SetDlgItemText( copyCopies[index].status, L"" ); SetDlgItemText( copyCopies[index].modify, L"" ); USHORT status; CString statusString; status = RsGetCopyStatus( mio.m_CopyInfo[index].m_RmsId, mio.m_CopyInfo[index].m_Hr, mio.m_CopyInfo[index].m_NextDataSet, mio.m_LastGoodNextDataSet ); WsbAffirmHr( RsGetCopyStatusString( status, statusString ) ); RsAddDisabledText( statusString, mio.m_CopyInfo[index].m_Disabled ); SetDlgItemText( copyCopies[index].status, statusString ); if( !mediaMissing ) { time = mio.m_CopyInfo[index].m_ModifyTime; SetDlgItemText( copyCopies[index].modify, time.Format( L"%#c" ) ); CComPtr pCart; CWsbBstrPtr name; if( SUCCEEDED( m_pRmsServer->FindCartridgeById( mio.m_CopyInfo[index].m_RmsId, &pCart ) ) ) { WsbAffirmHr( pCart->GetName( &name ) ); } SetDlgItemText( copyCopies[index].name, name ); } } } else { // // MULTI-SELECT // BOOL bGotOne [HSMADMIN_MAX_COPY_SETS]; int bookMark = 0; USHORT statusCopyNone [HSMADMIN_MAX_COPY_SETS]; USHORT statusCopyError [HSMADMIN_MAX_COPY_SETS]; USHORT statusCopyMissing [HSMADMIN_MAX_COPY_SETS]; USHORT statusCopyOutSync [HSMADMIN_MAX_COPY_SETS]; USHORT statusCopyInSync [HSMADMIN_MAX_COPY_SETS]; // // initialize copy totals // for( int i = 0; i < HSMADMIN_MAX_COPY_SETS; i++ ) { statusCopyNone[i] = 0; statusCopyError[i] = 0; statusCopyOutSync[i] = 0; statusCopyInSync[i] = 0; bGotOne[i] = FALSE; } // // For each selected medium... // while( m_pParent->GetNextObjectId( &bookMark, &mediaId ) == S_OK ) { mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ); // // Tally up the statuses for all valid copy sets // for( int index = 0; index < HSMADMIN_MAX_COPY_SETS; index++ ) { // // Is there is at least one valid copy in this copyset // for any of the selected media? // if( ! IsEqualGUID( mio.m_CopyInfo[index].m_RmsId, GUID_NULL ) ) { bGotOne[index] = TRUE; } USHORT status; CString statusString; status = RsGetCopyStatus( mio.m_CopyInfo[index].m_RmsId, mio.m_CopyInfo[index].m_Hr, mio.m_CopyInfo[index].m_NextDataSet, mio.m_LastGoodNextDataSet ); // Total up the statuses switch( status ) { case RS_MEDIA_COPY_STATUS_NONE: statusCopyNone[index]++; break; case RS_MEDIA_COPY_STATUS_ERROR: statusCopyError[index]++; break; case RS_MEDIA_COPY_STATUS_MISSING: statusCopyMissing[index]++; break; case RS_MEDIA_COPY_STATUS_OUTSYNC: statusCopyOutSync[index]++; break; case RS_MEDIA_COPY_STATUS_INSYNC: statusCopyInSync[index]++; break; } } } // while // // Show accumlated statuses for each valid copy set // CString statusString; for( i = 0; i < HSMADMIN_MAX_COPY_SETS; i++ ) { WsbAffirmHr( RsGetCopyMultiStatusString( statusCopyNone[i], statusCopyError[i], statusCopyOutSync[i], statusCopyInSync[i], statusString ) ); SetDlgItemText( copyCopies[i].status, statusString ); } // // Set control states // for( i = 0; i < HSMADMIN_MAX_COPY_SETS; i++ ) { GetDlgItem( copyCopies[i].group )->EnableWindow( i < m_NumMediaCopies ); GetDlgItem( copyCopies[i].statusLabel )->EnableWindow( i < m_NumMediaCopies ); GetDlgItem( copyCopies[i].status )->EnableWindow( i < m_NumMediaCopies ); GetDlgItem( copyCopies[i].deleteCopy )->EnableWindow( bGotOne[i] ); } } } } WsbCatch( hr ); WsbTraceOut( L"CPropCartCopies::Refresh", L"hr = <%ls>", WsbHrAsString( hr ) ); return( hr ); } void CPropCartCopies::OnDelete1() { OnDelete( 1 ); } void CPropCartCopies::OnDelete2() { OnDelete( 2 ); } void CPropCartCopies::OnDelete3() { OnDelete( 3 ); } void CPropCartCopies::OnDelete( int Copy ) { WsbTraceIn( L"CPropCartCopies::OnDelete", L"Copy = <%d>", Copy ); HRESULT hr = S_OK; CMediaInfoObject mio; GUID mediaId; try { if( !m_bMultiSelect ) { // // Single Select // CString confirm; // // Get the media Id and initialize the info object // ( (CUiCarSheet *)m_pParent )->GetMediaId( &mediaId ); mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ); confirm.Format( IDS_CONFIRM_MEDIA_COPY_DELETE, Copy, mio.m_Description ); if( IDYES == AfxMessageBox( confirm, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2 ) ) { WsbAffirmHr( mio.DeleteCopy( Copy ) ); } } else { // // Multi-Select // tally up the names of the selected media // int bookMark = 0; GUID mediaId; CString szMediaList = L""; BOOL bFirst = TRUE; while( m_pParent->GetNextObjectId( &bookMark, &mediaId ) == S_OK ) { mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ); // // Does the copy exist? // if( !IsEqualGUID( mio.m_CopyInfo[Copy - 1].m_RmsId, GUID_NULL ) ) { // // Put in commas after the first Id // if( !bFirst ) { szMediaList += L", "; } else { bFirst = FALSE; } szMediaList += mio.m_Description; } } CString confirm; confirm.Format( IDS_CONFIRM_MEDIA_COPY_DELETE_MULTI, Copy, szMediaList ); if( IDYES == AfxMessageBox( confirm, MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2 ) ) { bookMark = 0; while( m_pParent->GetNextObjectId( &bookMark, &mediaId ) == S_OK ) { WsbAffirmHr( mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ) ); // // Does the copy exist? // if( !IsEqualGUID( mio.m_CopyInfo[Copy - 1].m_RmsId, GUID_NULL ) ) { WsbAffirmHr( mio.DeleteCopy( Copy ) ); } } } } // // Now notify all the nodes // ( (CUiCarSheet *) m_pParent )-> OnPropertyChange( m_hConsoleHandle ); } WsbCatch( hr ); WsbTraceOut( L"CPropCartCopies::OnDelete", L"hr = <%ls>", WsbHrAsString( hr ) ); } ///////////////////////////////////////////////////////////////////////////// // CPropCartRecover property page CPropCartRecover::CPropCartRecover() : CSakPropertyPage(CPropCartRecover::IDD) { //{{AFX_DATA_INIT(CPropCartRecover) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pHelpIds = pRecoverHelpIds; } CPropCartRecover::~CPropCartRecover() { } void CPropCartRecover::DoDataExchange(CDataExchange* pDX) { CSakPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropCartRecover) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPropCartRecover, CSakPropertyPage) //{{AFX_MSG_MAP(CPropCartRecover) ON_BN_CLICKED(IDC_RECREATE_MASTER, OnRecreateMaster) //}}AFX_MSG_MAP END_MESSAGE_MAP() void CPropCartRecover::OnRecreateMaster() { WsbTraceIn( L"CPropCartRecover::OnRecreateMaster", L"" ); HRESULT hr = S_OK; CMediaInfoObject mio; GUID mediaId; try { // // For single select only! // WsbAssert( !m_bMultiSelect, E_FAIL ); // // Get the media Id and initialize the info object // ( (CUiCarSheet *)m_pParent )->GetMediaId( &mediaId ); mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ); WsbAffirmHr( mio.RecreateMaster() ); // // Now notify all the nodes // ( (CUiCarSheet *) m_pParent )->OnPropertyChange( m_hConsoleHandle ); } WsbCatch( hr ); WsbTraceOut( L"CPropCartRecover::OnRecreateMaster", L"hr = <%ls>", WsbHrAsString( hr ) ); } ///////////////////////////////////////////////////////////////////////////// // CPropCartRecover message handlers BOOL CPropCartRecover::OnInitDialog() { WsbTraceIn( L"CPropCartRecover::OnInitDialog", L"" ); HRESULT hr = S_OK; CSakPropertyPage::OnInitDialog(); try { // // Set multi-select boolean // m_bMultiSelect = ( m_pParent->IsMultiSelect() == S_OK ); // // Get the Hsm Server // WsbAffirmHr( m_pParent->GetHsmServer( &m_pHsmServer ) ); // // Get the Rms Server // WsbAffirmHr( ( (CUiCarSheet *) m_pParent )->GetRmsServer( &m_pRmsServer ) ); Refresh( ); } WsbCatch( hr ); WsbTraceOut( L"CPropCartRecover::OnInitDialog", L"hr = <%ls>", WsbHrAsString( hr ) ); return( TRUE ); } HRESULT CPropCartRecover::Refresh() { WsbTraceIn( L"CPropCartRecover::Refresh", L"" ); HRESULT hr = S_OK; GUID mediaId; CMediaInfoObject mio; try { // // Only refresh if we've been initialized // if( m_pHsmServer ) { if( ! m_bMultiSelect ) { // // Get the number of media copies from the sheet object // WsbAffirmHr( ( (CUiCarSheet *) m_pParent )->GetNumMediaCopies( &m_NumMediaCopies ) ); // // Get the media Id and initialize the info object // ( (CUiCarSheet *)m_pParent )->GetMediaId( &mediaId ); mio.Initialize( mediaId, m_pHsmServer, m_pRmsServer ); // // SINGLE SELECT (this page is implemented for single-select only // BOOL enableRecreate = FALSE; for( int index = 0; index < HSMADMIN_MAX_COPY_SETS; index++ ) { if( index < m_NumMediaCopies ) { if( !IsEqualGUID( mio.m_CopyInfo[index].m_RmsId, GUID_NULL ) ) { enableRecreate = TRUE; } } else { SetDlgItemText( copyGeneral[index].status, L"" ); } } GetDlgItem( IDC_RECREATE_MASTER )->EnableWindow( enableRecreate ); } } } WsbCatch( hr ); WsbTraceOut( L"CPropCartRecover::Refresh", L"hr = <%ls>", WsbHrAsString( hr ) ); return( hr ); }