NBUnitDevicePtrList CNBListViewCtrl::GetDiskObjectList() { int nCount = CListViewCtrl::GetItemCount(); NBUnitDevicePtrList diskList; for ( int i=0; i < nCount; i++ ) { diskList.push_back( (CNBUnitDevice *)CListViewCtrl::GetItemData(i) ); } return diskList; }
void CMainFrame::OnSpareRemove(UINT wNotifyCode, int wID, HWND hwndCtl) { CNBDevice *pDevice = m_viewTreeList.GetSelectedDevice(); if(!pDevice) return; if(!pDevice->GetCommandAbility(wID)) return; CNBUnitDevice *pUnitDevice = dynamic_cast<CNBUnitDevice *>(pDevice); if(!pUnitDevice || !pUnitDevice->GetLogicalDevice()->IsOperatableAll()) return; NBUnitDevicePtrList listUnitDevices; listUnitDevices.push_back(pUnitDevice); CNBSelectDeviceDlg dlgSelectDevice( IDD_DEVICE_LIST, IDS_SPARE_REMOVE_DLG_CAPTION, IDS_SPARE_REMOVE_DLG_MESSAGE, listUnitDevices, 0, NULL, NULL); if(dlgSelectDevice.DoModal() != IDOK) return; NDASCOMM_CONNECTION_INFO ci; pUnitDevice->InitConnectionInfo(&ci, TRUE); AutoCursor l_auto_cursor(IDC_WAIT); BOOL bResults = NdasOpSpareRemove(&ci); l_auto_cursor.Release(); pUnitDevice->GetLogicalDevice()->HixChangeNotify(pGetNdasHostGuid()); if(!bResults) { CString strMsg; DWORD dwLastError = ::GetLastError(); strMsg.LoadString(IDS_OPERATION_FAIL); ShowErrorMessageBox(strMsg); return; } OnRefreshStatus(NULL, NULL, NULL); }
NBUnitDevicePtrList CNBLogicalDevice::GetOperatableDevices() { NBUnitDevicePtrList listUnitDevices; for(UINT32 i = 0; i < DevicesTotal(); i++) { if(!m_mapUnitDevices.count(i)) continue; listUnitDevices.push_back(m_mapUnitDevices[i]); } return listUnitDevices; }
NBUnitDevicePtrList CNBListViewCtrl::GetSelectedDiskObjectList() { int nCount = CListViewCtrl::GetSelectedCount(); int nItem; NBUnitDevicePtrList selectDiskList; nItem = -1; for ( int i=0; i < nCount; i++ ) { nItem = CListViewCtrl::GetNextItem( nItem, LVNI_SELECTED ); selectDiskList.push_back( (CNBUnitDevice *)CListViewCtrl::GetItemData(nItem) ); } return selectDiskList; }
NBUnitDevicePtrList CNBLogicalDevice::GetOperatableDevices() { NBUnitDevicePtrList listUnitDevices; for(UINT32 i = 0; i < DevicesTotal(); i++) { if(!m_mapUnitDevices.count(i)) continue; if (m_mapUnitDevices[i]->IsMissingMember()) { // Cannot touch missing device. continue; } listUnitDevices.push_back(m_mapUnitDevices[i]); } return listUnitDevices; }
NBUnitDevicePtrList CMainFrame::GetOperatableSingleDevices() { NBUnitDevicePtrList listUnitDevicesSingle; CNBLogicalDevice *pLogicalDevice; for(NBLogicalDevicePtrList::iterator itLogicalDevice = m_listLogicalDevices.begin(); itLogicalDevice != m_listLogicalDevices.end(); itLogicalDevice++) { pLogicalDevice = *itLogicalDevice; if( pLogicalDevice->IsOperatable() && pLogicalDevice->IsHDD() && !pLogicalDevice->IsGroup()) { listUnitDevicesSingle.push_back((*pLogicalDevice)[0]); } } return listUnitDevicesSingle; }
void CMainFrame::OnSingle(UINT wNotifyCode, int wID, HWND hwndCtl) { CString strMsg; CNBDevice *pDevice = m_viewTreeList.GetSelectedDevice(); if(!pDevice) return; if(!pDevice->GetCommandAbility(wID)) return; CNBUnitDevice *pUnitDevice; if(dynamic_cast<CNBLogicalDevice *>(pDevice)) { CNBLogicalDevice *pLogicalDevice = dynamic_cast<CNBLogicalDevice *>(pDevice); if(!pLogicalDevice || !pLogicalDevice->IsOperatableAll()) return; pUnitDevice = (*pLogicalDevice)[0]; } else { pUnitDevice = dynamic_cast<CNBUnitDevice *>(pDevice); if(!pUnitDevice || !pUnitDevice->IsOperatable()) return; } if(!pUnitDevice) return; NBUnitDevicePtrList listUnitDevices; listUnitDevices.push_back(pUnitDevice); CNBSelectDeviceDlg dlgSelectDevice( IDD_DEVICE_LIST, IDS_SINGLE_DLG_CAPTION, IDS_SINGLE_DLG_MESSAGE, listUnitDevices, 0, NULL, NULL); if(dlgSelectDevice.DoModal() != IDOK) return; NDASCOMM_CONNECTION_INFO ConnectionInfo; if(!pUnitDevice->InitConnectionInfo(&ConnectionInfo, TRUE)) { // "%1!s! does not have a write access privilege. You need to set write key to this NDAS device before this action." strMsg.FormatMessage(IDS_ERROR_NOT_REGISTERD_WRITE_FMT, pUnitDevice->GetName() ); CString strTitle; strTitle.LoadString(IDS_APPLICATION); MessageBox( strMsg, strTitle, MB_OK|MB_ICONERROR ); return; } AutoCursor l_auto_cursor(IDC_WAIT); UINT32 BindResult = NdasOpBind( 1, &ConnectionInfo, NMT_SINGLE, 0); l_auto_cursor.Release(); if(1 != BindResult) { DWORD dwLastError = ::GetLastError(); switch(dwLastError) { case NDASCOMM_ERROR_RW_USER_EXIST: case NDASOP_ERROR_ALREADY_USED: case NDASOP_ERROR_DEVICE_FAIL: case NDASOP_ERROR_NOT_SINGLE_DISK: case NDASOP_ERROR_DEVICE_UNSUPPORTED: case NDASOP_ERROR_NOT_BOUND_DISK: // does not return this error strMsg.FormatMessage(IDS_BIND_FAIL_AT_SINGLE_NDAS_FMT, pUnitDevice->GetName()); break; default: strMsg.LoadString(IDS_BIND_FAIL); break; } ShowErrorMessageBox(strMsg); } pUnitDevice->HixChangeNotify(pGetNdasHostGuid()); OnRefreshStatus(NULL, NULL, NULL); }
void CMainFrame::OnReplaceUnitDevice(UINT wNotifyCode, int wID, HWND hwndCtl) { CNBDevice *pDevice = m_viewTreeList.GetSelectedDevice(); if(!pDevice) return; if(!pDevice->GetCommandAbility(wID)) return; CNBLogicalDevice *pLogicalDevice = dynamic_cast<CNBLogicalDevice *>(pDevice); if(!pLogicalDevice) return; // find the missing device CNBLogicalDevice *pLogicalDeviceReplace = NULL; CNBUnitDevice *pUnitDeviceReplace = NULL; NBUnitDevicePtrList listUnitDevicesReplace; NBLogicalDevicePtrList::iterator itLogicalDevice; for(UINT32 i = 0; i < pLogicalDevice->DevicesTotal(); i++) { if(!(*pLogicalDevice)[i]) { for(itLogicalDevice = m_listLogicalDevices.begin(); itLogicalDevice != m_listLogicalDevices.end(); ++itLogicalDevice) { pLogicalDeviceReplace = *itLogicalDevice; if(pLogicalDeviceReplace) { if (pLogicalDeviceReplace->IsHDD() && !pLogicalDeviceReplace->IsGroup() && pLogicalDeviceReplace->IsOperatable()) { pUnitDeviceReplace = (*pLogicalDeviceReplace)[0]; if (pUnitDeviceReplace->IsThis( pLogicalDevice->DIB()->UnitDisks[i].MACAddr, pLogicalDevice->DIB()->UnitDisks[i].UnitNumber)) { // ok we found replacable HDD listUnitDevicesReplace.push_back(pUnitDeviceReplace); } } } } } } if(!listUnitDevicesReplace.size()) return; CNBSelectDeviceDlg dlgSelectDevice( IDD_DEVICE_LIST, IDS_REPLACE_UNIT_DEVICE_DLG_CAPTION, IDS_REPLACE_UNIT_DEVICE_DLG_MESSAGE, listUnitDevicesReplace, 0, CheckCapacityForSpare, pLogicalDevice); if(dlgSelectDevice.DoModal() != IDOK) return; // dlgSelectDevice is not selective dialog. get unit device from listUnitDevicesReplace CNBUnitDevice *pUnitDevice = *(listUnitDevicesReplace.begin()); // Bind & Synchronize NDASCOMM_CONNECTION_INFO ci, ci_replace; pLogicalDevice->InitConnectionInfo(&ci, TRUE); // use write access. this function does not support run time replace yet. pUnitDevice->InitConnectionInfo(&ci_replace, TRUE); for(UINT32 i = 0; i < pLogicalDevice->DevicesTotal(); i++) { if (!(*pLogicalDevice)[i]) { break; } } if(pLogicalDevice->DevicesTotal() == i) { // failed to find missing device return; } AutoCursor l_auto_cursor(IDC_WAIT); BOOL bResults = NdasOpReplaceUnitDevice( &ci, &ci_replace, i); l_auto_cursor.Release(); pLogicalDevice->HixChangeNotify(pGetNdasHostGuid()); pUnitDevice->HixChangeNotify(pGetNdasHostGuid()); if(!bResults) { CString strMsg; DWORD dwLastError = ::GetLastError(); strMsg.LoadString(IDS_OPERATION_FAIL); ShowErrorMessageBox(strMsg); return; } OnRefreshStatus(NULL, NULL, NULL); }