public Task <bool> Process(XmlLookupWorkItem item) { if (item.IdentityXElement != null) { return(Task.FromResult(true)); } var map = _mappings.SingleOrDefault(m => m.RootName == item.ResourceName); if (map == null) { Log.Warn($"No mappings for {item.ResourceName} "); return(Task.FromResult(false)); } var lookupXElement = new XElement(map.TargetName); foreach (var element in item.LookupXElement.Elements()) { var path = element.Name.LocalName; PerformElementMapping(map, element, path, lookupXElement); } item.GetByExampleXElement = lookupXElement; return(Task.FromResult(true)); }
public Task <bool> Process(XmlLookupWorkItem item) { if (item.IdentityXElement != null) { return(Task.FromResult(true)); } var map = _mappings.SingleOrDefault(m => m.RootName == item.ResourceName); if (map == null) { Log.Warn($"No mappings for {item.ResourceName} "); return(Task.FromResult(false)); } if (LookupHasAllValuesInMap(item.LookupXElement, map)) { var identityXElement = new XElement(item.IdentityName); foreach (var element in item.LookupXElement.Elements()) { var mapping = map.Properties.SingleOrDefault(x => x.SourceName == element.Name.LocalName); mapping?.MappingStrategy.MapElement(element, mapping.SourceName, identityXElement); } item.IdentityXElement = identityXElement; } return(Task.FromResult(true)); }
public async Task <bool> Process(XmlLookupWorkItem item) { if (item.IdentityXElement != null) { return(true); } var jsonText = JsonConvert.SerializeXNode(item.GetByExampleXElement); var response = await _client.GetResourceByExample(jsonText, item.JsonModelName).ConfigureAwait(false); var jsonLookupResult = await response.Content.ReadAsStringAsync().ConfigureAwait(false); if (response.IsSuccessStatusCode) { try { var token = JToken.Parse(jsonLookupResult); if (token is JObject) { item.ResourceXElement = JsonConvert.DeserializeXNode(jsonLookupResult, item.JsonModelName).Root; } else if (token is JArray) { var jArr = token as JArray; if (jArr.Count == 0) { Log.Error($"{item.ResourceName} lookup returned no matching resources"); Log.Debug(response.RequestMessage); return(false); } if (jArr.Count > 1) { Log.Error($"{item.ResourceName} lookup returned more than one matching resources"); Log.Debug(response.RequestMessage); return(false); } item.ResourceXElement = JsonConvert.DeserializeXNode( jArr.First.ToString(), item.JsonModelName).Root; } return(true); } catch (Exception e) { Log.Fatal(jsonLookupResult, e); throw; } } Log.Error($"{item.ResourceName} lookup error: {response.ReasonPhrase}"); Log.Info(jsonLookupResult); Log.Debug(response.RequestMessage); return(false); }
public Task <bool> Process(XmlLookupWorkItem item) { var hashBytes = _hashProvider.Hash(item.LookupXElement.ToString()); var hash = _hashProvider.BytesToStr(hashBytes); item.HashString = hash; return(Task.FromResult(true)); }
#pragma warning disable 1998 public async Task <bool> Process(XmlLookupWorkItem item) #pragma warning restore 1998 { if (_hashIdentities.ContainsKey(item.HashString)) { return(false); } _hashIdentities.Add(item.HashString, item.IdentityXElement); return(true); }
public Task <bool> Process(XmlLookupWorkItem item) { var match = _lookupRegex.Match(item.LookupXElement.Name.LocalName); if (!match.Success) { return(Task.FromResult(false)); } item.ResourceName = match.Groups["TypeName"].Value; item.IdentityName = $"{item.ResourceName}Identity"; item.LookupName = $"{item.ResourceName}Lookup"; item.JsonResourceName = Inflector.MakePlural(Inflector.MakeInitialLowerCase(item.ResourceName)); item.JsonModelName = Inflector.MakeInitialLowerCase(item.ResourceName); return(Task.FromResult(true)); }
public Task <bool> Process(XmlLookupWorkItem item) { if (item.LookupXElement == null) { return(Task.FromResult(true)); } // Only process EdOrg Lookups if (!item.LookupName?.Equals("EducationOrganizationLookup") ?? true) { return(Task.FromResult(true)); } // Recursively build list of lookup properties for EdOrg var lookupProperties = GetLookupProperties(item.LookupXElement); // Search cache using lookup properties, grouping by name in the case of collections. var result = _educationOrganizationIdentityCache.Get( lookupProperties .GroupBy(p => p.Name) .ToDictionary( k => k.Key, v => v.ToList())) .ToList(); // If 0 or more than one EdOrg matches lookup, return. if (!result.Any() || result.Count() > 1) { return(Task.FromResult(true)); } item.IdentityXElement = new XElement(item.IdentityName, new XElement($"{item.ResourceName}Id", result.First())); return(Task.FromResult(true)); }
public bool RunPipelineForWorkItem(XmlLookupWorkItem item) { return(_lookupPipelineSteps.All(s => s.Process(item).Result)); }
public Task <bool> Process(XmlLookupWorkItem item) { _hashIdentities[item.HashString] = item.IdentityXElement; return(Task.FromResult(true)); }