File: System\ServiceModel\MessageQuerySet.cs
Project: ndp\cdf\src\NetFx40\System.ServiceModel.Activities\System.ServiceModel.Activities.csproj (System.ServiceModel.Activities)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.ServiceModel
{
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ServiceModel.Activities;
    using System.ServiceModel.Dispatcher;
    using System.Diagnostics.CodeAnalysis;
    using System.Runtime;
    using System.Runtime.Serialization;
    using System.Security.Permissions;
 
    [SuppressMessage(FxCop.Category.Naming, FxCop.Rule.IdentifiersShouldHaveCorrectSuffix,
        Justification = "Arch approved name")]
    [SuppressMessage(FxCop.Category.Usage, FxCop.Rule.MarkISerializableTypesWithSerializable,
        Justification = "TODO 87908, We can consider not deriving from Dictionary")]
    public class MessageQuerySet : Dictionary<string, MessageQuery>
    {
        public MessageQuerySet()
        {
        }
 
        public MessageQuerySet(MessageQueryTable<string> queryTable)
        {
            if (queryTable == null)
            {
                throw FxTrace.Exception.ArgumentNull("queryTable");
            }
 
            InvertDictionary<MessageQuery, string>(queryTable, this);
        }
 
        [DefaultValue(null)]
        public string Name
        {
            get;
            set;
        }
 
        public MessageQueryTable<string> GetMessageQueryTable()
        {
            MessageQueryTable<string> result = new MessageQueryTable<string>();
            InvertDictionary<string, MessageQuery>(this, result);
            return result;
        }
 
 
        static void InvertDictionary<TKey, TValue>(IDictionary<TKey, TValue> source, IDictionary<TValue, TKey> destination)
        {
            foreach (KeyValuePair<TKey, TValue> vkpair in source)
            {
                destination.Add(vkpair.Value, vkpair.Key);
            }
        }
    }
}