Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
        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 });
        }