Ejemplo n.º 1
0
		private void RefreshNode(
			TreeTask     treeTask,
			TreeJob      parentJob,
			TreeNode     treeNode,
			ProgressItem progress
		)
		{
			ConcreteTemplateNodeDefinition nodeDefinition = treeNode.Tag as ConcreteTemplateNodeDefinition;

			if (treeTask.CancellationSource.IsCancellationRequested)
			{
				return;
			}

			if (nodeDefinition == null)
			{
				return;
			}

			TreeJob treeJob = new TreeJob(nodeDefinition);

			if (parentJob != null)
			{
				parentJob.AddChildJob(treeJob);
				treeJob.Parent = parentJob;
			}

			WeakReference treeNodeRef = new WeakReference(treeNode);

			treeTask.JobCompleted += (sender, args) =>
			{
				TreeTask task = sender as TreeTask;

				if (task != null && treeNodeRef.IsAlive)
				{
					if (!task.CancellationSource.IsCancellationRequested)
					{
						TreeNode targetNode = (TreeNode) treeNodeRef.Target;
						UpdateTreeCounts(targetNode, task.Info.Mode);
					}
				}
			};

			bool refreshChildren = treeTask.Info.Hierarchically;

			Action refreshNodeAction = () =>
			{
				try
				{
					TemplateNodeInfo templateNode = nodeDefinition.TemplateNode;

					if (templateNode == null || !nodeDefinition.NodeAvailable)
					{
						return;
					}

					templateNode.LastUpdateNode = DateTime.Now;

					CurrentStorage storage = GetStorage(templateNode.ConnectionGroup);

					templateNode.LoadUserParameters(storage);

					if (nodeDefinition.NodeActivated)
					{
						RefreshQueries(treeTask, nodeDefinition, progress);
					}

					if (templateNode.IsLeaf())
					{
						return;
					}

					AddLoadingNode(treeNode);

					templateNode.UpdateChildren(treeTask.Info.Mode, treeTask.CancellationSource);
					FillTreeNodes(templateNode, treeNode.Nodes);

					if (refreshChildren)
					{
						treeJob.PromisedChildCount = treeNode.Nodes.Count;

						foreach (TreeNode node in treeNode.Nodes)
						{
							if (node != null)
							{
								RefreshNode(treeTask, treeJob, node, progress);
							}
						}
					}
				}
				catch (Exception exc)
				{
					log.Error("MSSQLServerAuditor.Managers:RefreshNode:subTask (Exception)", exc);
				}
			};

			treeJob.Action = refreshNodeAction;

			lock (this._schedulingLock)
			{
				treeTask.Schedule(treeJob);
			}
		}
Ejemplo n.º 2
0
        private void RefreshNode(
            TreeTask treeTask,
            TreeJob parentJob,
            TreeNode treeNode,
            ProgressItem progress
            )
        {
            ConcreteTemplateNodeDefinition nodeDefinition = treeNode.Tag as ConcreteTemplateNodeDefinition;

            if (treeTask.CancellationSource.IsCancellationRequested)
            {
                return;
            }

            if (nodeDefinition == null)
            {
                return;
            }

            TreeJob treeJob = new TreeJob(nodeDefinition);

            if (parentJob != null)
            {
                parentJob.AddChildJob(treeJob);
                treeJob.Parent = parentJob;
            }

            WeakReference treeNodeRef = new WeakReference(treeNode);

            treeTask.JobCompleted += (sender, args) =>
            {
                TreeTask task = sender as TreeTask;

                if (task != null && treeNodeRef.IsAlive)
                {
                    if (!task.CancellationSource.IsCancellationRequested)
                    {
                        TreeNode targetNode = (TreeNode)treeNodeRef.Target;
                        UpdateTreeCounts(targetNode, task.Info.Mode);
                    }
                }
            };

            bool refreshChildren = treeTask.Info.Hierarchically;

            Action refreshNodeAction = () =>
            {
                try
                {
                    TemplateNodeInfo templateNode = nodeDefinition.TemplateNode;

                    if (templateNode == null || !nodeDefinition.NodeAvailable)
                    {
                        return;
                    }

                    templateNode.LastUpdateNode = DateTime.Now;

                    CurrentStorage storage = GetStorage(templateNode.ConnectionGroup);

                    templateNode.LoadUserParameters(storage);

                    if (nodeDefinition.NodeActivated)
                    {
                        RefreshQueries(treeTask, nodeDefinition, progress);
                    }

                    if (templateNode.IsLeaf())
                    {
                        return;
                    }

                    AddLoadingNode(treeNode);

                    templateNode.UpdateChildren(treeTask.Info.Mode, treeTask.CancellationSource);
                    FillTreeNodes(templateNode, treeNode.Nodes);

                    if (refreshChildren)
                    {
                        treeJob.PromisedChildCount = treeNode.Nodes.Count;

                        foreach (TreeNode node in treeNode.Nodes)
                        {
                            if (node != null)
                            {
                                RefreshNode(treeTask, treeJob, node, progress);
                            }
                        }
                    }
                }
                catch (Exception exc)
                {
                    log.Error("MSSQLServerAuditor.Managers:RefreshNode:subTask (Exception)", exc);
                }
            };

            treeJob.Action = refreshNodeAction;

            lock (this._schedulingLock)
            {
                treeTask.Schedule(treeJob);
            }
        }