Esempio n. 1
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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));
 }