/// <summary>
 /// Cretaes a RelatedEntity.
 /// </summary>
 /// <param name="relation">Relation string.</param>
 /// <param name="reference">Reference to the related Entity.</param>
 public RelatedEntity(string relation, HypermediaObjectReferenceBase reference)
 {
     Relations = new List <string> {
         relation
     };
     Reference = reference;
 }
Esempio n. 2
0
 public HypermediaCarsRootHto(
     HypermediaObjectReferenceBase niceCar,
     object?superCarKey
     ) : base(hasSelfLink: true)
 {
     Links.Add("NiceCar", niceCar);
     Links.Add("SuperCar", new HypermediaObjectKeyReference(typeof(HypermediaCarHto), superCarKey));
 }
Esempio n. 3
0
 public HypermediaEntrypointHto(
     HypermediaObjectReferenceBase customersRoot,
     HypermediaObjectReferenceBase carsRoot
     ) : base(hasSelfLink: true)
 {
     Links.Add("CustomersRoot", customersRoot);
     Links.Add("CarsRoot", carsRoot);
 }
        private string ResolveReferenceRoute(HypermediaObjectReferenceBase reference)
        {
            var resolvedAdress = routeResolver.ReferenceToRoute(reference);
            var query          = reference.GetQuery();

            resolvedAdress += queryStringBuilder.CreateQueryString(query);

            return(resolvedAdress);
        }
Esempio n. 5
0
        private Tuple <string, string> ResolveReferenceRoute(HypermediaObjectReferenceBase reference)
        {
            var resolvedRoute = routeResolver.ReferenceToRoute(reference);
            var query         = reference.GetQuery();
            var buildRoute    = resolvedRoute.Url + queryStringBuilder.CreateQueryString(query);

            var resolvedRouteAvailableMediaTypes = string.Join(",", resolvedRoute.AvailableMediaTypes);

            return(new Tuple <string, string>(buildRoute, resolvedRouteAvailableMediaTypes));
        }
Esempio n. 6
0
        public object GetHypermediaRouteKeys(HypermediaObjectReferenceBase reference)
        {
            if (!this.routeRegister.TryGetKeyProducer(reference.GetHypermediaType(), out var keyProducer))
            {
                return(new { });
            }

            var key = reference.GetKey(keyProducer);

            if (key == null)
            {
                return(new { });
            }

            return(key);
        }
        public string ReferenceToRoute(HypermediaObjectReferenceBase reference)
        {
            var lookupType = reference.GetHypermediaType();

            // ExternalReference object is not registered in the RouteRegister and provides its own URI
            if (typeof(ExternalReference).IsAssignableFrom(lookupType))
            {
                var externalReferenceObject = reference.GetInstance() as ExternalReference;
                if (externalReferenceObject == null)
                {
                    throw new HypermediaRouteException("Can not get instance for ExternalReference.");
                }

                return(externalReferenceObject.ExternalUri.ToString());
            }

            var routeKeys = this.routeKeyFactory.GetHypermediaRouteKeys(reference);

            return(this.GetRouteByType(lookupType, routeKeys));
        }
        public ResolvedRoute ReferenceToRoute(HypermediaObjectReferenceBase reference)
        {
            var lookupType = reference.GetHypermediaType();

            // ExternalReference object is not registered in the RouteRegister and provides its own URI

            if (externalReferenceTypeInfo.IsAssignableFrom(lookupType))
            {
                if (!(reference.GetInstance() is ExternalReference externalReferenceObject))
                {
                    throw new HypermediaRouteException("Can not get instance for ExternalReference.");
                }

                // we assume get here since external references will be links only for now
                return(new ResolvedRoute(externalReferenceObject.ExternalUri.ToString(), HttpMethod.GET, externalReferenceObject.AvailableMediaTypes));
            }

            if (internalReferenceTypeInfo.IsAssignableFrom(lookupType))
            {
                if (!(reference.GetInstance() is InternalReference internalReference))
                {
                    throw new HypermediaRouteException("Can not get instance for InternalReference.");
                }

                // we assume get here since external references will be links only for now
                var routeInfo             = new RouteInfo(internalReference.RouteName, HttpMethod.GET);
                var resolvedInternalRoute = RouteUrl(routeInfo, internalReference.RouteParameters);
                resolvedInternalRoute.AvailableMediaTypes = internalReference.AvailableMediaTypes;
                return(resolvedInternalRoute);
            }

            if (reference is HypermediaExternalObjectReference)
            {
                throw new HypermediaRouteException("Can not get instance for HypermediaExternalObjectReference.");
            }

            var routeKeys = this.routeKeyFactory.GetHypermediaRouteKeys(reference);

            return(this.GetRouteByType(lookupType, routeKeys));
        }
Esempio n. 9
0
        /// <summary>
        /// Convenience function: Add a HypermediaObjectReferenceBase to the Links Dictionary.
        /// If a related entity with the same relations is present it is replaced.
        /// </summary>
        /// <param name="relations">The relations to use</param>
        /// <param name="reference">To be added.</param>
        public void Add(IReadOnlyCollection <string> relations, HypermediaObjectReferenceBase reference)
        {
            var relatedEntity = new RelatedEntity(relations, reference);

            Add(relatedEntity);
        }
Esempio n. 10
0
        /// <summary>
        /// Convenience function: Add a HypermediaObjectReferenceBase to the Links Dictionary.
        /// If a related entity with the same relation is present it is replaced.
        /// </summary>
        /// <param name="relation">The relation to use</param>
        /// <param name="reference">To be added.</param>
        public void Add(string relation, HypermediaObjectReferenceBase reference)
        {
            var relatedEntity = new RelatedEntity(relation, reference);

            Add(relatedEntity);
        }
Esempio n. 11
0
 /// <summary>
 /// Returns a 201 Created and puts a Location in the header pointing to the HypermediaObject.
 /// </summary>
 /// <param name="controller"></param>
 /// <param name="hypermediaObjectReferenceBase">Reference to the created HypermediaObject</param>
 /// <returns></returns>
 public static ActionResult Created(this ControllerBase controller, HypermediaObjectReferenceBase hypermediaObjectReferenceBase)
 {
     return(controller.Ok(new HypermediaEntityLocation(hypermediaObjectReferenceBase, HttpStatusCode.Created)));
 }
 public HypermediaEntityLocation(HypermediaObjectReferenceBase entityRef, HttpStatusCode httpStatusCode)
 {
     this.HttpStatusCode = httpStatusCode;
     this.EntityRef      = entityRef;
 }
 /// <summary>
 /// Adds Entity using a list of realations.
 /// </summary>
 /// <param name="entitiesList">Entities List.</param>
 /// <param name="relations">Relations for the Entity.</param>
 /// <param name="entity">The added Entity.</param>
 public static void Add(this List <RelatedEntity> entitiesList, List <string> relations, HypermediaObjectReferenceBase entity)
 {
     entitiesList.Add(new RelatedEntity(relations, entity));
 }
 /// <summary>
 /// Cretaes a RelatedEntity.
 /// </summary>
 /// <param name="relations">List of relations as string, should at least contain one relation.</param>
 /// <param name="reference">Reference to the related Entity.</param>
 public RelatedEntity(List <string> relations, HypermediaObjectReferenceBase reference)
 {
     Relations = new List <string>(relations);
     Reference = reference;
 }