public IIncludedResourcesBuilder AddToOne <TFromResource, TToResource>(IToOneResourceLinkage <TFromResource, TToResource> toOneResourceLinkage)
            where TFromResource : class, IResource
            where TToResource : class, IResource
        {
            Contract.Requires(toOneResourceLinkage != null);

            var toOneResourceLinkageBuilder = this.ToOne(toOneResourceLinkage);

            toOneResourceLinkageBuilder.ToOneEnd();
            return(this);
        }
Exemple #2
0
        // PUBLIC METHODS ///////////////////////////////////////////////////
        #region IRelationshipsBuilder<TParentBuilder> Implementation
        public IRelationshipsBuilder <TParentBuilder> AddRelationship(string rel, IToOneResourceLinkage toOneResourceLinkage)
        {
            Contract.Requires(String.IsNullOrWhiteSpace(rel) == false);

            var relationshipBuilder = this.Relationship(rel);

            // Data
            relationshipBuilder.SetData(toOneResourceLinkage);

            return(this);
        }
Exemple #3
0
        public IRelationshipBuilder <TParentBuilder> SetData(IToOneResourceLinkage toOneResourceLinkage)
        {
            if (toOneResourceLinkage == null || toOneResourceLinkage.HasValue == 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 toApiResourceIdentifier = toOneResourceLinkage.CreateApiResourceIdentifier(toResourceType);
                foreach (var domReadWriteRelationship in this.DomReadWriteRelationshipCollection)
                {
                    domReadWriteRelationship.SetDomData(toApiResourceIdentifier, toClrType);
                }

                break;
            }

            case RelationshipCardinality.ToMany:
            {
                var clrResourceTypeName = resourceType.ClrType.Name;
                var detail = InfrastructureErrorStrings.DocumentBuildExceptionDetailBuildToOneRelationshipResourceLinkageCardinalityMismatch
                             .FormatWith(clrResourceTypeName, rel);
                throw new DocumentBuildException(detail);
            }

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

            return(this);
        }
        internal void SetDataInternal(IToOneResourceLinkage toOneResourceLinkage)
        {
            if (toOneResourceLinkage == null || toOneResourceLinkage.HasValue == 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:
            {
                // ReSharper disable once PossibleNullReferenceException
                var toApiResourceIdentifier = toOneResourceLinkage.CreateApiResourceIdentifier(toResourceType);
                this.DomReadWriteRelationship.SetDomData(toApiResourceIdentifier, toClrType);
            }
            break;

            case RelationshipCardinality.ToMany:
            {
                var clrResourceTypeName = resourceType.ClrType.Name;
                var detail = InfrastructureErrorStrings.DocumentBuildExceptionDetailBuildToOneRelationshipResourceLinkageCardinalityMismatch
                             .FormatWith(clrResourceTypeName, rel);
                throw new DocumentBuildException(detail);
            }

            default:
            {
                var detail = InfrastructureErrorStrings.InternalErrorExceptionDetailUnknownEnumerationValue
                             .FormatWith(typeof(RelationshipCardinality).Name, toCardinality);
                throw new InternalErrorException(detail);
            }
            }
        }
Exemple #5
0
        // PRIVATE METHODS //////////////////////////////////////////////////
        #region Methods
        private void AddResourceLinkage(IToOneResourceLinkage <TFromResource, TToResource> toOneResourceLinkage)
        {
            Contract.Requires(toOneResourceLinkage != null);

            this.DocumentBuilderContext.AddResourceLinkage(this.ServiceModel, toOneResourceLinkage);
        }
Exemple #6
0
        // INTERNAL CONSTRUCTORS ////////////////////////////////////////////
        #region Constructors
        internal ToOneResourceLinkageBuilder(DocumentBuilder parentBuilder, DomDocument domDocument, IToOneResourceLinkage <TFromResource, TToResource> toOneResourceLinkage)
            : base(parentBuilder, domDocument.GetOrAddIncluded(), toOneResourceLinkage.ToResource)
        {
            Contract.Requires(toOneResourceLinkage != null);

            this.Builder = this;

            this.AddResourceLinkage(toOneResourceLinkage);
        }
 public IRelationshipsBuilder <TParentBuilder> AddRelationship(string rel, IEnumerable <string> linkRelCollection, IToOneResourceLinkage toOneResourceLinkage)
 {
     return(this);
 }
        // ToOneResourceLinkage /////////////////////////////////////////////
        public IToOneResourceLinkageBuilder <TToResource> ToOne <TFromResource, TToResource>(IToOneResourceLinkage <TFromResource, TToResource> toOneResourceLinkage)
            where TFromResource : class, IResource
            where TToResource : class, IResource
        {
            Contract.Requires(toOneResourceLinkage != null);

            var toOneResourceLinkageBuilder = new ToOneResourceLinkageBuilder <TFromResource, TToResource>(this, this.DomDocument, toOneResourceLinkage);

            return(toOneResourceLinkageBuilder);
        }
Exemple #9
0
 public IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship(string rel, Func <TResource, bool> predicate, IEnumerable <string> linkRelCollection, IToOneResourceLinkage toOneResourceLinkage)
 {
     return(this);
 }
Exemple #10
0
        public static IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship <TParentBuilder, TResource>(this IRelationshipsBuilder <TParentBuilder, TResource> relationshipsBuilder, string rel, IEnumerable <string> linkRelCollection, IToOneResourceLinkage toOneResourceLinkage)
            where TParentBuilder : class
            where TResource : class, IResource
        {
            Contract.Requires(relationshipsBuilder != null);

            return(relationshipsBuilder.AddRelationship(rel, default(Func <TResource, bool>), linkRelCollection, toOneResourceLinkage));
        }
 public IRelationshipBuilder <TParentBuilder, TResource> SetData(IToOneResourceLinkage toOneResourceLinkage)
 {
     return(this);
 }
Exemple #12
0
        // PUBLIC METHODS ///////////////////////////////////////////////////
        #region Extension Methods
        public static IResourcePathContextBuilder <TParentBuilder> AddPath <TParentBuilder, TFromResource, TToResource>(this IResourcePathContextBuilder <TParentBuilder> resourcePathContextBuilder, IToOneResourceLinkage <TFromResource, TToResource> toOneResourceLinkage)
            where TParentBuilder : class
            where TFromResource : class, IResource
            where TToResource : class, IResource
        {
            Contract.Requires(resourcePathContextBuilder != null);
            Contract.Requires(toOneResourceLinkage != null);

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

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

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

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

            var fromApiRel = toOneResourceLinkage.FromRel;

            var resourceLinkageKey = new ResourceLinkageKey(fromApiResourceIdentifier, fromApiRel);

            // Create ResourceLinkage from ToOneResourceLinkage
            var toApiResourceIdentifier = default(ResourceIdentifier);

            var toClrResource = toOneResourceLinkage.ToResource;

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

                toApiResourceIdentifier = toResourceType.GetApiResourceIdentifier(toClrResource);
            }

            var resourceLinkage = new ResourceLinkage(toApiResourceIdentifier);

            // Add ResourceLinkage to this DocumentBuilderContext
            this.AddResourceLinkage(resourceLinkageKey, resourceLinkage);
        }
Exemple #14
0
        public IRelationshipsBuilder <TParentBuilder> AddRelationship(string rel, IEnumerable <string> linkRelCollection, IToOneResourceLinkage toOneResourceLinkage)
        {
            var relationshipBuilder = this.CreateRelationshipBuilder(rel);

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

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

            linksBuilder.LinksEnd();

            // Data
            relationshipBuilder.SetData(toOneResourceLinkage);

            return(this);
        }
 public IRelationshipBuilder <TParentBuilder, TResource> SetData(IToOneResourceLinkage toOneResourceLinkage)
 {
     base.SetDataInternal(toOneResourceLinkage);
     return(this);
 }
Exemple #16
0
        public IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship(string rel, Func <TResource, bool> predicate, IEnumerable <string> linkRelCollection, IToOneResourceLinkage toOneResourceLinkage)
        {
            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(toOneResourceLinkage);

            return(this);
        }
        public IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship(string rel, Func <TResource, bool> predicate, IEnumerable <string> linkRelCollection, IToOneResourceLinkage toOneResourceLinkage)
        {
            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(toOneResourceLinkage);

            return(this);
        }