274 lines
6.5 KiB
C++
274 lines
6.5 KiB
C++
#include "stdafx.h"
|
|
#include "objects.h"
|
|
#include "maindoc.h"
|
|
#include "resource.h"
|
|
#include "grpcrtit.h"
|
|
#include "delgrpit.h"
|
|
|
|
|
|
/***********************************************************
|
|
Function:
|
|
Arguments:
|
|
Return:
|
|
Purpose:
|
|
Author(s):
|
|
Revision:
|
|
Date:
|
|
***********************************************************/
|
|
COleDsGroup::COleDsGroup( )
|
|
{
|
|
|
|
}
|
|
|
|
|
|
/***********************************************************
|
|
Function:
|
|
Arguments:
|
|
Return:
|
|
Purpose:
|
|
Author(s):
|
|
Revision:
|
|
Date:
|
|
***********************************************************/
|
|
COleDsGroup::COleDsGroup( IUnknown *pIUnk): COleDsObject( pIUnk )
|
|
{
|
|
BOOL bContainer;
|
|
IADsContainer* pContainer;
|
|
HRESULT hResult;
|
|
|
|
hResult = pIUnk->QueryInterface( IID_IADsContainer, (void**)&pContainer );
|
|
bContainer = SUCCEEDED( hResult );
|
|
|
|
if( SUCCEEDED( hResult ) )
|
|
pContainer->Release( );
|
|
|
|
m_bHasChildren = bContainer;
|
|
m_bSupportAdd = bContainer;
|
|
m_bSupportMove = bContainer;
|
|
m_bSupportCopy = bContainer;
|
|
}
|
|
|
|
|
|
/***********************************************************
|
|
Function:
|
|
Arguments:
|
|
Return:
|
|
Purpose:
|
|
Author(s):
|
|
Revision:
|
|
Date:
|
|
***********************************************************/
|
|
COleDsGroup::~COleDsGroup( )
|
|
{
|
|
|
|
}
|
|
|
|
|
|
/***********************************************************
|
|
Function:
|
|
Arguments:
|
|
Return:
|
|
Purpose:
|
|
Author(s):
|
|
Revision:
|
|
Date:
|
|
***********************************************************/
|
|
DWORD COleDsGroup::GetChildren( DWORD* pTokens,
|
|
DWORD dwMaxChildren,
|
|
CDialog* pQueryStatus,
|
|
BOOL* pFilters,
|
|
DWORD dwFilters )
|
|
{
|
|
HRESULT hResult;
|
|
IADsGroup* pIGroup;
|
|
//IOleDsGroupOperations* pIGroupOper;
|
|
MEMBERS* pIMembers;
|
|
|
|
if( NULL == m_pIUnk )
|
|
{
|
|
ASSERT( FALSE );
|
|
return 0L;
|
|
}
|
|
|
|
hResult = m_pIUnk->QueryInterface( IID_IADsGroup, (void**) &pIGroup );
|
|
if( FAILED( hResult ) )
|
|
{
|
|
TRACE( _T("ERROR!!! Group object does not return IID_IADsGroup interface\n") );
|
|
return 0L;
|
|
}
|
|
|
|
COleDsObject::GetChildren( pTokens, dwMaxChildren, pQueryStatus,
|
|
pFilters, dwFilters );
|
|
|
|
|
|
//hResult = pIGroup->QueryInterface( IID_IADsGroupOperations, (void**)&pIGroupOper );
|
|
|
|
if( SUCCEEDED( hResult ) )
|
|
{
|
|
hResult = pIGroup->Members( &pIMembers );
|
|
if( SUCCEEDED( hResult ) )
|
|
{
|
|
COleDsObject::GetChildren( pIMembers );
|
|
pIMembers->Release( );
|
|
}
|
|
else
|
|
{
|
|
TRACE( _T("ERROR!!! Members fails for Group object\n") );
|
|
}
|
|
|
|
//pIGroupOper->Release( );
|
|
}
|
|
else
|
|
{
|
|
TRACE( _T("ERROR!!! GeneralInfo fails for Group object\n") );
|
|
}
|
|
|
|
pIGroup->Release( );
|
|
|
|
return m_dwCount;
|
|
}
|
|
|
|
|
|
/***********************************************************
|
|
Function:
|
|
Arguments:
|
|
Return:
|
|
Purpose:
|
|
Author(s):
|
|
Revision:
|
|
Date:
|
|
***********************************************************/
|
|
HRESULT COleDsGroup::DeleteItem ( COleDsObject* pObject )
|
|
{
|
|
return ContainerDeleteItem( pObject );
|
|
|
|
CDeleteGroupItem aDeleteItem;
|
|
BSTR bstrName;
|
|
//IOleDsGroupOperations* pIGroupOperations = NULL;
|
|
IADsGroup* pIGroup = NULL;
|
|
HRESULT hResult;
|
|
CString strFullName;
|
|
CString strQualifiedName;
|
|
CString strItemType;
|
|
|
|
MakeQualifiedName( strQualifiedName, m_strOleDsPath, m_dwType );
|
|
|
|
strFullName = pObject->GetOleDsPath( );
|
|
strItemType = pObject->GetClass( );
|
|
|
|
aDeleteItem.m_strItemName = strFullName;
|
|
aDeleteItem.m_strParent = strQualifiedName;
|
|
aDeleteItem.m_strItemType = strItemType;
|
|
|
|
if( aDeleteItem.DoModal( ) != IDOK )
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
|
|
while( TRUE )
|
|
{
|
|
hResult = m_pIUnk->QueryInterface( IID_IADsGroup,
|
|
(void**)&pIGroup );
|
|
ASSERT( SUCCEEDED( hResult ) );
|
|
if( FAILED( hResult ) )
|
|
{
|
|
break;
|
|
}
|
|
|
|
//hResult = m_pIUnk->QueryInterface( IID_IADsGroupOperations,
|
|
// (void**)&pIGroupOperations );
|
|
//ASSERT( SUCCEEDED( hResult ) );
|
|
//if( FAILED( hResult ) )
|
|
//{
|
|
// break;
|
|
//}
|
|
|
|
bstrName = AllocBSTR( aDeleteItem.m_strItemName.GetBuffer( 128 ) );
|
|
//hResult = pIGroupOperations->Remove( bstrName );
|
|
hResult = pIGroup->Remove( bstrName );
|
|
SysFreeString( bstrName );
|
|
|
|
break;
|
|
}
|
|
|
|
//if( NULL != pIGroupOperations )
|
|
//{
|
|
// pIGroupOperations->Release( );
|
|
//}
|
|
|
|
if( NULL != pIGroup )
|
|
{
|
|
pIGroup->Release( );
|
|
}
|
|
|
|
return hResult;
|
|
|
|
}
|
|
|
|
/***********************************************************
|
|
Function:
|
|
Arguments:
|
|
Return:
|
|
Purpose:
|
|
Author(s):
|
|
Revision:
|
|
Date:
|
|
***********************************************************/
|
|
HRESULT COleDsGroup::AddItem( )
|
|
{
|
|
|
|
return ContainerAddItem( );
|
|
|
|
CGroupCreateItem aCreateItem;
|
|
BSTR bstrName;
|
|
//IOleDsGroupOperations* pIGroupOperations = NULL;
|
|
IADsGroup* pIGroup = NULL;
|
|
HRESULT hResult;
|
|
CString strQualifiedName;
|
|
|
|
MakeQualifiedName( strQualifiedName, m_strOleDsPath, m_dwType );
|
|
aCreateItem.m_strParent = strQualifiedName;
|
|
aCreateItem.m_strItemType = _T("NA");
|
|
|
|
if( aCreateItem.DoModal( ) != IDOK )
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
|
|
bstrName = AllocBSTR( aCreateItem.m_strNewItemName.GetBuffer(128) );
|
|
|
|
while( TRUE )
|
|
{
|
|
hResult = m_pIUnk->QueryInterface( IID_IADsGroup, (void**)&pIGroup );
|
|
ASSERT( SUCCEEDED( hResult ) );
|
|
if( FAILED( hResult ) )
|
|
{
|
|
break;
|
|
}
|
|
|
|
//hResult = m_pIUnk->QueryInterface( IID_IADsGroupOperations, (void**)&pIGroupOperations );
|
|
//ASSERT( SUCCEEDED( hResult ) );
|
|
//if( FAILED( hResult ) )
|
|
//{
|
|
// break;
|
|
//}
|
|
|
|
hResult = pIGroup->Add( bstrName );
|
|
break;
|
|
}
|
|
|
|
SysFreeString( bstrName );
|
|
|
|
//if( NULL != pIGroupOperations )
|
|
//{
|
|
// pIGroupOperations->Release( );
|
|
//}
|
|
|
|
if( NULL != pIGroup )
|
|
{
|
|
pIGroup->Release( );
|
|
}
|
|
|
|
return hResult;
|
|
}
|