Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

975 lines
31 KiB

/*++
© 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<IRmsCartridge> 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 );
}