e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
70 lines
2.6 KiB
C#
70 lines
2.6 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="RuleInfoComparer.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.Configuration
|
|
{
|
|
using System;
|
|
using System.Xml;
|
|
using System.Configuration;
|
|
using System.Collections.Specialized;
|
|
using System.Collections;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.ComponentModel;
|
|
using System.Web.Hosting;
|
|
using System.Web.Util;
|
|
using System.Web.Configuration;
|
|
using System.Web.Management;
|
|
using System.Web.Compilation;
|
|
|
|
//
|
|
// This class is used to compare two RuleInfo object. Basically, the array list
|
|
// will be sorted based on class hierachical order. The smaller the value, the
|
|
// more nearer the class is to the root (WebBaseEvent), in a class inheritance sense.
|
|
//
|
|
// On the other hand, if x > y, it means x is NOT a parent class of y.
|
|
//
|
|
// The array is sorted in this way so that if we want to find out the config setting of
|
|
// an event class x, we start searching in a decreasing order, and the first entry (E)
|
|
// that satifies the test: if (x is E), then we find the right settings for x.
|
|
//
|
|
// BTW, this is just a trick to save me from writing too much code. A n-node tree
|
|
// method is faster, but I was too lazy.
|
|
//
|
|
internal class RuleInfoComparer : IComparer{
|
|
public int Compare(object x, object y) {
|
|
int res;
|
|
|
|
Type xType =
|
|
((HealthMonitoringSectionHelper.RuleInfo)x)._eventMappingSettings.RealType;
|
|
Type yType =
|
|
((HealthMonitoringSectionHelper.RuleInfo)y)._eventMappingSettings.RealType;
|
|
|
|
if (xType.Equals(yType)) {
|
|
res = 0;
|
|
}
|
|
else if (xType.IsSubclassOf(yType)) {
|
|
res = 1;
|
|
}
|
|
else if (yType.IsSubclassOf(xType)) {
|
|
res = -1;
|
|
}
|
|
else {
|
|
// If they're unrelated, we can't return 0 because it
|
|
// will confuse the sorting method.
|
|
// We can return 1 or -1, but it must be consistent.
|
|
return String.Compare(xType.ToString(), yType.ToString(), StringComparison.Ordinal);
|
|
}
|
|
|
|
Debug.Trace("RuleInfoComparer", "xType=" + xType.ToString() +
|
|
"; yType=" + yType.ToString() + "; res=" + res);
|
|
|
|
return res;
|
|
}
|
|
}
|
|
}
|