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.
 
 
 
 
 
 

417 lines
12 KiB

/******************************************************************************
Copyright (c) 2001 Microsoft Corporation
Module Name:
WrapperBase.cpp
Abstract:
Implementation of SearchEngine::WrapperBase
Revision History:
Davide Massarenti (dmassare) 04/28/2001
created
******************************************************************************/
#include "stdafx.h"
/////////////////////////////////////////////////////////////////////
namespace SearchEngine
{
struct WrapperConfig : public MPC::Config::TypeConstructor
{
DECLARE_CONFIG_MAP(WrapperConfig);
CComBSTR m_bstrName;
CComBSTR m_bstrDescription;
CComBSTR m_bstrHelpURL;
CComBSTR m_bstrScope;
////////////////////////////////////////
////////////////////////////////////////
//
// MPC::Config::TypeConstructor
//
DEFINE_CONFIG_DEFAULTTAG();
DECLARE_CONFIG_METHODS ();
//
////////////////////////////////////////
};
};
CFG_BEGIN_FIELDS_MAP(SearchEngine::WrapperConfig)
CFG_ELEMENT( L"NAME" , BSTR, m_bstrName ),
CFG_ELEMENT( L"DESCRIPTION", BSTR, m_bstrDescription ),
CFG_ELEMENT( L"SCOPE" , BSTR, m_bstrScope ),
CFG_ELEMENT( L"HELP_URL" , BSTR, m_bstrHelpURL ),
CFG_END_FIELDS_MAP()
CFG_BEGIN_CHILD_MAP(SearchEngine::WrapperConfig)
CFG_END_CHILD_MAP()
DEFINE_CFG_OBJECT(SearchEngine::WrapperConfig, L"CONFIG_DATA")
DEFINE_CONFIG_METHODS__NOCHILD(SearchEngine::WrapperConfig)
/////////////////////////////////////////////////////////////////////
SearchEngine::WrapperBase::WrapperBase()
{
m_bEnabled = VARIANT_TRUE; // VARIANT_BOOL m_bEnabled;
//
// CComBSTR m_bstrID;
// CComBSTR m_bstrOwner;
//
// CComBSTR m_bstrName;
// CComBSTR m_bstrDescription;
// CComBSTR m_bstrHelpURL;
// CComBSTR m_bstrScope;
//
// CComBSTR m_bstrQueryString;
m_lNumResult = 100; // long m_lNumResult;
// CComPtr<IPCHSEManagerInternal> m_pSEMgr;
//
// Taxonomy::HelpSet m_ths;
// CComPtr<CPCHCollection> m_pParamDef;
// ParamMap m_aParam;
}
SearchEngine::WrapperBase::~WrapperBase()
{
Clean();
}
HRESULT SearchEngine::WrapperBase::Clean()
{
return S_OK;
}
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP SearchEngine::WrapperBase::get_Enabled( /*[out, retval]*/ VARIANT_BOOL *pVal )
{
__HCP_BEGIN_PROPERTY_GET2("SearchEngine::WrapperBase::get_Enabled",hr,pVal,m_bEnabled);
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::put_Enabled( /*[in]*/ VARIANT_BOOL newVal )
{
__HCP_BEGIN_PROPERTY_PUT("SearchEngine::WrapperBase::put_Enabled",hr);
m_bEnabled = newVal;
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::get_Owner( /*[out, retval]*/ BSTR *pVal )
{
__HCP_BEGIN_PROPERTY_GET("SearchEngine::WrapperBase::get_Owner",hr,pVal);
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::GetBSTR( m_bstrOwner, pVal ));
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::get_Description( /*[out, retval]*/ BSTR *pVal )
{
__HCP_BEGIN_PROPERTY_GET("SearchEngine::WrapperBase::get_Description",hr,pVal);
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::GetBSTR( m_bstrDescription, pVal ));
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::get_Name( /*[out, retval]*/ BSTR *pVal )
{
__HCP_BEGIN_PROPERTY_GET("SearchEngine::WrapperBase::get_Name",hr,pVal);
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::GetBSTR( m_bstrName, pVal ));
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::get_ID( /*[out, retval]*/ BSTR *pVal )
{
__HCP_BEGIN_PROPERTY_GET("SearchEngine::WrapperBase::get_ID",hr,pVal);
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::GetBSTR( m_bstrID, pVal ));
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::get_HelpURL( /*[out, retval]*/ BSTR *pVal )
{
__HCP_BEGIN_PROPERTY_GET("SearchEngine::WrapperBase::get_HelpURL",hr,pVal);
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::GetBSTR( m_bstrHelpURL, pVal ));
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::get_SearchTerms( /*[out, retval]*/ VARIANT *pVal )
{
return S_OK;
}
////////////////////
VARIANT* SearchEngine::WrapperBase::GetParamInternal( /*[in]*/ LPCWSTR szParamName )
{
ParamMapIter it;
it = m_aParam.find( szParamName );
return (it == m_aParam.end()) ? NULL : &it->second;
}
HRESULT SearchEngine::WrapperBase::CreateParam( /*[in/out]*/ CPCHCollection* coll, /*[in]*/ const ParamItem_Definition* def )
{
__HCP_FUNC_ENTRY( "SearchEngine::WrapperBase::CreateParam" );
HRESULT hr;
CComPtr<ParamItem> obj;
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &obj ));
{
ParamItem_Data& data = obj->Data();
data.m_pteParamType = def->m_pteParamType;
data.m_bRequired = def->m_bRequired;
data.m_bVisible = def->m_bVisible;
data.m_bstrName = def->m_szName;
if(def->m_iDisplayString)
{
(void)MPC::LocalizeString( def->m_iDisplayString, data.m_bstrDisplayString, /*fMUI*/true );
}
else if(def->m_szDisplayString)
{
data.m_bstrDisplayString = def->m_szDisplayString;
}
if(def->m_szData)
{
VARTYPE vt;
switch(data.m_pteParamType)
{
case PARAM_UI1 : vt = VT_UI1 ; break;
case PARAM_I2 : vt = VT_I2 ; break;
case PARAM_I4 : vt = VT_I4 ; break;
case PARAM_R4 : vt = VT_R4 ; break;
case PARAM_R8 : vt = VT_R8 ; break;
case PARAM_BOOL: vt = VT_BOOL ; break;
case PARAM_DATE: vt = VT_DATE ; break;
case PARAM_BSTR: vt = VT_BSTR ; break;
case PARAM_I1 : vt = VT_I1 ; break;
case PARAM_UI2 : vt = VT_UI2 ; break;
case PARAM_UI4 : vt = VT_UI4 ; break;
case PARAM_INT : vt = VT_INT ; break;
case PARAM_UINT: vt = VT_UINT ; break;
case PARAM_LIST: vt = VT_BSTR ; break;
default : vt = VT_EMPTY; break;
}
if(vt != VT_EMPTY)
{
data.m_varData = def->m_szData;
if(FAILED(data.m_varData.ChangeType( vt )) || data.m_varData.vt != vt)
{
data.m_varData.Clear();
}
}
}
if(data.m_pteParamType != PARAM_LIST)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, AddParam( data.m_bstrName, data.m_varData ));
}
}
__MPC_EXIT_IF_METHOD_FAILS(hr, coll->AddItem( obj ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
HRESULT SearchEngine::WrapperBase::CreateListOfParams( /*[in]*/ CPCHCollection* coll )
{
__HCP_FUNC_ENTRY( "SearchEngine::WrapperBase::CreateListOfParams" );
HRESULT hr;
const ParamItem_Definition* lst = NULL;
int len = 0;
__MPC_EXIT_IF_METHOD_FAILS(hr, GetParamDefinition( lst, len ));
while(len-- > 0)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, CreateParam( coll, lst++ ));
}
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
HRESULT SearchEngine::WrapperBase::GetParamDefinition( /*[out]*/ const ParamItem_Definition*& lst, /*[out]*/ int& len )
{
lst = NULL;
len = 0;
return S_OK;
}
STDMETHODIMP SearchEngine::WrapperBase::Param( /*[out,retval]*/ IPCHCollection* *ppC )
{
__HCP_BEGIN_PROPERTY_GET("SearchEngine::WrapperBase::Param",hr,ppC);
if(!m_pParamDef)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &m_pParamDef ));
__MPC_EXIT_IF_METHOD_FAILS(hr, CreateListOfParams ( m_pParamDef ));
}
__MPC_EXIT_IF_METHOD_FAILS(hr, m_pParamDef.QueryInterface( ppC ));
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::AddParam( /*[in]*/ BSTR bstrParamName, /*[in]*/ VARIANT newVal )
{
__HCP_BEGIN_PROPERTY_PUT("SearchEngine::WrapperBase::AddParam",hr);
std::pair<ParamMapIter, bool> item;
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_STRING_NOT_EMPTY(bstrParamName);
__MPC_PARAMCHECK_END();
item = m_aParam.insert( ParamMap::value_type( bstrParamName, CComVariant() ) ); item.first->second = newVal;
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::GetParam( /*[in]*/ BSTR bstrParamName, /*[out,retval]*/ VARIANT *pVal )
{
__HCP_BEGIN_PROPERTY_PUT("SearchEngine::WrapperBase::AddParam",hr);
VARIANT* v;
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_STRING_NOT_EMPTY(bstrParamName);
__MPC_PARAMCHECK_NOTNULL(pVal);
__MPC_PARAMCHECK_END();
v = GetParamInternal( bstrParamName );
if(!v)
{
__MPC_SET_WIN32_ERROR_AND_EXIT(hr, ERROR_INVALID_PARAMETER);
}
__MPC_EXIT_IF_METHOD_FAILS(hr, ::VariantCopy( pVal, v ));
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::DelParam( /*[in]*/ BSTR bstrParamName )
{
__HCP_BEGIN_PROPERTY_PUT("SearchEngine::WrapperBase::AddParam",hr);
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_STRING_NOT_EMPTY(bstrParamName);
__MPC_PARAMCHECK_END();
m_aParam.erase( bstrParamName );
__HCP_END_PROPERTY(hr);
}
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP SearchEngine::WrapperBase::get_QueryString( /*[out, retval]*/ BSTR *pVal )
{
MPC::SmartLock<_ThreadModel> lock( this );
return MPC::GetBSTR( m_bstrQueryString, pVal );
}
STDMETHODIMP SearchEngine::WrapperBase::put_QueryString( /*[in]*/ BSTR newVal )
{
MPC::SmartLock<_ThreadModel> lock( this );
return MPC::PutBSTR( m_bstrQueryString, newVal, false );
}
STDMETHODIMP SearchEngine::WrapperBase::get_NumResult(/*[out, retval]*/ long *pVal )
{
__HCP_BEGIN_PROPERTY_GET2("SearchEngine::WrapperBase::get_NumResult",hr,pVal,m_lNumResult);
__HCP_END_PROPERTY(hr);
}
STDMETHODIMP SearchEngine::WrapperBase::put_NumResult( /*[in]*/ long newVal )
{
__HCP_BEGIN_PROPERTY_PUT("SearchEngine::WrapperBase::put_NumResult",hr);
m_lNumResult = newVal;
__HCP_END_PROPERTY(hr);
}
////////////////////
STDMETHODIMP SearchEngine::WrapperBase::Initialize( /*[in]*/ BSTR bstrID, /*[in]*/ BSTR bstrSKU, /*[in]*/ long lLCID, /*[in]*/ BSTR bstrData )
{
if(STRINGISPRESENT(bstrID)) m_bstrID = bstrID;
if(bstrData)
{
SearchEngine::WrapperConfig cfg;
MPC::XmlUtil xml;
bool fLoaded;
bool fFound;
if(SUCCEEDED(xml.LoadAsString( bstrData, NULL, fLoaded )) && fLoaded)
{
if(SUCCEEDED(MPC::Config::LoadXmlUtil( &cfg, xml )))
{
if(cfg.m_bstrName ) m_bstrName = cfg.m_bstrName ;
if(cfg.m_bstrDescription) m_bstrDescription = cfg.m_bstrDescription;
if(cfg.m_bstrHelpURL ) m_bstrHelpURL = cfg.m_bstrHelpURL ;
if(cfg.m_bstrScope ) m_bstrScope = cfg.m_bstrScope ;
}
}
}
return m_ths.Initialize( bstrSKU, lLCID );
}
STDMETHODIMP SearchEngine::WrapperBase::SECallbackInterface( /*[in]*/ IPCHSEManagerInternal* pMgr )
{
__HCP_BEGIN_PROPERTY_PUT("SearchEngine::WrapperBase::SECallbackInterface",hr);
m_pSEMgr = pMgr;
__HCP_END_PROPERTY(hr);
}