internal static IDereferencableLink Copy(this IDereferencableLink source, Iri iri) { var result = source.Context.Create <IDereferencableLink>(iri); var proxy = result.Unwrap(); proxy.SetProperty(RelationPropertyInfo, source.Iri.ToString()); result.SupportedOperations.CopyFrom(source.SupportedOperations); result.CopyFrom(source); return(result); }
private static void CreateRelationHandler( ProcessingState processingState, IHydraResource owner, IDereferencableLink relationResource, IResource @object, Iri type) { var handlers = relationResource.SupportedOperations.Any() && @object != null ? CreateTemplatedOperation(owner, relationResource, @object, hydra.Operation) : (IEnumerable)CreateLink(owner, relationResource, @object, type); foreach (IResource handler in handlers) { var proxy = handler.Unwrap(); proxy.SetProperty(ResourceExtensions.BaseUrlPropertyInfo, (Uri)processingState.BaseUrl); processingState.ForbiddenHypermeda.Add(handler.Iri); } }
private static IEnumerable <IOperation> CreateTemplatedOperation( IHydraResource owner, IDereferencableLink relationResource, IEntity @object, Iri type) { foreach (var operation in relationResource.SupportedOperations) { var result = operation.Copy(GetNextIri("Operation")); result.Type.AddIfNotExist(type); result.Type.AddIfNotExist(hydra.IriTemplate); var templatedOperation = result.ActLike <ITemplatedOperation>(); var proxy = templatedOperation.Unwrap(); proxy.SetProperty(IriTemplatePropertyInfo, @object.ActLike <IIriTemplate>()); result = templatedOperation; owner.Operations.Add(result); yield return(result); } }
private static IEnumerable <IDereferencableLink> CreateLink( IHydraResource owner, IDereferencableLink relationResource, IResource @object, Iri type) { var result = relationResource.Copy(GetNextIri(type.ToString().Replace(hydra.Namespace, String.Empty))); var proxy = result.Unwrap(); proxy.SetProperty(ResourceExtensions.TargetPropertyInfo, @object); result.Type.AddIfNotExist(type); result.Type.Remove(type == hydra.TemplatedLink ? hydra.Link : hydra.TemplatedLink); if (type == hydra.TemplatedLink && @object != null) { var templatedLink = result.ActLike <ITemplatedLink>(); proxy.SetProperty(IriTemplatePropertyInfo, @object.ActLike <IIriTemplate>()); result = templatedLink; } owner.Links.Add(result); return(new[] { result }); }