mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2025-01-22 00:00:40 +01:00
4b0b83245f
* CA-34231: Replace negative language with `block list` in code and references Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `stop` in code and references Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `freezing` in code Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run/ran` in code comments Some paramater mentions have been renamed, as they will be renamed in future commits. Excluded mentions in XenAPI/Host.cs and XenAPI/VM.cs since code is autogenerated. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # CFUValidator/CommandLineOptions/CFUCommandLineOptionManager.cs # XenAdmin/Controls/Wlb/WlbOptModeScheduler.cs # XenAdmin/Dialogs/Wlb/WorkloadReports.cs * CA-34231: Replace negative language with `run` in Command.cs Run method Used Resharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/TabPages/GeneralTabPage.cs * CA-34231: Replace negative language with `run` in Command.cs CanRun method Used Resharper rename utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in Command.cs CanRunCore method Used ReSharper rename utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/DRConfigureCommand.cs # XenAdmin/Commands/DRDryrunCommand.cs # XenAdmin/Commands/DRFailbackCommand.cs # XenAdmin/Commands/DRFailoverCommand.cs # XenAdmin/Commands/DisasterRecoveryCommand.cs # XenAdmin/Commands/VMGroupCommand.cs * CA-34231: Replace negative language with `run` in Command.cs RunCore method Used ReSharper rename utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in Command.cs GetCantExecuteReasonCore method Used ReSharper rename utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in Command.cs GetCantRunReasons method Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language with `run` in Command.cs Also applied to related symbols. Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in methods named CanRun Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in methods in CrossPoolMigrateCommand.cs Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/CrossPoolMigrateCommand.cs * CA-34231: Replace negative language with `run` in remaining Run methods Also updated negative language in `DeleteVMCommand` Also updated in comment in `CrossPoolMigrateCommand` Also renamed missed instances of `CanRun` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `run` in `CanRunCore` and `RunCore` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language with `run` in Commands folder Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language with `run` in XenAdmin/Controls folder Used ReSharper renaming utility. Had to rename `WlbReportView.xs:RunReport()` to `WlbReportView.xs:StartRunReport()` to resolve conflict with change from `WlbReportView:ExecuteReport()` to `WlbReportView:RunReport()` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Controls/Wlb/WlbOptModeScheduler.cs # XenAdmin/Dialogs/Wlb/WorkloadReports.cs # XenAdminTests/UnitTests/WlbTests/WlbScheduledTaskTests.cs * CA-34231: Replace all remaining negative language with `run` in code Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/Controls/WlbRecommendations.cs # XenAdminTests/UnitTests/WlbTests/WlbScheduledTaskTests.cs # XenModel/WLB/WlbScheduledTask.cs * CA-34231: Replace negative language with `supporter` or `bond member` in code strings Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `supporter` or `bond member` in Messages string Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/MainWindow.cs # XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs # XenModel/Messages.Designer.cs # XenModel/Messages.resx * CA-34231: Replace remaining negative language with `supporter` in .resx files Used ReSharper renaming utility. FriendlyErrorNames.resx has been excluded. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `supporter` or `bond member` in XenAdmin code Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/NewPoolDialog.cs * CA-34231: Replace negative language with `supporter` or `bond member` in XenModel code Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in CFUValidator code Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # CFUValidator/CFUValidator.cs * CA-34231: Replace negative language with `coordinator` in solution's comments and hardcoded strings Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `Helpers:GetCoordinator` method Used ReSharper renaming utility. also renamed similarly named method in `ObjectChange.cs` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Alerts/Types/HotfixEligibilityAlert.cs # XenAdmin/Controls/CustomDataGraph/ArchiveMaintainer.cs * CA-34231: Replace negative language with `coordinator` in `EvacuateHostDialog.resx` Used ReSharper renaming utility. Excluded jp and zh resources Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/EvacuateHostDialog.resx * CA-34231: Replace negative language with `coordinator` in `EvacuateHostDialog.resx` Used ReSharper renaming utility. Excluded jp and zh resource files. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/NewPoolDialog.resx * CA-34231: Rename missing language references for change to `coordinator` Misc files were not saved before last commits. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `Messages.resx`'s code Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/HACommand.cs # XenAdmin/TabPages/AdPage.cs # XenModel/Actions/Network/CreateBondAction.cs # XenModel/Actions/Network/NetworkAction.cs # XenModel/Messages.Designer.cs # XenModel/Messages.resx * CA-34231: Replace negative language with `coordinator` in `ExternalPluginAction.cs` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `XenAdmin/Commands` Used ReSharper renaming utility. Also replace negative language in missed comment in `ExternalPluginAction.cs` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/AddHostToPoolCommand.cs # XenAdmin/Commands/HACommand.cs * CA-34231: Replace negative language with `coordinator` in `Helpers.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `NetworkingHelper.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `PoolJoinRules.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/NewPoolDialog.cs * CA-34231: Replace negative language with `coordinator` in `XenAdmin/Commands`, `Controls`, and `Core` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Commands/AddHostToPoolCommand.cs * CA-34231: Replace negative language with `coordinator` in `XenAdmin/Diagnostics` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `coordinator` in `XenAdmin/Dialogs` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/NewPoolDialog.cs * CA-34231: Replace remaining negative language with `coordinator` in `XenAdmin` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/MainWindow.cs # XenAdmin/TabPages/GeneralTabPage.cs # XenAdmin/Wizards/PatchingWizard/PatchingWizard_SelectServers.cs # XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeExtrasPage.cs # XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizard.cs # XenAdmin/Wizards/RollingUpgradeWizard/RollingUpgradeWizardPrecheckPage.cs # XenAdmin/XenSearch/Columns.cs * CA-34231: Replace remaining negative language with `coordinator` in `XenModel\Actions` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenModel/Actions/Network/CreateBondAction.cs * CA-34231: Replace remaining negative language with `coordinator` in `XenModel` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative strings with `main` in `Messages.resx` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenModel/Messages.Designer.cs # XenModel/Messages.resx * CA-34231: Replace remaining negative string names with `main` in `Messages.resx` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/OptionsPages/SaveAndRestoreOptionsPage.cs # XenModel/Messages.resx * CA-34231: Rename dialogs to replace negative connotations with `main` Used ReSharper renaming utility Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `main` in `SaveAndResoreOptionsPage.cs` Also updated its resx file. Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> # Conflicts: # XenAdmin/Dialogs/OptionsPages/SaveAndRestoreOptionsPage.cs * CA-34231: Fix invalid reference in `SaveAndRestoreOptionsPage.Designer.cs` after renaming Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `main` in `EnterMainPasswordDialog.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `main` in `ChangeMainPasswordDialog.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Fix invalid reference not changed after renaming `EnterMainPasswordDialog.cs` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language with `main` in `XenAdmin/Dialogs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Update class names in HelpManager.resx Following renaming of main password dialog. Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace negative language with `main` in `Metadata.cs` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Remove remaning negative language with `coordinator` from `Messages.resx` Used ReSharper renaming Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Remove remaning negative language with `other pool member` from `Messages.resx` Used ReSharper Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CA-34231: Replace remaining negative language in solution Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Remove commented out code in VNCGraphicsClient.cs Code has only been improved partially as it's not strictly relevant to the PR Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Amend negative word replacement in XSVNCScreen.cs Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Simplify debug call formatting in NewPoolDialog.cs Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Add code mistakenly removed in MainWindow.cs Removed as part of `f155f9c8` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Revert renaming of constant related to Windows' API Considered external to CH Center Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Amend hotkey for Coordinator field in `NewPoolDialog` Previous ALT+<key> hotkey was conflicting with CreatePool Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Remove unecessary whitespace in EvacuateHostDialog.cs Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Update if block to exclude unecessary else in DRFailoverWizard.cs Not relevant to the PR, but the change is small enought to no need extra testing Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Amend typo in PoolJoinRules.cs supporer -> supporter Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Replace missing negative language with `coordinator` in `XenAPI-Extensions/Pool.cs` Variables and methods XenAPI-Extensions were mistakenly skipped Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Replace negative language in `XenApi-Extensions` with `coordinator/interface` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Replace negative language in `XenApi-Extensions` with `supporter/member` Used ReSharper renaming utility. Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Replace remaining negative language in `XenServerHealthCheckBugTool.cs` This is only used to format the string Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Change line-endings to CRLF in `Page_CloudConfigParamters.cs` Done in order to fix merge conflict into master Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com> * CP-34231: Amend misc negative language renaming typos `XenServerHealthCheckBugTool` and `XenServerHealthCheckService` Signed-off-by: Danilo Del Busso <Danilo.Del.Busso@citrix.com>
833 lines
33 KiB
C#
833 lines
33 KiB
C#
/* Copyright (c) Citrix Systems, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms,
|
|
* with or without modification, are permitted provided
|
|
* that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above
|
|
* copyright notice, this list of conditions and the
|
|
* following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the
|
|
* following disclaimer in the documentation and/or other
|
|
* materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Specialized;
|
|
using System.Windows.Forms;
|
|
using System.Xml;
|
|
using System.Web;
|
|
using XenAPI;
|
|
using XenAdmin.Core;
|
|
using XenAdmin.Wlb;
|
|
using XenAdmin.Actions;
|
|
using XenAdmin.Actions.Wlb;
|
|
using XenAdmin.Controls.Wlb;
|
|
// Report viewer control dependencies
|
|
using Microsoft.Reporting.WinForms;
|
|
|
|
|
|
namespace XenAdmin.Dialogs.Wlb
|
|
{
|
|
public partial class WorkloadReports : XenDialogBase
|
|
{
|
|
#region Private Variables
|
|
|
|
private IEnumerable<Host> _hosts;
|
|
private Pool _pool;
|
|
private WlbReportSubscriptionCollection _subscriptionCollection;
|
|
private readonly string _reportFile = string.Empty;
|
|
private bool _runReport;
|
|
private bool _isCreedenceOrLater;
|
|
private XmlNodeList _currentNodes;
|
|
|
|
#endregion
|
|
|
|
|
|
#region Properties
|
|
|
|
/// <summary>
|
|
/// Object set to current pool
|
|
/// </summary>
|
|
public Pool Pool
|
|
{
|
|
get { return _pool; }
|
|
set { _pool = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Collection of hosts for the current pool
|
|
/// </summary>
|
|
public IEnumerable<Host> Hosts
|
|
{
|
|
get { return _hosts; }
|
|
set { _hosts = value; }
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Constructor
|
|
|
|
public WorkloadReports()
|
|
{
|
|
InitializeComponent();
|
|
|
|
splitContainerLeftPane.Panel2Collapsed = true;
|
|
lblSubscriptions.Visible = false;
|
|
treeViewSubscriptionList.Visible = false;
|
|
wlbReportView1.ButtonSubscribeVisible = false;
|
|
wlbReportView1.ButtonLaterReportVisible = false;
|
|
wlbReportView1.Visible = false;
|
|
subscriptionView1.Visible = false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Overloaded constructor provides access to a specific report upon load
|
|
/// </summary>
|
|
public WorkloadReports(string reportFile, bool run)
|
|
: this()
|
|
{
|
|
_reportFile = reportFile;
|
|
_runReport = run;
|
|
}
|
|
|
|
#endregion
|
|
|
|
internal override string HelpName => "WLBReports";
|
|
|
|
#region Private Methods
|
|
|
|
/// <summary>
|
|
/// Populates the treeview with ReportInfo and SubscriptionInfo nodes
|
|
/// </summary>
|
|
private void PopulateTreeViewReportList()
|
|
{
|
|
treeViewReportList.BeginUpdate();
|
|
|
|
try
|
|
{
|
|
treeViewReportList.Nodes.Clear();
|
|
treeViewReportList.ImageList = CreateReportImageList();
|
|
|
|
if (_currentNodes == null || _currentNodes.Count == 0)
|
|
return;
|
|
|
|
TreeNode nodeToSelect = null;
|
|
|
|
for (int i = 0; i < _currentNodes.Count; i++)
|
|
{
|
|
TreeNode currentReportTreeNode = GetReportTreeNode(_currentNodes[i]);
|
|
treeViewReportList.Nodes.Add(currentReportTreeNode);
|
|
|
|
if (nodeToSelect != null)
|
|
continue;
|
|
|
|
string currentReportFile = ((WlbReportInfo)currentReportTreeNode.Tag).ReportFile.Split('.')[0];
|
|
|
|
if (string.Compare(currentReportFile, _reportFile, true, System.Globalization.CultureInfo.InvariantCulture) == 0)
|
|
nodeToSelect = currentReportTreeNode;
|
|
}
|
|
|
|
treeViewReportList.Sort();
|
|
treeViewReportList.SelectedNode = nodeToSelect ?? treeViewReportList.Nodes[0];
|
|
}
|
|
finally
|
|
{
|
|
treeViewReportList.EndUpdate();
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Populates the subscription list with items of type WlbReportSubscription
|
|
/// </summary>
|
|
private void PopulateTreeViewSubscriptionList()
|
|
{
|
|
treeViewSubscriptionList.BeginUpdate();
|
|
|
|
try
|
|
{
|
|
treeViewSubscriptionList.Nodes.Clear();
|
|
treeViewSubscriptionList.ImageList = CreateReportImageList();
|
|
|
|
if (_subscriptionCollection != null)
|
|
{
|
|
lblSubscriptions.Visible = true;
|
|
treeViewSubscriptionList.Visible = true;
|
|
|
|
foreach (string key in _subscriptionCollection.Keys)
|
|
treeViewSubscriptionList.Nodes.Add(GetReportSubscriptionTreeNode(_subscriptionCollection[key]));
|
|
}
|
|
else
|
|
{
|
|
lblSubscriptions.Visible = false;
|
|
treeViewSubscriptionList.Visible = false;
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
treeViewSubscriptionList.EndUpdate();
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Used by drilldown and back events from the reportviewer to maintain treeview state
|
|
/// </summary>
|
|
private void SynchTreeViewReportList(string reportName)
|
|
{
|
|
WlbReportInfo reportInfo;
|
|
wlbReportView1.ResetReportViewer = false;
|
|
|
|
string reportFile = String.Format("{0}.{1}", reportName, "rdlc");
|
|
|
|
for (int i = 0; i < treeViewReportList.Nodes.Count; i++)
|
|
{
|
|
if ((treeViewReportList.Nodes[i].Tag != null) &&
|
|
(treeViewReportList.Nodes[i].Tag.GetType() == typeof(WlbReportInfo)))
|
|
{
|
|
reportInfo = (WlbReportInfo)treeViewReportList.Nodes[i].Tag;
|
|
|
|
if (reportInfo.ReportFile == reportFile)
|
|
{
|
|
treeViewReportList.SelectedNode = treeViewReportList.Nodes[i];
|
|
treeViewReportList.Select();
|
|
wlbReportView1.ViewerReportInfo = reportInfo;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Update report treeView when edit/add/delete report subscriptions
|
|
/// </summary>
|
|
private void UpdateReportTreeView()
|
|
{
|
|
// Begin update report treeView
|
|
treeViewReportList.BeginUpdate();
|
|
|
|
// If there is a selected subscription node, need to save it before it got cleared
|
|
// There is no need to save selected report node since it never got cleared
|
|
WlbReportSubscription selectedSub = null;
|
|
String selectedSubReportFile = String.Empty;
|
|
if (this.treeViewReportList.SelectedNode != null && this.treeViewReportList.SelectedNode.Tag != null && this.treeViewReportList.SelectedNode.Tag.GetType() == typeof(WlbReportSubscription))
|
|
{
|
|
// Save selected subscription node for later
|
|
selectedSub = (WlbReportSubscription)this.treeViewReportList.SelectedNode.Tag;
|
|
|
|
// Save the report file of the selected subscription node for later
|
|
selectedSubReportFile = ((WlbReportInfo)this.treeViewReportList.SelectedNode.Parent.Parent.Tag).ReportFile;
|
|
}
|
|
|
|
// Update subscription nodes
|
|
foreach (TreeNode reportNode in this.treeViewReportList.Nodes)
|
|
{
|
|
// Get subscriptions under the report node
|
|
Dictionary<string, WlbReportSubscription> subscriptionList = _subscriptionCollection.GetReportSubscriptionByReportName(((WlbReportInfo)reportNode.Tag).ReportFile);
|
|
|
|
// If there's subscriptions for the current report, add them
|
|
if (subscriptionList.Count > 0)
|
|
{
|
|
// Add a subscriptions folder if there isn't one
|
|
if (reportNode.GetNodeCount(true) == 0)
|
|
{
|
|
TreeNode subscriptionFolderNode = new TreeNode(Messages.WLB_SUBSCRIPTIONS, 2, 2);
|
|
reportNode.Nodes.Add(subscriptionFolderNode);
|
|
}
|
|
|
|
// Delete all the nodes to build the updated list
|
|
reportNode.Nodes[0].Nodes.Clear();
|
|
|
|
// Add in the latest nodes
|
|
if (selectedSub != null && String.Compare(selectedSubReportFile, ((WlbReportInfo)reportNode.Tag).ReportFile, true) == 0)
|
|
{
|
|
// Add new subscription node and retrieve selected node if there is one
|
|
AddNewSubscriptionNode(reportNode.Nodes[0], subscriptionList, ((WlbReportInfo)reportNode.Tag).ReportName, selectedSub);
|
|
}
|
|
else
|
|
{
|
|
// Add new subscription node
|
|
AddNewSubscriptionNode(reportNode.Nodes[0], subscriptionList, ((WlbReportInfo)reportNode.Tag).ReportName, null);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Force to select reportNode before clear reportNode's children node
|
|
// only if the original selected subscription has been deleted
|
|
// and there are no more subscriptions under the report
|
|
if (selectedSub != null && String.Compare(selectedSubReportFile, ((WlbReportInfo)reportNode.Tag).ReportFile, true) == 0)
|
|
{
|
|
this.treeViewReportList.SelectedNode = reportNode;
|
|
}
|
|
|
|
// Clear reportNode's children node (subscription folder node)
|
|
// if there is no subscription under the reportNode
|
|
reportNode.Nodes.Clear();
|
|
}
|
|
}
|
|
|
|
// End updating report treeView
|
|
treeViewReportList.EndUpdate();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Update subscriptionTreeView when Add/Edit/Delete subscription
|
|
/// </summary>
|
|
private void UpdateSubscriptionTreeView()
|
|
{
|
|
// Begin update subscription treeView
|
|
treeViewSubscriptionList.BeginUpdate();
|
|
|
|
// Save selected node if there is one
|
|
WlbReportSubscription selectedSub = null;
|
|
if (treeViewSubscriptionList.SelectedNode != null)
|
|
{
|
|
selectedSub = (WlbReportSubscription)treeViewSubscriptionList.SelectedNode.Tag;
|
|
}
|
|
|
|
// Delete all nodes
|
|
treeViewSubscriptionList.Nodes.Clear();
|
|
|
|
// Add subscription nodes if there is any
|
|
if (_subscriptionCollection.Count > 0)
|
|
{
|
|
foreach (string key in _subscriptionCollection.Keys)
|
|
{
|
|
TreeNode subNode = GetReportSubscriptionTreeNode(_subscriptionCollection[key]);
|
|
treeViewSubscriptionList.Nodes.Add(subNode);
|
|
|
|
// Retrieve selected node if there is one
|
|
if (selectedSub != null && String.Compare(_subscriptionCollection[key].Id, selectedSub.Id, true) == 0)
|
|
{
|
|
treeViewSubscriptionList.SelectedNode = subNode;
|
|
}
|
|
}
|
|
|
|
// Force to set selected node to the first node
|
|
// only if treeViewSubscriptionList has selected subscription node before update
|
|
// but the selected subscription doesn't exist anymore
|
|
if (selectedSub != null && treeViewSubscriptionList.SelectedNode == null)
|
|
{
|
|
treeViewSubscriptionList.SelectedNode = treeViewSubscriptionList.Nodes[0];
|
|
}
|
|
}
|
|
else if (selectedSub != null)
|
|
{
|
|
// No nodes left in the tree so select the current report in the reportviewer tree
|
|
foreach (TreeNode reportNode in this.treeViewReportList.Nodes)
|
|
{
|
|
if (((WlbReportInfo)reportNode.Tag).ReportName == selectedSub.ReportDisplayName)
|
|
{
|
|
treeViewReportList.SelectedNode = reportNode;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// End update subscription treeView
|
|
treeViewSubscriptionList.EndUpdate();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Adds an image list to the current treeview for use by each of the nodes types
|
|
/// </summary>
|
|
private ImageList CreateReportImageList()
|
|
{
|
|
ImageList reportImageList;
|
|
|
|
reportImageList = new ImageList();
|
|
|
|
reportImageList.Images.Add(Images.StaticImages._000_GetServerReport_h32bit_16);
|
|
reportImageList.Images.Add(Images.StaticImages.subscribe);
|
|
reportImageList.Images.Add(Images.StaticImages._000_Folder_open_h32bit_16);
|
|
|
|
return reportImageList;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Retrieve subscriptions and set _subscriptionCollection
|
|
/// </summary>
|
|
private void RetrieveSubscriptionCollection()
|
|
{
|
|
_subscriptionCollection = null;
|
|
|
|
RetrieveWlbConfigurationAction action = new RetrieveWlbConfigurationAction(_pool);
|
|
using (var dialog = new ActionProgressDialog(action, ProgressBarStyle.Blocks) {ShowCancel = true})
|
|
dialog.ShowDialog(this);
|
|
|
|
if (action.Succeeded)
|
|
{
|
|
var poolConfiguration = new WlbPoolConfiguration(action.WlbConfiguration);
|
|
_isCreedenceOrLater = poolConfiguration.IsCreedenceOrLater;
|
|
}
|
|
else
|
|
{
|
|
Close();
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Attempts to get the latest set of reports from the WLB server version 2.0
|
|
/// and beyond (it invokes and runs a call to the Kirkwood database via Xapi
|
|
/// to obtain report configuration data including the actual
|
|
/// rdlc report definitions).
|
|
/// If there are no report definitions on WLB server, it obtains them
|
|
/// from local XML file (the old way).
|
|
/// </summary>
|
|
private XmlNodeList GetReportsConfig()
|
|
{
|
|
string reportName = "get_report_definitions";
|
|
|
|
Dictionary<string, string> parms = new Dictionary<string, string>();
|
|
parms.Add("LocaleCode", Program.CurrentLanguage);
|
|
if (_isCreedenceOrLater)
|
|
{
|
|
parms.Add("ReportVersion", "Creedence");
|
|
parms.Add("PoolId", _pool.uuid);
|
|
}
|
|
|
|
AsyncAction action = new WlbReportAction(_pool.Connection,
|
|
Helpers.GetCoordinator(_pool.Connection),
|
|
reportName,
|
|
Messages.WLB_REPORT_DEFINITIONS,
|
|
true,
|
|
parms);
|
|
|
|
using (var dlg = new ActionProgressDialog(action, ProgressBarStyle.Marquee))
|
|
dlg.ShowDialog();
|
|
|
|
string returnValue = action.Result;
|
|
XmlDocument xmlReportsDoc = new XmlDocument();
|
|
|
|
if (action.Succeeded && !string.IsNullOrEmpty(returnValue))
|
|
{
|
|
try
|
|
{
|
|
xmlReportsDoc.LoadXml(returnValue);
|
|
}
|
|
catch
|
|
{
|
|
//ignore
|
|
}
|
|
}
|
|
|
|
if (!xmlReportsDoc.HasChildNodes || xmlReportsDoc.DocumentElement == null ||
|
|
!xmlReportsDoc.DocumentElement.HasChildNodes)
|
|
{
|
|
try
|
|
{
|
|
xmlReportsDoc.Load($@"{Application.StartupPath}\{"reports.xml"}");
|
|
}
|
|
catch
|
|
{
|
|
//ignore
|
|
}
|
|
}
|
|
|
|
return xmlReportsDoc.SelectNodes(@"Reports/Report");
|
|
}
|
|
|
|
// To enhance pool audit trail report, WLB server updates RDLC and would send user and object lists.
|
|
// These values are sent along with parameter keys "AuditUser", "AuditObject".
|
|
// The GetCustomXmlElement functions are used to retrieve the parameter values from WLB server.
|
|
private static XmlElement GetCustomXmlElement(XmlElement root)
|
|
{
|
|
XmlNodeList labelNodes = root.GetElementsByTagName("Custom");
|
|
if (labelNodes != null && labelNodes.Count > 0)
|
|
{
|
|
string xmlCustom = labelNodes[0].InnerXml;
|
|
XmlDocument xmlDoc = new XmlDocument();
|
|
xmlDoc.LoadXml("<root>" + xmlCustom + "</root>");
|
|
return xmlDoc.DocumentElement;
|
|
}
|
|
else
|
|
{
|
|
XmlDocument xmlDoc = new XmlDocument();
|
|
string searchStart = "Function Custom() As String";
|
|
string searchEnd = "\nEnd Function";
|
|
string xmlDocString = root.InnerXml;
|
|
int startPos = xmlDocString.IndexOf(searchStart, 0);
|
|
if (startPos > -1)
|
|
{
|
|
int endPos = xmlDocString.IndexOf(searchEnd, startPos);
|
|
string customString = xmlDocString.Substring(startPos + searchStart.Length, endPos - startPos - searchStart.Length);
|
|
customString = customString.Trim().Substring("Return".Length).Trim().Trim("\"".ToCharArray());
|
|
customString = HttpUtility.HtmlDecode(customString);
|
|
xmlDoc.LoadXml(customString);
|
|
return xmlDoc.DocumentElement;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static XmlElement GetCustomXmlElement(XmlElement root, string version)
|
|
{
|
|
XmlElement customXml = GetCustomXmlElement(root);
|
|
if (customXml != null)
|
|
{
|
|
XmlNodeList versionNodes = customXml.GetElementsByTagName("Version");
|
|
foreach (XmlNode thisNode in versionNodes)
|
|
{
|
|
if (thisNode.Attributes["value"].Value == version)
|
|
{
|
|
XmlDocument thisDoc = new XmlDocument();
|
|
thisDoc.LoadXml("<root>" + thisNode.InnerXml + "</root>");
|
|
return thisDoc.DocumentElement;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private static XmlElement GetCustomXmlElement(XmlElement root, string version, string tagName)
|
|
{
|
|
XmlElement customXml = GetCustomXmlElement(root, version);
|
|
if (customXml != null)
|
|
{
|
|
XmlNodeList tagNodes = customXml.GetElementsByTagName(tagName);
|
|
if (tagNodes != null && tagNodes.Count > 0)
|
|
{
|
|
XmlDocument thisDoc = new XmlDocument();
|
|
thisDoc.LoadXml("<root>" + tagNodes[0].InnerXml + "</root>");
|
|
return thisDoc.DocumentElement;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private static XmlElement GetCustomXmlElement(XmlNode root, string version, string tagName)
|
|
{
|
|
XmlDocument xmlDoc = new XmlDocument();
|
|
xmlDoc.LoadXml("<root>" + root.InnerXml + "</root>");
|
|
return GetCustomXmlElement(xmlDoc.DocumentElement, version, tagName);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Creates a node of type ReportTreeNode based on information specified from the XML report
|
|
/// configuration file.
|
|
/// </summary>
|
|
/// <param name="currentNode">Current report XML node from config file</param>
|
|
/// <returns></returns>
|
|
private TreeNode GetReportTreeNode(XmlNode currentNode)
|
|
{
|
|
// If the report definition node doesn't exist (old WLB version), load the definition from the
|
|
// local file system. Otherwise, the definition is present in the config from the WLB server
|
|
|
|
string nodeReportDefinition;
|
|
var rdlc = currentNode.SelectSingleNode(@"Rdlc");
|
|
var nodeFileName = currentNode.Attributes?["File"].Value;
|
|
|
|
if (rdlc == null)
|
|
{
|
|
XmlDocument xmlReportDefinition = new XmlDocument();
|
|
xmlReportDefinition.Load($@"{Application.StartupPath}\{nodeFileName}");
|
|
nodeReportDefinition = xmlReportDefinition.OuterXml;
|
|
}
|
|
else
|
|
{
|
|
nodeReportDefinition = rdlc.InnerText;
|
|
}
|
|
|
|
string nodeNameLabel = string.Empty;
|
|
|
|
if (currentNode.Attributes?["Name"] != null)
|
|
nodeNameLabel = currentNode.Attributes["Name"].Value;
|
|
else if (currentNode.Attributes?["NameLabel"].Value != null)
|
|
{
|
|
var obj = Messages.ResourceManager.GetObject(currentNode.Attributes?["NameLabel"].Value);
|
|
if (obj != null)
|
|
nodeNameLabel = obj.ToString();
|
|
}
|
|
|
|
var nodeDisplayFilter = currentNode.SelectSingleNode(@"QueryParameters/QueryParameter[@Name='Filter']") != null;
|
|
|
|
var nodeDisplayHosts = currentNode.SelectSingleNode(@"QueryParameters/QueryParameter[@Name='HostID']") != null;
|
|
|
|
var nodeDisplayUsers = currentNode.SelectSingleNode(@"QueryParameters/QueryParameter[@Name='AuditUser']") != null;
|
|
|
|
var nodeDisplayAuditObjects = currentNode.SelectSingleNode(@"QueryParameters/QueryParameter[@Name='AuditObject']") != null;
|
|
|
|
XmlElement queryParametersXmlElement = GetCustomXmlElement(currentNode, "Creedence", "QueryParameters");
|
|
var nodeParamDict = GetSQLQueryParamNames(currentNode, queryParametersXmlElement);
|
|
|
|
var reportInfo = new WlbReportInfo(nodeNameLabel,
|
|
nodeFileName,
|
|
nodeReportDefinition,
|
|
nodeDisplayHosts,
|
|
nodeDisplayFilter,
|
|
nodeDisplayUsers,
|
|
nodeDisplayAuditObjects,
|
|
nodeParamDict);
|
|
|
|
return new TreeNode
|
|
{
|
|
Tag = reportInfo,
|
|
Text = nodeNameLabel,
|
|
ImageIndex = 0,
|
|
SelectedImageIndex = 0
|
|
};
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Creates a treeNode for give report name and subscription object
|
|
/// </summary>
|
|
/// <param name="subscription">Instance of a subscription</param>
|
|
/// <returns>Return a instance of TreeNode</returns>
|
|
private TreeNode GetReportSubscriptionTreeNode(WlbReportSubscription subscription)
|
|
{
|
|
TreeNode subscriptionTreeNode = new TreeNode();
|
|
|
|
subscriptionTreeNode.Text = subscription.Name;
|
|
subscriptionTreeNode.Tag = subscription;
|
|
subscriptionTreeNode.ImageIndex = 1;
|
|
subscriptionTreeNode.SelectedImageIndex = 1;
|
|
|
|
return subscriptionTreeNode;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Returns a list of parameters names whose values will be required for reports' SQL query
|
|
/// to run. These names are specified in the Report XML configuration file.
|
|
/// </summary>
|
|
/// <param name="currentNode">Current report XML node from config file</param>
|
|
/// <param name="queryParametersXmlElement">Current report XML node from config file</param>
|
|
/// <returns>OrderedDictionary of parameter names and contents whose values are required by the report SQL query</returns>
|
|
private OrderedDictionary GetSQLQueryParamNames(XmlNode currentNode, XmlElement queryParametersXmlElement)
|
|
{
|
|
OrderedDictionary paramNames = new OrderedDictionary();
|
|
XmlNodeList paramNameNodes = currentNode.SelectNodes("QueryParameters/QueryParameter");
|
|
|
|
foreach (XmlNode paramNode in paramNameNodes)
|
|
{
|
|
if (paramNode.Attributes["Name"] != null)
|
|
{
|
|
string value = paramNode.Attributes["Name"].Value;
|
|
// To implement the AuditUser and AuditObject dropdowns, the values are set
|
|
// along with parameter "AuditUser' and "AuditObject" from WLB server.
|
|
// If the query parameters contain values, store them in dictionary.
|
|
// Else just store the parameter as key with "" value.
|
|
if(_isCreedenceOrLater && queryParametersXmlElement != null)
|
|
{
|
|
XmlNodeList valueTagNodes = queryParametersXmlElement.GetElementsByTagName(value);
|
|
if (valueTagNodes != null && valueTagNodes.Count > 0)
|
|
{
|
|
paramNames.Add(value, valueTagNodes[0].InnerText);
|
|
}
|
|
else
|
|
{
|
|
paramNames.Add(value, "");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
paramNames.Add(value, "");
|
|
}
|
|
}
|
|
}
|
|
|
|
return paramNames;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Add subscription nodes if a report has subscriptions
|
|
/// </summary>
|
|
/// <param name="subscriptions"></param>
|
|
/// <param name="reportName">Report display name that can be added to WlbReportSubscription instance</param>
|
|
/// <param name="selectedSub">The original selected node before update</param>
|
|
/// <param name="subscriptionFolder"></param>
|
|
private void AddNewSubscriptionNode(TreeNode subscriptionFolder, Dictionary<string, WlbReportSubscription> subscriptions, string reportName, WlbReportSubscription selectedSub)
|
|
{
|
|
foreach (WlbReportSubscription sub in subscriptions.Values)
|
|
{
|
|
sub.ReportDisplayName = reportName;
|
|
TreeNode subNode = GetReportSubscriptionTreeNode(sub);
|
|
subscriptionFolder.Nodes.Add(subNode);
|
|
|
|
// Retrieve selected subscription node if there is one
|
|
if (selectedSub != null && String.Compare(selectedSub.Id, sub.Id, true) == 0)
|
|
{
|
|
this.treeViewReportList.SelectedNode = subNode;
|
|
}
|
|
}
|
|
|
|
// Force to set selected node to the first subscription node of the report
|
|
// only if the original selected subscription node of the report has been deleted.
|
|
if (selectedSub != null && subscriptions.Count > 0 && (this.treeViewReportList.SelectedNode == null || this.treeViewReportList.SelectedNode.Tag == null))
|
|
{
|
|
this.treeViewReportList.SelectedNode = subscriptionFolder.Nodes[0];
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
#region Event Handlers
|
|
|
|
/// <summary>
|
|
/// Load report form
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void WorkloadReports_Load(object sender, EventArgs e)
|
|
{
|
|
subscriptionView1.OnChangeOK += OnChangeOK_Refresh;
|
|
wlbReportView1.OnChangeOK += OnChangeOK_Refresh;
|
|
|
|
RetrieveSubscriptionCollection();
|
|
_currentNodes = GetReportsConfig();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// When the report window is displayed, the current pool and a list of hosts that
|
|
/// correlate to the pool need to be set in the viewer control.
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void WorkloadReports_Shown(object sender, EventArgs e)
|
|
{
|
|
subscriptionView1.Pool = _pool;
|
|
wlbReportView1.Pool = _pool;
|
|
wlbReportView1.Hosts = _hosts;
|
|
wlbReportView1.IsCreedenceOrLater = _isCreedenceOrLater;
|
|
|
|
// Populate report treeview with report and subscription on the top of left panel
|
|
PopulateTreeViewReportList();
|
|
|
|
// Populate subscription treeview with subscription on the bottom of the left panel
|
|
PopulateTreeViewSubscriptionList();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Update report treeView and subscription treeView
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnChangeOK_Refresh(object sender, EventArgs e)
|
|
{
|
|
RetrieveSubscriptionCollection();
|
|
|
|
if (_subscriptionCollection != null)
|
|
{
|
|
// Update subscription treeView must be before updating report treeView
|
|
UpdateSubscriptionTreeView();
|
|
UpdateReportTreeView();
|
|
|
|
if (sender is WlbReportSubscriptionView)
|
|
subscriptionView1.RefreshSubscriptionView();
|
|
}
|
|
}
|
|
|
|
|
|
private void treeViewReportList_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
if (treeViewReportList.SelectedNode.Tag is WlbReportInfo report)
|
|
{
|
|
subscriptionView1.Visible = false;
|
|
wlbReportView1.RefreshReportViewer(report);
|
|
wlbReportView1.Visible = true;
|
|
|
|
if (_runReport)
|
|
{
|
|
wlbReportView1.RunReport();
|
|
_runReport = false;
|
|
}
|
|
}
|
|
else if (treeViewReportList.SelectedNode.Tag is WlbReportSubscription subscription)
|
|
{
|
|
wlbReportView1.Visible = false;
|
|
subscriptionView1.RefreshSubscriptionView(subscription);
|
|
subscriptionView1.Visible = true;
|
|
}
|
|
else
|
|
return;
|
|
|
|
treeViewSubscriptionList.SelectedNode = null;
|
|
}
|
|
|
|
|
|
private void treeViewSubscriptionList_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
if (treeViewSubscriptionList.SelectedNode.Tag is WlbReportSubscription subscription)
|
|
{
|
|
wlbReportView1.Visible = false;
|
|
subscriptionView1.RefreshSubscriptionView(subscription);
|
|
subscriptionView1.Visible = true;
|
|
|
|
treeViewReportList.SelectedNode = null;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Event handler for when a report is drilled in to from the MS Viewer inside the ReportView control.
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void wlbReportView1_ReportDrilledThrough(object sender, DrillthroughEventArgs e)
|
|
{
|
|
SynchTreeViewReportList(e.ReportPath.ToString());
|
|
}
|
|
|
|
private void wlbReportView1_Close(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
this.Dispose();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Event handler for a lost pool connection
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void wlbReportView1_PoolConnectionLost(object sender, EventArgs e)
|
|
{
|
|
using (var dlg = new InformationDialog(String.Format(Messages.WLB_REPORT_POOL_CONNECTION_LOST, _pool.Name()))
|
|
{WindowTitle = Messages.WLBREPORT_POOL_CONNECTION_LOST_CAPTION})
|
|
{
|
|
dlg.ShowDialog(this);
|
|
}
|
|
|
|
this.Close();
|
|
this.Dispose();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|