using CloudBuilder.Core.Service;
using CloudBuilder.Gui;
using CloudBuilder.Request.Security;
using CloudBuilder.Security.Data;
using CloudBuilder.Security.Entity;
using CloudBuilder.Security.Linkup;
using CloudBuilder.Security.Policy;
using CloudBuilder.Security.SearchCriteria;
using Krypton.Toolkit;
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CloudBuilder.Security.Gui
{
public partial class SecurityGroupOperationPage : AbstractPage
{
private SecurityMessagePolicy securityMessagePolicy;
private SecurityGroupRequest securityGroupRequest;
private SecurityGroupEntity securityGroupEntity;
private SecurityGroupData data;
public SecurityGroupOperationPage()
{
InitializeComponent();
}
///
/// 第一次加载时执行,只执行一次
///
public override void FunctionLoaded()
{
try
{
base.FunctionLoaded();
//初始化容器-------------------------------------
securityMessagePolicy = ServiceHelper.GetTypeService()!;
securityGroupRequest = ServiceHelper.GetTypeService();
//界面初始化
InitGui();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void InitGui()
{
InitBindingContext();
InitDisplayMode();
this.ParentAbstractForm.AcceptButton = this.searchBut;
this.ParentAbstractForm.CancelButton = this.resetBut;
}
///
/// 有特殊要求的UI控件初始化设置,Init与Add配对后,使用guiOperateHelper管理
///
private void InitBindingContext()
{
//需要绑定数据
guiBindingContext = new GuiBindingContext();
InitPermission();
groupNameTxt.Set(SecurityGroupEntity.GROUP_NAME, groupNameLabel.Text, EnumEditModeColor.Required);
groupEngNameTxt.Set(SecurityGroupEntity.GROUP_ENG_NAME, groupLocalNameLabel.Text,EnumEditModeColor.Required);
groupLocalNameTxt.Set(SecurityGroupEntity.GROUP_LOCAL_NAME, groupEngNameLabel.Text, EnumEditModeColor.Required);
dataGv.InitColumn(false, true);
dataDsGv.InitColumn(false, true);
actorGv.InitColumn(false, true);
guiOperateHelper = new GuiOperateHelper();
}
private void InitPermission()
{
createBut.Set(SecurityPermissionPolicy.SecurityGroup, Operate.Insert);
amendBut.Set(SecurityPermissionPolicy.SecurityGroup, Operate.Update);
deleteBut.Set(SecurityPermissionPolicy.SecurityGroup, Operate.Delete);
}
///
/// 每次从别的界面进入时执行,发生在FunctionLoaded之后
///
///
public override void FunctionActivated(object param)
{
try
{
if (param == null)
{
groupNameSearchTxt.Focus();
return;
}
InitDisplayMode();
SecurityGroupOperationLinkup linkup = null;
if (param is SecurityGroupOperationLinkup)
{
linkup = (SecurityGroupOperationLinkup)param;
}
this.DisplayMode = (GuiDisplayMode)linkup.DisplayMode;
groupNameSearchTxt.Text = linkup.GroupName;
if (this.DisplayMode == GuiDisplayMode.View)
{
Search();
}
else if (this.DisplayMode == GuiDisplayMode.Create)
{
Create();
}
else if (this.DisplayMode == GuiDisplayMode.Amend)
{
Search();
Amend();
}
groupNameSearchTxt.Focus();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
public override void FunctionSelected()
{
this.ParentAbstractForm.AcceptButton = this.searchBut;
if (!IsDialog)
this.ParentAbstractForm.CancelButton = this.resetBut;
else
this.ParentAbstractForm.CancelButton = this.cancelBut;
groupNameSearchTxt.Focus();
}
public override bool FunctionDeactivating()
{
if (this.DisplayMode == GuiDisplayMode.View)
{
return true;
}
else
{
return CancelEditing();
}
}
private bool CancelEditing()
{
DialogResult result = ShowMessageBox.ShowOption(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM_CANCEL), securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM));
//从外部跳转(非mainKryptonNavigator),result第一次不生效?,所以再执行一次生效
if (result == DialogResult.Cancel)
{
result = ShowMessageBox.ShowOption(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM_CANCEL), securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM));
}
if (result == DialogResult.No)
{
return false;
}
Cancel();
return true;
}
private void InitDisplayMode()
{
this.DisplayMode = GuiDisplayMode.View;
SetDisplayMode();
}
private void SetDisplayMode()
{
if (this.DisplayMode == GuiDisplayMode.View)
{
savePanel.Visible = false;
operationPanel.Visible = true;
guiOperateHelper.EnableControls(true, topPanel);
guiOperateHelper.EnableControls(false, contentPanel);
//查詢有記錄時,修改等控件有效
if (securityGroupEntity != null)
guiOperateHelper.EnableControls(true, bottomPanel);
else
guiOperateHelper.EnableControls(false, bottomPanel);
}
else if (this.DisplayMode == GuiDisplayMode.Amend || this.DisplayMode == GuiDisplayMode.Create)
{
savePanel.Visible = true;
operationPanel.Visible = false;
guiOperateHelper.EnableControls(false, topPanel);
guiOperateHelper.EnableControls(true, bottomPanel, contentPanel);
if (this.DisplayMode == GuiDisplayMode.Amend) guiOperateHelper.EnableControls(false, groupNameTxt);
permissionNameCol.ReadOnly = true;
permissionNameCol.DefaultCellStyle.BackColor = System.Drawing.Color.Silver;
permissionDescriptionCol.ReadOnly = true;
permissionDescriptionCol.DefaultCellStyle.BackColor = System.Drawing.Color.Silver;
dependentCol.ReadOnly = true;
dependentCol.DefaultCellStyle.BackColor = System.Drawing.Color.Silver;
dsDependentCol.ReadOnly = true;
dsDependentCol.DefaultCellStyle.BackColor = System.Drawing.Color.Silver;
dsDependentDetailNameCol.ReadOnly = true;
dsDependentDetailNameCol.DefaultCellStyle.BackColor = System.Drawing.Color.Silver;
dsDependentDetailDescriptionCol.ReadOnly = true;
dsDependentDetailDescriptionCol.DefaultCellStyle.BackColor = System.Drawing.Color.Silver;
actorGv.DefaultCellStyle.BackColor = System.Drawing.Color.Silver;
}
}
private void PackUIToEntity()
{
guiBindingContext.DataPack();
SecurityGroupPermissionViewDisplayData[] securityGroupPermissions = dataGv.GetAllRows();
if (securityGroupPermissions == null || securityGroupPermissions.Length == 0)
data.SecurityGroupPermissionViews = null;
else
data.SecurityGroupPermissionViews = securityGroupPermissions.Select(x => new SecurityGroupPermissionViewDisplayData()
{
PermissionName = x.PermissionName,
GroupName = groupNameTxt.Text,
ViewIndc = x.ViewIndc,
AmendIndc = x.AmendIndc,
CreateIndc = x.CreateIndc,
DeleteIndc = x.DeleteIndc,
Dependent = x.Dependent,
IsView = x.ViewIndc == YesNoPolicy.YES,
IsAmend = x.AmendIndc == YesNoPolicy.YES,
IsCreate = x.CreateIndc == YesNoPolicy.YES,
IsDelete = x.DeleteIndc == YesNoPolicy.YES,
PermissionDescription = x.PermissionDescription
}).ToArray();
SecurityGroupPermissionDependentViewDisplayData[] dependents = dataDsGv.GetAllRows();
if (dependents == null || dependents.Length == 0)
data.SecurityGroupPermissionDependentViews = null;
else
data.SecurityGroupPermissionDependentViews = dependents.Select(x => new SecurityGroupPermissionDependentViewDisplayData()
{
PermissionName = x.PermissionName,
GroupName = groupNameTxt.Text,
ViewIndc = x.ViewIndc,
AmendIndc = x.AmendIndc,
CreateIndc = x.CreateIndc,
DeleteIndc = x.DeleteIndc,
Dependent = x.Dependent,
IsView = x.ViewIndc == YesNoPolicy.YES,
IsAmend = x.AmendIndc == YesNoPolicy.YES,
IsCreate = x.CreateIndc == YesNoPolicy.YES,
IsDelete = x.DeleteIndc == YesNoPolicy.YES,
PermissionDescription = x.PermissionDescription,
DependentDetailDescription = x.DependentDetailDescription,
DependentDetailName = x.DependentDetailName,
}).ToArray();
SecurityActorGroupViewEntity[] actors = actorGv.GetAllRows();
if (actors == null || actors.Length == 0)
data.SecurityActorGroups = null;
else
data.SecurityActorGroups = actors.Select(x => new SecurityActorGroupViewEntity()
{
ActorName = x.ActorName,
GroupName = groupNameTxt.Text,
ActorLocalName = x.ActorLocalName,
}).ToArray();
}
private bool SaveValidate()
{
if (!guiOperateHelper.CheckValidate(this.mainPanel)) return false;
return true;
}
private void Search()
{
try
{
if (string.IsNullOrEmpty(groupNameSearchTxt.Text)) return;
Reset();
data = securityGroupRequest.FindByKey(groupNameSearchTxt.Text);
if (data == null || data.SecurityGroup == null)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
}
else
{
securityGroupEntity = data.SecurityGroup;
PackEntityToUI();
SetDisplayMode();
}
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void Create()
{
this.DisplayMode = GuiDisplayMode.Create;
guiOperateHelper.ResetControls(this.mainPanel);
SetDisplayMode();
data = new SecurityGroupData();
securityGroupEntity = new SecurityGroupEntity()
{
CreatedBy = string.Empty,
UpdatedBy = string.Empty,
CreatedDatetime = DateTime.Now,
UpdatedDatetime = DateTime.Now,
};
data.SecurityGroup = securityGroupEntity;
PackEntityToUI();
groupNameTxt.Focus();
}
private void Amend()
{
this.DisplayMode = GuiDisplayMode.Amend;
SetDisplayMode();
}
private void PackEntityToUI()
{
guiBindingContext.DataBind(data.SecurityGroup, this);
dataGv.SetDataSource(data.SecurityGroupPermissionViews);
dataDsGv.SetDataSource(data.SecurityGroupPermissionDependentViews);
actorGv.SetDataSource(data.SecurityActorGroups);
}
private void Reset()
{
this.DisplayMode = GuiDisplayMode.View;
securityGroupEntity = null;
guiOperateHelper.ResetControls(this.contentPanel);
SetDisplayMode();
groupNameSearchTxt.Focus();
}
public void Cancel()
{
if (!string.IsNullOrEmpty(groupNameSearchTxt.Text))
Search();
else
Reset();
}
private void groupNameSearchBut_Click(object sender, EventArgs e)
{
try
{
AbstractForm dialog = GetAbstractDialog(typeof(SecurityGroupEnquiryPage).Name);
if (DialogResult.OK != dialog.ShowDialog()) return;
groupNameSearchTxt.Text = ((SecurityGroupEntity[])dialog.OutputData)[0].GroupName;
Search();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void searchBut_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(groupNameSearchTxt.Text))
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_VALID_INPUT, GuiOperateHelper.GetLabelText(groupNameSearchLabel.Text)));
this.groupNameSearchTxt.Focus();
return;
}
this.DisplayMode = GuiDisplayMode.View;
Search();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void resetBut_Click(object sender, EventArgs e)
{
try
{
guiOperateHelper.ResetControls(this.topPanel);
Reset();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void createBut_Click(object sender, EventArgs e)
{
try
{
Create();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void amendBut_Click(object sender, EventArgs e)
{
try
{
Amend();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void deleteBut_Click(object sender, EventArgs e)
{
try
{
if (securityGroupEntity == null)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
return;
}
if (DialogResult.Yes != ShowMessageBox.ShowOption(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM_DEL_NULL), securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_DELETE))) return;
securityGroupRequest.Delete(securityGroupEntity.GroupName);
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_DELETED_NULL));
Reset();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void saveBut_Click(object sender, EventArgs e)
{
try
{
if (!SaveValidate()) return;
PackUIToEntity();
if (this.DisplayMode == GuiDisplayMode.Create)
securityGroupRequest.Insert(data);
else
securityGroupRequest.Update(data);
ShowMessageBox.ShowInfo((this.DisplayMode == GuiDisplayMode.Create) ?
securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_CREATED_NULL) :
securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_UPDATED_NULL));
groupNameSearchTxt.Text = securityGroupEntity.GroupName;
Search();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void cancelBut_Click(object sender, EventArgs e)
{
try
{
CancelEditing();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void addBut_Click(object sender, EventArgs e)
{
try
{
AbstractForm dialog = GetAbstractDialog(typeof(SecurityPermissionEnquiryPage).Name);
if (DialogResult.OK != dialog.ShowDialog()) return;
SecurityPermissionEntity[] securityPermissions = (SecurityPermissionEntity[])dialog.OutputData;
List permissionNames = new List();
if (dataGv.Rows.Count > 0)
{
permissionNames.AddRange(dataGv.GetAllRows().Select(x => x.PermissionName));
}
SecurityGroupPermissionViewDisplayData d;
foreach (SecurityPermissionEntity securityPermission in securityPermissions)
{
if (permissionNames.Contains(securityPermission.PermissionName)) continue;
permissionNames.Add(securityPermission.PermissionName);
d = new SecurityGroupPermissionViewDisplayData()
{
PermissionName = securityPermission.PermissionName,
PermissionDescription = securityPermission.Description,
Dependent = securityPermission.Dependent,
ViewIndc = YesNoPolicy.YES,
AmendIndc = YesNoPolicy.YES,
CreateIndc = YesNoPolicy.YES,
DeleteIndc = YesNoPolicy.YES,
IsView = true,
IsAmend = true,
IsCreate = true,
IsDelete = true,
};
dataGv.AddRow(d);
}
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void delBut_Click(object sender, EventArgs e)
{
if (dataGv.RowCount <= 0 || dataGv.SelectedCells.Count <= 0)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
return;
}
List dependents = dataGv.GetAllRows().Select(x => x.Dependent).ToList();
dataGv.DeleteRows(dataGv.SelectedCells);
SecurityGroupPermissionDependentViewDisplayData[] ds = dataDsGv.GetAllRows();
if (ds != null && ds.Length > 0)
{
dataDsGv.SetDataSource(ds.Where(x => !dependents.Contains(x.Dependent)).ToList());
}
}
private void addDsBut_Click(object sender, EventArgs e)
{
//AddDs(null);
}
private void AddDs(SecurityGroupPermissionViewDisplayData displayData)
{
try
{
AbstractForm dialog = GetAbstractDialog(typeof(SecurityPermissionDependentEnquiryPage).Name);
SecurityPermissionSearchCriteria criteria = new SecurityPermissionSearchCriteria();
criteria.PermissionName = displayData.PermissionName;
criteria.Dependent = displayData.Dependent;
criteria.DependentEnable = false;
if (DialogResult.OK != dialog.ShowViewDialog(null, criteria)) return;
SecurityPermissionDependentEntity[] securityPermissions = (SecurityPermissionDependentEntity[])dialog.OutputData;
List dependentDetailNames = new List();
if (dataDsGv.Rows.Count > 0)
{
dependentDetailNames.AddRange(dataDsGv.GetAllRows().Select(x => x.PermissionName + "_" + x.DependentDetailName));
}
SecurityGroupPermissionDependentViewDisplayData d;
foreach (SecurityPermissionDependentEntity securityPermission in securityPermissions)
{
if (dependentDetailNames.Contains(securityPermission.PermissionName + "_" + securityPermission.DependentDetailName)) continue;
dependentDetailNames.Add(securityPermission.PermissionName + "_" + securityPermission.DependentDetailName);
d = new SecurityGroupPermissionDependentViewDisplayData()
{
DependentDetailDescription = securityPermission.DependentDetailDescription,
DependentDetailName = securityPermission.DependentDetailName,
PermissionName = securityPermission.PermissionName,
Dependent = securityPermission.Dependent,
ViewIndc = YesNoPolicy.YES,
AmendIndc = YesNoPolicy.YES,
CreateIndc = YesNoPolicy.YES,
DeleteIndc = YesNoPolicy.YES,
IsView = true,
IsAmend = true,
IsCreate = true,
IsDelete = true,
};
dataDsGv.AddRow(d);
}
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void delDsBut_Click(object sender, EventArgs e)
{
if (dataDsGv.RowCount <= 0 || dataDsGv.SelectedCells.Count <= 0)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
return;
}
dataDsGv.DeleteRows(dataDsGv.SelectedCells);
}
private void addActorBut_Click(object sender, EventArgs e)
{
try
{
AbstractForm dialog = GetAbstractDialog(typeof(SecurityActorEnquiryPage).Name);
if (DialogResult.OK != dialog.ShowDialog()) return;
SecurityActorEntity[] securityActors = (SecurityActorEntity[])dialog.OutputData;
List actorNames = new List();
if (actorGv.Rows.Count > 0)
{
actorNames.AddRange(actorGv.GetAllRows().Select(x => x.ActorName));
}
SecurityActorGroupViewEntity d;
foreach (SecurityActorEntity securityActor in securityActors)
{
if (actorNames.Contains(securityActor.ActorName)) continue;
actorNames.Add(securityActor.ActorName);
d = new SecurityActorGroupViewEntity()
{
ActorName = securityActor.ActorName,
ActorLocalName = securityActor.ActorLocalName
};
actorGv.AddRow(d);
}
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void delActorBut_Click(object sender, EventArgs e)
{
if (actorGv.RowCount <= 0 || actorGv.SelectedCells.Count <= 0)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
return;
}
actorGv.DeleteRows(actorGv.SelectedCells);
}
private void dataGv_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (this.DisplayMode == GuiDisplayMode.View) return;
if (e.RowIndex < 0 || e.ColumnIndex != dependentCol.Index) return;
SecurityGroupPermissionViewDisplayData d = dataGv.GetRowData(e.RowIndex);
if (string.IsNullOrEmpty(d.Dependent)) return;
AddDs(d);
}
}
}