public static ProductProperty ToShopifyModel(this StorefrontModel.Catalog.ProductProperty property)
        {
            var result = new ProductProperty();

            result.InjectFrom(property);

            return(result);
        }
        public static ProductProperty ToWebModel(this VirtoCommerceCatalogModuleWebModelProperty property, Language currentLanguage)
        {
            var retVal = new ProductProperty();

            retVal.InjectFrom(property);
            //Set display names and set current display name for requested language
            if (property.DisplayNames != null)
            {
                retVal.DisplayNames = property.DisplayNames.Select(x => new LocalizedString(new Language(x.LanguageCode), x.Name)).ToList();
                retVal.DisplayName  = retVal.DisplayNames.Where(x => x.Language.Equals(currentLanguage))
                                      .Select(x => x.Value)
                                      .FirstOrDefault();
            }
            //if display name for requested language not set get system property name
            if (String.IsNullOrEmpty(retVal.DisplayName))
            {
                retVal.DisplayName = property.Name;
            }

            //For multilingual properties need populate LocalizedValues collection and set value for requested language
            if (property.Multilanguage ?? false)
            {
                if (property.Values != null)
                {
                    retVal.LocalizedValues = property.Values.Where(x => x.Value != null).Select(x => new LocalizedString(new Language(x.LanguageCode), x.Value.ToString())).ToList();
                }
            }
            //Set property value
            if (property.Values != null)
            {
                var propValue = property.Values.Where(x => x.Value != null).FirstOrDefault();
                if (propValue != null)
                {
                    //Use only one prop value (reserve multivalues to other scenarious)
                    retVal.Value   = propValue.Value.ToString();
                    retVal.ValueId = propValue.ValueId;
                }
            }
            //Try to set value for requested language
            if (retVal.LocalizedValues.Any())
            {
                retVal.Value = retVal.LocalizedValues.Where(x => x.Language.Equals(currentLanguage))
                               .Select(x => x.Value ?? retVal.Value)
                               .FirstOrDefault() ?? retVal.Value;
            }

            return(retVal);
        }