Example #1
0
        protected static void Append <T>(IResource resource, IHypermediaResolver resolver) where T : class, IResource
        // called using reflection ...
        {
            var typed = resource as T;

            if (typed == null)
            {
                throw new ArgumentOutOfRangeException(nameof(resource), "resource must be of type " + typeof(T));
            }

            IHypermediaAppender <T> appender   = resolver.ResolveAppender(typed);
            List <Link>             configured = resolver.ResolveLinks(typed).ToList();
            Link link = resolver.ResolveSelf(typed);

            if (link != null)
            {
                configured.Insert(0, link);
            }

            if (configured.Count > 0 && (appender != null))
            {
                if (typed.Links == null)
                {
                    typed.Links = new List <Link>(); // make sure resource.Links.Add() can safely be called inside the appender
                }
                appender.Append(typed, configured);

                if ((typed.Links != null) && !typed.Links.Any())
                {
                    typed.Links = null; // prevent _links property serialization
                }
            }
        }
Example #2
0
        public HypermediaConfiguration(
            ILatestApiVersion version,
            IHypermediaAppender <ApiError> errorAppender,
            IHypermediaAppender <ApiVersion> versionAppender,
            IHypermediaAppender <PagedList <ApiVersion> > versionPagedAppender,
            IHypermediaAppender <Job> jobAppender,
            IHypermediaAppender <PagedList <Job> > jobPagedAppender,
            IHypermediaAppender <JobByDescriptionPagedList> jobByDescriptionPagedAppender,
            IHypermediaAppender <Schedule> scheduleAppender,
            IHypermediaAppender <PagedList <Schedule> > schedulePagedAppender,
            IHypermediaAppender <ScheduleByJobPagedList> scheduleByJobPagedAppender,
            IHypermediaAppender <ScheduleByDescriptionPagedList> scheduleByDescriptionPagedAppender)
        {
            _version                            = version;
            _errorAppender                      = errorAppender;
            _versionAppender                    = versionAppender;
            _versionPagedAppender               = versionPagedAppender;
            _jobAppender                        = jobAppender;
            _jobPagedAppender                   = jobPagedAppender;
            _jobByDescriptionPagedAppender      = jobByDescriptionPagedAppender;
            _scheduleAppender                   = scheduleAppender;
            _schedulePagedAppender              = schedulePagedAppender;
            _scheduleByJobPagedAppender         = scheduleByJobPagedAppender;
            _scheduleByDescriptionPagedAppender = scheduleByDescriptionPagedAppender;

            _curie = new CuriesLink(Curies.Jobbie, $"https://jobbie-api.com/v{_version}/docs/{{rel}}");

            _builder = Hal.Hypermedia.CreateBuilder();

            RegisterApiError();
            RegisterVersion();
            RegisterJob();
            RegisterSchedule();
        }
Example #3
0
        public void RegisterAppender <T>(IHypermediaAppender <T> appender) where T : class, IResource
        {
            if (appender == null)
            {
                throw new ArgumentNullException("appender");
            }

            var type = typeof(T);

            if (appenders.ContainsKey(type))
            {
                throw new DuplicateHypermediaResolverRegistrationException(type);
            }

            appenders.Add(type, appender);
        }
Example #4
0
        public static void Register <T>(this IHypermediaBuilder builder, Link <T> selfLink, IHypermediaAppender <T> appender, params Link[] links) where T : class, IResource
        {
            if (selfLink == null)
            {
                throw new ArgumentNullException("selfLink");
            }

            if (appender == null)
            {
                throw new ArgumentNullException("appender");
            }

            builder.RegisterSelf(selfLink);
            builder.RegisterAppender(appender);
            builder.RegisterLinks <T>(links);
        }