CPRPOBJ.CPP

/*++ 

Copyright (c) 1996 Microsoft Corporation

Module Name:

CPrpObj.cpp

Abstract:


Author:

Environment:

User mode

Revision History :

--*/
#include "adssmp.h"
#pragma hdrstop

// Class CSampleDSProperty

DEFINE_IDispatch_Implementation(CSampleDSProperty)
DEFINE_IADs_Implementation(CSampleDSProperty)

CSampleDSProperty::CSampleDSProperty()
: _pDispMgr( NULL ),
_bstrSyntax( NULL )
{

ENLIST_TRACKING(CSampleDSProperty);
}

CSampleDSProperty::~CSampleDSProperty()
{
delete _pDispMgr;
}

HRESULT
CSampleDSProperty::CreateProperty(
BSTR bstrParent,
BSTR bstrName,
LPSampleDS_ATTR_DEF lpAttrDef,
DWORD dwObjectState,
REFIID riid,
void **ppvObj
)
{
CSampleDSProperty FAR * pProperty = NULL;
HRESULT hr = S_OK;
WCHAR szADsSyntax[MAX_PATH];
WCHAR szSampleDSSyntax[MAX_PATH];

hr = AllocatePropertyObject( &pProperty );
BAIL_ON_FAILURE(hr);

hr = pProperty->InitializeCoreObject(
bstrParent,
bstrName,
PROPERTY_CLASS_NAME,
L"",
CLSID_SampleDSProperty,
dwObjectState
);
BAIL_ON_FAILURE(hr);

hr = pProperty->QueryInterface( riid, ppvObj );
BAIL_ON_FAILURE(hr);

MapSyntaxIdtoADsSyntax(
lpAttrDef->dwSyntaxID,
szADsSyntax
);

hr = ProvAllocString(
szADsSyntax,
&pProperty->_bstrSyntax
);
BAIL_ON_FAILURE(hr);

MapSyntaxIdtoSampleDSSyntax(
lpAttrDef->dwSyntaxID,
szSampleDSSyntax
);

pProperty->Release();

RRETURN(hr);

error:

delete pProperty;
RRETURN(hr);
}

HRESULT
CSampleDSProperty::CreateProperty(
BSTR bstrParent,
BSTR bstrName,
HANDLE hTree,
DWORD dwObjectState,
REFIID riid,
void **ppvObj
)
{
DWORD dwStatus = 0;
HRESULT hr = S_OK;
LPSampleDS_ATTR_DEF lpAttrDefs = NULL;
DWORD dwNumberOfEntries = 0;
DWORD dwInfoType = 0;
HANDLE hOperationData = NULL;
hr = SampleDSGetPropertyDefinition(&lpAttrDefs,
bstrName);
BAIL_ON_FAILURE(hr);

if (!lpAttrDefs) {
hr = E_FAIL;
BAIL_ON_FAILURE(hr);
}

hr = CSampleDSProperty::CreateProperty(
bstrParent,
bstrName,
lpAttrDefs,
dwObjectState,
riid,
ppvObj
);
error:
if (lpAttrDefs)
SampleDSFreePropertyDefinition(lpAttrDefs,
1
);
RRETURN(hr);
}

STDMETHODIMP
CSampleDSProperty::QueryInterface(
REFIID iid,
LPVOID FAR* ppv
)
{
if (IsEqualIID(iid, IID_IUnknown))
{
*ppv = (IADsProperty FAR *) this;
}
else if (IsEqualIID(iid, IID_IDispatch))
{
*ppv = (IADsProperty FAR *) this;
}
else if (IsEqualIID(iid, IID_IADsProperty))
{
*ppv = (IADsProperty FAR *) this;
}
else if (IsEqualIID(iid, IID_IADs))
{
*ppv = (IADsProperty FAR *) this;
}
else
{
*ppv = NULL;
return E_NOINTERFACE;
}

AddRef();
return NOERROR;
}

/* IADs methods */

STDMETHODIMP
CSampleDSProperty::SetInfo(THIS)
{
RRETURN(E_NOTIMPL);
}

STDMETHODIMP
CSampleDSProperty::GetInfo(THIS)
{
RRETURN(S_OK);
}


HRESULT
CSampleDSProperty::AllocatePropertyObject(
CSampleDSProperty FAR * FAR * ppProperty
)
{
CSampleDSProperty FAR *pProperty = NULL;
CDispatchMgr FAR *pDispMgr = NULL;
HRESULT hr = S_OK;

pProperty = new CSampleDSProperty();
if ( pProperty == 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_IADsProperty,
(IADsProperty *) pProperty,
DISPID_REGULAR
);
BAIL_ON_FAILURE(hr);

pProperty->_pDispMgr = pDispMgr;
*ppProperty = pProperty;

RRETURN(hr);

error:

delete pDispMgr;
delete pProperty;

RRETURN(hr);

}


STDMETHODIMP
CSampleDSProperty::Get(
THIS_ BSTR bstrName,
VARIANT FAR* pvProp
)
{
RRETURN(E_NOTIMPL);
}



STDMETHODIMP
CSampleDSProperty::Put(
THIS_ BSTR bstrName,
VARIANT vProp
)
{
RRETURN(E_NOTIMPL);
}


HRESULT
MapSyntaxIdtoADsSyntax(
DWORD dwSyntaxId,
LPWSTR pszADsSyntax
)
{

if (dwSyntaxId > g_cSampleDSSyntaxMap) {
wcscpy(pszADsSyntax, L"Out of Bounds");
}else {
wcscpy(pszADsSyntax, g_aSampleDSSyntaxMap[dwSyntaxId - 1].bstrName);
}
RRETURN(S_OK);

}

HRESULT
MapSyntaxIdtoSampleDSSyntax(
DWORD dwSyntaxId,
LPWSTR pszSampleDSSyntax
)
{

if (dwSyntaxId > g_cSampleDSSyntaxMap) {
wcscpy(pszSampleDSSyntax, L"Out of Bounds");
}else {
wcscpy(pszSampleDSSyntax, g_aSampleDSSyntaxMap[dwSyntaxId - 1].bstrSampleDSName);
}
RRETURN(S_OK);

}
/* IADsProperty methods */

STDMETHODIMP
CSampleDSProperty::get_OID( THIS_ BSTR FAR *pbstrOID )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::put_OID( THIS_ BSTR bstrOID )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::get_Syntax( THIS_ BSTR FAR *pbstrSyntax )
{
if ( !pbstrSyntax )
RRETURN(E_ADS_BAD_PARAMETER);

RRETURN( ProvAllocString( _bstrSyntax, pbstrSyntax ));
}

STDMETHODIMP
CSampleDSProperty::put_Syntax( THIS_ BSTR bstrSyntax )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::get_MaxRange( THIS_ long FAR *plMaxRange )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::put_MaxRange( THIS_ long lMaxRange )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::get_MinRange( THIS_ long FAR *plMinRange )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::put_MinRange( THIS_ long lMinRange )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::get_MultiValued( THIS_ VARIANT_BOOL FAR *pfMultiValued )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::put_MultiValued( THIS_ VARIANT_BOOL fMultiValued )
{
RRETURN(E_ADS_PROPERTY_NOT_SUPPORTED);
}

STDMETHODIMP
CSampleDSProperty::Qualifiers(THIS_ IADsCollection FAR* FAR* ppQualifiers)
{
RRETURN(E_NOTIMPL);
}