BOOL CGroupingDlg::ProcessMethod(CXMLElement*& pXML) { for ( POSITION pos = pXML->GetElementIterator() ; pos ; ) { CXMLElement* pSync = pXML->GetNextElement( pos ); CString strValue = pSync->GetAttributeValue( _T("method") ); if ( ! strValue.CompareNoCase( METHOD_INSERT ) ) { ProcessInsert( pSync->GetFirstElement() ); } else if ( ! strValue.CompareNoCase( METHOD_DELETE ) ) { ProcessDelete( pSync->GetFirstElement() ); } else if ( ! strValue.CompareNoCase( METHOD_UPDATE ) ) { ProcessUpdate( pSync->GetFirstElement() ); } } pXML->Delete(); pXML = NULL; return TRUE; }
BOOL CLibraryBuilderPlugins::ExtractMetadata(CString& strPath, HANDLE hFile) { CString strType; int nExtPos = strPath.ReverseFind( '.' ); if ( nExtPos > 0 ) strType = strPath.Mid( nExtPos ); CharLower( strType.GetBuffer() ); strType.ReleaseBuffer(); ILibraryBuilderPlugin* pPlugin = NULL; if ( m_pMap.Lookup( strType, (void*&)pPlugin ) ) { if ( pPlugin == NULL ) return FALSE; } else { pPlugin = LoadPlugin( strType ); if ( pPlugin == NULL ) return FALSE; } CXMLElement* pXML = new CXMLElement(); ISXMLElement* ppXML = (ISXMLElement*)CXMLCOM::Wrap( pXML, IID_ISXMLElement ); BSTR bsFile = strPath.AllocSysString(); HRESULT hResult = pPlugin->Process( hFile, bsFile, ppXML ); SysFreeString( bsFile ); ppXML->Release(); BOOL bSuccess = FALSE; if ( hResult == S_OK ) { if ( CXMLElement* pOuter = pXML->GetFirstElement() ) { CXMLElement* pInner = pOuter->GetFirstElement(); CString strSchemaURI = pOuter->GetAttributeValue( CXMLAttribute::schemaName ); if ( pInner && strSchemaURI.GetLength() ) { pInner = pInner->Detach(); bSuccess = m_pBuilder->SubmitMetadata( strSchemaURI, pInner ); } } } else if ( hResult == E_UNEXPECTED ) { bSuccess = m_pBuilder->SubmitCorrupted(); } delete pXML; return bSuccess; }