259 lines
7.8 KiB
C++
259 lines
7.8 KiB
C++
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright(C) 2000 Microsoft Corporation all rights reserved.
|
||
|
//
|
||
|
// Module: ObjectsCommand.H
|
||
|
//
|
||
|
// Project: Windows 2000 IAS
|
||
|
//
|
||
|
// Description: Declaration of the the Object Commands classes
|
||
|
//
|
||
|
// Author: tperraut
|
||
|
//
|
||
|
// Revision 02/24/2000 created
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
#include "stdafx.h"
|
||
|
#include "Objects.h"
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// class CObjectsCommandGet
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
CObjects::CObjectsCommandGet::CObjectsCommandGet(CSession& CurrentSession)
|
||
|
{
|
||
|
Init(CurrentSession);
|
||
|
}
|
||
|
|
||
|
|
||
|
/////////////
|
||
|
// GetObject
|
||
|
/////////////
|
||
|
HRESULT CObjects::CObjectsCommandGet::GetObject(
|
||
|
_bstr_t& Name,
|
||
|
LONG& Identity,
|
||
|
LONG Parent
|
||
|
)
|
||
|
{
|
||
|
m_ParentParam = Parent;
|
||
|
HRESULT hr = BaseExecute();
|
||
|
if ( SUCCEEDED(hr) )
|
||
|
{
|
||
|
Identity = m_Identity;
|
||
|
Name = m_Name;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
/////////////////////////
|
||
|
// GetObject overloaded
|
||
|
/////////////////////////
|
||
|
HRESULT CObjects::CObjectsCommandGet::GetObject(
|
||
|
_bstr_t& Name,
|
||
|
LONG& Identity,
|
||
|
LONG Parent,
|
||
|
LONG Index
|
||
|
)
|
||
|
{
|
||
|
m_ParentParam = Parent;
|
||
|
|
||
|
HRESULT hr = BaseExecute(Index);
|
||
|
if ( SUCCEEDED(hr) )
|
||
|
{
|
||
|
Identity = m_Identity;
|
||
|
Name = m_Name;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// class CObjectsCommandPath
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
CObjects::CObjectsCommandPath::CObjectsCommandPath(CSession& CurrentSession)
|
||
|
{
|
||
|
Init(CurrentSession);
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////
|
||
|
// WalkPath
|
||
|
////////////
|
||
|
void CObjects::CObjectsCommandPath::WalkPath(
|
||
|
LPCWSTR Path,
|
||
|
LONG& Identity,
|
||
|
LONG Parent // = 1 in header
|
||
|
)
|
||
|
{
|
||
|
_ASSERTE(Path);
|
||
|
if ( !Path )
|
||
|
{
|
||
|
_com_issue_error(E_INVALIDARG);
|
||
|
}
|
||
|
|
||
|
LONG CurrentParent = Parent;
|
||
|
|
||
|
const WCHAR *p = Path;
|
||
|
while ( *p ) // ok to dereference
|
||
|
{
|
||
|
m_ParentParam = CurrentParent;
|
||
|
lstrcpynW(m_NameParam, p, NAME_SIZE);
|
||
|
|
||
|
_com_util::CheckError(BaseExecute());
|
||
|
CurrentParent = m_Identity;
|
||
|
p += lstrlenW(p);
|
||
|
// go past the \0
|
||
|
++p;
|
||
|
}
|
||
|
Identity = CurrentParent;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// class CObjectsCommandIdentity
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
CObjects::CObjectsCommandIdentity::CObjectsCommandIdentity(
|
||
|
CSession& CurrentSession
|
||
|
)
|
||
|
{
|
||
|
Init(CurrentSession);
|
||
|
}
|
||
|
|
||
|
/////////////////////
|
||
|
// GetObjectIdentity
|
||
|
/////////////////////
|
||
|
HRESULT CObjects::CObjectsCommandIdentity::GetObjectIdentity(
|
||
|
_bstr_t& Name,
|
||
|
LONG& Parent,
|
||
|
LONG Identity
|
||
|
)
|
||
|
{
|
||
|
m_IdentityParam = Identity;
|
||
|
|
||
|
HRESULT hr = BaseExecute();
|
||
|
if ( SUCCEEDED(hr) )
|
||
|
{
|
||
|
Name = m_Name;
|
||
|
Parent = m_Parent;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// class CObjectsCommandNameParent
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
CObjects::CObjectsCommandNameParent::CObjectsCommandNameParent(
|
||
|
CSession& CurrentSession
|
||
|
)
|
||
|
{
|
||
|
Init(CurrentSession);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////
|
||
|
// GetObjectNameParent
|
||
|
//
|
||
|
// works on CObjectsAccSelectNameParent
|
||
|
////////////////////////////////////////
|
||
|
HRESULT CObjects::CObjectsCommandNameParent::GetObjectNameParent(
|
||
|
const _bstr_t& Name,
|
||
|
LONG Parent,
|
||
|
LONG& Identity
|
||
|
)
|
||
|
{
|
||
|
lstrcpynW(m_NameParam, Name, NAME_SIZE);
|
||
|
m_ParentParam = Parent;
|
||
|
|
||
|
HRESULT hr = BaseExecute();
|
||
|
if ( SUCCEEDED(hr) )
|
||
|
{
|
||
|
Identity = m_Identity;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// class CObjectsCommandDelete
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
CObjects::CObjectsCommandDelete::CObjectsCommandDelete(
|
||
|
CSession& CurrentSession
|
||
|
)
|
||
|
{
|
||
|
Init(CurrentSession);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////
|
||
|
// DeleteObject
|
||
|
//
|
||
|
// works on CObjectsAccDelete
|
||
|
//////////////////////////////
|
||
|
HRESULT CObjects::CObjectsCommandDelete::DeleteObject(LONG Identity)
|
||
|
{
|
||
|
// Set properties for open
|
||
|
CDBPropSet propset(DBPROPSET_ROWSET);
|
||
|
propset.AddProperty(DBPROP_IRowsetChange, true);
|
||
|
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE |
|
||
|
DBPROPVAL_UP_DELETE);
|
||
|
|
||
|
m_IdentityParam = Identity;
|
||
|
HRESULT hr = Open(&propset);
|
||
|
Close();
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// class CObjectsCommandInsert
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
CObjects::CObjectsCommandInsert::CObjectsCommandInsert(
|
||
|
CSession& CurrentSession
|
||
|
)
|
||
|
:m_Session(CurrentSession)
|
||
|
{
|
||
|
Init(CurrentSession);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////
|
||
|
// InsertObject
|
||
|
//
|
||
|
// works on CObjectsAccInsert
|
||
|
//////////////////////////////
|
||
|
BOOL CObjects::CObjectsCommandInsert::InsertObject(
|
||
|
const _bstr_t& Name,
|
||
|
LONG Parent,
|
||
|
LONG& Identity
|
||
|
)
|
||
|
{
|
||
|
ClearRecord();
|
||
|
|
||
|
CDBPropSet propset(DBPROPSET_ROWSET);
|
||
|
propset.AddProperty(DBPROP_IRowsetChange, true);
|
||
|
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE |
|
||
|
DBPROPVAL_UP_INSERT );
|
||
|
|
||
|
lstrcpynW(m_NameParam, Name, NAME_SIZE);
|
||
|
m_ParentParam = Parent;
|
||
|
|
||
|
HRESULT hr = Open(&propset);
|
||
|
if ( hr == S_OK )
|
||
|
{
|
||
|
CObjectsCommandNameParent NameParent(m_Session);
|
||
|
_com_util::CheckError(NameParent.GetObjectNameParent(
|
||
|
Name,
|
||
|
Parent,
|
||
|
Identity
|
||
|
));
|
||
|
Close();
|
||
|
return TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// ignore the real error.
|
||
|
// the assumption here is that if I can't insert, that's because
|
||
|
// the object already exists
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
|