332 lines
13 KiB
C++
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___)
|