public IIncludedResourcesBuilder AddToMany <TFromResource, TToResource>(IToManyResourceLinkage <TFromResource, TToResource> toManyResourceLinkage)
            where TFromResource : class, IResource
            where TToResource : class, IResource
        {
            Contract.Requires(toManyResourceLinkage != null);

            var toManyResourceLinkageBuilder = this.ToMany(toManyResourceLinkage);

            toManyResourceLinkageBuilder.ToManyEnd();
            return(this);
        }
Exemplo n.º 2
0
        public IRelationshipsBuilder <TParentBuilder> AddRelationship(string rel, IToManyResourceLinkage toManyResourceLinkage)
        {
            Contract.Requires(String.IsNullOrWhiteSpace(rel) == false);

            var relationshipBuilder = this.Relationship(rel);

            // Data
            relationshipBuilder.SetData(toManyResourceLinkage);

            return(this);
        }
Exemplo n.º 3
0
        public IRelationshipBuilder <TParentBuilder> SetData(IToManyResourceLinkage toManyResourceLinkage)
        {
            if (toManyResourceLinkage == null || toManyResourceLinkage.HasValueCollection == false)
            {
                this.SetDataNullOrEmpty();
                return(this);
            }

            var rel          = this.Rel;
            var resourceType = this.ResourceType;
            var relationship = resourceType.GetRelationshipInfo(rel);

            var toCardinality  = relationship.ToCardinality;
            var toClrType      = relationship.ToClrType;
            var toResourceType = this.ServiceModel.GetResourceType(toClrType);

            switch (toCardinality)
            {
            case RelationshipCardinality.ToOne:
            {
                var clrResourceTypeName = resourceType.ClrType.Name;
                var detail = InfrastructureErrorStrings.DocumentBuildExceptionDetailBuildToManyRelationshipResourceLinkageCardinalityMismatch
                             .FormatWith(clrResourceTypeName, rel);
                throw new DocumentBuildException(detail);
            }

            case RelationshipCardinality.ToMany:
            {
                var toApiResourceIdentifierCollection = toManyResourceLinkage.CreateApiResourceIdentifierCollection(toResourceType)
                                                        .SafeToReadOnlyCollection();
                foreach (var domReadWriteRelationship in this.DomReadWriteRelationshipCollection)
                {
                    domReadWriteRelationship.SetDomDataCollection(toApiResourceIdentifierCollection, toClrType);
                }

                break;
            }

            default:
            {
                var detail = InfrastructureErrorStrings.InternalErrorExceptionDetailUnknownEnumerationValue
                             .FormatWith(typeof(RelationshipCardinality).Name, toCardinality);
                throw new InternalErrorException(detail);
            }
            }

            return(this);
        }
        internal void SetDataInternal(IToManyResourceLinkage toManyResourceLinkage)
        {
            if (toManyResourceLinkage == null || toManyResourceLinkage.HasValueCollection == false)
            {
                this.SetDataNullOrEmpty();
                return;
            }

            var rel          = this.Rel;
            var resourceType = this.ResourceType;
            var relationship = resourceType.GetRelationshipInfo(rel);

            var toCardinality  = relationship.ToCardinality;
            var toClrType      = relationship.ToClrType;
            var toResourceType = this.ServiceModel.GetResourceType(toClrType);

            switch (toCardinality)
            {
            case RelationshipCardinality.ToOne:
            {
                var clrResourceTypeName = resourceType.ClrType.Name;
                var detail = InfrastructureErrorStrings.DocumentBuildExceptionDetailBuildToManyRelationshipResourceLinkageCardinalityMismatch
                             .FormatWith(clrResourceTypeName, rel);
                throw new DocumentBuildException(detail);
            }

            case RelationshipCardinality.ToMany:
            {
                // ReSharper disable once PossibleNullReferenceException
                var toApiResourceIdentifierCollection = toManyResourceLinkage.CreateApiResourceIdentifierCollection(toResourceType);
                this.DomReadWriteRelationship.SetDomDataCollection(toApiResourceIdentifierCollection, toClrType);
            }
            break;

            default:
            {
                var detail = InfrastructureErrorStrings.InternalErrorExceptionDetailUnknownEnumerationValue
                             .FormatWith(typeof(RelationshipCardinality).Name, toCardinality);
                throw new InternalErrorException(detail);
            }
            }
        }
 public IRelationshipsBuilder <TParentBuilder> AddRelationship(string rel, IEnumerable <string> linkRelCollection, IToManyResourceLinkage toManyResourceLinkage)
 {
     return(this);
 }
        // ToManyResourceLinkage ////////////////////////////////////////////
        public IToManyResourceLinkageBuilder <TToResource> ToMany <TFromResource, TToResource>(IToManyResourceLinkage <TFromResource, TToResource> toManyResourceLinkage)
            where TFromResource : class, IResource
            where TToResource : class, IResource
        {
            Contract.Requires(toManyResourceLinkage != null);

            var toManyResourceLinkageBuilder = new ToManyResourceLinkageBuilder <TFromResource, TToResource>(this, this.DomDocument, toManyResourceLinkage);

            return(toManyResourceLinkageBuilder);
        }
        // PRIVATE METHODS //////////////////////////////////////////////////
        #region Methods
        private void AddResourceLinkage(IToManyResourceLinkage <TFromResource, TToResource> toManyResourceLinkage)
        {
            Contract.Requires(toManyResourceLinkage != null);

            this.DocumentBuilderContext.AddResourceLinkage(this.ServiceModel, toManyResourceLinkage);
        }
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal ToManyResourceLinkageBuilder(DocumentBuilder parentBuilder, DomDocument domDocument, IToManyResourceLinkage <TFromResource, TToResource> toManyResourceLinkage)
            : base(parentBuilder, domDocument.GetOrAddIncluded(), toManyResourceLinkage.ToResourceCollection)
        {
            Contract.Requires(toManyResourceLinkage != null);

            this.Builder = this;

            this.AddResourceLinkage(toManyResourceLinkage);
        }
Exemplo n.º 9
0
 public IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship(string rel, Func <TResource, bool> predicate, IEnumerable <string> linkRelCollection, IToManyResourceLinkage toManyResourceLinkage)
 {
     return(this);
 }
Exemplo n.º 10
0
        public static IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship <TParentBuilder, TResource>(this IRelationshipsBuilder <TParentBuilder, TResource> relationshipsBuilder, string rel, IEnumerable <string> linkRelCollection, IToManyResourceLinkage toManyResourceLinkage)
            where TParentBuilder : class
            where TResource : class, IResource
        {
            Contract.Requires(relationshipsBuilder != null);

            return(relationshipsBuilder.AddRelationship(rel, default(Func <TResource, bool>), linkRelCollection, toManyResourceLinkage));
        }
 public IRelationshipBuilder <TParentBuilder, TResource> SetData(IToManyResourceLinkage toManyResourceLinkage)
 {
     return(this);
 }
Exemplo n.º 12
0
        public static IResourcePathContextBuilder <TParentBuilder> AddPath <TParentBuilder, TFromResource, TToResource>(this IResourcePathContextBuilder <TParentBuilder> resourcePathContextBuilder, IToManyResourceLinkage <TFromResource, TToResource> toManyResourceLinkage)
            where TParentBuilder : class
            where TFromResource : class, IResource
            where TToResource : class, IResource
        {
            Contract.Requires(resourcePathContextBuilder != null);
            Contract.Requires(toManyResourceLinkage != null);

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

            return(resourcePathContextBuilder.AddPath(fromResource, fromRel));
        }
        public void AddResourceLinkage <TFromResource, TToResource>(IServiceModel serviceModel, IToManyResourceLinkage <TFromResource, TToResource> toManyResourceLinkage)
            where TFromResource : class, IResource
            where TToResource : class, IResource
        {
            Contract.Requires(serviceModel != null);
            Contract.Requires(toManyResourceLinkage != null);

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

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

            var fromApiRel = toManyResourceLinkage.FromRel;

            var resourceLinkageKey = new ResourceLinkageKey(fromApiResourceIdentifier, fromApiRel);

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

            var toClrResourceCollection = toManyResourceLinkage.ToResourceCollection;

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

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

            var resourceLinkage = new ResourceLinkage(toApiResourceIdentifierCollection);

            // Add ResourceLinkage to this DocumentBuilderContext
            this.AddResourceLinkage(resourceLinkageKey, resourceLinkage);
        }
Exemplo n.º 14
0
        public IRelationshipsBuilder <TParentBuilder> AddRelationship(string rel, IEnumerable <string> linkRelCollection, IToManyResourceLinkage toManyResourceLinkage)
        {
            var relationshipBuilder = this.CreateRelationshipBuilder(rel);

            // Links
            var linksBuilder = relationshipBuilder.Links();

            foreach (var linkRel in linkRelCollection)
            {
                linksBuilder.AddLink(linkRel);
            }

            linksBuilder.LinksEnd();

            // Data
            relationshipBuilder.SetData(toManyResourceLinkage);

            return(this);
        }
 public IRelationshipBuilder <TParentBuilder, TResource> SetData(IToManyResourceLinkage toManyResourceLinkage)
 {
     base.SetDataInternal(toManyResourceLinkage);
     return(this);
 }
Exemplo n.º 16
0
        public IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship(string rel, Func <TResource, bool> predicate, IEnumerable <string> linkRelCollection, IToManyResourceLinkage toManyResourceLinkage)
        {
            Contract.Requires(String.IsNullOrWhiteSpace(rel) == false);
            Contract.Requires(linkRelCollection != null);

            var relationshipCollectionBuilder = this.Relationship(rel, predicate);

            // Links
            var linksBuilder = relationshipCollectionBuilder.Links();

            foreach (var linkRel in linkRelCollection)
            {
                linksBuilder.AddLink(linkRel);
            }
            linksBuilder.LinksEnd();

            // Data
            relationshipCollectionBuilder.SetData(toManyResourceLinkage);

            return(this);
        }
        public IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship(string rel, Func <TResource, bool> predicate, IEnumerable <string> linkRelCollection, IToManyResourceLinkage toManyResourceLinkage)
        {
            if (!CanAddRelationship(predicate, this.ClrResource))
            {
                return(this);
            }

            var relationshipBuilder = this.CreateRelationshipBuilder(rel);

            // Links
            var linksBuilder = relationshipBuilder.Links();

            foreach (var linkRel in linkRelCollection)
            {
                linksBuilder.AddLink(linkRel);
            }
            linksBuilder.LinksEnd();

            // Data
            relationshipBuilder.SetData(toManyResourceLinkage);

            return(this);
        }