Source code of Windows XP (NT5)
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.

169 lines
4.9 KiB

  1. ///////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright(C) 1997-1998 Microsoft Corporation all rights reserved.
  4. //
  5. // Module: sdocollection.h
  6. //
  7. // Project: Everest
  8. //
  9. // Description: IAS Server Data Object Collection Declaration
  10. //
  11. // Author: TLP 1/23/98
  12. //
  13. ///////////////////////////////////////////////////////////////////////////
  14. #ifndef __IAS_SDOCOLLECTION_H_
  15. #define __IAS_SDOCOLLECTION_H_
  16. #include <ias.h>
  17. #include <sdoiaspriv.h>
  18. #include <comdef.h> // COM definitions - Needed for IEnumVARIANT
  19. #include "resource.h" // main symbols
  20. #include <vector>
  21. using namespace std;
  22. ///////////////////////////////////////////////////////////////////////////////
  23. #define EMPTY_NAME L""
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CSdoCollection Class Declaration
  26. /////////////////////////////////////////////////////////////////////////////
  27. class ATL_NO_VTABLE CSdoCollection :
  28. public CComObjectRootEx<CComMultiThreadModel>,
  29. public IDispatchImpl<ISdoCollection, &IID_ISdoCollection, &LIBID_SDOIASLib>
  30. {
  31. public:
  32. CSdoCollection();
  33. ~CSdoCollection();
  34. BEGIN_COM_MAP(CSdoCollection)
  35. COM_INTERFACE_ENTRY(ISdoCollection)
  36. COM_INTERFACE_ENTRY(IDispatch)
  37. END_COM_MAP()
  38. public:
  39. ///////////////////////////
  40. // ISdoCollection Interface
  41. ///////////////////////////
  42. //////////////////////////////////////////////////////////////////////////////
  43. STDMETHOD(get_Count)(
  44. /*[out, retval]*/ LONG *pVal
  45. );
  46. //////////////////////////////////////////////////////////////////////////////
  47. STDMETHOD(Add)(
  48. /*[in]*/ BSTR Name,
  49. /*[in/out]*/ IDispatch** ppItem
  50. );
  51. //////////////////////////////////////////////////////////////////////////////
  52. STDMETHOD(Remove)(
  53. /*[in]*/ IDispatch* pItem
  54. );
  55. //////////////////////////////////////////////////////////////////////////////
  56. STDMETHOD(RemoveAll)(void);
  57. //////////////////////////////////////////////////////////////////////////////
  58. STDMETHOD(Reload)(void);
  59. //////////////////////////////////////////////////////////////////////////////
  60. STDMETHOD(IsNameUnique)(
  61. /*[in]*/ BSTR bstrName,
  62. /*[out]*/ VARIANT_BOOL* pBool
  63. );
  64. //////////////////////////////////////////////////////////////////////////////
  65. STDMETHOD(Item)(
  66. /*[in]*/ VARIANT* Index,
  67. /*[out]*/ IDispatch** pItem
  68. );
  69. //////////////////////////////////////////////////////////////////////////////
  70. STDMETHOD(get__NewEnum)(
  71. /*[out]*/ IUnknown** pEnumVARIANT
  72. );
  73. private:
  74. friend ISdoCollection* MakeSDOCollection(
  75. /*[in]*/ LPCWSTR lpszCreateClassId,
  76. /*[in]*/ ISdoMachine* pSdoMachine,
  77. /*[in]*/ IDataStoreContainer* pDSContainer
  78. );
  79. //////////////////////////////////////////////////////////////////////////////
  80. HRESULT InternalInitialize(
  81. /*[in]*/ LPCWSTR lpszCreateClassId,
  82. /*[in]*/ ISdoMachine* pSdoMachine,
  83. /*[in]*/ IDataStoreContainer* pDSContainer
  84. );
  85. //////////////////////////////////////////////////////////////////////////////
  86. void InternalShutdown(void);
  87. /////////////////////////////////////////////////////////////////////////////
  88. HRESULT InternalAdd(
  89. /*[in]*/ BSTR bstrName,
  90. /*[in/out]*/ IDispatch **ppItem
  91. );
  92. //////////////////////////////////////////////////////////////////////////////
  93. HRESULT InternalIsNameUnique(
  94. /*[in]*/ BSTR bstrName,
  95. /*[out]*/ VARIANT_BOOL* pBool
  96. );
  97. //////////////////////////////////////////////////////////////////////////////
  98. HRESULT Load(void);
  99. //////////////////////////////////////////////////////////////////////////////
  100. void ReleaseItems(void);
  101. // Container for collection's SDOs
  102. //
  103. typedef vector<_variant_t> VariantArray;
  104. typedef VariantArray::iterator VariantArrayIterator;
  105. // Container for object references
  106. //
  107. VariantArray m_Objects;
  108. // Collection state
  109. //
  110. bool m_fSdoInitialized;
  111. // Data store container associated with this collection
  112. //
  113. IDataStoreContainer* m_pDSContainer;
  114. // Attached Machine
  115. //
  116. ISdoMachine* m_pSdoMachine;
  117. // Create on add allowed flag
  118. //
  119. bool m_fCreateOnAdd;
  120. // Data store class name for objects that can be created by this collection
  121. //
  122. _bstr_t m_DatastoreClass;
  123. // Prog Id of the objects (SDOs) that can be created by this collection
  124. //
  125. _bstr_t m_CreateClassId;
  126. };
  127. typedef CComObjectNoLock<CSdoCollection> SDO_COLLECTION_OBJ;
  128. typedef CComObjectNoLock<CSdoCollection>* PSDO_COLLECTION_OBJ;
  129. #endif //__IAS_SDOCOLLECTION_H_