private static Dictionary<string, ILink> CreateLinks(IResourceMapping resourceMapping, UrlBuilder urlBuilder, SingleResource result, string parentId = null) { return new Dictionary<string, ILink>() { { SelfLinkKey, new SimpleLink { Href = urlBuilder.GetFullyQualifiedUrl(resourceMapping.UrlTemplate.Replace(TypePlaceholder, result.Type).Replace(IdPlaceholder, result.Id).Replace(ParentIdPlaceholder, parentId)) } } }; }
public SingleResource CreateResourceRepresentation(object objectGraph, IResourceMapping resourceMapping, Context context, bool isIncludedResource = false, Type ownerType = null) { var urlBuilder = new UrlBuilder { RoutePrefix = context.RoutePrefix }; var result = new SingleResource(); result.Id = resourceMapping.IdGetter(objectGraph).ToString(); result.Type = resourceMapping.ResourceType; result.Attributes = resourceMapping.PropertyGetters.ToDictionary(kvp => kvp.Key, kvp => kvp.Value(objectGraph)); if (resourceMapping.UrlTemplate != null) { result.Links = CreateLinks(resourceMapping, urlBuilder, result, _parentId); } if (resourceMapping.Relationships.Any()) result.Relationships = CreateRelationships(objectGraph, result.Id, resourceMapping, context, result.Type); if (resourceMapping.PipelineModule != null) { resourceMapping.PipelineModule.Run(resourceMapping.ResourceRepresentationType, result, isIncludedResource, resourceMapping.RequestedFields); } result.OwnerType = ownerType; return result; }