Ejemplo n.º 1
0
        private void SynchronizeProperties(ConnectorProductAttribute connectorProductAttribute, IDictionary <String, Object> properties)
        {
            var connectorProductAttributeSettingDictionary = ConnectorProductAttributeSettingRepository
                                                             .GetMultiple(connectorProductAttribute.ConnectorProductAttributeID)
                                                             .ToDictionary(connectorProductAttributeSetting => connectorProductAttributeSetting.Code);

            // Delete all the connector product attribute settings that are not in the specified property-dictionary.
            foreach (var connectorProductAttributeSettingCode in connectorProductAttributeSettingDictionary.Keys.Except(properties.Keys))
            {
                ConnectorProductAttributeSettingRepository.Delete(connectorProductAttributeSettingDictionary[connectorProductAttributeSettingCode]);
            }

            foreach (var connectorProductAttributeSettingCode in properties.Keys)
            {
                var value     = properties[connectorProductAttributeSettingCode];
                var valueType = value.GetType();

                ConnectorProductAttributeSettingRepository.CreateOrUpdate(new ConnectorProductAttributeSetting
                {
                    ConnectorProductAttributeID = connectorProductAttribute.ConnectorProductAttributeID.Value,
                    Code  = connectorProductAttributeSettingCode,
                    Type  = valueType.FullName,
                    Value = TypeConverterService.Default[valueType].ConvertToString(value)
                });
            }
        }
Ejemplo n.º 2
0
        public IEnumerable <ConnectorProductAttributeMapping> Get(Int32?connectorID, Int32?productAttributeID, Boolean?isFilter)
        {
            var connectorProductAttributes = ConnectorProductAttributeRepository
                                             .GetMultiple(connectorID, productAttributeID, isFilter)
                                             .ToArray();

            foreach (var connectorProductAttribute in connectorProductAttributes)
            {
                var connectorProductAttributeSettings = ConnectorProductAttributeSettingRepository
                                                        .GetMultiple(connectorProductAttribute.ConnectorProductAttributeID)
                                                        .ToArray();

                var settingTypesByCode = connectorProductAttributeSettings.ToDictionary(
                    connectorProductAttributeSetting => connectorProductAttributeSetting.Code,
                    connectorProductAttributeSetting => Type.GetType(connectorProductAttributeSetting.Type));

                if (settingTypesByCode.Any(pair => pair.Value == null))
                {
                    throw new Exception("One or more types could not be found:\r\n" + String.Join(Environment.NewLine, settingTypesByCode
                                                                                                  .Where(pair => pair.Value == null)
                                                                                                  .Select(pair => String.Format(" - Code: '{0}', Type: '{1}'", pair.Key, pair.Value))
                                                                                                  .ToArray()));
                }

                var properties = connectorProductAttributeSettings.ToDictionary(
                    settting => settting.Code,
                    setting => TypeConverterService.ConvertFromString(settingTypesByCode[setting.Code], setting.Value));

                var productAttributeType = Type.GetType(connectorProductAttribute.ProductAttributeType);

                yield return(new ConnectorProductAttributeMapping(properties)
                {
                    Connector = ConnectorRepository.GetSingle(connector => connector.ConnectorID == connectorProductAttribute.ConnectorID),
                    DefaultValue = TypeConverterService.ConvertFromString(productAttributeType, connectorProductAttribute.DefaultValue),
                    IsFilter = connectorProductAttribute.IsFilter,
                    ProductAttribute = ProductAttributeRepository.GetSingle(productAttribute => productAttribute.AttributeID == connectorProductAttribute.ProductAttributeID),
                    ProductAttributeType = Type.GetType(connectorProductAttribute.ProductAttributeType)
                });
            }
        }