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
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);
|
|
}
|
|
|