public void AddResourceLinkage(IServiceModel serviceModel, IToManyIncludedResources toManyIncludedResources)
        {
            Contract.Requires(serviceModel != null);

            if (toManyIncludedResources == null)
            {
                return;
            }

            this.AddResourceLinkage(serviceModel,
                                    toManyIncludedResources.FromResourceType,
                                    toManyIncludedResources.FromResource,
                                    toManyIncludedResources.FromRel,
                                    toManyIncludedResources.ToResourceType,
                                    toManyIncludedResources.ToResourceCollection);
        }
        // PRIVATE METHODS //////////////////////////////////////////////////
        #region Methods
        private void AddResourceLinkage(IToManyIncludedResources <TFromResource, TToResource> toManyIncludedResources)
        {
            Contract.Requires(toManyIncludedResources != null);

            this.DocumentBuilderContext.AddResourceLinkage(this.ServiceModel, toManyIncludedResources);
        }
        public void AddResourceLinkage <TFromResource, TToResource>(IServiceModel serviceModel, IToManyIncludedResources <TFromResource, TToResource> toManyIncludedResources)
            where TFromResource : class
            where TToResource : class
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(toManyIncludedResources != null);

            this.AddResourceLinkage(serviceModel,
                                    typeof(TFromResource),
                                    toManyIncludedResources.FromResource,
                                    toManyIncludedResources.FromRel,
                                    typeof(TToResource),
                                    toManyIncludedResources.ToResourceCollection);
        }
        public static IResourcePathContextBuilder <TParentBuilder> AddPath <TParentBuilder, TFromResource, TToResource>(this IResourcePathContextBuilder <TParentBuilder> resourcePathContextBuilder, IToManyIncludedResources <TFromResource, TToResource> toManyIncludedResources)
            where TParentBuilder : class
            where TFromResource : class
            where TToResource : class
        {
            Contract.Requires(resourcePathContextBuilder != null);
            Contract.Requires(toManyIncludedResources != null);

            var fromResource = toManyIncludedResources.FromResource;
            var fromRel      = toManyIncludedResources.FromRel;

            return(resourcePathContextBuilder.AddPath(fromResource, fromRel));
        }
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal ToManyIncludedResourcesBuilder(DocumentBuilder parentBuilder, DomDocument domDocument, IToManyIncludedResources toManyIncludedResources)
            : base(parentBuilder, domDocument.GetOrAddIncluded(), toManyIncludedResources?.ToResourceType, toManyIncludedResources?.ToResourceCollection)
        {
            this.Builder = this;

            this.DocumentBuilderContext.AddResourceLinkage(this.ServiceModel, toManyIncludedResources);
        }
예제 #6
0
        public void AddResourceLinkage <TFromResource, TToResource>(IServiceModel serviceModel, IToManyIncludedResources <TFromResource, TToResource> toManyIncludedResources)
            where TFromResource : class, IResource
            where TToResource : class, IResource
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(toManyIncludedResources != null);

            // Create ResourceLinkageKey from ToManyIncludedResources.
            var fromClrResourceType = typeof(TFromResource);
            var fromResourceType    = serviceModel.GetResourceType(fromClrResourceType);

            var fromClrResource           = toManyIncludedResources.FromResource;
            var fromApiResourceIdentifier = fromResourceType.GetApiResourceIdentifier(fromClrResource);

            var fromApiRel = toManyIncludedResources.FromRel;

            var apiResourceLinkageKey = new ApiResourceLinkageKey(fromApiResourceIdentifier, fromApiRel);

            // Create ResourceLinkage from ToManyIncludedResources.
            var toApiResourceIdentifierCollection = Enumerable.Empty <ResourceIdentifier>()
                                                    .ToList();

            var toClrResourceCollection = toManyIncludedResources.ToResourceCollection;

            if (toClrResourceCollection != null)
            {
                var toClrResourceType = typeof(TToResource);
                var toResourceType    = serviceModel.GetResourceType(toClrResourceType);

                toApiResourceIdentifierCollection = toClrResourceCollection.Select(toResourceType.GetApiResourceIdentifier)
                                                    .ToList();
            }

            var apiResourceLinkage = new ApiResourceLinkage(toApiResourceIdentifierCollection);

            // Add ResourceLinkage to this DocumentBuilderContext
            this.AddResourceLinkage(apiResourceLinkageKey, apiResourceLinkage);
        }
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal ToManyIncludedResourcesBuilder(DocumentBuilder parentBuilder, DomDocument domDocument, IToManyIncludedResources <TFromResource, TToResource> toManyIncludedResources)
            : base(parentBuilder, domDocument.GetOrAddIncluded(), toManyIncludedResources.ToResourceCollection)
        {
            Contract.Requires(toManyIncludedResources != null);

            this.Builder = this;

            this.AddResourceLinkage(toManyIncludedResources);
        }