예제 #1
0
        public void GetLinkData()
        {
            List <LinkData> newListOfLinks = new List <LinkData>();

            foreach (LinkData linkData in ListOfLinks)
            {
                linkData.GetAllClass();

                if (linkData.Direction != null)
                {
                    if (linkData.Direction.Equals("destination -> source"))
                    {
                        if (linkData.ClassEnd.GetProperty(linkData.ClassStart.Name + "_ids") == null)
                        {
                            PropertyData propertyData = new PropertyData();

                            propertyData.Parent  = linkData.ClassEnd;
                            propertyData.Name    = linkData.ClassStart.Name + "_ids";
                            propertyData.Default = null;

                            linkData.ClassEnd.ListOfProperties.Add(propertyData);

                            LinkData newLinkData = new LinkData();
                            newLinkData.ClassStart = linkData.ClassStart;
                            newLinkData.ClassEnd   = linkData.ClassEnd;

                            newLinkData.PropertyStart = propertyData;
                            propertyData.LinkData     = newLinkData;
                            newLinkData.Kind          = KindLink.Associate;

                            newLinkData.PropertyEnd = newLinkData.ClassEnd.GetProperty("id");

                            newLinkData.MultiplicityStart = "0..*";
                            newLinkData.MultiplicityEnd   = "1";

                            newListOfLinks.Add(newLinkData);

                            if (!linkData.ClassStart.Equals(this))
                            {
                                linkData.ClassStart.ListOfLinks.Add(newLinkData);
                            }
                        }
                    }
                    else // Destination = source -> destination
                    {
                        switch (linkData.Kind)
                        {
                        case KindLink.Generalize:
                        {
                            Inherit = linkData.ClassEnd;
                            break;
                        }
                        }
                    }
                }
            }

            ListOfLinks.AddRange(newListOfLinks);
        }
예제 #2
0
        string _getHashLinks(ListOfLinks links)
        {
            if (links == null)
            {
                return(null);
            }
            var s    = string.Join("", links.Link.Select(_ => _.Href));
            var hash = HashHelper.Hash(Encoding.UTF8.GetBytes(s));

            return(hash);
        }
예제 #3
0
        public async Task <List <T> > LoadLinkEntities <T>(ListOfLinks links, string key, string rel, bool forceRefresh)
            where T : class, new()
        {
            if (links == null)
            {
                return(null);
            }
            key += _getHashLinks(links);

            var cacheResult = await GetEntity <List <T> >(key);

            if (cacheResult != null && !forceRefresh)
            {
                return(cacheResult);
            }

            var repo = Scope.Resolve <IGenericWebRepo <T> >();

            var resultTasks = new List <Task <T> >();

            if (links.Link == null)
            {
                return(null);
            }

            foreach (var l in links.Link)
            {
                if (l.Rel != rel)
                {
                    continue;
                }

                var lClosure = l;

                lClosure.Href = lClosure.Href.Replace("sessionregistrations.", "sessionregistrations");//hardcode fix a bug in the arlo api

                resultTasks.Add(TaskThrottler.Get("GetLinkEntities", 15).Throttle(() => repo.Get(lClosure.Href)));
            }

            var resultFromTasks = await Task.WhenAll(resultTasks);

            var listResult = resultFromTasks.ToList();

            await SetEntity(key, listResult);

            return(listResult);
        }
예제 #4
0
        public async Task <T> RecurseGetLinks <T>(ListOfLinks links, string key, string rel, bool doNext, bool forceRefresh)
            where T : ListOfLinks, new()
        {
            key += _getHashLinks(links);
            var cacheResult = await GetEntity <T>(key);

            if (cacheResult != null && !forceRefresh)
            {
                return(cacheResult);
            }

            var sessionUrl = links.FindLink(rel);

            if (sessionUrl == null)
            {
                return(null);
            }

            var sessionsFromServer = await _recurseLinks <T>(sessionUrl, doNext);

            await SetEntity(key, sessionsFromServer);

            return(sessionsFromServer);
        }
예제 #5
0
 public static string FindLink(this ListOfLinks links, string linkRel)
 {
     return(links.Link.FirstOrDefault(_ => _.Rel == linkRel)?.Href);
 }