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); }
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); }
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); }
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); }
public static string FindLink(this ListOfLinks links, string linkRel) { return(links.Link.FirstOrDefault(_ => _.Rel == linkRel)?.Href); }