Leaked source code of windows server 2003
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.

194 lines
6.2 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright(C) 1997-1998 Microsoft Corporation all rights reserved.
  4. //
  5. // Module: sdoproperty.h
  6. //
  7. // Project: Everest
  8. //
  9. // Description: IAS Server Data Object Property Declarations
  10. //
  11. // Author: TLP 1/23/98
  12. //
  13. /////////////////////////////////////////////////////////////////////////////
  14. #ifndef _INC_SDO_PROPERTY_H_
  15. #define _INC_SDO_PROPERTY_H_
  16. #include <ias.h>
  17. #include <sdoiaspriv.h>
  18. #include <comutil.h>
  19. #include <comdef.h>
  20. #include <fa.hxx>
  21. #include "resource.h"
  22. #include <string>
  23. using namespace std;
  24. ////////////////////////////////////////////
  25. // SDO property flag definitions
  26. ////////////////////////////////////////////
  27. #define SDO_PROPERTY_POINTER 0x0001 // Property is an IUnknown pointer
  28. #define SDO_PROPERTY_COLLECTION 0x0002 // Property is an SDO collection
  29. #define SDO_PROPERTY_MIN_VALUE 0x0004 // Property has a minimum value
  30. #define SDO_PROPERTY_MAX_VALUE 0x0008 // Property has a maximum value
  31. #define SDO_PROPERTY_MIN_LENGTH 0x0010 // Property has a minium length
  32. #define SDO_PROPERTY_MAX_LENGTH 0x0020 // Property has a maximum length
  33. #define SDO_PROPERTY_MANDATORY 0x0040 // Property is mandatory (required)
  34. #define SDO_PROPERTY_NO_PERSIST 0x0080 // Property cannot be persisted
  35. #define SDO_PROPERTY_READ_ONLY 0x0100 // Property is read only
  36. #define SDO_PROPERTY_MULTIVALUED 0x0200 // Property is multi-valued
  37. #define SDO_PROPERTY_HAS_DEFAULT 0x0400 // Property has a default value
  38. #define SDO_PROPERTY_COMPONENT 0x0800 // Property is used by IAS component
  39. #define SDO_PROPERTY_FORMAT 0x1000 // Property has a format string
  40. /////////////////////////////////////////////////////////////////////////////
  41. // Server Data Object Property Class - Holds a Single Property
  42. /////////////////////////////////////////////////////////////////////////////
  43. class CSdoProperty
  44. {
  45. CComPtr<ISdoPropertyInfo> m_pSdoPropertyInfo;
  46. CComBSTR m_name;
  47. LONG m_alias;
  48. DWORD m_flags;
  49. BOOL m_dirty;
  50. VARTYPE m_type;
  51. DWORD m_index;
  52. ULONG m_minLength;
  53. ULONG m_maxLength;
  54. CDFA* m_dfa; // Formating
  55. _variant_t m_minValue;
  56. _variant_t m_maxValue;
  57. _variant_t m_defaultValue;
  58. _variant_t m_value[2]; // Property values (facilitate safe load)
  59. // See GetUpdateValue() / SetUpdateValue()
  60. public:
  61. CSdoProperty(
  62. ISdoPropertyInfo* pSdoPropertyInfo,
  63. DWORD dwFlags = 0
  64. ) throw (_com_error);
  65. ~CSdoProperty();
  66. //////////////////////////////////////////////////////////////////////////
  67. ISdoPropertyInfo* GetPropertyInfo(void) const
  68. { return m_pSdoPropertyInfo.p; }
  69. //////////////////////////////////////////////////////////////////////////
  70. BSTR GetName(void) const
  71. { return m_name; }
  72. //////////////////////////////////////////////////////////////////////////
  73. HRESULT GetValue(VARIANT *value) throw(_com_error)
  74. {
  75. HRESULT hr = VariantCopy(value, &m_value[m_index]);
  76. return hr;
  77. }
  78. //////////////////////////////////////////////////////////////////////////
  79. VARIANT* GetValue(void) throw()
  80. { return &m_value[m_index]; }
  81. //////////////////////////////////////////////////////////////////////////
  82. HRESULT PutValue(VARIANT* value) throw(_com_error)
  83. {
  84. m_value[m_index] = value;
  85. m_dirty = TRUE;
  86. return S_OK;
  87. }
  88. //////////////////////////////////////////////////////////////////////////
  89. HRESULT PutDefault(VARIANT* value) throw(_com_error)
  90. {
  91. m_defaultValue = value;
  92. return S_OK;
  93. }
  94. //////////////////////////////////////////////////////////////////////////
  95. void ChangeType(VARTYPE vt) throw(_com_error)
  96. { m_value[m_index].ChangeType(vt, NULL); }
  97. //////////////////////////////////////////////////////////////////////////
  98. LONG GetId(void) const
  99. { return m_alias; }
  100. //////////////////////////////////////////////////////////////////////////
  101. DWORD GetFlags(void) const
  102. { return m_flags; }
  103. //////////////////////////////////////////////////////////////////////////
  104. void SetFlags(DWORD dwFlags)
  105. { m_flags = dwFlags; }
  106. //////////////////////////////////////////////////////////////////////////
  107. VARTYPE GetType(void) const
  108. { return m_type; }
  109. //////////////////////////////////////////////////////////////////////////
  110. BOOL IsDirty(void) const
  111. { return m_dirty; }
  112. //////////////////////////////////////////////////////////////////////////
  113. VOID SetType(VARTYPE vt)
  114. { m_type = vt; }
  115. //////////////////////////////////////////////////////////////////////////
  116. VOID SetMinLength(ULONG minLength)
  117. { m_minLength = minLength; }
  118. //////////////////////////////////////////////////////////////////////////
  119. VOID SetMaxLength(ULONG maxLength)
  120. { m_maxLength = maxLength; }
  121. //////////////////////////////////////////////////////////////////////////
  122. void Reset(void) throw(_com_error);
  123. //////////////////////////////////////////////////////////////////////////
  124. HRESULT Validate(VARIANT *newValue);
  125. //////////////////////////////////////////////////////////////////////////
  126. // The following functions are used to facilitate a safe load.
  127. //////////////////////////////////////////////////////////////////////////
  128. //////////////////////////////////////////////////////////////////////////
  129. VARIANT* GetUpdateValue(void) throw()
  130. { return (m_index > 0) ? &m_value[0] : &m_value[1]; }
  131. //////////////////////////////////////////////////////////////////////////
  132. void SetUpdateValue(void) throw()
  133. {
  134. VariantClear(&m_value[m_index]);
  135. m_index = (m_index > 0) ? 0 : 1;
  136. }
  137. private:
  138. // Don't allow copy or assignment
  139. CSdoProperty(const CSdoProperty& rhs);
  140. CSdoProperty& operator=(CSdoProperty& rhs);
  141. /////////////////////////////////////////////////////////////////////////
  142. HRESULT ValidateIt(VARIANT *newValue);
  143. };
  144. typedef CSdoProperty SDOPROPERTY;
  145. typedef CSdoProperty* PSDOPROPERTY;
  146. #endif // _INC_SDO_PROPERTY_H_