コード例 #1
0
ファイル: AppCommand.cs プロジェクト: threax/Threax.Home
        public IEnumerable <HalLinkAttribute> CreateHalLinks(ILinkProviderContext context)
        {
            if (ButtonStateId != null)
            {
                yield return(new HalActionLinkAttribute(typeof(ButtonStatesController), nameof(ButtonStatesController.Get), HalSelfActionLinkAttribute.SelfRelName));

                yield return(new HalActionLinkAttribute(typeof(ButtonStatesController), nameof(ButtonStatesController.Apply), Rels.Execute));
            }
        }
コード例 #2
0
        public virtual IEnumerable <HalLinkAttribute> CreateHalLinks(ILinkProviderContext context)
        {
            var typeInfo = this.GetType().GetTypeInfo();

            foreach (var attr in typeInfo.GetCustomAttributes())
            {
                //Grab the self link as the reference for page links
                var pageLinkAttr = attr as HalSelfActionLinkAttribute;
                if (pageLinkAttr != null)
                {
                    //Next link
                    if ((Offset + 1) * Limit < Total)
                    {
                        var builder = new RequestDataBuilder();
                        AddPageQuery(Rels.Next, builder, Offset + 1, Limit);
                        var next = pageLinkAttr.Href;
                        yield return(new HalLinkAttribute(Rels.Next, next, null, pageLinkAttr.Method, pageLinkAttr.DataMode, requestData: builder.Data));
                    }
                    //Previous link
                    if (Offset - 1 > -1)
                    {
                        var builder = new RequestDataBuilder();
                        AddPageQuery(Rels.Previous, builder, Offset - 1, Limit);
                        var prev = pageLinkAttr.Href;
                        yield return(new HalLinkAttribute(Rels.Previous, prev, null, pageLinkAttr.Method, pageLinkAttr.DataMode, requestData: builder.Data));
                    }

                    //First link
                    var firstBuilder = new RequestDataBuilder();
                    AddPageQuery(Rels.First, firstBuilder, 0, Limit);
                    var first = pageLinkAttr.Href;
                    yield return(new HalLinkAttribute(Rels.First, first, null, pageLinkAttr.Method, pageLinkAttr.DataMode, requestData: firstBuilder.Data));

                    //Last link
                    if (Limit != 0)
                    {
                        var lastIndex = Total / Limit;
                        //If there is no remainder this is an even multiple, do not start the last page on the even multiple, but one before it
                        var remainder = Total % Limit;
                        if (remainder == 0 && lastIndex > 0)
                        {
                            --lastIndex;
                        }
                        var builder = new RequestDataBuilder();
                        AddPageQuery(Rels.Last, builder, lastIndex, Limit);
                        var last = pageLinkAttr.Href;
                        yield return(new HalLinkAttribute(Rels.Last, last, null, pageLinkAttr.Method, pageLinkAttr.DataMode, requestData: builder.Data));
                    }
                }
            }
        }
コード例 #3
0
 public IEnumerable <HalLinkAttribute> CreateHalLinks(ILinkProviderContext context)
 {
     if (HasUncommittedChanges)
     {
         yield return(new HalActionLinkAttribute(CommitController.Rels.Commit, typeof(CommitController)));
     }
     else if (HasUnsyncedChanges)
     {
         yield return(new HalActionLinkAttribute(SyncController.Rels.BeginSync, typeof(SyncController)));
     }
     else
     {
         yield return(new HalActionLinkAttribute(DraftController.Rels.List, typeof(DraftController)));
     }
 }
コード例 #4
0
        public IEnumerable <HalLinkAttribute> CreateHalLinks(ILinkProviderContext context)
        {
            if (HasUncomittedChanges)
            {
                yield return(new HalActionLinkAttribute(CommitController.Rels.Commit, typeof(CommitController)));
            }
            else
            {
                if (NeedsPush)
                {
                    yield return(new HalActionLinkAttribute(SyncController.Rels.Push, typeof(SyncController)));
                }

                if (NeedsPull)
                {
                    yield return(new HalActionLinkAttribute(SyncController.Rels.Pull, typeof(SyncController)));
                }
            }
        }