You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2109 lines
62 KiB
2109 lines
62 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 2000 - 2001.
|
|
//
|
|
// File: NewObjectDlg.cpp
|
|
//
|
|
// Contents: Dialog Boxes for creating new objects
|
|
//
|
|
// History: 08-16-2001 Hiteshr Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
#include "headers.h"
|
|
|
|
/******************************************************************************
|
|
Class: CSortListCtrl
|
|
Purpose:Subclases ListCtrl class and handles initialization and sorting
|
|
******************************************************************************/
|
|
BEGIN_MESSAGE_MAP(CSortListCtrl, CListCtrl)
|
|
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnListCtrlColumnClicked)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
void
|
|
CSortListCtrl::
|
|
Initialize()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CSortListCtrl,Initialize)
|
|
|
|
//
|
|
//Add Imagelist
|
|
//
|
|
ListView_SetImageList(GetSafeHwnd(),
|
|
LoadImageList(::AfxGetInstanceHandle (),
|
|
MAKEINTRESOURCE(IDB_ICONS)),
|
|
LVSIL_SMALL);
|
|
|
|
|
|
//Add ListBox Extended Style
|
|
if(m_bCheckBox)
|
|
{
|
|
SetExtendedStyle(LVS_EX_FULLROWSELECT|
|
|
LVS_EX_INFOTIP|
|
|
LVS_EX_CHECKBOXES);
|
|
}
|
|
else
|
|
{
|
|
SetExtendedStyle(LVS_EX_FULLROWSELECT|
|
|
LVS_EX_INFOTIP);
|
|
|
|
}
|
|
|
|
//Add List box Columns
|
|
AddColumnToListView(this,
|
|
m_pColForLv);
|
|
}
|
|
|
|
void
|
|
CSortListCtrl::
|
|
OnListCtrlColumnClicked(NMHDR* pNotifyStruct, LRESULT* /*pResult*/)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CSortListCtrl,OnListCtrlColumnClicked)
|
|
|
|
if(!pNotifyStruct)
|
|
{
|
|
ASSERT(pNotifyStruct);
|
|
return;
|
|
}
|
|
|
|
LPNM_LISTVIEW pnmlv = (LPNM_LISTVIEW)pNotifyStruct;
|
|
if (m_iLastColumnClick == pnmlv->iSubItem)
|
|
m_iSortDirection = -m_iSortDirection;
|
|
else
|
|
m_iSortDirection = 1;
|
|
|
|
m_iLastColumnClick = pnmlv->iSubItem;
|
|
|
|
|
|
::SortListControl(this,
|
|
m_iLastColumnClick,
|
|
m_iSortDirection,
|
|
m_uiFlags,
|
|
m_bActionItem);
|
|
|
|
EnsureListViewSelectionIsVisible(this);
|
|
}
|
|
|
|
void
|
|
CSortListCtrl::
|
|
Sort()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CSortListCtrl,Sort)
|
|
|
|
::SortListControl(this,
|
|
m_iLastColumnClick,
|
|
m_iSortDirection,
|
|
m_uiFlags,
|
|
m_bActionItem);
|
|
EnsureListViewSelectionIsVisible(this);
|
|
}
|
|
|
|
/******************************************************************************
|
|
Class: CHelpEnabledDialog
|
|
Purpose:Dialog box class with support for displaying help
|
|
******************************************************************************/
|
|
BEGIN_MESSAGE_MAP(CHelpEnabledDialog, CDialog)
|
|
ON_WM_CONTEXTMENU()
|
|
ON_MESSAGE(WM_HELP, OnHelp)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL
|
|
CHelpEnabledDialog::
|
|
OnHelp(WPARAM /*wParam*/, LPARAM lParam)
|
|
{
|
|
DWORD_PTR pHelpMap = NULL;
|
|
if(FindDialogContextTopic(m_nDialogId, &pHelpMap))
|
|
{
|
|
ASSERT(pHelpMap);
|
|
::WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle,
|
|
g_szContextHelpFileName,
|
|
HELP_WM_HELP,
|
|
pHelpMap);
|
|
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void
|
|
CHelpEnabledDialog::
|
|
OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/)
|
|
{
|
|
DWORD_PTR pHelpMap = NULL;
|
|
if(FindDialogContextTopic(m_nDialogId, &pHelpMap))
|
|
{
|
|
::WinHelp(m_hWnd,
|
|
g_szContextHelpFileName,
|
|
HELP_CONTEXTMENU,
|
|
(DWORD_PTR)pHelpMap);
|
|
}
|
|
}
|
|
|
|
INT_PTR
|
|
CHelpEnabledDialog::
|
|
DoModal()
|
|
{
|
|
CThemeContextActivator activator;
|
|
return CDialog::DoModal();
|
|
}
|
|
|
|
|
|
/******************************************************************************
|
|
Class: CNewBaseDlg
|
|
Purpose: Base Dialog Class For creation of new objects
|
|
******************************************************************************/
|
|
|
|
BEGIN_MESSAGE_MAP(CNewBaseDlg, CHelpEnabledDialog)
|
|
//{{AFX_MSG_MAP(CNewBaseDlg)
|
|
ON_EN_CHANGE(IDC_EDIT_NAME, OnEditChangeName)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Function:Constructor
|
|
//-----------------------------------------------------------------------------
|
|
CNewBaseDlg
|
|
::CNewBaseDlg(IN CComponentDataObject* pComponentData,
|
|
IN CBaseContainerNode * pBaseContainerNode,
|
|
IN ATTR_MAP* pAttrMap,
|
|
IN ULONG IDD_DIALOG,
|
|
IN OBJECT_TYPE_AZ eObjectType)
|
|
:CHelpEnabledDialog(IDD_DIALOG),
|
|
m_pComponentData(pComponentData),
|
|
m_pBaseContainerNode(pBaseContainerNode),
|
|
m_eObjectType(eObjectType),
|
|
m_pAttrMap(pAttrMap)
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN,CNewBaseDlg);
|
|
ASSERT(m_pComponentData);
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Function:Destructor
|
|
//-----------------------------------------------------------------------------
|
|
CNewBaseDlg
|
|
::~CNewBaseDlg()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN,CNewBaseDlg)
|
|
}
|
|
|
|
BOOL
|
|
CNewBaseDlg
|
|
::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
//
|
|
//Ok is Enabled only when there is text in Name edit box
|
|
//
|
|
CButton* pButtonOK = (CButton*)GetDlgItem(IDOK);
|
|
pButtonOK->EnableWindow(FALSE);
|
|
//When OK is disabled CANCEL is default button
|
|
SetDefID(IDCANCEL);
|
|
|
|
if(m_pAttrMap)
|
|
{
|
|
return InitDlgFromAttrMap(this,
|
|
m_pAttrMap,
|
|
NULL,
|
|
FALSE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void
|
|
CNewBaseDlg
|
|
::OnEditChangeName()
|
|
{
|
|
CButton* pBtnOK = (CButton*)GetDlgItem(IDOK);
|
|
CButton* pBtnCancel = (CButton*)GetDlgItem(IDCANCEL);
|
|
|
|
CString strName = GetNameText();
|
|
|
|
if(!strName.IsEmpty())
|
|
{
|
|
pBtnOK->EnableWindow(TRUE);
|
|
SetDefID(IDOK);
|
|
}
|
|
else
|
|
{
|
|
//When OK is disabled CANCEL is default button
|
|
pBtnOK->EnableWindow(FALSE);
|
|
SetDefID(IDCANCEL);
|
|
}
|
|
}
|
|
|
|
CString
|
|
CNewBaseDlg::GetNameText()
|
|
{
|
|
CEdit* pEditStoreName = (CEdit*)GetDlgItem(IDC_EDIT_NAME);
|
|
ASSERT(pEditStoreName);
|
|
CString strEditStoreName;
|
|
pEditStoreName->GetWindowText(strEditStoreName);
|
|
TrimWhiteSpace(strEditStoreName);
|
|
|
|
return strEditStoreName;
|
|
}
|
|
|
|
void
|
|
CNewBaseDlg::
|
|
SetNameText(const CString& strName)
|
|
{
|
|
CEdit* pEditStoreName = (CEdit*)GetDlgItem(IDC_EDIT_NAME);
|
|
ASSERT(pEditStoreName);
|
|
pEditStoreName->SetWindowText(strName);
|
|
}
|
|
|
|
void
|
|
CNewBaseDlg::OnOK()
|
|
{
|
|
CBaseAz* pNewObjectAz = NULL;
|
|
HRESULT hr = S_OK;
|
|
|
|
BOOL bErrorDisplayed= FALSE;
|
|
|
|
do
|
|
{
|
|
//Create New Object
|
|
CString strName = GetNameText();
|
|
ASSERT(!strName.IsEmpty());
|
|
CContainerAz* pContainerAz = GetContainerAzObject();
|
|
if(!pContainerAz)
|
|
{
|
|
ASSERT(pContainerAz);
|
|
return;
|
|
}
|
|
|
|
//Create Object
|
|
hr = pContainerAz->CreateAzObject(m_eObjectType,
|
|
strName,
|
|
&pNewObjectAz);
|
|
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
//Save the properties defined by attribute map
|
|
if(m_pAttrMap)
|
|
{
|
|
hr = SaveAttrMapChanges(this,
|
|
m_pAttrMap,
|
|
pNewObjectAz,
|
|
TRUE,
|
|
&bErrorDisplayed,
|
|
NULL);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
}
|
|
|
|
|
|
//Set ObjectType Specific Properties
|
|
hr = SetObjectTypeSpecificProperties(pNewObjectAz, bErrorDisplayed);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
//Do the submit on the object
|
|
hr = pNewObjectAz->Submit();
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
//Create correponding container/leaf node for the AzObject
|
|
//and add it to the snapin
|
|
VERIFY(SUCCEEDED(CreateObjectNodeAndAddToUI(pNewObjectAz)));
|
|
|
|
|
|
}while(0);
|
|
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
CDialog::OnOK();
|
|
}
|
|
else
|
|
{
|
|
if(!bErrorDisplayed)
|
|
DisplayError(hr);
|
|
|
|
if(pNewObjectAz)
|
|
delete pNewObjectAz;
|
|
}
|
|
}
|
|
|
|
HRESULT
|
|
CNewBaseDlg::
|
|
CreateObjectNodeAndAddToUI(CBaseAz* pBaseAz)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CNewBaseDlg,CreateObjectNodeAndAddToUI)
|
|
|
|
CTreeNode * pNewNode = NULL;
|
|
if(!GetBaseContainerNode())
|
|
{
|
|
ASSERT(GetBaseContainerNode());
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
switch(m_eObjectType)
|
|
{
|
|
case APPLICATION_AZ:
|
|
{
|
|
CApplicationAz* pApplicationAz = dynamic_cast<CApplicationAz*>(pBaseAz);
|
|
if(!pApplicationAz)
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_UNEXPECTED;
|
|
}
|
|
pNewNode = new CApplicationNode(GetBaseContainerNode()->GetComponentDataObject(),
|
|
GetBaseContainerNode()->GetAdminManagerNode(),
|
|
pApplicationAz);
|
|
break;
|
|
}
|
|
|
|
case SCOPE_AZ:
|
|
{
|
|
CScopeAz* pScopeAz = dynamic_cast<CScopeAz*>(pBaseAz);
|
|
if(!pScopeAz)
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_UNEXPECTED;
|
|
}
|
|
pNewNode = new CScopeNode(GetBaseContainerNode()->GetComponentDataObject(),
|
|
GetBaseContainerNode()->GetAdminManagerNode(),
|
|
pScopeAz);
|
|
break;
|
|
}
|
|
case GROUP_AZ:
|
|
{
|
|
CGroupAz* pGroupAz = dynamic_cast<CGroupAz*>(pBaseAz);
|
|
if(!pGroupAz)
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_UNEXPECTED;
|
|
}
|
|
pNewNode = new CGroupNode(GetBaseContainerNode()->GetComponentDataObject(),
|
|
GetBaseContainerNode()->GetAdminManagerNode(),
|
|
pGroupAz);
|
|
break;
|
|
}
|
|
case TASK_AZ:
|
|
{
|
|
CTaskAz* pTaskAz = dynamic_cast<CTaskAz*>(pBaseAz);
|
|
if(!pTaskAz)
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_UNEXPECTED;
|
|
}
|
|
pNewNode = new CTaskNode(GetBaseContainerNode()->GetComponentDataObject(),
|
|
GetBaseContainerNode()->GetAdminManagerNode(),
|
|
pTaskAz);
|
|
break;
|
|
}
|
|
case ROLE_AZ:
|
|
{
|
|
CRoleAz* pRoleAz = dynamic_cast<CRoleAz*>(pBaseAz);
|
|
if(!pRoleAz)
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_UNEXPECTED;
|
|
}
|
|
pNewNode = new CRoleNode(GetBaseContainerNode()->GetComponentDataObject(),
|
|
GetBaseContainerNode()->GetAdminManagerNode(),
|
|
pRoleAz);
|
|
break;
|
|
}
|
|
case OPERATION_AZ:
|
|
{
|
|
COperationAz* pOperationAz = dynamic_cast<COperationAz*>(pBaseAz);
|
|
if(!pOperationAz)
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_UNEXPECTED;
|
|
}
|
|
pNewNode = new COperationNode(GetBaseContainerNode()->GetComponentDataObject(),
|
|
GetBaseContainerNode()->GetAdminManagerNode(),
|
|
pOperationAz);
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
ASSERT(FALSE);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
if(!pNewNode)
|
|
{
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
|
|
VERIFY(GetBaseContainerNode()->AddChildToListAndUI(pNewNode,GetComponentData()));
|
|
|
|
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
VOID
|
|
CNewBaseDlg::
|
|
DisplayError(HRESULT hr)
|
|
{
|
|
ErrorMap * pErrorMap = GetErrorMap(m_eObjectType);
|
|
if(!pErrorMap)
|
|
{
|
|
ASSERT(FALSE);
|
|
return;
|
|
}
|
|
|
|
if(hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS))
|
|
{
|
|
::DisplayError(m_hWnd,pErrorMap->idNameAlreadyExist,GetNameText());
|
|
return;
|
|
}
|
|
if(hr == HRESULT_FROM_WIN32(ERROR_INVALID_NAME))
|
|
{
|
|
::DisplayError(m_hWnd,pErrorMap->idInvalidName,pErrorMap->pszInvalidChars);
|
|
return;
|
|
}
|
|
|
|
//
|
|
//Display Generic Error.
|
|
//
|
|
CString strObjectType;
|
|
VERIFY(strObjectType.LoadString(pErrorMap->idObjectType));
|
|
strObjectType.MakeLower();
|
|
CString strError;
|
|
GetSystemError(strError, hr);
|
|
|
|
if(!strError.IsEmpty())
|
|
{
|
|
::DisplayError(m_hWnd,
|
|
IDS_CREATE_NEW_GENERIC_ERROR,
|
|
(LPCTSTR)strError,
|
|
(LPCTSTR)strObjectType);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
Class: CNewApplicationDlg
|
|
Purpose: Dlg Class for creating new application
|
|
******************************************************************************/
|
|
|
|
BEGIN_MESSAGE_MAP(CNewApplicationDlg, CNewBaseDlg)
|
|
//{{AFX_MSG_MAP(CNewApplicationDlg)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CNewApplicationDlg)
|
|
|
|
CNewApplicationDlg
|
|
::CNewApplicationDlg(IN CComponentDataObject* pComponentData,
|
|
IN CBaseContainerNode* pBaseContainerNode)
|
|
:CNewBaseDlg(pComponentData,
|
|
pBaseContainerNode,
|
|
ATTR_MAP_NEW_APPLICATION,
|
|
IDD_NEW_APPLICATION,
|
|
APPLICATION_AZ)
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN,CNewApplicationDlg);
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CNewApplicationDlg)
|
|
}
|
|
|
|
CNewApplicationDlg
|
|
::~CNewApplicationDlg()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN,CNewApplicationDlg)
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CNewApplicationDlg)
|
|
}
|
|
|
|
|
|
/******************************************************************************
|
|
Class: CNewScopeDlg
|
|
Purpose: Dlg Class for creating new scope
|
|
******************************************************************************/
|
|
BEGIN_MESSAGE_MAP(CNewScopeDlg, CNewBaseDlg)
|
|
//{{AFX_MSG_MAP(CNewScopeDlg)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CNewScopeDlg)
|
|
|
|
CNewScopeDlg
|
|
::CNewScopeDlg(IN CComponentDataObject* pComponentData,
|
|
IN CBaseContainerNode* pBaseContainerNode)
|
|
:CNewBaseDlg(pComponentData,
|
|
pBaseContainerNode,
|
|
ATTR_MAP_NEW_SCOPE,
|
|
IDD_NEW_SCOPE,
|
|
SCOPE_AZ)
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN,CNewScopeDlg);
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CNewScopeDlg)
|
|
}
|
|
|
|
CNewScopeDlg
|
|
::~CNewScopeDlg()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN,CNewScopeDlg)
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CNewScopeDlg)
|
|
}
|
|
|
|
/******************************************************************************
|
|
Class: CNewGroupDlg
|
|
Purpose: Dlg Class for creating new group
|
|
******************************************************************************/
|
|
BEGIN_MESSAGE_MAP(CNewGroupDlg, CNewBaseDlg)
|
|
//{{AFX_MSG_MAP(CNewGroupDlg)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CNewGroupDlg)
|
|
|
|
CNewGroupDlg
|
|
::CNewGroupDlg(IN CComponentDataObject* pComponentData,
|
|
IN CBaseContainerNode* pBaseContainerNode)
|
|
:CNewBaseDlg(pComponentData,
|
|
pBaseContainerNode,
|
|
ATTR_MAP_NEW_GROUP,
|
|
IDD_NEW_GROUP,
|
|
GROUP_AZ)
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN,CNewGroupDlg);
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CNewGroupDlg)
|
|
}
|
|
|
|
CNewGroupDlg
|
|
::~CNewGroupDlg()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN,CNewGroupDlg)
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CNewGroupDlg)
|
|
}
|
|
|
|
BOOL
|
|
CNewGroupDlg
|
|
::OnInitDialog()
|
|
{
|
|
//Do the base class initialization
|
|
CNewBaseDlg::OnInitDialog();
|
|
|
|
//Basic is the default group type
|
|
CButton* pRadio = (CButton*)GetDlgItem(IDC_RADIO_GROUP_TYPE_BASIC);
|
|
pRadio->SetCheck(TRUE);
|
|
|
|
return TRUE;
|
|
}
|
|
//+----------------------------------------------------------------------------
|
|
// Function:SetObjectTypeSpecificProperties
|
|
// Synopsis:Sets some propertis which are specicic to the object
|
|
// Arguments:pBaseAz: Pointer to baseAz object whose properties are
|
|
// to be set
|
|
// Returns:
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT
|
|
CNewGroupDlg
|
|
::SetObjectTypeSpecificProperties(CBaseAz* pBaseAz, BOOL&)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CNewGroupDlg,SetObjectTypeSpecificProperties);
|
|
if(!pBaseAz)
|
|
{
|
|
ASSERT(pBaseAz);
|
|
return E_POINTER;
|
|
}
|
|
|
|
CGroupAz* pGroupAz= dynamic_cast<CGroupAz*>(pBaseAz);
|
|
if(!pGroupAz)
|
|
{
|
|
ASSERT(pGroupAz);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
HRESULT hr = S_OK;
|
|
|
|
//Set Group Type
|
|
if(((CButton*)GetDlgItem(IDC_RADIO_GROUP_TYPE_BASIC))->GetCheck())
|
|
hr = pGroupAz->SetGroupType(AZ_GROUPTYPE_BASIC);
|
|
else
|
|
hr = pGroupAz->SetGroupType(AZ_GROUPTYPE_LDAP_QUERY);
|
|
|
|
CHECK_HRESULT(hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
/******************************************************************************
|
|
Class: CNewTaskDlg
|
|
Purpose: Dlg Class for creating new Task/Role Definition
|
|
******************************************************************************/
|
|
BEGIN_MESSAGE_MAP(CNewTaskDlg, CNewBaseDlg)
|
|
//{{AFX_MSG_MAP(CNewTaskDlg)
|
|
ON_BN_CLICKED(IDC_ADD_TASK, OnButtonAdd)
|
|
ON_BN_CLICKED(IDC_REMOVE, OnButtonRemove)
|
|
ON_BN_CLICKED(IDC_EDIT_SCRIPT,OnButtonEditScript)
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_TASK_OPERATION, OnListCtrlItemChanged)
|
|
ON_NOTIFY(LVN_DELETEITEM, IDC_LIST_TASK_OPERATION, OnListCtrlItemDeleted)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CNewTaskDlg)
|
|
|
|
CNewTaskDlg::
|
|
CNewTaskDlg(IN CComponentDataObject* pComponentData,
|
|
IN CBaseContainerNode* pBaseContainerNode,
|
|
IN ULONG IDD_DIALOG,
|
|
IN BOOL bRoleDefinition)
|
|
:CNewBaseDlg(pComponentData,
|
|
pBaseContainerNode,
|
|
ATTR_MAP_NEW_TASK,
|
|
IDD_DIALOG,
|
|
TASK_AZ),
|
|
m_listCtrl(COL_NAME | COL_TYPE | COL_DESCRIPTION,FALSE,Col_For_Task_Role),
|
|
m_bRoleDefinition(bRoleDefinition)
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN,CNewTaskDlg);
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CNewTaskDlg)
|
|
}
|
|
|
|
CNewTaskDlg
|
|
::~CNewTaskDlg()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN,CNewTaskDlg)
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CNewTaskDlg)
|
|
}
|
|
|
|
|
|
VOID
|
|
CNewTaskDlg::
|
|
DisplayError(HRESULT hr)
|
|
{
|
|
ErrorMap * pErrorMap = GetErrorMap(TASK_AZ);
|
|
if(!pErrorMap)
|
|
{
|
|
ASSERT(FALSE);
|
|
return;
|
|
}
|
|
|
|
if(hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS))
|
|
{
|
|
::DisplayError(m_hWnd,
|
|
pErrorMap->idNameAlreadyExist,
|
|
GetNameText());
|
|
return;
|
|
}
|
|
if(hr == HRESULT_FROM_WIN32(ERROR_INVALID_NAME))
|
|
{
|
|
if(m_bRoleDefinition)
|
|
{
|
|
::DisplayError(m_hWnd,
|
|
IDS_ROLE_DEFINITION_NAME_INVALID,
|
|
pErrorMap->pszInvalidChars);
|
|
}
|
|
else
|
|
{
|
|
::DisplayError(m_hWnd,
|
|
pErrorMap->idInvalidName,
|
|
pErrorMap->pszInvalidChars);
|
|
}
|
|
return;
|
|
}
|
|
|
|
//
|
|
//Display Generic Error.
|
|
//
|
|
CString strObjectType;
|
|
VERIFY(strObjectType.LoadString(pErrorMap->idObjectType));
|
|
strObjectType.MakeLower();
|
|
|
|
CString strError;
|
|
GetSystemError(strError, hr);
|
|
|
|
if(!strError.IsEmpty())
|
|
{
|
|
::DisplayError(m_hWnd,
|
|
IDS_CREATE_NEW_GENERIC_ERROR,
|
|
(LPCTSTR)strError,
|
|
(LPCTSTR)strObjectType);
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
BOOL
|
|
CNewTaskDlg
|
|
::OnInitDialog()
|
|
{
|
|
CNewBaseDlg::OnInitDialog();
|
|
|
|
VERIFY(m_listCtrl.SubclassDlgItem(IDC_LIST_TASK_OPERATION,this));
|
|
m_listCtrl.Initialize();
|
|
|
|
//Remove button should be disabled in the begining
|
|
CButton* pBtnRemove = (CButton*)GetDlgItem(IDC_REMOVE);
|
|
pBtnRemove->EnableWindow(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
HRESULT
|
|
CNewTaskDlg
|
|
::SetObjectTypeSpecificProperties(CBaseAz* pBaseAz, BOOL& refbErrorDisplayed)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CNewTaskDlg,SetObjectTypeSpecificProperties);
|
|
if(!pBaseAz)
|
|
{
|
|
ASSERT(pBaseAz);
|
|
return E_POINTER;
|
|
}
|
|
|
|
CTaskAz* pTaskAz= dynamic_cast<CTaskAz*>(pBaseAz);
|
|
if(!pTaskAz)
|
|
{
|
|
ASSERT(pTaskAz);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
HRESULT hr = S_OK;
|
|
|
|
//Set the Role Definition Bit
|
|
if(m_bRoleDefinition)
|
|
{
|
|
hr = pTaskAz->MakeRoleDefinition();
|
|
if(FAILED(hr))
|
|
return hr;
|
|
}
|
|
|
|
//Set Task and Operation Members
|
|
int iCount = m_listCtrl.GetItemCount();
|
|
for( int i = 0; i < iCount; ++i)
|
|
{
|
|
CBaseAz* pTaskOperatioAz = (CBaseAz*)m_listCtrl.GetItemData(i);
|
|
if(pTaskOperatioAz)
|
|
{
|
|
if(pTaskOperatioAz->GetObjectType() == OPERATION_AZ)
|
|
{
|
|
hr = pTaskAz->AddMember(AZ_PROP_TASK_OPERATIONS,
|
|
pTaskOperatioAz);
|
|
}
|
|
else if(pBaseAz->GetObjectType() == TASK_AZ)
|
|
{
|
|
hr = pTaskAz->AddMember(AZ_PROP_TASK_TASKS,
|
|
pTaskOperatioAz);
|
|
}
|
|
if(FAILED(hr))
|
|
return hr;
|
|
}
|
|
}
|
|
|
|
//Set the Authorization Script Data
|
|
hr = SaveAuthorizationScriptData(m_hWnd,
|
|
*pTaskAz,
|
|
m_strFilePath,
|
|
m_strScriptLanguage,
|
|
m_strScript,
|
|
refbErrorDisplayed);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
void
|
|
CNewTaskDlg::OnButtonAdd()
|
|
{
|
|
//
|
|
//Operations are contained only by Application object. If Current object
|
|
//is a scope, get its parent.
|
|
|
|
|
|
//Show AddOperation Dialog box and get list of Selected Operation
|
|
CList<CBaseAz*,CBaseAz*> listObjectsSelected;
|
|
if(!GetSelectedDefinitions(m_bRoleDefinition,
|
|
GetContainerAzObject(),
|
|
listObjectsSelected))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!listObjectsSelected.IsEmpty())
|
|
{
|
|
//Add Selected Operation to list control
|
|
AddBaseAzFromListToListCtrl(listObjectsSelected,
|
|
&m_listCtrl,
|
|
COL_NAME | COL_TYPE | COL_DESCRIPTION,
|
|
TRUE);
|
|
|
|
m_listCtrl.Sort();
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
CNewTaskDlg::OnButtonRemove()
|
|
{
|
|
DeleteSelectedRows(&m_listCtrl);
|
|
}
|
|
|
|
void
|
|
CNewTaskDlg::OnButtonEditScript()
|
|
{
|
|
if(IsBizRuleWritable(m_hWnd,*GetContainerAzObject()))
|
|
{
|
|
GetScriptData(FALSE,
|
|
*GetBaseContainerNode()->GetAdminManagerNode(),
|
|
m_strFilePath,
|
|
m_strScriptLanguage,
|
|
m_strScript);
|
|
}
|
|
}
|
|
|
|
void
|
|
CNewTaskDlg
|
|
::OnListCtrlItemChanged(NMHDR* /*pNotifyStruct*/, LRESULT* pResult)
|
|
{
|
|
if(!pResult)
|
|
return;
|
|
*pResult = 0;
|
|
SetRemoveButton();
|
|
}
|
|
|
|
void
|
|
CNewTaskDlg
|
|
::OnListCtrlItemDeleted(NMHDR* pNotifyStruct, LRESULT* /*pResult*/)
|
|
{
|
|
LPNM_LISTVIEW pnmlv = (LPNM_LISTVIEW)pNotifyStruct;
|
|
if(pnmlv->lParam)
|
|
{
|
|
delete (CBaseAz*)pnmlv->lParam;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void
|
|
CNewTaskDlg
|
|
::SetRemoveButton()
|
|
{
|
|
EnableButtonIfSelectedInListCtrl(&m_listCtrl,
|
|
GetRemoveButton());
|
|
}
|
|
|
|
/******************************************************************************
|
|
Class: CNewOperationDlg
|
|
Purpose: Dlg Class for creating new Operation
|
|
******************************************************************************/
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CNewOperationDlg)
|
|
BEGIN_MESSAGE_MAP(CNewOperationDlg, CNewBaseDlg)
|
|
//{{AFX_MSG_MAP(CNewTaskDlg)
|
|
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
CNewOperationDlg
|
|
::CNewOperationDlg(IN CComponentDataObject* pComponentData,
|
|
IN CBaseContainerNode* pBaseContainerNode)
|
|
:CNewBaseDlg(pComponentData,
|
|
pBaseContainerNode,
|
|
ATTR_MAP_NEW_OPERATION,
|
|
IDD_NEW_OPERATION,
|
|
OPERATION_AZ)
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN,CNewOperationDlg);
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CNewOperationDlg)
|
|
}
|
|
|
|
CNewOperationDlg
|
|
::~CNewOperationDlg()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN,CNewOperationDlg)
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CNewOperationDlg)
|
|
}
|
|
|
|
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Function: OpenCreateAdminManager
|
|
// Synopsis: Open an existing an existing Authorization Store or
|
|
// creates a new Authorization Store and adds corresponding
|
|
// AdminManager object to snapin
|
|
// Arguments:IN hWnd: Handle of window for dialog box
|
|
// IN bNew :If True create a new Authz store else open existing
|
|
// one
|
|
// IN bOpenFromSavedConsole: This is valid when bNew is False.
|
|
// True if open is in resopnse to a console file.
|
|
// IN lStoreType: XML or AD
|
|
// IN strName: Name of store
|
|
// IN strDesc: Description. Only valid in case of new
|
|
// IN strScriptDir : Script directory
|
|
// IN pRootData: Snapin Rootdata
|
|
// IN pComponentData: ComponentData
|
|
// Returns:
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT OpenCreateAdminManager(IN BOOL bNew,
|
|
IN BOOL bOpenFromSavedConsole,
|
|
IN ULONG lStoreType,
|
|
IN const CString& strStoreName,
|
|
IN const CString& strDesc,
|
|
IN const CString& strScriptDir,
|
|
IN CRootData* pRootData,
|
|
IN CComponentDataObject* pComponentData)
|
|
|
|
{
|
|
TRACE_FUNCTION_EX(DEB_SNAPIN, OpenCreateAdminManager)
|
|
|
|
if(!IsValidStoreType(lStoreType) ||
|
|
strStoreName.IsEmpty() ||
|
|
!pRootData)
|
|
{
|
|
ASSERT(IsValidStoreType(lStoreType));
|
|
ASSERT(!strStoreName.IsEmpty());
|
|
ASSERT(pRootData);
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
|
|
HRESULT hr = S_OK;
|
|
CAdminManagerAz* pAdminManagerAz = NULL;
|
|
|
|
do
|
|
{
|
|
//Create CAzAdminManager instance
|
|
CComPtr<IAzAuthorizationStore> spAzAdminManager;
|
|
hr = spAzAdminManager.CoCreateInstance(CLSID_AzAuthorizationStore,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
|
|
pAdminManagerAz = new CAdminManagerAz(spAzAdminManager);
|
|
if(!pAdminManagerAz)
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
break;
|
|
}
|
|
|
|
|
|
if(bNew)
|
|
{
|
|
//Create Policy Store
|
|
hr = pAdminManagerAz->CreatePolicyStore(lStoreType,
|
|
strStoreName);
|
|
}else
|
|
{
|
|
//Open Policy Store
|
|
hr = pAdminManagerAz->OpenPolicyStore(lStoreType,
|
|
strStoreName);
|
|
}
|
|
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
if(bNew)
|
|
{
|
|
//Set Description
|
|
if(!strDesc.IsEmpty())
|
|
{
|
|
hr = pAdminManagerAz->SetDescription(strDesc);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
}
|
|
|
|
//All the changes are done. Submit
|
|
hr = pAdminManagerAz->Submit();
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
}
|
|
|
|
|
|
//Create AdminManager Node and add to snapin
|
|
CAdminManagerNode* pAdminManagerCont=
|
|
new CAdminManagerNode((CRoleComponentDataObject*)pComponentData,
|
|
pAdminManagerAz);
|
|
|
|
if(!pAdminManagerCont)
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
DBG_OUT_HRESULT(hr);
|
|
break;
|
|
}
|
|
|
|
//Set the Authorization Script Dir
|
|
pAdminManagerCont->SetScriptDirectory(strScriptDir);
|
|
|
|
VERIFY(pRootData->AddChildToListAndUI(pAdminManagerCont,pComponentData));
|
|
pAdminManagerCont->SetAdminManagerNode(pAdminManagerCont);
|
|
pAdminManagerCont->SetComponentDataObject((CRoleComponentDataObject*)pComponentData);
|
|
|
|
//If user in opening a new store, select that store
|
|
if(!bOpenFromSavedConsole)
|
|
{
|
|
if(pAdminManagerCont->GetScopeID())
|
|
{
|
|
pComponentData->GetConsole()->SelectScopeItem(pAdminManagerCont->GetScopeID());
|
|
}
|
|
}
|
|
|
|
}while(0);
|
|
|
|
if(FAILED(hr))
|
|
{
|
|
if(pAdminManagerAz)
|
|
delete pAdminManagerAz;
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
/******************************************************************************
|
|
Class: CNewAuthorizationStoreDlg
|
|
Purpose: Dialog Class For creation of new Autorization Store
|
|
******************************************************************************/
|
|
|
|
BEGIN_MESSAGE_MAP(CNewAuthorizationStoreDlg, CNewBaseDlg)
|
|
//{{AFX_MSG_MAP(CNewAuthorizationStoreDlg)
|
|
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
|
|
ON_BN_CLICKED(IDC_RADIO_AD_STORE,OnRadioChange)
|
|
ON_BN_CLICKED(IDC_RADIO_XML_STORE,OnRadioChange)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CNewAuthorizationStoreDlg)
|
|
|
|
CNewAuthorizationStoreDlg
|
|
::CNewAuthorizationStoreDlg(IN CComponentDataObject* pComponentData)
|
|
:CNewBaseDlg(pComponentData,
|
|
NULL,
|
|
ATTR_MAP_NEW_ADMIN_MANAGER,
|
|
IDD_NEW_AUTHORIZATION_STORE,
|
|
ADMIN_MANAGER_AZ),
|
|
m_bADAvailable(FALSE)
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN,CNewAuthorizationStoreDlg);
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CNewAuthorizationStoreDlg)
|
|
}
|
|
|
|
CNewAuthorizationStoreDlg
|
|
::~CNewAuthorizationStoreDlg()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN,CNewAuthorizationStoreDlg)
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CNewAuthorizationStoreDlg)
|
|
}
|
|
|
|
BOOL
|
|
CNewAuthorizationStoreDlg
|
|
::OnInitDialog()
|
|
{
|
|
CWaitCursor waitCursor;
|
|
//Initialize the base dialog
|
|
CNewBaseDlg::OnInitDialog();
|
|
|
|
//XML is the default store
|
|
CButton* pRadioXML = (CButton*)GetDlgItem(IDC_RADIO_XML_STORE);
|
|
pRadioXML->SetCheck(TRUE);
|
|
|
|
//Check if active directory is available as store.
|
|
m_bADAvailable = (GetRootData()->GetADState() != AD_NOT_AVAILABLE);
|
|
|
|
//Set m_lLastRadioSelection to AD Store
|
|
m_lLastRadioSelection = AZ_ADMIN_STORE_AD;
|
|
//Get the default ad store name
|
|
GetDefaultADContainerPath(GetRootData()->GetAdInfo(),FALSE,FALSE,m_strLastStoreName);
|
|
|
|
//Initialize the store to Current Working direcotry
|
|
CString strXMLStorePath = GetRootData()->GetXMLStorePath();
|
|
SetNameText(strXMLStorePath);
|
|
CEdit * pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NAME);
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(strXMLStorePath.GetLength(),strXMLStorePath.GetLength(),FALSE);
|
|
|
|
//We have changed the default focus
|
|
return FALSE;
|
|
}
|
|
|
|
ULONG
|
|
CNewAuthorizationStoreDlg::
|
|
GetStoreType()
|
|
{
|
|
if(((CButton*)GetDlgItem(IDC_RADIO_AD_STORE))->GetCheck())
|
|
return AZ_ADMIN_STORE_AD;
|
|
else
|
|
return AZ_ADMIN_STORE_XML;
|
|
}
|
|
|
|
void
|
|
CNewAuthorizationStoreDlg::
|
|
OnRadioChange()
|
|
{
|
|
LONG lCurRadioSelection = GetStoreType();
|
|
if(m_lLastRadioSelection == lCurRadioSelection)
|
|
{
|
|
CString strTemp = GetNameText();
|
|
SetNameText(m_strLastStoreName);
|
|
m_strLastStoreName = strTemp;
|
|
m_lLastRadioSelection = (lCurRadioSelection == AZ_ADMIN_STORE_XML) ? AZ_ADMIN_STORE_AD : AZ_ADMIN_STORE_XML;
|
|
//AD option is selected and AD is not available on the machine. In this case don't support
|
|
//browse functionality, however allow to enter ADAM store path by entering path directly.
|
|
if((AZ_ADMIN_STORE_AD == lCurRadioSelection) &&
|
|
!m_bADAvailable)
|
|
{
|
|
GetDlgItem(IDC_BUTTON_BROWSE)->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
GetDlgItem(IDC_BUTTON_BROWSE)->EnableWindow(TRUE);
|
|
|
|
}
|
|
}
|
|
|
|
void
|
|
CNewAuthorizationStoreDlg
|
|
::OnButtonBrowse()
|
|
{
|
|
CEdit * pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NAME);
|
|
if(GetStoreType() == AZ_ADMIN_STORE_XML)
|
|
{
|
|
CString strFileName;
|
|
if(GetFolderName(m_hWnd,
|
|
IDS_NEW_AUTHORIZATION_STORE,
|
|
GetRootData()->GetXMLStorePath(),
|
|
strFileName))
|
|
{
|
|
pEdit->SetWindowText(strFileName);
|
|
//Set the focus to the edit control and set caret to
|
|
//end of filepath so that user can continue typing file name
|
|
pEdit->SetFocus();
|
|
pEdit->SetSel(strFileName.GetLength(),strFileName.GetLength(),FALSE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CString strDsContainerName;
|
|
if(GetADContainerPath(m_hWnd,
|
|
IDS_NEW_AUTHORIZATION_STORE,
|
|
IDS_AD_CONTAINER_LOCATION,
|
|
strDsContainerName,
|
|
GetRootData()->GetAdInfo()))
|
|
{
|
|
pEdit->SetWindowText(strDsContainerName);
|
|
//Set the Focus to edit control and set caret to
|
|
//begining of editbox so that user add cn of the
|
|
//new store in the begining
|
|
pEdit->SetFocus();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void
|
|
CNewAuthorizationStoreDlg
|
|
::OnOK()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CNewAuthorizationStoreDlg,OnOK)
|
|
|
|
HRESULT hr = S_OK;
|
|
//Get Store Name
|
|
CString strStoreName = GetNameText();
|
|
|
|
//Get Store Type
|
|
ULONG lStoreType = GetStoreType();
|
|
|
|
//NTRAID#NTBUG9-706617-2002/07/17-hiteshr Our validation code cannot validate
|
|
//ADAM dn. Do not do any validation.
|
|
//Validate the store name.
|
|
//if(!ValidateStoreTypeAndName(m_hWnd,lStoreType,strStoreName))
|
|
// return;
|
|
|
|
if(lStoreType == AZ_ADMIN_STORE_XML)
|
|
{
|
|
AddExtensionToFileName(strStoreName);
|
|
ConvertToExpandedAndAbsolutePath(strStoreName);
|
|
SetNameText(strStoreName);
|
|
//creating new store. set the XML store path location
|
|
SetXMLStoreDirectory(*GetRootData(),strStoreName);
|
|
}
|
|
|
|
CString strDesc;
|
|
((CEdit*)GetDlgItem(IDC_EDIT_DESCRIPTION))->GetWindowText(strDesc);
|
|
|
|
|
|
hr = OpenCreateAdminManager(TRUE,
|
|
FALSE,
|
|
lStoreType,
|
|
strStoreName,
|
|
strDesc,
|
|
GetRootData()->GetXMLStorePath(), //Default path for VB script is same as path for XML store
|
|
GetRootData(),
|
|
GetComponentData());
|
|
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
CDialog::OnOK();
|
|
}
|
|
else
|
|
{
|
|
if(hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND))
|
|
{
|
|
::DisplayError(m_hWnd,
|
|
IDS_CREATE_NEW_PATH_NOT_FOUND);
|
|
}
|
|
else if((lStoreType == AZ_ADMIN_STORE_XML) && (hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS)))
|
|
{
|
|
::DisplayError(m_hWnd,IDS_ERROR_FILE_EXIST,(LPCTSTR)strStoreName);
|
|
}
|
|
else if(hr == HRESULT_FROM_WIN32(ERROR_INVALID_NAME))
|
|
{
|
|
::DisplayError(m_hWnd,IDS_ERROR_INVALID_NAME);
|
|
}
|
|
else if((lStoreType == AZ_ADMIN_STORE_AD) && (hr == HRESULT_FROM_WIN32(ERROR_CURRENT_DOMAIN_NOT_ALLOWED)))
|
|
{
|
|
::DisplayError(m_hWnd,IDS_ERROR_DOMAIN_NOT_ALLOWED);
|
|
}
|
|
else
|
|
{
|
|
DisplayError(hr);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/******************************************************************************
|
|
Class: COpenAuthorizationStoreDlg
|
|
Purpose: Dialog Class For Opening of existing Autorization Store
|
|
******************************************************************************/
|
|
BEGIN_MESSAGE_MAP(COpenAuthorizationStoreDlg, CNewBaseDlg)
|
|
//{{AFX_MSG_MAP(COpenAuthorizationStoreDlg)
|
|
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
|
|
ON_BN_CLICKED(IDC_RADIO_AD_STORE,OnRadioChange)
|
|
ON_BN_CLICKED(IDC_RADIO_XML_STORE,OnRadioChange)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(COpenAuthorizationStoreDlg)
|
|
|
|
COpenAuthorizationStoreDlg
|
|
::COpenAuthorizationStoreDlg(IN CComponentDataObject* pComponentData)
|
|
:CNewBaseDlg(pComponentData,
|
|
NULL,
|
|
ATTR_MAP_OPEN_ADMIN_MANAGER,
|
|
IDD_OPEN_AUTHORIZATION_STORE,
|
|
ADMIN_MANAGER_AZ),
|
|
m_bADAvailable(FALSE)
|
|
{
|
|
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN,COpenAuthorizationStoreDlg);
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(COpenAuthorizationStoreDlg)
|
|
}
|
|
|
|
COpenAuthorizationStoreDlg
|
|
::~COpenAuthorizationStoreDlg()
|
|
{
|
|
TRACE_DESTRUCTOR_EX(DEB_SNAPIN,COpenAuthorizationStoreDlg)
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(COpenAuthorizationStoreDlg)
|
|
}
|
|
|
|
ULONG
|
|
COpenAuthorizationStoreDlg
|
|
::GetStoreType()
|
|
{
|
|
if(((CButton*)GetDlgItem(IDC_RADIO_AD_STORE))->GetCheck())
|
|
return AZ_ADMIN_STORE_AD;
|
|
else
|
|
return AZ_ADMIN_STORE_XML;
|
|
}
|
|
|
|
BOOL
|
|
COpenAuthorizationStoreDlg
|
|
::OnInitDialog()
|
|
{
|
|
CWaitCursor waitCursor;
|
|
//
|
|
//XML is the default store
|
|
//
|
|
CButton* pRadioAD = (CButton*)GetDlgItem(IDC_RADIO_XML_STORE);
|
|
pRadioAD->SetCheck(TRUE);
|
|
|
|
//Check if active directory is available as store.
|
|
m_bADAvailable = (GetRootData()->GetADState() != AD_NOT_AVAILABLE);
|
|
|
|
//Set m_lLastRadioSelection to AD STore
|
|
m_lLastRadioSelection = AZ_ADMIN_STORE_AD;
|
|
|
|
return CNewBaseDlg::OnInitDialog();
|
|
}
|
|
|
|
|
|
void
|
|
COpenAuthorizationStoreDlg
|
|
::OnButtonBrowse()
|
|
{
|
|
//Get Store Type
|
|
ULONG lStoreType = GetStoreType();
|
|
|
|
if(lStoreType == AZ_ADMIN_STORE_XML)
|
|
{
|
|
CString strFileName;
|
|
|
|
if(GetFileName(m_hWnd,
|
|
TRUE,
|
|
IDS_OPEN_AUTHORIZATION_STORE,
|
|
GetRootData()->GetXMLStorePath(),
|
|
L"*.xml\0*.xml\0\0",
|
|
strFileName))
|
|
{
|
|
((CEdit*)GetDlgItem(IDC_EDIT_NAME))->SetWindowText(strFileName);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CString strDN;
|
|
BrowseAdStores(m_hWnd,
|
|
strDN,
|
|
GetRootData()->GetAdInfo());
|
|
if(!strDN.IsEmpty())
|
|
((CEdit*)GetDlgItem(IDC_EDIT_NAME))->SetWindowText(strDN);
|
|
}
|
|
}
|
|
|
|
void
|
|
COpenAuthorizationStoreDlg::
|
|
OnRadioChange()
|
|
{
|
|
LONG lCurRadioSelection = GetStoreType();
|
|
if(m_lLastRadioSelection == lCurRadioSelection)
|
|
{
|
|
CString strTemp = GetNameText();
|
|
SetNameText(m_strLastStoreName);
|
|
m_strLastStoreName = strTemp;
|
|
m_lLastRadioSelection = (lCurRadioSelection == AZ_ADMIN_STORE_XML) ? AZ_ADMIN_STORE_AD : AZ_ADMIN_STORE_XML;
|
|
|
|
//AD option is selected and AD is not available on the machine. In this case don't support
|
|
//browse functionality, however allow to enter ADAM store path by entering path directly.
|
|
if((AZ_ADMIN_STORE_AD == lCurRadioSelection) &&
|
|
!m_bADAvailable)
|
|
{
|
|
GetDlgItem(IDC_BUTTON_BROWSE)->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
GetDlgItem(IDC_BUTTON_BROWSE)->EnableWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
COpenAuthorizationStoreDlg
|
|
::OnOK()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,COpenAuthorizationStoreDlg,OnOK)
|
|
|
|
HRESULT hr = S_OK;
|
|
//Get Store Name
|
|
CString strStoreName = GetNameText();
|
|
|
|
//Get Store Type
|
|
ULONG lStoreType = GetStoreType();
|
|
|
|
//Set the default xml store directory
|
|
if(AZ_ADMIN_STORE_XML == lStoreType)
|
|
{
|
|
ConvertToExpandedAndAbsolutePath(strStoreName);
|
|
SetNameText(strStoreName);
|
|
SetXMLStoreDirectory(*GetRootData(),strStoreName);
|
|
}
|
|
|
|
hr = OpenAdminManager(m_hWnd,
|
|
FALSE,
|
|
lStoreType,
|
|
strStoreName,
|
|
GetRootData()->GetXMLStorePath(),
|
|
GetRootData(),
|
|
GetComponentData());
|
|
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
CDialog::OnOK();
|
|
}
|
|
}
|
|
|
|
/******************************************************************************
|
|
Class: CScriptDialog
|
|
Purpose: Dialog for Reading the script
|
|
******************************************************************************/
|
|
|
|
BEGIN_MESSAGE_MAP(CScriptDialog, CHelpEnabledDialog)
|
|
//{{AFX_MSG_MAP(COpenAuthorizationStoreDlg)
|
|
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnBrowse)
|
|
ON_BN_CLICKED(IDC_BUTTON_RELOAD, OnReload)
|
|
ON_BN_CLICKED(IDC_CLEAR_SCRIPT, OnClear)
|
|
ON_BN_CLICKED(IDC_RADIO_VB_SCRIPT,OnRadioChange)
|
|
ON_BN_CLICKED(IDC_RADIO_JAVA_SCRIPT,OnRadioChange)
|
|
ON_EN_CHANGE(IDC_EDIT_PATH, OnEditChangePath)
|
|
ON_WM_CTLCOLOR()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
CScriptDialog::
|
|
CScriptDialog(BOOL bReadOnly,
|
|
CAdminManagerNode& adminManagerNode,
|
|
CString& strFileName,
|
|
CString& strScriptLanguage,
|
|
CString& strScript)
|
|
:CHelpEnabledDialog(IDD_SCRIPT),
|
|
m_adminManagerNode(adminManagerNode),
|
|
m_strFileName(strFileName),
|
|
m_strScriptLanguage(strScriptLanguage),
|
|
m_strScript(strScript),
|
|
m_strRetFileName(strFileName),
|
|
m_strRetScriptLanguage(strScriptLanguage),
|
|
m_strRetScript(strScript),
|
|
m_bDirty(FALSE),
|
|
m_bReadOnly(bReadOnly),
|
|
m_bInit(FALSE)
|
|
{
|
|
}
|
|
|
|
CScriptDialog::
|
|
~CScriptDialog()
|
|
{
|
|
}
|
|
|
|
BOOL
|
|
CScriptDialog::
|
|
OnInitDialog()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CScriptDialog,OnInitDialog)
|
|
|
|
//If there is some script, set it else disable the clear script
|
|
//button
|
|
if(m_strScript.GetLength())
|
|
{
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CODE))->SetWindowText(m_strScript);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_CLEAR_SCRIPT)->EnableWindow(FALSE);
|
|
}
|
|
|
|
CEdit* pEditPath = ((CEdit*)GetDlgItem(IDC_EDIT_PATH));
|
|
pEditPath->SetLimitText(AZ_MAX_TASK_BIZRULE_IMPORTED_PATH_LENGTH);
|
|
|
|
//If there is a file name, set it else disable the reload script
|
|
//button
|
|
if(m_strFileName.GetLength())
|
|
{
|
|
pEditPath->SetWindowText(m_strFileName);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_BUTTON_RELOAD)->EnableWindow(FALSE);
|
|
}
|
|
|
|
|
|
|
|
if(!m_strScriptLanguage.IsEmpty() &&
|
|
(_wcsicmp(g_szJavaScript,m_strScriptLanguage) == 0))
|
|
{
|
|
CButton* pRadioJS = (CButton*)GetDlgItem(IDC_RADIO_JAVA_SCRIPT);
|
|
pRadioJS->SetCheck(TRUE);
|
|
}
|
|
else
|
|
{
|
|
CButton* pRadioVB = (CButton*)GetDlgItem(IDC_RADIO_VB_SCRIPT);
|
|
pRadioVB->SetCheck(TRUE);
|
|
}
|
|
|
|
if(m_bReadOnly)
|
|
{
|
|
GetDlgItem(IDC_RADIO_VB_SCRIPT)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_RADIO_JAVA_SCRIPT)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BUTTON_BROWSE)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BUTTON_RELOAD)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_CLEAR_SCRIPT)->EnableWindow(FALSE);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PATH))->SetReadOnly(TRUE);
|
|
}
|
|
|
|
m_bInit = TRUE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void
|
|
CScriptDialog::
|
|
OnRadioChange()
|
|
{
|
|
m_bDirty = TRUE;
|
|
}
|
|
|
|
|
|
void
|
|
CScriptDialog::
|
|
MatchRadioWithExtension(const CString& strFileName)
|
|
{
|
|
//Get the extension of file
|
|
CString strExtension;
|
|
if(GetFileExtension(strFileName,strExtension))
|
|
{
|
|
//If file extension is vbs
|
|
if(_wcsicmp(strExtension,L"vbs") == 0)
|
|
{
|
|
((CButton*)GetDlgItem(IDC_RADIO_VB_SCRIPT))->SetCheck(BST_CHECKED);
|
|
((CButton*)GetDlgItem(IDC_RADIO_JAVA_SCRIPT))->SetCheck(BST_UNCHECKED);
|
|
}
|
|
else if(_wcsicmp(strExtension,L"js") == 0)
|
|
{
|
|
((CButton*)GetDlgItem(IDC_RADIO_JAVA_SCRIPT))->SetCheck(BST_CHECKED);
|
|
((CButton*)GetDlgItem(IDC_RADIO_VB_SCRIPT))->SetCheck(BST_UNCHECKED);
|
|
}
|
|
}
|
|
}
|
|
HBRUSH
|
|
CScriptDialog::
|
|
OnCtlColor(CDC* pDC,
|
|
CWnd* pWnd,
|
|
UINT nCtlColor)
|
|
{
|
|
// Call the base class implementation first! Otherwise, it may
|
|
// undo what we're trying to accomplish here.
|
|
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
|
|
if (pWnd->GetDlgCtrlID() == IDC_EDIT_CODE && (CTLCOLOR_STATIC == nCtlColor))
|
|
{
|
|
// set the read-only edit box background to white
|
|
pDC->SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
|
|
pDC->SetBkColor(GetSysColor(COLOR_WINDOW));
|
|
hbr = GetSysColorBrush(COLOR_WINDOW);
|
|
}
|
|
|
|
return hbr;
|
|
}
|
|
|
|
void
|
|
CScriptDialog
|
|
::OnEditChangePath()
|
|
{
|
|
if(!m_bInit)
|
|
return;
|
|
|
|
m_bDirty = TRUE;
|
|
HANDLE handle = INVALID_HANDLE_VALUE;
|
|
|
|
do
|
|
{
|
|
//
|
|
//If Path is cleared, clear the script
|
|
//
|
|
if(!((CEdit*)GetDlgItem(IDC_EDIT_PATH))->GetWindowTextLength())
|
|
{
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CODE))->SetWindowText(L"");
|
|
m_strScript.Empty();
|
|
m_strFileName.Empty();
|
|
m_strScript.Empty();
|
|
|
|
GetDlgItem(IDC_CLEAR_SCRIPT)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BUTTON_RELOAD)->EnableWindow(FALSE);
|
|
break;
|
|
}
|
|
|
|
//
|
|
//There is some text in the edit control. Try to load
|
|
//that file
|
|
//
|
|
|
|
((CButton*)GetDlgItem(IDC_BUTTON_RELOAD))->EnableWindow(TRUE);
|
|
|
|
CString strFileName;
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PATH))->GetWindowText(strFileName);
|
|
|
|
//If its same as existig file return
|
|
if(_wcsicmp(strFileName,m_strFileName) == 0 )
|
|
break;
|
|
|
|
//Check if there is a file or directory with such name
|
|
WIN32_FIND_DATA FindFileData;
|
|
handle = FindFirstFile(strFileName,
|
|
&FindFileData);
|
|
//No such file or directory
|
|
if(INVALID_HANDLE_VALUE == handle)
|
|
break;
|
|
|
|
//We are only interested in files
|
|
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
break;
|
|
|
|
//Check if file has valid extension
|
|
CString strExtension;
|
|
if(GetFileExtension(strFileName,strExtension))
|
|
{
|
|
if(_wcsicmp(strExtension,L"vbs") == 0 || (_wcsicmp(strExtension,L"js") == 0))
|
|
{
|
|
m_strFileName = strFileName;
|
|
ReloadScript(strFileName);
|
|
MatchRadioWithExtension(strFileName);
|
|
}
|
|
}
|
|
|
|
}while(0);
|
|
|
|
if(INVALID_HANDLE_VALUE != handle)
|
|
{
|
|
FindClose(handle);
|
|
}
|
|
}
|
|
|
|
void
|
|
CScriptDialog::
|
|
OnClear()
|
|
{
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CODE))->SetWindowText(L"");
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PATH))->SetWindowText(L"");
|
|
m_strScript.Empty();
|
|
m_strFileName.Empty();
|
|
m_strScript.Empty();
|
|
|
|
//Disable the clear button since there is nothing to clear,
|
|
//but before disabling set focus to clear button
|
|
//NTRAID#NTBUG9-663854-2002/07/17-hiteshr
|
|
GetDlgItem(IDC_EDIT_PATH)->SetFocus();
|
|
GetDlgItem(IDC_CLEAR_SCRIPT)->EnableWindow(FALSE);
|
|
//Disable the Reload button since script path is cleared.
|
|
GetDlgItem(IDC_BUTTON_RELOAD)->EnableWindow(FALSE);
|
|
|
|
m_bDirty = TRUE;
|
|
}
|
|
|
|
void
|
|
CScriptDialog::
|
|
OnBrowse()
|
|
{
|
|
CString szFileFilter;
|
|
VERIFY (szFileFilter.LoadString (IDS_OPEN_SCRIPT_FILTER));
|
|
|
|
// replace "|" with 0;
|
|
const size_t nFilterLen = szFileFilter.GetLength();
|
|
PWSTR pszFileFilter = new WCHAR [nFilterLen + 1];
|
|
if ( pszFileFilter )
|
|
{
|
|
wcscpy (pszFileFilter, szFileFilter);
|
|
for (int nIndex = 0; nIndex < nFilterLen; nIndex++)
|
|
{
|
|
if ( L'|' == pszFileFilter[nIndex] )
|
|
pszFileFilter[nIndex] = 0;
|
|
}
|
|
CString strFileName;
|
|
if(GetFileName(m_hWnd,
|
|
TRUE,
|
|
IDS_SELECT_AUTHORIZATION_SCRIPT,
|
|
m_adminManagerNode.GetScriptDirectory(),
|
|
pszFileFilter,
|
|
strFileName))
|
|
{
|
|
m_adminManagerNode.SetScriptDirectory(GetDirectoryFromPath(strFileName));
|
|
|
|
//This will trigger OnEditChangePath which will load the file
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PATH))->SetWindowText(strFileName);
|
|
m_bDirty = TRUE;
|
|
}
|
|
delete []pszFileFilter;
|
|
}
|
|
}
|
|
|
|
void
|
|
CScriptDialog::
|
|
OnReload()
|
|
{
|
|
//Get FileName
|
|
CString strFileName;
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PATH))->GetWindowText(strFileName);
|
|
|
|
//Reload the script
|
|
ReloadScript(strFileName);
|
|
MatchRadioWithExtension(strFileName);
|
|
}
|
|
|
|
|
|
void
|
|
CScriptDialog::
|
|
OnOK()
|
|
{
|
|
if(m_bDirty)
|
|
{
|
|
CString strFileName;
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PATH))->GetWindowText(strFileName);
|
|
if(_wcsicmp(strFileName,m_strFileName) != 0 )
|
|
{
|
|
m_strFileName = strFileName;
|
|
if(!ReloadScript(m_strFileName))
|
|
return;
|
|
}
|
|
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CODE))->GetWindowText(m_strScript);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PATH))->GetWindowText(m_strFileName);
|
|
//If FileName is not empty and Script is empty,
|
|
//reload the script
|
|
if(!m_strFileName.IsEmpty() && m_strScript.IsEmpty())
|
|
{
|
|
if(!ReloadScript(m_strFileName))
|
|
return;
|
|
|
|
//Successfully loaded the script
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CODE))->GetWindowText(m_strScript);
|
|
}
|
|
|
|
CButton* pRadioVB = (CButton*)GetDlgItem(IDC_RADIO_VB_SCRIPT);
|
|
if(!m_strScript.IsEmpty())
|
|
{
|
|
if(pRadioVB->GetCheck())
|
|
m_strScriptLanguage = g_szVBScript;
|
|
else
|
|
m_strScriptLanguage = g_szJavaScript;
|
|
}
|
|
else
|
|
m_strScriptLanguage.Empty();
|
|
|
|
//Copy to the Ret strings
|
|
m_strRetFileName = m_strFileName;
|
|
m_strRetScriptLanguage = m_strScriptLanguage;
|
|
m_strRetScript = m_strScript;
|
|
}
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
CScriptDialog::
|
|
ReloadScript(const CString& strFileName)
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,CScriptDialog,ReloadScript)
|
|
if(strFileName.IsEmpty())
|
|
{
|
|
ASSERT(FALSE);
|
|
return FALSE;
|
|
}
|
|
|
|
m_bDirty = TRUE;
|
|
|
|
BYTE* pBuffer = NULL;
|
|
LPWSTR pszScript = NULL;
|
|
BOOL bRet = FALSE;
|
|
do
|
|
{
|
|
CFile file;
|
|
CFileException fileException;
|
|
|
|
if(!file.Open((LPCTSTR)strFileName, CFile::modeRead, &fileException))
|
|
{
|
|
//Failed to open the file. Show special error message
|
|
//in case path is incorrect
|
|
if(CFileException::fileNotFound == fileException.m_cause ||
|
|
CFileException::badPath == fileException.m_cause)
|
|
{
|
|
DisplayError(m_hWnd,
|
|
IDS_SCRIPT_NOT_FOUND,
|
|
(LPCTSTR)strFileName);
|
|
}
|
|
else
|
|
{
|
|
//Show generic error
|
|
DisplayError(m_hWnd,
|
|
IDS_CANNOT_OPEN_FILE,
|
|
(LPCTSTR)strFileName);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
//File is successfully opened
|
|
|
|
//
|
|
//MAXIMUM possible file size is AZ_MAX_TASK_BIZRULE_LENGTH WIDECHAR
|
|
//Here we are considering 4bytes per Unicode which is maximum
|
|
//
|
|
if(file.GetLength() > AZ_MAX_TASK_BIZRULE_LENGTH*4)
|
|
{
|
|
DisplayError(m_hWnd,
|
|
IDS_ERROR_BIZRULE_EXCEED_MAX_LENGTH,
|
|
AZ_MAX_TASK_BIZRULE_LENGTH);
|
|
break;
|
|
}
|
|
|
|
if(file.GetLength() == 0)
|
|
{
|
|
DisplayError(m_hWnd,
|
|
IDS_ERROR_EMPTY_SCRIPT_FILE,
|
|
strFileName);
|
|
break;
|
|
}
|
|
|
|
//Allocate one extra byte for null termination.
|
|
pBuffer = (BYTE*)LocalAlloc(LPTR,file.GetLength() + sizeof(WCHAR));
|
|
if(!pBuffer)
|
|
break;
|
|
|
|
int nRead = file.Read(pBuffer,
|
|
file.GetLength());
|
|
|
|
if(!nRead)
|
|
{
|
|
|
|
::DisplayError(m_hWnd,
|
|
IDS_CANNOT_READ_FILE_1,
|
|
(LPCTSTR)strFileName);
|
|
break;
|
|
}
|
|
|
|
//Check if the file is unicode. First Character
|
|
//in unicode file is 0xFEFF
|
|
if(nRead >= 2 && (*(PWCHAR)pBuffer == 0xFEFF))
|
|
{
|
|
((LPWSTR)pBuffer)[nRead/sizeof(WCHAR)] = 0;
|
|
CString strScript = (LPWSTR)(pBuffer+2);
|
|
PreprocessScript(strScript);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CODE))->SetWindowText(strScript);
|
|
//Enable the clear script button
|
|
GetDlgItem(IDC_CLEAR_SCRIPT)->EnableWindow(TRUE);
|
|
bRet = TRUE;
|
|
break;
|
|
}
|
|
|
|
|
|
//Get the Size required for unicode
|
|
int nWideChar = MultiByteToWideChar(CP_ACP,
|
|
MB_PRECOMPOSED,
|
|
(LPCSTR)pBuffer,
|
|
nRead,
|
|
NULL,
|
|
0);
|
|
if(!nWideChar)
|
|
{
|
|
CString strError;
|
|
GetSystemError(strError,HRESULT_FROM_WIN32(GetLastError()));
|
|
::DisplayError(m_hWnd,
|
|
IDS_FAILED_TO_READ_FILE,
|
|
(LPCTSTR)strError);
|
|
|
|
break;
|
|
}
|
|
|
|
if(nWideChar > AZ_MAX_TASK_BIZRULE_LENGTH)
|
|
{
|
|
DisplayError(m_hWnd,
|
|
IDS_ERROR_BIZRULE_EXCEED_MAX_LENGTH,
|
|
AZ_MAX_TASK_BIZRULE_LENGTH);
|
|
break;
|
|
}
|
|
|
|
//Allocate one WCHAR extra for NULL termination
|
|
pszScript = (LPWSTR)LocalAlloc(LPTR, (nWideChar+1)*sizeof(WCHAR));
|
|
if(!pszScript)
|
|
break;
|
|
|
|
if(MultiByteToWideChar( CP_ACP,
|
|
MB_PRECOMPOSED,
|
|
(LPCSTR)pBuffer,
|
|
nRead,
|
|
pszScript,
|
|
nWideChar))
|
|
{
|
|
pszScript[nWideChar] = 0;
|
|
CString strScript = pszScript;
|
|
PreprocessScript(strScript);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CODE))->SetWindowText(strScript);
|
|
//Enable the clear script button
|
|
GetDlgItem(IDC_CLEAR_SCRIPT)->EnableWindow(TRUE);
|
|
bRet = TRUE;
|
|
}
|
|
else
|
|
{
|
|
CString strError;
|
|
GetSystemError(strError,HRESULT_FROM_WIN32(GetLastError()));
|
|
::DisplayError(m_hWnd,
|
|
IDS_FAILED_TO_READ_FILE,
|
|
(LPCTSTR)strError);
|
|
|
|
break;
|
|
}
|
|
|
|
}while(0);
|
|
|
|
if(pBuffer)
|
|
LocalFree(pBuffer);
|
|
if(pszScript)
|
|
LocalFree(pszScript);
|
|
|
|
if(!bRet)
|
|
{
|
|
//IF failed to load the file, clear the script
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CODE))->SetWindowText(L"");
|
|
m_strScript.Empty();
|
|
//Disable the clear button since there is nothing to clear
|
|
GetDlgItem(IDC_CLEAR_SCRIPT)->EnableWindow(FALSE);
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
GetScriptData(IN BOOL bReadOnly,
|
|
IN CAdminManagerNode& adminManagerNode,
|
|
IN OUT CString& strFileName,
|
|
IN OUT CString& strScriptLanguage,
|
|
IN OUT CString& strScript)
|
|
{
|
|
CScriptDialog dlgScript(bReadOnly,
|
|
adminManagerNode,
|
|
strFileName,
|
|
strScriptLanguage,
|
|
strScript);
|
|
|
|
if(IDOK == dlgScript.DoModal() && dlgScript.IsDirty())
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Function:SaveAuthorizationScriptData
|
|
// Synopsis:Saves the authorization script information for a task
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT
|
|
SaveAuthorizationScriptData(IN HWND hWnd,
|
|
IN CTaskAz& refTaskAz,
|
|
IN const CString& strFilePath,
|
|
IN const CString& strScriptLanguage,
|
|
IN const CString& strScript,
|
|
IN BOOL& refbErrorDisplayed)
|
|
{
|
|
TRACE_FUNCTION_EX(DEB_SNAPIN,SaveAuthorizationScriptData)
|
|
|
|
HRESULT hr = S_OK;
|
|
|
|
if(!strScript.IsEmpty() &&
|
|
strScriptLanguage.IsEmpty())
|
|
{
|
|
ASSERT(FALSE);
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
do
|
|
{
|
|
//NTRAID#NTBUG9-663899-2002/07/18-hiteshr
|
|
//If bizrule and bizrule language are already set, say to VBScript,
|
|
//changing bizrule language to jscript causes validataion of existing
|
|
//vb script with jscript engine which fails. As a work around, we
|
|
//first set bizrulelang and bizrule to empty, then set new bizrule
|
|
//and then bizrulelang
|
|
|
|
//Set bizrule language to empty
|
|
hr = refTaskAz.SetProperty(AZ_PROP_TASK_BIZRULE_LANGUAGE,
|
|
L"");
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
//Set bizrule to empty
|
|
hr = refTaskAz.SetProperty(AZ_PROP_TASK_BIZRULE,
|
|
L"");
|
|
|
|
//Set bizrule language
|
|
hr = refTaskAz.SetProperty(AZ_PROP_TASK_BIZRULE_LANGUAGE,
|
|
strScriptLanguage);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
|
|
//Set bizrule
|
|
hr = refTaskAz.SetProperty(AZ_PROP_TASK_BIZRULE,
|
|
strScript);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
//Set bizrule file path
|
|
hr = refTaskAz.SetProperty(AZ_PROP_TASK_BIZRULE_IMPORTED_PATH,
|
|
strFilePath);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
}while(0);
|
|
|
|
if(FAILED(hr))
|
|
{
|
|
if(hr == OLESCRIPT_E_SYNTAX)
|
|
{
|
|
refbErrorDisplayed = TRUE;
|
|
DisplayError(hWnd, IDS_SCRIPT_SYNTAX_INCORRECT,strFilePath);
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
//+----------------------------------------------------------------------------
|
|
// Function:GetAuthorizationScriptData
|
|
// Synopsis:Gets the authorization script data for a Task
|
|
//-----------------------------------------------------------------------------
|
|
HRESULT
|
|
GetAuthorizationScriptData(IN CTaskAz& refTaskAz,
|
|
OUT CString& strFilePath,
|
|
OUT CString& strScriptLanguage,
|
|
OUT CString& strScript)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
do
|
|
{
|
|
hr = refTaskAz.GetProperty(AZ_PROP_TASK_BIZRULE_LANGUAGE,
|
|
&strScriptLanguage);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
hr = refTaskAz.GetProperty(AZ_PROP_TASK_BIZRULE,
|
|
&strScript);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
PreprocessScript(strScript);
|
|
|
|
hr = refTaskAz.GetProperty(AZ_PROP_TASK_BIZRULE_IMPORTED_PATH,
|
|
&strFilePath);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
}while(0);
|
|
|
|
return hr;
|
|
}
|
|
|
|
/******************************************************************************
|
|
Class: COptionDlg
|
|
Purpose: Dialog for Selecting authorization manager options
|
|
******************************************************************************/
|
|
BEGIN_MESSAGE_MAP(COptionDlg, CHelpEnabledDialog)
|
|
//{{AFX_MSG_MAP(CNewBaseDlg)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL
|
|
COptionDlg::
|
|
OnInitDialog()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,COptionDlg,OnInitDialog)
|
|
if(m_refDeveloperMode)
|
|
{
|
|
((CButton*)GetDlgItem(IDC_RADIO_DEVELOPER))->SetCheck(TRUE);
|
|
}
|
|
else
|
|
{
|
|
((CButton*)GetDlgItem(IDC_RADIO_ADMINISTRATOR))->SetCheck(TRUE);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
COptionDlg::
|
|
OnOK()
|
|
{
|
|
TRACE_METHOD_EX(DEB_SNAPIN,COptionDlg,OnOK)
|
|
if(((CButton*)GetDlgItem(IDC_RADIO_DEVELOPER))->GetCheck())
|
|
m_refDeveloperMode = TRUE;
|
|
else
|
|
m_refDeveloperMode = FALSE;
|
|
|
|
CDialog::OnOK();
|
|
}
|