/****************************************************************************** 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 #include ///////////////////////////////////////////////////////////////////////////// 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 { 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 m_Notifier; CComPtr m_Progress; CComPtr m_Complete; CComPtr 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_Object; class ATL_NO_VTABLE ManagerInternal : public MPC::CComObjectRootChildEx, public IDispatchImpl { 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, public IDispatchImpl { 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, public IDispatchImpl { 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 ParamMap; typedef ParamMap::iterator ParamMapIter; class ATL_NO_VTABLE WrapperBase : public CComObjectRootEx, public IDispatchImpl, public IDispatchImpl { 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 m_pSEMgr; Taxonomy::HelpSet m_ths; CComPtr 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& pVal ); extern HRESULT WrapperItem__Create_FullTextSearch( /*[out]*/ CComPtr& pVal ); }; //////////////////////////////////////////////////////////////////////////////// #endif // !defined(__INCLUDED___PCH___SEARCHENGINELIB_H___)