windows-nt/Source/XPSP1/NT/admin/pchealth/helpctr/service/include/searchenginelib.h
2020-09-26 16:20:57 +08:00

332 lines
13 KiB
C++

/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
SearchEngineLib.h
Abstract:
This file contains the declaration of the classes involved in
the SearchEngine Application.
Revision History:
Ghim-Sim Chua (gschua) 04/10/2000
created
******************************************************************************/
#if !defined(__INCLUDED___PCH___SEARCHENGINELIB_H___)
#define __INCLUDED___PCH___SEARCHENGINELIB_H___
#include <TaxonomyDatabase.h>
#include <MPC_security.h>
/////////////////////////////////////////////////////////////////////////////
namespace SearchEngine
{
class ATL_NO_VTABLE Manager :
public MPC::CComObjectRootParentBase,
public MPC::ConnectionPointImpl< Manager, &DIID_DPCHSEMgrEvents, MPC::CComSafeMultiThreadModel >,
public IDispatchImpl < IPCHSEManager, &IID_IPCHSEManager, &LIBID_HelpServiceTypeLib >,
public MPC::Thread<Manager,IUnknown>
{
typedef std::list< IPCHSEWrapperItem* > WrapperItemList;
typedef WrapperItemList::iterator WrapperItemIter;
typedef WrapperItemList::const_iterator WrapperItemIterConst;
Taxonomy::HelpSet m_ths;
WrapperItemList m_lstWrapperItem;
bool m_fInitialized;
MPC::FileLog m_fl;
MPC::Impersonation m_imp;
CComBSTR m_bstrQueryString;
long m_lNumResult;
long m_lEnabledSE;
long m_lCountComplete;
HRESULT m_hrLastError;
CComPtr<IPCHSEManagerInternal> m_Notifier;
CComPtr<IDispatch> m_Progress;
CComPtr<IDispatch> m_Complete;
CComPtr<IDispatch> m_WrapperComplete;
////////////////////////////////////////
HRESULT Fire_OnProgress ( /*[in]*/ long lDone, /*[in]*/ long lTotal, /*[in]*/ BSTR bstrSEWrapperName );
HRESULT Fire_OnComplete ( /*[in]*/ long lSucceeded );
HRESULT Fire_OnWrapperComplete( /*[in]*/ IPCHSEWrapperItem* pIPCHSEWICompleted );
HRESULT CreateAndAddWrapperToList( /*[in]*/ MPC::SmartLock<_ThreadModel>& lock ,
/*[in]*/ BSTR bstrCLSID ,
/*[in]*/ BSTR bstrID ,
/*[in]*/ BSTR bstrData );
void AcquireLock( /*[in]*/ MPC::SmartLock<_ThreadModel>& lock );
HRESULT Initialize ( /*[in]*/ MPC::SmartLock<_ThreadModel>& lock );
HRESULT ExecQuery();
void CloneListOfWrappers( /*[out]*/ WrapperItemList& lst );
public:
BEGIN_COM_MAP(Manager)
COM_INTERFACE_ENTRY2(IDispatch, IPCHSEManager)
COM_INTERFACE_ENTRY(IPCHSEManager)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
END_COM_MAP()
Manager();
//
// This is called by the CComObjectParent.Release method, to prepare for shutdown.
//
void Passivate();
HRESULT IsNetworkAlive ( /*[out]*/ VARIANT_BOOL *pvbVar );
HRESULT IsDestinationReachable( /*[in]*/ BSTR bstrDestination, /*[out]*/ VARIANT_BOOL *pvbVar );
public:
// IPCHSEManager
STDMETHOD(get_QueryString )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(put_QueryString )( /*[in]*/ BSTR newVal );
STDMETHOD(get_NumResult )( /*[out, retval]*/ long *pVal );
STDMETHOD(put_NumResult )( /*[in]*/ long newVal );
STDMETHOD(put_onComplete )( /*[in]*/ IDispatch* function );
STDMETHOD(put_onProgress )( /*[in]*/ IDispatch* function );
STDMETHOD(put_onWrapperComplete )( /*[in]*/ IDispatch* function );
STDMETHOD(get_SKU )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_LCID )( /*[out, retval]*/ long *pVal );
STDMETHOD(AbortQuery )( );
STDMETHOD(ExecuteAsynchQuery)( );
STDMETHOD(EnumEngine )( /*[out, retval]*/ IPCHCollection* *ppC );
////////////////////////////////////////
// Internal Initialization.
HRESULT InitializeFromDatabase( /*[in]*/ const Taxonomy::HelpSet& ths );
HRESULT NotifyWrapperComplete( /*[in]*/ long lSucceeded, /*[in]*/ IPCHSEWrapperItem* pIPCHSEWICompleted );
HRESULT LogRecord( /*[in]*/ BSTR bstrRecord );
};
typedef MPC::CComObjectParent<Manager> Manager_Object;
class ATL_NO_VTABLE ManagerInternal :
public MPC::CComObjectRootChildEx<MPC::CComSafeMultiThreadModel, Manager>,
public IDispatchImpl<IPCHSEManagerInternal, &IID_IPCHSEManagerInternal, &LIBID_HelpServiceTypeLib>
{
public:
BEGIN_COM_MAP(ManagerInternal)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IPCHSEManagerInternal)
END_COM_MAP()
// IPCHSEManagerInternal
public:
STDMETHOD(WrapperComplete)( /*[in]*/ long lSucceeded, /*[in]*/ IPCHSEWrapperItem* pIPCHSEWICompleted );
STDMETHOD(IsNetworkAlive )( /*[out]*/ VARIANT_BOOL *pvbVar );
STDMETHOD(IsDestinationReachable)( /*[in]*/ BSTR bstrDestination, /*[out]*/ VARIANT_BOOL *pvbVar );
STDMETHOD(LogRecord)( /*[in]*/ BSTR bstrRecord );
};
////////////////////////////////////////////////////////////////////////////////
struct ResultItem_Data
{
CComBSTR m_bstrTitle;
CComBSTR m_bstrURI;
long m_lContentType;
CComBSTR m_bstrLocation;
long m_lHits;
double m_dRank;
CComBSTR m_bstrImageURL;
CComBSTR m_bstrVendor;
CComBSTR m_bstrProduct;
CComBSTR m_bstrComponent;
CComBSTR m_bstrDescription;
DATE m_dateLastModified;
ResultItem_Data();
};
class ATL_NO_VTABLE ResultItem :
public CComObjectRootEx<MPC::CComSafeMultiThreadModel>,
public IDispatchImpl<IPCHSEResultItem, &IID_IPCHSEResultItem, &LIBID_HelpServiceTypeLib>
{
ResultItem_Data m_data;
public:
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(ResultItem)
COM_INTERFACE_ENTRY(IPCHSEResultItem)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
ResultItem();
ResultItem_Data& Data() { return m_data; }
// IPCHSEResultItem
public:
STDMETHOD(get_Title )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_URI )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_ContentType)( /*[out, retval]*/ long *pVal );
STDMETHOD(get_Location )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_Hits )( /*[out, retval]*/ long *pVal );
STDMETHOD(get_Rank )( /*[out, retval]*/ double *pVal );
STDMETHOD(get_Description)( /*[out, retval]*/ BSTR *pVal );
};
////////////////////////////////////////////////////////////////////////////////
struct ParamItem_Definition
{
ParamTypeEnum m_pteParamType;
VARIANT_BOOL m_bRequired;
VARIANT_BOOL m_bVisible;
LPCWSTR m_szName;
UINT m_iDisplayString;
LPCWSTR m_szDisplayString;
LPCWSTR m_szData;
};
struct ParamItem_Definition2 : public ParamItem_Definition
{
MPC::wstring m_strName;
MPC::wstring m_strDisplayString;
MPC::wstring m_strData;
ParamItem_Definition2();
};
struct ParamItem_Data
{
ParamTypeEnum m_pteParamType;
VARIANT_BOOL m_bRequired;
VARIANT_BOOL m_bVisible;
CComBSTR m_bstrDisplayString;
CComBSTR m_bstrName;
CComVariant m_varData;
ParamItem_Data();
};
class ATL_NO_VTABLE ParamItem :
public CComObjectRootEx<MPC::CComSafeMultiThreadModel>,
public IDispatchImpl<IPCHSEParamItem, &IID_IPCHSEParamItem, &LIBID_HelpServiceTypeLib>
{
ParamItem_Data m_data;
public:
BEGIN_COM_MAP(ParamItem)
COM_INTERFACE_ENTRY(IPCHSEParamItem)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
ParamItem();
ParamItem_Data& Data() { return m_data; }
// IPCHSEParamItem
public:
STDMETHOD(get_Type )( /*[out, retval]*/ ParamTypeEnum *pVal );
STDMETHOD(get_Display )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_Name )( /*[out, retval]*/ BSTR *pVal );
STDMETHOD(get_Required)( /*[out, retval]*/ VARIANT_BOOL *pVal );
STDMETHOD(get_Visible )( /*[out, retval]*/ VARIANT_BOOL *pVal );
STDMETHOD(get_Data )( /*[out, retval]*/ VARIANT *pVal );
};
////////////////////////////////////////////////////////////////////////////////
typedef std::map<MPC::wstring, CComVariant> ParamMap;
typedef ParamMap::iterator ParamMapIter;
class ATL_NO_VTABLE WrapperBase :
public CComObjectRootEx<MPC::CComSafeMultiThreadModel>,
public IDispatchImpl<IPCHSEWrapperItem , &IID_IPCHSEWrapperItem , &LIBID_HelpServiceTypeLib>,
public IDispatchImpl<IPCHSEWrapperInternal, &IID_IPCHSEWrapperInternal, &LIBID_HelpServiceTypeLib>
{
protected:
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;
long m_lNumResult;
CComPtr<IPCHSEManagerInternal> m_pSEMgr;
Taxonomy::HelpSet m_ths;
CComPtr<CPCHCollection> m_pParamDef;
ParamMap m_aParam;
////////////////////////////////////////
public:
WrapperBase();
virtual ~WrapperBase();
virtual HRESULT Clean();
VARIANT* GetParamInternal( /*[in]*/ LPCWSTR szParamName );
HRESULT CreateParam( /*[in/out]*/ CPCHCollection* coll, /*[in]*/ const ParamItem_Definition* def );
virtual HRESULT CreateListOfParams( /*[in]*/ CPCHCollection* coll );
virtual HRESULT GetParamDefinition( /*[out]*/ const ParamItem_Definition*& lst, /*[out]*/ int& len );
// IPCHSEWrapperItem
public:
STDMETHOD(get_Enabled )( /*[out, retval]*/ VARIANT_BOOL * pVal );
STDMETHOD(put_Enabled )( /*[in]*/ VARIANT_BOOL newVal );
STDMETHOD(get_Owner )( /*[out, retval]*/ BSTR * pVal );
STDMETHOD(get_Description)( /*[out, retval]*/ BSTR * pVal );
STDMETHOD(get_Name )( /*[out, retval]*/ BSTR * pVal );
STDMETHOD(get_ID )( /*[out, retval]*/ BSTR * pVal );
STDMETHOD(get_HelpURL )( /*[out, retval]*/ BSTR * pVal );
STDMETHOD(get_SearchTerms)( /*[out, retval]*/ VARIANT * pVal );
STDMETHOD(Param )( /*[out,retval]*/ IPCHCollection* *ppC );
STDMETHOD(AddParam)( /*[in]*/ BSTR bstrParamName, /*[in]*/ VARIANT newVal );
STDMETHOD(GetParam)( /*[in]*/ BSTR bstrParamName, /*[out,retval]*/ VARIANT * pVal );
STDMETHOD(DelParam)( /*[in]*/ BSTR bstrParamName );
// IPCHSEWrapperInternal
public:
STDMETHOD(get_QueryString)( /*[out, retval]*/ BSTR * pVal );
STDMETHOD(put_QueryString)( /*[in]*/ BSTR newVal );
STDMETHOD(get_NumResult )( /*[out, retval]*/ long * pVal );
STDMETHOD(put_NumResult )( /*[in]*/ long newVal );
STDMETHOD(SECallbackInterface)( /*[in]*/ IPCHSEManagerInternal* pMgr );
STDMETHOD(Initialize )( /*[in]*/ BSTR bstrID, /*[in]*/ BSTR bstrSKU, /*[in]*/ long lLCID, /*[in]*/ BSTR bstrData );
};
////////////////////////////////////////////////////////////////////////////////
extern HRESULT WrapperItem__Create_Keyword ( /*[out]*/ CComPtr<IPCHSEWrapperInternal>& pVal );
extern HRESULT WrapperItem__Create_FullTextSearch( /*[out]*/ CComPtr<IPCHSEWrapperInternal>& pVal );
};
////////////////////////////////////////////////////////////////////////////////
#endif // !defined(__INCLUDED___PCH___SEARCHENGINELIB_H___)