//--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1995 // // File: cLocality.cxx // // Contents: Locality object // // History: 11-1-95 krishnag Created. // //---------------------------------------------------------------------------- #include "nds.hxx" #pragma hdrstop struct _propmap { LPTSTR pszADsProp; LPTSTR pszNDSProp; } aLocalityPropMapping[] = { { TEXT("Description"), TEXT("Description") }, { TEXT("LocalityName"), TEXT("L") }, { TEXT("PostalAddress"), TEXT("Postal Address") }, { TEXT("SeeAlso"), TEXT("See Also") } }; // Class CNDSLocality DEFINE_IDispatch_Implementation(CNDSLocality) DEFINE_CONTAINED_IADs_Implementation(CNDSLocality) DEFINE_CONTAINED_IDirectoryObject_Implementation(CNDSLocality) DEFINE_CONTAINED_IDirectorySearch_Implementation(CNDSLocality) DEFINE_CONTAINED_IDirectorySchemaMgmt_Implementation(CNDSLocality) DEFINE_CONTAINED_IADsPropertyList_Implementation(CNDSLocality) DEFINE_CONTAINED_IADsPutGet_Implementation(CNDSLocality, aLocalityPropMapping) CNDSLocality::CNDSLocality(): _pADs(NULL), _pDSObject(NULL), _pDSSearch(NULL), _pDSSchemaMgmt(NULL), _pADsContainer(NULL), _pADsPropList(NULL), _pDispMgr(NULL) { ENLIST_TRACKING(CNDSLocality); } HRESULT CNDSLocality::CreateLocality( IADs * pADs, REFIID riid, void **ppvObj ) { CNDSLocality FAR * pLocality = NULL; HRESULT hr = S_OK; hr = AllocateLocalityObject(pADs, &pLocality); BAIL_ON_FAILURE(hr); hr = pLocality->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr); pLocality->Release(); RRETURN(hr); error: delete pLocality; RRETURN_EXP_IF_ERR(hr); } CNDSLocality::~CNDSLocality( ) { if ( _pADs ) _pADs->Release(); if ( _pADsContainer ) _pADsContainer->Release(); if (_pDSObject) { _pDSObject->Release(); } if (_pDSSearch) { _pDSSearch->Release(); } if (_pDSSchemaMgmt) { _pDSSchemaMgmt->Release(); } if (_pADsPropList) { _pADsPropList->Release(); } delete _pDispMgr; } STDMETHODIMP CNDSLocality::QueryInterface( REFIID iid, LPVOID FAR* ppv ) { if (ppv == NULL) { RRETURN(E_POINTER); } if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADsLocality FAR *) this; } else if (IsEqualIID(iid, IID_IADsLocality)) { *ppv = (IADsLocality FAR *) this; } else if (IsEqualIID(iid, IID_IADs)) { *ppv = (IADsLocality FAR *) this; } else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADsLocality FAR *) this; } else if (IsEqualIID(iid, IID_ISupportErrorInfo)) { *ppv = (ISupportErrorInfo FAR *) this; } else if (IsEqualIID(iid, IID_IADsContainer) && _pADsContainer) { *ppv = (IADsContainer FAR *) this; } else if (IsEqualIID(iid, IID_IDirectoryObject)) { *ppv = (IDirectoryObject FAR *) this; } else if (IsEqualIID(iid, IID_IDirectorySearch)) { *ppv = (IDirectorySearch FAR *) this; } else if (IsEqualIID(iid, IID_IADsPropertyList) && _pADsPropList) { *ppv = (IADsPropertyList FAR *) this; } else if (IsEqualIID(iid, IID_IDirectorySchemaMgmt)) { *ppv = (IDirectorySchemaMgmt FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; } HRESULT CNDSLocality::AllocateLocalityObject( IADs *pADs, CNDSLocality ** ppLocality ) { CNDSLocality FAR * pLocality = NULL; CDispatchMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK; IADsContainer FAR * pADsContainer = NULL; IDirectoryObject * pDSObject = NULL; IDirectorySearch * pDSSearch = NULL; IDirectorySchemaMgmt * pDSSchemaMgmt = NULL; IADsPropertyList * pADsPropList = NULL; pLocality = new CNDSLocality(); if (pLocality == NULL) { hr = E_OUTOFMEMORY; } BAIL_ON_FAILURE(hr); pDispMgr = new CDispatchMgr; if (pDispMgr == NULL) { hr = E_OUTOFMEMORY; } BAIL_ON_FAILURE(hr); hr = LoadTypeInfoEntry( pDispMgr, LIBID_ADs, IID_IADsLocality, (IADsLocality *)pLocality, DISPID_REGULAR ); BAIL_ON_FAILURE(hr); hr = LoadTypeInfoEntry( pDispMgr, LIBID_ADs, IID_IADsContainer, (IADsContainer *)pLocality, DISPID_NEWENUM ); BAIL_ON_FAILURE(hr); hr = LoadTypeInfoEntry( pDispMgr, LIBID_ADs, IID_IADsPropertyList, (IADsPropertyList *)pADsPropList, DISPID_VALUE ); BAIL_ON_FAILURE(hr); hr = pADs->QueryInterface( IID_IDirectoryObject, (void **)&pDSObject ); BAIL_ON_FAILURE(hr); pLocality->_pDSObject = pDSObject; hr = pADs->QueryInterface( IID_IDirectorySearch, (void **)&pDSSearch ); BAIL_ON_FAILURE(hr); pLocality->_pDSSearch = pDSSearch; hr = pADs->QueryInterface( IID_IDirectorySchemaMgmt, (void **)&pDSSchemaMgmt ); BAIL_ON_FAILURE(hr); pLocality->_pDSSchemaMgmt = pDSSchemaMgmt; hr = pADs->QueryInterface( IID_IADsPropertyList, (void **)&pADsPropList ); BAIL_ON_FAILURE(hr); pLocality->_pADsPropList = pADsPropList; // // Store the pointer to the internal generic object // AND add ref this pointer // pLocality->_pADs = pADs; pADs->AddRef(); // // Store a pointer to the Container interface // hr = pADs->QueryInterface( IID_IADsContainer, (void **)&pADsContainer ); BAIL_ON_FAILURE(hr); pLocality->_pADsContainer = pADsContainer; pLocality->_pDispMgr = pDispMgr; *ppLocality = pLocality; RRETURN(hr); error: delete pDispMgr; delete pLocality; *ppLocality = NULL; RRETURN(hr); } /* ISupportErrorInfo method */ STDMETHODIMP CNDSLocality::InterfaceSupportsErrorInfo( THIS_ REFIID riid ) { if (IsEqualIID(riid, IID_IADs) || #if 0 IsEqualIID(riid, IID_IDirectoryObject) || IsEqualIID(riid, IID_IDirectorySearch) || IsequalIID(riid, IID_IdirecotryAttrMgmt) || #endif IsEqualIID(riid, IID_IADsPropertyList) || IsEqualIID(riid, IID_IADsContainer) || IsEqualIID(riid, IID_IADsLocality)) { RRETURN(S_OK); } else { RRETURN(S_FALSE); } } STDMETHODIMP CNDSLocality::get_Description(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsLocality *)this,Description); } STDMETHODIMP CNDSLocality::put_Description(THIS_ BSTR bstrDescription) { PUT_PROPERTY_BSTR((IADsLocality *)this,Description); } STDMETHODIMP CNDSLocality::get_LocalityName(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsLocality *)this,LocalityName); } STDMETHODIMP CNDSLocality::put_LocalityName(THIS_ BSTR bstrLocalityName) { PUT_PROPERTY_BSTR((IADsLocality *)this,LocalityName); } STDMETHODIMP CNDSLocality::get_PostalAddress(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsLocality *)this,PostalAddress); } STDMETHODIMP CNDSLocality::put_PostalAddress(THIS_ BSTR bstrPostalAddress) { PUT_PROPERTY_BSTR((IADsLocality *)this,PostalAddress); } STDMETHODIMP CNDSLocality::get_SeeAlso(THIS_ VARIANT FAR* retval) { GET_PROPERTY_VARIANT((IADsLocality *)this,SeeAlso); } STDMETHODIMP CNDSLocality::put_SeeAlso(THIS_ VARIANT vSeeAlso) { PUT_PROPERTY_VARIANT((IADsLocality *)this,SeeAlso); } /* IADsContainer methods */ STDMETHODIMP CNDSLocality::get_Count(long FAR* retval) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->get_Count( retval ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::get_Filter(THIS_ VARIANT FAR* pVar) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->get_Filter( pVar ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::put_Filter(THIS_ VARIANT Var) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->put_Filter( Var ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::put_Hints(THIS_ VARIANT Var) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->put_Hints( Var ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::get_Hints(THIS_ VARIANT FAR* pVar) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->get_Hints( pVar ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::GetObject( BSTR ClassName, BSTR RelativeName, IDispatch * FAR* ppObject ) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->GetObject( ClassName, RelativeName, ppObject ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::get__NewEnum( THIS_ IUnknown * FAR* retval ) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->get__NewEnum( retval ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::Create( THIS_ BSTR ClassName, BSTR RelativeName, IDispatch * FAR* ppObject ) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->Create( ClassName, RelativeName, ppObject ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::Delete( THIS_ BSTR bstrClassName, BSTR bstrRelativeName ) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->Delete( bstrClassName, bstrRelativeName ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::CopyHere( THIS_ BSTR SourceName, BSTR NewName, IDispatch * FAR* ppObject ) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->CopyHere( SourceName, NewName, ppObject ); } RRETURN_EXP_IF_ERR(hr); } STDMETHODIMP CNDSLocality::MoveHere( THIS_ BSTR SourceName, BSTR NewName, IDispatch * FAR* ppObject ) { HRESULT hr = E_NOTIMPL; if (_pADsContainer) { hr = _pADsContainer->MoveHere( SourceName, NewName, ppObject ); } RRETURN_EXP_IF_ERR(hr); }