Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Configuration / XPathMessageFilterElementComparer.cs / 1 / XPathMessageFilterElementComparer.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Configuration
{
using System;
using System.ServiceModel.Dispatcher;
using System.Collections;
using System.Text;
using System.Xml;
public class XPathMessageFilterElementComparer : IComparer
{
#region IComparer Members
int IComparer.Compare(object x, object y)
{
string elementKey1 = TranslateObjectToElementKey(x);
string elementKey2 = TranslateObjectToElementKey(y);
return String.Compare(elementKey1, elementKey2, StringComparison.Ordinal);
}
#endregion
internal static string ParseXPathString(XPathMessageFilter filter)
{
return XPathMessageFilterElementComparer.ParseXPathString(filter, false);
}
internal static string ParseXPathString(XPathMessageFilter filter, bool throwOnFailure)
{
XPathLexer lexer = new XPathLexer(filter.XPath);
return XPathMessageFilterElementComparer.ParseXPathString(lexer, filter.Namespaces, throwOnFailure);
}
static string ParseXPathString(XPathLexer lexer, XmlNamespaceManager namespaceManager, bool throwOnFailure)
{
string retVal = String.Empty;
int currentTokenStart = lexer.FirstTokenChar;
if (lexer.MoveNext())
{
XPathToken token = lexer.Token;
StringBuilder xPathString = new StringBuilder(XPathMessageFilterElementComparer.ParseXPathString(lexer, namespaceManager, throwOnFailure));
if (XPathTokenID.NameTest == token.TokenID)
{
string nsPrefix = token.Prefix;
if (!String.IsNullOrEmpty(nsPrefix))
{
string ns = namespaceManager.LookupNamespace(nsPrefix);
if (!String.IsNullOrEmpty(ns))
{
xPathString = xPathString.Replace(nsPrefix, ns, currentTokenStart, nsPrefix.Length);
}
else
{
if (throwOnFailure)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new IndexOutOfRangeException(SR.GetString(SR.ConfigXPathNamespacePrefixNotFound, nsPrefix)));
}
}
}
}
retVal = xPathString.ToString();
}
else
{
retVal = lexer.ConsumedSubstring();
}
return retVal;
}
string TranslateObjectToElementKey(object obj)
{
string elementKey = null;
if (obj.GetType().IsAssignableFrom(typeof(XPathMessageFilter)))
{
elementKey = XPathMessageFilterElementComparer.ParseXPathString((XPathMessageFilter)obj);
}
else if (obj.GetType().IsAssignableFrom(typeof(XPathMessageFilterElement)))
{
elementKey = XPathMessageFilterElementComparer.ParseXPathString(((XPathMessageFilterElement)obj).Filter);
}
else if (obj.GetType().IsAssignableFrom(typeof(string)))
{
elementKey = (string)obj;
}
if (String.IsNullOrEmpty(elementKey))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(
SR.GetString(SR.ConfigCannotParseXPathFilter, obj.GetType().AssemblyQualifiedName)));
}
return elementKey;
}
}
}
// 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
- ItemsChangedEventArgs.cs
- ApplyTemplatesAction.cs
- DetailsViewPageEventArgs.cs
- TextContainer.cs
- HtmlWindowCollection.cs
- PropertyEmitter.cs
- SqlNotificationRequest.cs
- SortDescriptionCollection.cs
- SqlDataSourceAdvancedOptionsForm.cs
- InvocationExpression.cs
- SqlDataSourceSummaryPanel.cs
- LambdaExpression.cs
- AbandonedMutexException.cs
- CollectionBuilder.cs
- StringKeyFrameCollection.cs
- GregorianCalendarHelper.cs
- FrameworkContentElement.cs
- DateTimeEditor.cs
- Table.cs
- SoapIncludeAttribute.cs
- VariableQuery.cs
- ViewBase.cs
- SaveFileDialog.cs
- ObjectTag.cs
- FunctionDefinition.cs
- GreaterThanOrEqual.cs
- OutputCacheSettingsSection.cs
- WebBrowserNavigatingEventHandler.cs
- DataGridViewColumnStateChangedEventArgs.cs
- ParameterCollectionEditorForm.cs
- PreservationFileWriter.cs
- GatewayIPAddressInformationCollection.cs
- TdsParser.cs
- Operators.cs
- ListViewItem.cs
- PublisherIdentityPermission.cs
- TextLineResult.cs
- XmlImplementation.cs
- LayoutUtils.cs
- ExpressionConverter.cs
- Walker.cs
- StrokeNodeEnumerator.cs
- TreeViewDesigner.cs
- SQLMoney.cs
- SortKey.cs
- BaseCodeDomTreeGenerator.cs
- IconHelper.cs
- GeneralTransform.cs
- DivideByZeroException.cs
- AppearanceEditorPart.cs
- SHA256.cs
- RequestTimeoutManager.cs
- GeometryGroup.cs
- CodeGroup.cs
- OutOfProcStateClientManager.cs
- GeneralTransformGroup.cs
- TypeLoadException.cs
- StatusStrip.cs
- OracleDataReader.cs
- SoundPlayer.cs
- FormatSettings.cs
- XmlSchemaFacet.cs
- TimeSpanOrInfiniteConverter.cs
- JsonFormatReaderGenerator.cs
- Tile.cs
- DataGridViewComboBoxEditingControl.cs
- XmlSchemaExporter.cs
- CodeDOMUtility.cs
- connectionpool.cs
- ReadOnlyHierarchicalDataSource.cs
- MetadataItemSerializer.cs
- _Win32.cs
- XmlSchemaDocumentation.cs
- selecteditemcollection.cs
- SmiXetterAccessMap.cs
- CompareValidator.cs
- CodeTypeReferenceCollection.cs
- ScriptingProfileServiceSection.cs
- RenderDataDrawingContext.cs
- RelOps.cs
- AnnotationObservableCollection.cs
- PropertyInformationCollection.cs
- OperatingSystem.cs
- EventLogTraceListener.cs
- XmlSerializerOperationBehavior.cs
- UnsafeNativeMethodsMilCoreApi.cs
- OperatingSystem.cs
- MetabaseServerConfig.cs
- AudioDeviceOut.cs
- PeerChannelFactory.cs
- DataControlButton.cs
- MenuItemCollectionEditor.cs
- UnrecognizedAssertionsBindingElement.cs
- TreeNodeStyle.cs
- TreeView.cs
- ListControlBoundActionList.cs
- BuildManagerHost.cs
- ToolStripItemBehavior.cs
- LoginName.cs
- FieldNameLookup.cs