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