Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / TrustUi / MS / Internal / documents / Application / ChainOfDependencies.cs / 1 / ChainOfDependencies.cs
//------------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// A Generic that provides user with the ability to chain dependent objects
// of a shared base type and perform actions on them in order of dependency.
//
//
// History:
// 08/28/2005: [....]: Initial implementation.
//-----------------------------------------------------------------------------
namespace MS.Internal.Documents.Application
{
///
/// A Generic that provides user with the ability to chain dependent objects
/// of a shared base type and perform actions on them in order of dependency.
///
///
/// This is different from the chain of responsiblity in the following ways:
///
/// - Order of execution in the chain can be inversed by calling LastToFirst.
/// - The same operation is performed on each member once.
///
/// This class has many methods which are intentionaly recursive. There is
/// currently no validation to prevent cyclic dependencies. As the chain is
/// currently fixed at compile time there is no need; StackOverFlowException
/// durring testing is fine.
///
/// A type common to all in the chain.
internal static class ChainOfDependencies where T : IChainOfDependenciesNode
{
#region Internal Methods
//-------------------------------------------------------------------------
// Internal Methods
//-------------------------------------------------------------------------
///
/// Gets the last member in the chain. (The one with no dependencies.)
///
/// The current member.
/// The last member in the chain. (The one with no dependencies.)
///
internal static T GetLast(T member)
{
T last = member;
if (member.Dependency != null)
{
last = GetLast(member.Dependency);
}
return last;
}
///
/// Will perform the action from the member with no dependencies to the most
/// dependent member.
///
/// The member on which to perform the action.
/// The action to perform on the member.
/// Returns true if all the actions returned true.
internal static bool OrderByLeastDependent(
T member,
ChainOfDependencies.Action action)
{
bool satisfied = true;
T nextInChain = member.Dependency;
if (nextInChain != null)
{
satisfied = OrderByLeastDependent(nextInChain, action);
}
if (satisfied)
{
satisfied = action(member);
}
else
{
Trace.SafeWrite(
Trace.File,
"Dependency for {0}#{1} was not satisfied skipping action.",
member.GetType(),
member.GetHashCode());
}
return satisfied;
}
///
/// Will perform the action from most dependent to not dependent.
///
/// The member on which to perform the action.
/// The action to perform on the member.
/// Returns true if the all the actions returned true.
internal static bool OrderByMostDependent(
T member,
ChainOfDependencies.Action action)
{
bool satisfied = action(member);
T nextInChain = member.Dependency;
if (satisfied)
{
if (nextInChain != null)
{
satisfied = OrderByMostDependent(nextInChain, action);
}
}
else
{
Trace.SafeWrite(
Trace.File,
"Dependency for {0}#{1} was not satisfied skipping action.",
member.GetType(),
member.GetHashCode());
}
return satisfied;
}
#endregion Internal Methods
#region Internal Delegates
//--------------------------------------------------------------------------
// Internal Delegates
//-------------------------------------------------------------------------
///
/// An action to perform on a ChainOfDependencies member.
///
/// The member on which to perform the action.
/// True if the dependency was satisfied.
internal delegate bool Action(T member);
#endregion Internal Delegates
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Attributes.cs
- MappedMetaModel.cs
- SEHException.cs
- ServiceBuildProvider.cs
- HwndKeyboardInputProvider.cs
- ChtmlMobileTextWriter.cs
- HttpWebRequest.cs
- ProcessModule.cs
- ValidationHelpers.cs
- SiteMapSection.cs
- BitmapEffectCollection.cs
- Site.cs
- FixedSOMContainer.cs
- DiscreteKeyFrames.cs
- Normalization.cs
- FilterException.cs
- ModelUtilities.cs
- ParenExpr.cs
- ChildTable.cs
- LabelTarget.cs
- BaseCollection.cs
- DbSourceParameterCollection.cs
- Int16.cs
- XmlBaseWriter.cs
- parserscommon.cs
- Function.cs
- BamlLocalizationDictionary.cs
- Rfc4050KeyFormatter.cs
- TextViewElement.cs
- ItemsPresenter.cs
- PermissionToken.cs
- MenuAdapter.cs
- ConditionBrowserDialog.cs
- DataGridViewColumnEventArgs.cs
- CompareValidator.cs
- ToolStripPanelRow.cs
- ByteStream.cs
- GlyphCache.cs
- QilInvokeLateBound.cs
- XmlEncoding.cs
- Polygon.cs
- TextTreeDeleteContentUndoUnit.cs
- EventDescriptor.cs
- TableDetailsRow.cs
- SettingsPropertyValue.cs
- ResourceReader.cs
- StaticSiteMapProvider.cs
- DiffuseMaterial.cs
- GZipObjectSerializer.cs
- SqlDataSourceSelectingEventArgs.cs
- StringPropertyBuilder.cs
- HttpRuntimeSection.cs
- SerialReceived.cs
- AnimatedTypeHelpers.cs
- SystemPens.cs
- DataControlButton.cs
- TimeStampChecker.cs
- PersistenceTypeAttribute.cs
- safelink.cs
- BitmapEncoder.cs
- XmlQueryTypeFactory.cs
- StorageScalarPropertyMapping.cs
- DataGridCellsPanel.cs
- DictionaryEntry.cs
- ConnectionManager.cs
- GetResponse.cs
- TCPListener.cs
- WriteFileContext.cs
- CachedBitmap.cs
- XPathAncestorIterator.cs
- RegexEditorDialog.cs
- ToolStripControlHost.cs
- TransformGroup.cs
- XmlSchema.cs
- SafeFileMappingHandle.cs
- AppDomainManager.cs
- BitmapVisualManager.cs
- TreeViewImageIndexConverter.cs
- CqlWriter.cs
- ListBindingHelper.cs
- Vector3DCollection.cs
- SystemBrushes.cs
- PersonalizationStateInfo.cs
- Model3DCollection.cs
- AsymmetricAlgorithm.cs
- DataRelationCollection.cs
- ComboBoxAutomationPeer.cs
- WindowsToolbarAsMenu.cs
- Validator.cs
- XmlSerializationReader.cs
- XsltConvert.cs
- SimpleHandlerFactory.cs
- KnownColorTable.cs
- SafeUserTokenHandle.cs
- ToolBarPanel.cs
- hwndwrapper.cs
- TreeViewItemAutomationPeer.cs
- ComponentResourceKeyConverter.cs
- HtmlInputText.cs
- ImageInfo.cs