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); }
// 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); }
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); } } }
// PRIVATE METHODS ////////////////////////////////////////////////// #region Methods private void AddResourceLinkage(IToOneResourceLinkage <TFromResource, TToResource> toOneResourceLinkage) { Contract.Requires(toOneResourceLinkage != null); this.DocumentBuilderContext.AddResourceLinkage(this.ServiceModel, toOneResourceLinkage); }
// 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); }
public IRelationshipsBuilder <TParentBuilder, TResource> AddRelationship(string rel, Func <TResource, bool> predicate, IEnumerable <string> linkRelCollection, IToOneResourceLinkage toOneResourceLinkage) { return(this); }
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); }
// 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); }
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); }
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); }