ResourceAssociationSet.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Providers / ResourceAssociationSet.cs / 1305376 / ResourceAssociationSet.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//  
//      Describes an association between two resource sets.
//  
// 
// @owner  [....]
//--------------------------------------------------------------------- 

namespace System.Data.Services.Providers
{
    using System.Diagnostics; 
    using System.Collections.Generic;
 
    ///  
    /// Class to describe an association between two resource sets.
    ///  
    [DebuggerDisplay("ResourceAssociationSet: ({End1.ResourceSet.Name}, {End1.ResourceType.Name}, {End1.ResourceProperty.Name}) <-> ({End2.ResourceSet.Name}, {End2.ResourceType.Name}, {End2.ResourceProperty.Name})")]
    public sealed class ResourceAssociationSet
    {
        #region Private Fields 

        ///  
        /// Name of the association set. 
        /// 
        private readonly string name; 

        /// 
        /// End1 of the association set.
        ///  
        private readonly ResourceAssociationSetEnd end1;
 
        ///  
        /// End2 of the association set.
        ///  
        private readonly ResourceAssociationSetEnd end2;

        #endregion Private Fields
 
        #region Constructor
 
        ///  
        /// Constructs a resource association set instance.
        ///  
        /// Name of the association set.
        /// end1 of the association set.
        /// end2 of the association set.
        public ResourceAssociationSet(string name, ResourceAssociationSetEnd end1, ResourceAssociationSetEnd end2) 
        {
            WebUtil.CheckStringArgumentNull(name, "name"); 
            WebUtil.CheckArgumentNull(end1, "end1"); 
            WebUtil.CheckArgumentNull(end2, "end2");
 
            if (end1.ResourceProperty == null && end2.ResourceProperty == null)
            {
                throw new ArgumentException(Strings.ResourceAssociationSet_ResourcePropertyCannotBeBothNull);
            } 

            if (end1.ResourceType == end2.ResourceType && end1.ResourceProperty == end2.ResourceProperty) 
            { 
                throw new ArgumentException(Strings.ResourceAssociationSet_SelfReferencingAssociationCannotBeBiDirectional);
            } 

            this.name = name;
            this.end1 = end1;
            this.end2 = end2; 
        }
 
        #endregion Constructor 

        #region Properties 

        /// 
        /// Name of the association set.
        ///  
        public string Name
        { 
            [DebuggerStepThrough] 
            get { return this.name; }
        } 

        /// 
        /// Source end of the association set.
        ///  
        public ResourceAssociationSetEnd End1
        { 
            [DebuggerStepThrough] 
            get { return this.end1; }
        } 

        /// 
        /// Target end of the association set.
        ///  
        public ResourceAssociationSetEnd End2
        { 
            [DebuggerStepThrough] 
            get { return this.end2; }
        } 

        /// 
        /// Resource association type for the set.
        ///  
        internal ResourceAssociationType ResourceAssociationType
        { 
            get; 
            set;
        } 

        #endregion Properties

        #region Methods 

        ///  
        /// Retrieve the end for the given resource set, type and property. 
        /// 
        /// resource set for the end 
        /// resource type for the end
        /// resource property for the end
        /// Resource association set end for the given parameters
        internal ResourceAssociationSetEnd GetResourceAssociationSetEnd(ResourceSetWrapper resourceSet, ResourceType resourceType, ResourceProperty resourceProperty) 
        {
            Debug.Assert(resourceSet != null, "resourceSet != null"); 
            Debug.Assert(resourceType != null, "resourceType != null"); 

            foreach (ResourceAssociationSetEnd end in new[] { this.end1, this.end2 }) 
            {
                if (end.ResourceSet.Name == resourceSet.Name && end.ResourceType.IsAssignableFrom(resourceType))
                {
                    if ((end.ResourceProperty == null && resourceProperty == null) || 
                        (end.ResourceProperty != null && resourceProperty != null && end.ResourceProperty.Name == resourceProperty.Name))
                    { 
                        return end; 
                    }
                } 
            }

            return null;
        } 

        ///  
        /// Retrieve the related end for the given resource set, type and property. 
        /// 
        /// resource set for the source end 
        /// resource type for the source end
        /// resource property for the source end
        /// Related resource association set end for the given parameters
        internal ResourceAssociationSetEnd GetRelatedResourceAssociationSetEnd(ResourceSetWrapper resourceSet, ResourceType resourceType, ResourceProperty resourceProperty) 
        {
            Debug.Assert(resourceSet != null, "resourceSet != null"); 
            Debug.Assert(resourceType != null, "resourceType != null"); 

            ResourceAssociationSetEnd thisEnd = this.GetResourceAssociationSetEnd(resourceSet, resourceType, resourceProperty); 

            if (thisEnd != null)
            {
                return thisEnd == this.End1 ? this.End2 : this.End1; 
            }
 
            return null; 
        }
 
        #endregion Methods
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK