Exemplo n.º 1
0
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;
}