Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / Utils / TreePrinter.cs / 1305376 / TreePrinter.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Text;
namespace System.Data.Common.Utils
{
///
/// Represents a node in a hierarchical collection of information strings.
/// Intended as a common way mechanism to represent tree structures for debugging (using the TreePrinter class).
/// A node consists of a string (represented as a StringBuilder), its collection of child nodes, and an optional Tag value.
///
internal class TreeNode
{
private StringBuilder _text;
private List _children = new List();
private int _position;
// Default constructor
internal TreeNode()
{
_text = new StringBuilder();
}
///
/// Constructs a new TreeNode with the specified text, tag value and child nodes
///
/// The initial value of the new node's text
/// An optional list of initial child nodes
internal TreeNode(string text, params TreeNode[] children)
{
if (string.IsNullOrEmpty(text))
{
_text = new StringBuilder();
}
else
{
_text = new StringBuilder(text);
}
if (children != null)
{
_children.AddRange(children);
}
}
// IEnumerable convenience constructors
internal TreeNode(string text, List children)
: this(text)
{
if (children != null)
{
_children.AddRange(children);
}
}
// 'public' properties
///
/// The current text of this node.
///
internal StringBuilder Text { get { return _text; } }
///
/// The collection of child nodes for this node, which may be empty.
///
internal IList Children { get { return _children; } }
// Used only by the TreePrinter when generating the output string
internal int Position { get { return _position; } set { _position = value; } }
}
///
/// Generates a formatted string from a hierarchy of tree nodes. Derived types may override
/// the PreProcess, Before/AfterAppend, Print, PrintNode and PrintChildren methods to add
/// specific functionality at particular points in process of building the string.
///
internal abstract class TreePrinter
{
#region Private Instance Members
private List _scopes = new List();
private bool _showLines = true;
private char _horizontals = '_';
private char _verticals = '|';
#endregion
#region 'Public' API
///
/// Entry point method for the TreePrinter
///
/// The TreeNode instance that is the root of the tree to be printed
/// A string representation of the specified tree
internal virtual string Print(TreeNode node)
{
this.PreProcess(node);
StringBuilder text = new StringBuilder();
PrintNode(text, node);
return text.ToString();
}
#endregion
#region 'Protected' API
// 'protected' constructor
internal TreePrinter() { }
// 'protected' API that may be overriden to customize printing
///
/// Called once on the root of the tree before printing begins
///
/// The TreeNode that is the root of the tree
internal virtual void PreProcess(TreeNode node) { }
///
/// Called once for every node after indentation, connecting lines and the node's text value
/// have been added to the output but before the line suffix (if any) has been added.
///
/// The current node
/// The StringBuilder into which the tree is being printed
internal virtual void AfterAppend(TreeNode node, StringBuilder text) { }
///
/// Called once for every node immediately after the line prefix (if any) and appropriate
/// indentation and connecting lines have been added to the output but before the node's
/// text value has been added.
///
/// The current node
/// The StringBuilder into which the tree is being printed
internal virtual void BeforeAppend(TreeNode node, StringBuilder text) { }
///
/// The recursive step of the printing process, called once for each TreeNode in the tree
///
/// The StringBuilder into which the tree is being printed
/// The current node that should be printed to the StringBuilder
internal virtual void PrintNode(StringBuilder text, TreeNode node)
{
IndentLine(text);
this.BeforeAppend(node, text);
text.Append(node.Text.ToString());
this.AfterAppend(node, text);
PrintChildren(text, node);
}
///
/// Called to recursively visit the child nodes of the current TreeNode.
///
/// The StringBuilder into which the tree is being printed
/// The current node
internal virtual void PrintChildren(StringBuilder text, TreeNode node)
{
_scopes.Add(node);
node.Position = 0;
foreach (TreeNode childNode in node.Children)
{
text.AppendLine();
node.Position++;
PrintNode(text, childNode);
}
_scopes.RemoveAt(_scopes.Count - 1);
}
#endregion
#region Private Implementation
private void IndentLine(StringBuilder text)
{
int idx = 0;
for (int scopeIdx = 0; scopeIdx < _scopes.Count; scopeIdx++)
{
TreeNode parentScope = _scopes[scopeIdx];
if (!_showLines || (parentScope.Position == parentScope.Children.Count && scopeIdx != _scopes.Count - 1))
{
text.Append(' ');
}
else
{
text.Append(_verticals);
}
idx++;
if (_scopes.Count == idx && _showLines)
{
text.Append(_horizontals);
}
else
{
text.Append(' ');
}
}
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridRowAutomationPeer.cs
- ListView.cs
- QilPatternVisitor.cs
- HijriCalendar.cs
- XmlNamespaceDeclarationsAttribute.cs
- FlowPanelDesigner.cs
- NumberAction.cs
- AspProxy.cs
- WpfXamlMember.cs
- SchemaImporterExtensionElement.cs
- MultipartContentParser.cs
- NativeRecognizer.cs
- TextFormatter.cs
- XmlHierarchyData.cs
- XamlFilter.cs
- BinHexDecoder.cs
- X509Utils.cs
- assertwrapper.cs
- glyphs.cs
- _ContextAwareResult.cs
- TransactionalPackage.cs
- SecurityDocument.cs
- login.cs
- ImageButton.cs
- ParseChildrenAsPropertiesAttribute.cs
- RequestCachingSection.cs
- UniqueIdentifierService.cs
- MultiSelectRootGridEntry.cs
- CustomAssemblyResolver.cs
- ColorContext.cs
- ProcessHostServerConfig.cs
- ThemeDirectoryCompiler.cs
- HtmlInputCheckBox.cs
- RelationshipEndMember.cs
- NotifyInputEventArgs.cs
- DiscoveryVersionConverter.cs
- UriWriter.cs
- ParseChildrenAsPropertiesAttribute.cs
- GridItemCollection.cs
- PriorityQueue.cs
- RectangleHotSpot.cs
- DataTemplateSelector.cs
- KnownTypeDataContractResolver.cs
- CodeAttributeArgument.cs
- RawStylusActions.cs
- ImageCodecInfo.cs
- RootBuilder.cs
- Visual3DCollection.cs
- DispatchChannelSink.cs
- TemplateApplicationHelper.cs
- PhonemeEventArgs.cs
- VirtualizedItemPattern.cs
- SmtpFailedRecipientsException.cs
- DataViewListener.cs
- ItemList.cs
- InkCanvas.cs
- HtmlEmptyTagControlBuilder.cs
- UriWriter.cs
- SecurityElement.cs
- ExtensionElement.cs
- EventBuilder.cs
- SoundPlayer.cs
- InputLanguageCollection.cs
- TextLineBreak.cs
- SafeTimerHandle.cs
- IISUnsafeMethods.cs
- CheckBox.cs
- XsltSettings.cs
- CommandManager.cs
- HScrollProperties.cs
- AsymmetricAlgorithm.cs
- InvalidPropValue.cs
- PropertyTabAttribute.cs
- ToolStripDropDownButton.cs
- CheckBoxRenderer.cs
- XmlSchemaAnyAttribute.cs
- StylusPointProperties.cs
- TransformerTypeCollection.cs
- HttpProcessUtility.cs
- DataSourceControl.cs
- OdbcConnectionOpen.cs
- ParsedAttributeCollection.cs
- HitTestDrawingContextWalker.cs
- SQLByteStorage.cs
- PiiTraceSource.cs
- RectangleGeometry.cs
- ZoneButton.cs
- RenderCapability.cs
- DataGridViewCellValidatingEventArgs.cs
- PTConverter.cs
- EventWaitHandleSecurity.cs
- RubberbandSelector.cs
- ControlPager.cs
- DbBuffer.cs
- EntitySetBase.cs
- ApplicationDirectoryMembershipCondition.cs
- EastAsianLunisolarCalendar.cs
- graph.cs
- ZipIOLocalFileBlock.cs