internal void ParseIngredients()
        {
            var parser = new IngredientsParser();
            List <IngredientsParser.ParsedAnnotation> annotations = new List <IngredientsParser.ParsedAnnotation>();
            var _parsedIngredients = parser.Parse(_currentProduct.DisplayIngredients, annotations);

            var translator         = new IngredientLanguageNames(_repo);
            var nutrientTranslator = new NutrientLanguageNames(_repo);
            var euNumbers          = new EUAdditiveLanguageNames(_repo);

            foreach (var parsedIngredient in _parsedIngredients.Ingredients)
            {
                Product.Ingredients.Add(new IngredientViewModel(parsedIngredient, Product));
            }
            var additives = DetectEUNumbers(_parsedIngredients.Ingredients, euNumbers).OrderBy(w => w.EUNumber);

            foreach (var additive in additives)
            {
                Product.EUAdditives.Add(new EUAdditiveViewModel(additive.EUNumber, additive.DisplayName));
            }
            var allergens = CollectAllergens(_parsedIngredients.Ingredients);

            foreach (var allergen in allergens)
            {
                Product.Allergens.Add(new AllergenViewModel(allergen.Name, allergen.DisplayName));
            }
            ProcessNutrients();
            Product.Translate();
        }
        private void TranslateAllergens(ObservableCollection <AllergenViewModel> allergens)
        {
            var translator = new IngredientLanguageNames(_repo);

            foreach (var allergen in allergens)
            {
                TranslateAllergen(translator, allergen.Name, allergen.Name, allergen);
            }
        }
        private void TranslateAllergen(IngredientLanguageNames translator, string name, string displayName, AllergenViewModel allergen)
        {
            var nutrientTranslations = translator.TranslateIngredient(name, OriginalLanguage, LanguageCode);

            if (nutrientTranslations.Any())
            {
                displayName = nutrientTranslations.First().Name;
            }
            allergen.DisplayName = displayName;
        }
        // todo: move processing to separate object
        #region processing
        private void TranslateIngredient(IngredientLanguageNames translator, string name, string displayName, IngredientViewModel ingredient)
        {
            var nutrientTranslations = translator.TranslateIngredient(name, Product.OriginalLanguage, Product.LanguageCode);

            if (nutrientTranslations.Any())
            {
                displayName = nutrientTranslations.First().Name;
            }
            ingredient.DisplayName = displayName;
        }
        private string GetFirstTranslation(IngredientLanguageNames translator, string name)
        {
            // todo: from product ingredient language to selected language
            var translations = translator.TranslateIngredient(name, Product.OriginalLanguage, Product.LanguageCode);

            if (translations.Any())
            {
                return(translations.First().Name);
            }
            return(name.ToLower());
        }
        public void CanCreateIngredientLanguageName_CallsCreateIngredientLanguageNameStateOnRepository_AndSetsGuidsOnState()
        {
            var repoStub  = Substitute.For <IngredientLanguageNames.IIngredientLanguageNameRepository>();
            var stateStub = Substitute.For <IngredientLanguageName.IIngredientLanguageNameState>();
            var ingredientLanguageNames = new IngredientLanguageNames(repoStub);
            var ingredientGuid          = Guid.NewGuid();
            var language = "en";
            var name     = "butter";

            repoStub.CreateIngredientLanguageNameState().Returns(stateStub);

            ingredientLanguageNames.CreateIngredientLanguageName(ingredientGuid, name, language);

            repoStub.Received().CreateIngredientLanguageNameState();

            stateStub.Received().IngredientGuid = ingredientGuid;
            stateStub.Received().Language       = language;
            stateStub.Received().Name           = name;
        }
        internal void TranslateIngredients(ObservableCollection <IngredientViewModel> ingredients, IIngredientLanguageNames translator)
        {
            if (ingredients != null)
            {
                if (translator == null)
                {
                    translator = new IngredientLanguageNames(_repo);
                }

                foreach (var ingredient in ingredients)
                {
                    TranslateIngredient(translator, ingredient.Name, ingredient.Name, ingredient);
                    if (ingredient is ExpandedIngredientViewModel)
                    {
                        TranslateIngredients(((ExpandedIngredientViewModel)ingredient).Ingredients, translator);
                    }
                }
            }
        }
        public void CanGetTranslations()
        {
            var repoStub = Substitute.For <IngredientLanguageNames.IIngredientLanguageNameRepository>();
            var ingredientLanguageNames = new IngredientLanguageNames(repoStub);
            var butterEnglishStub       = Substitute.For <IngredientLanguageName.IIngredientLanguageNameState>();
            var butterDutchStub         = Substitute.For <IngredientLanguageName.IIngredientLanguageNameState>();

            butterEnglishStub.Name     = "butter";
            butterEnglishStub.Language = "en";
            butterDutchStub.Name       = "boter";
            butterDutchStub.Language   = "nl";

            repoStub.GetTranslations(butterEnglishStub.Name, butterEnglishStub.Language, butterDutchStub.Language).Returns(new List <IngredientLanguageName.IIngredientLanguageNameState> {
                butterDutchStub
            });

            var ingredientGuid   = Guid.NewGuid();
            var languageNameGuid = Guid.NewGuid();

            var translations = ingredientLanguageNames.TranslateIngredient("butter", "en", "nl");

            Assert.Equal(1, translations.Count());
            Assert.Equal("boter", translations.First().Name);
        }
 private void TranslateIngredients(IEnumerable <IngredientsParser.ParsedIngredient> ingredients, IngredientLanguageNames translator)
 {
     if (ingredients != null)
     {
         foreach (var ingredient in ingredients)
         {
             ingredient.DisplayName = GetFirstTranslation(translator, ingredient.Name);
             TranslateIngredients(ingredient.Ingredients, translator);
         }
     }
 }