windows-nt/Source/XPSP1/NT/net/ias/iasjet/setup/objectscommand.cpp
2020-09-26 16:20:57 +08:00

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;
}
}