public void Synchronize()
        {
            var updaters = globalPropertySettingsLocator.GetGlobalPropertySettingsUpdaters();
            foreach (var updater in updaters)
            {
                var existingWrappers = propertySettingsRepository.GetGlobals(updater.SettingsType);
                var matchingWrappers = existingWrappers.Where(wrapper => updater.Match(wrapper)).ToList();

                matchingWrappers.ForEach(wrapper =>
                {
                    if (updater.OverWriteExisting)
                    {
                        updater.UpdateSettings(wrapper.PropertySettings);
                    }
                    UpdateWrapperValues(updater, wrapper);
                    propertySettingsRepository.SaveGlobal(wrapper);
                });

                if (matchingWrappers.Count() == 0)
                {
                    var settings = ((IPropertySettings)Activator.CreateInstance(updater.SettingsType)).GetDefaultValues();
                    updater.UpdateSettings(settings);
                    var newWrapper = new PropertySettingsWrapper(updater.DisplayName, updater.Description, updater.IsDefault.GetValueOrDefault(), true, settings);
                    UpdateWrapperValues(updater, newWrapper);
                    propertySettingsRepository.SaveGlobal(newWrapper);
                }
            }
        }
        void UpdatePageDefinitionsLocalPropertySettings(PageTypePropertyDefinition propertyDefinition, PageTypeDefinition pageTypeDefinition, PropertySettingsContainer container)
        {
            List<PropertySettingsUpdater> settingsUpdaters = GetPropertySettingsUpdaters(pageTypeDefinition, propertyDefinition);
            settingsUpdaters.ForEach(updater =>
                {
                    var wrapper = container.GetSetting(updater.SettingsType);
                    if (wrapper == null)
                    {
                        wrapper = new PropertySettingsWrapper();
                        container.Settings[updater.SettingsType.FullName] = wrapper;
                        //TODO: Add spec validating that exception is thrown with the below uncommented (An item with the same key has already been added.)
                        //container.Settings.Add(updater.SettingsType.FullName, wrapper);
                    }

                    bool settingsAlreadyExists = true;
                    if (wrapper.PropertySettings == null)
                    {
                        wrapper.PropertySettings = ((IPropertySettings)Activator.CreateInstance(updater.SettingsType)).GetDefaultValues();
                        settingsAlreadyExists = false;
                    }

                    if (settingsAlreadyExists && !updater.OverWriteExisting)
                        return;

                    int hashBeforeUpdate = updater.GetSettingsHashCode(wrapper.PropertySettings);
                    updater.UpdateSettings(wrapper.PropertySettings);
                    int hashAfterUpdate = updater.GetSettingsHashCode(wrapper.PropertySettings);
                    if (hashBeforeUpdate != hashAfterUpdate || !settingsAlreadyExists)
                    {
                        propertySettingsRepository.Save(container);
                    }
                });
        }
Ejemplo n.º 3
0
        public void Synchronize()
        {
            var updaters = globalPropertySettingsLocator.GetGlobalPropertySettingsUpdaters();

            foreach (var updater in updaters)
            {
                var existingWrappers = _propertySettingsRepositoryMethod().GetGlobals(updater.SettingsType);
                var matchingWrappers = existingWrappers.Where(wrapper => updater.Match(wrapper)).ToList();

                matchingWrappers.ForEach(wrapper =>
                {
                    var existingWrapperValues = WrapperValuesSerialized(updater, wrapper);
                    if (updater.OverWriteExisting)
                    {
                        updater.UpdateSettings(wrapper.PropertySettings);
                    }
                    UpdateWrapperValues(updater, wrapper);
                    var isChanged = !WrapperValuesSerialized(updater, wrapper).Equals(existingWrapperValues);
                    if (updater.OverWriteExisting && isChanged)
                    {
                        _propertySettingsRepositoryMethod().SaveGlobal(wrapper);
                    }
                });

                if (matchingWrappers.Count() == 0)
                {
                    var settings = ((IPropertySettings)Activator.CreateInstance(updater.SettingsType)).GetDefaultValues();
                    updater.UpdateSettings(settings);
                    var newWrapper = new PropertySettingsWrapper(updater.DisplayName, updater.Description, updater.IsDefault.GetValueOrDefault(), true, settings);
                    UpdateWrapperValues(updater, newWrapper);
                    _propertySettingsRepositoryMethod().SaveGlobal(newWrapper);
                }
            }
        }
 private void UpdateWrapperValues(GlobalPropertySettingsUpdater updater, PropertySettingsWrapper wrapper)
 {
     if (updater.Description != null)
     {
         wrapper.Description = updater.Description;
     }
     if (updater.IsDefault.HasValue)
     {
         wrapper.IsDefault = updater.IsDefault.Value;
     }
 }
Ejemplo n.º 5
0
 private void UpdateWrapperValues(GlobalPropertySettingsUpdater updater, PropertySettingsWrapper wrapper)
 {
     if (updater.Description != null)
     {
         wrapper.Description = updater.Description;
     }
     if (updater.IsDefault.HasValue)
     {
         wrapper.IsDefault = updater.IsDefault.Value;
     }
 }
        public void SaveGlobal(PropertySettingsWrapper global)
        {
            var record = new PropertySettingsWrapper();

            Mapper.Map(global, record);
            if (!wrappers.ContainsKey(global.Id))
            {
                wrappers.Add(global.Id, null);
            }
            wrappers[global.Id] = global;
            numberOfSavesPerGuidCounter.IncrementNumberOfSaves(global.Id);
        }
        public bool TryGetWrapper(Guid id, out PropertySettingsWrapper propertySettingsWrapper)
        {
            propertySettingsWrapper = null;

            if (!wrappers.ContainsKey(id))
                return false;

            var exposedWrapper = new PropertySettingsWrapper();

            Mapper.Map(wrappers[id], exposedWrapper);

            return true;
        }
Ejemplo n.º 8
0
        protected internal virtual void UpdatePropertySettings(PageTypeDefinition pageTypeDefinition, PageTypePropertyDefinition propertyDefinition, PageDefinition pageDefinition)
        {
            var prop =
                pageTypeDefinition.Type.GetProperties().Where(p => p.Name == propertyDefinition.Name).FirstOrDefault
                    ();

            var attributes = prop.GetCustomAttributes(typeof(PropertySettingsAttribute), true);

            foreach (var attribute in attributes)
            {
                PropertySettingsContainer container;

                if (pageDefinition.SettingsID == Guid.Empty)
                {
                    pageDefinition.SettingsID = Guid.NewGuid();
                    PageDefinitionFactory.Save(pageDefinition);
                    container = new PropertySettingsContainer(pageDefinition.SettingsID);
                }
                else
                {
                    if (!_propertySettingsRepository.TryGetContainer(pageDefinition.SettingsID, out container))
                    {
                        container = new PropertySettingsContainer(pageDefinition.SettingsID);
                    }
                }
                var settingsAttribute = (PropertySettingsAttribute)attribute;
                var wrapper           = container.GetSetting(settingsAttribute.SettingType);
                if (wrapper == null)
                {
                    wrapper = new PropertySettingsWrapper();
                    container.Settings.Add(settingsAttribute.SettingType.FullName, wrapper);
                }

                bool settingsAlreadyExists = true;
                if (wrapper.PropertySettings == null)
                {
                    wrapper.PropertySettings = (IPropertySettings)Activator.CreateInstance(settingsAttribute.SettingType);
                    settingsAlreadyExists    = false;
                }

                if (settingsAlreadyExists && !settingsAttribute.OverWriteExistingSettings)
                {
                    return;
                }

                if (settingsAttribute.UpdateSettings(wrapper.PropertySettings) || !settingsAlreadyExists)
                {
                    _propertySettingsRepository.Save(container);
                }
            }
        }
        protected internal virtual void UpdatePropertySettings(PageTypeDefinition pageTypeDefinition, PageTypePropertyDefinition propertyDefinition, PageDefinition pageDefinition)
        {
            PropertySettingsContainer container = GetPropertySettingsContainer(pageDefinition);

            object[] attributes = GetPropertyAttributes(propertyDefinition, pageTypeDefinition);
            var useGlobalSettingsAttribute = attributes.OfType<UseGlobalSettingsAttribute>().FirstOrDefault();
            if(useGlobalSettingsAttribute != null)
            {
                //TODO: Should validate not null and valid type at startup
                var globalSettingsUpdater = globalPropertySettingsLocator.GetGlobalPropertySettingsUpdaters().Where(u => u.WrappedInstanceType == useGlobalSettingsAttribute.Type).First();
                var wrapper =_propertySettingsRepository.GetGlobals(globalSettingsUpdater.SettingsType)
                    .Where(w => globalSettingsUpdater.Match(w))
                    .First();
                container.Settings[globalSettingsUpdater.SettingsType.FullName] = wrapper;
                //TODO: Add spec validating that exception is thrown with the below uncommented (An item with the same key has already been added.)
                //container.Settings.Add(globalSettingsUpdater.SettingsType.FullName, wrapper);
                _propertySettingsRepository.Save(container);
            }

            List<PropertySettingsUpdater> settingsUpdaters = GetPropertySettingsUpdaters(pageTypeDefinition, propertyDefinition, pageDefinition);
            settingsUpdaters.ForEach(updater =>
                {
                    var wrapper = container.GetSetting(updater.SettingsType);
                    if (wrapper == null)
                    {
                        wrapper = new PropertySettingsWrapper();
                        container.Settings[updater.SettingsType.FullName] = wrapper;
                        //TODO: Add spec validating that exception is thrown with the below uncommented (An item with the same key has already been added.)
                        //container.Settings.Add(updater.SettingsType.FullName, wrapper);
                    }

                    bool settingsAlreadyExists = true;
                    if (wrapper.PropertySettings == null)
                    {
                        wrapper.PropertySettings = ((IPropertySettings)Activator.CreateInstance(updater.SettingsType)).GetDefaultValues();
                        settingsAlreadyExists = false;
                    }

                    if (settingsAlreadyExists && !updater.OverWriteExisting)
                        return;

                    int hashBeforeUpdate = updater.GetSettingsHashCode(wrapper.PropertySettings);
                    updater.UpdateSettings(wrapper.PropertySettings);
                    int hashAfterUpdate = updater.GetSettingsHashCode(wrapper.PropertySettings);
                    if (hashBeforeUpdate != hashAfterUpdate || !settingsAlreadyExists)
                    {
                        _propertySettingsRepository.Save(container);
                    }
                });
        }
        public bool TryGetWrapper(Guid id, out PropertySettingsWrapper propertySettingsWrapper)
        {
            propertySettingsWrapper = null;

            if (!wrappers.ContainsKey(id))
            {
                return(false);
            }

            var exposedWrapper = new PropertySettingsWrapper();

            Mapper.Map(wrappers[id], exposedWrapper);

            return(true);
        }
        protected internal virtual void UpdatePropertySettings(PageTypeDefinition pageTypeDefinition, PageTypePropertyDefinition propertyDefinition, PageDefinition pageDefinition)
        {
            var prop =
                pageTypeDefinition.Type.GetProperties().Where(p => p.Name == propertyDefinition.Name).FirstOrDefault
                    ();
                
            var attributes = prop.GetCustomAttributes(typeof(PropertySettingsAttribute), true);
            foreach (var attribute in attributes)
            {
                PropertySettingsContainer container;

                if (pageDefinition.SettingsID == Guid.Empty)
                {
                    pageDefinition.SettingsID = Guid.NewGuid();
                    PageDefinitionFactory.Save(pageDefinition);
                    container = new PropertySettingsContainer(pageDefinition.SettingsID);
                }
                else
                {
                    if (!_propertySettingsRepository.TryGetContainer(pageDefinition.SettingsID, out container))
                    {
                        container = new PropertySettingsContainer(pageDefinition.SettingsID);
                    }
                }
                var settingsAttribute = (PropertySettingsAttribute) attribute;
                var wrapper = container.GetSetting(settingsAttribute.SettingType);
                if (wrapper == null)
                {
                    wrapper = new PropertySettingsWrapper();
                    container.Settings.Add(settingsAttribute.SettingType.FullName, wrapper);
                }

                bool settingsAlreadyExists = true;
                if (wrapper.PropertySettings == null)
                {
                    wrapper.PropertySettings = (IPropertySettings) Activator.CreateInstance(settingsAttribute.SettingType);
                    settingsAlreadyExists = false;
                }

                if(settingsAlreadyExists && !settingsAttribute.OverWriteExistingSettings)
                    return;

                if(settingsAttribute.UpdateSettings(wrapper.PropertySettings) || !settingsAlreadyExists)
                    _propertySettingsRepository.Save(container);
            }
        }
        void UpdatePageDefinitionsLocalPropertySettings(PageTypePropertyDefinition propertyDefinition, PageTypeDefinition pageTypeDefinition, PageDefinition pageDefinition)
        {
            List <PropertySettingsUpdater> settingsUpdaters = GetPropertySettingsUpdaters(pageTypeDefinition, propertyDefinition);

            if (!settingsUpdaters.Any())
            {
                return;
            }
            var container = GetPropertySettingsContainer(pageDefinition);

            settingsUpdaters.ForEach(updater =>
            {
                var wrapper = container.GetSetting(updater.SettingsType);
                if (wrapper == null)
                {
                    wrapper = new PropertySettingsWrapper();
                    container.Settings[updater.SettingsType.FullName] = wrapper;
                    //TODO: Add spec validating that exception is thrown with the below uncommented (An item with the same key has already been added.)
                    //container.Settings.Add(updater.SettingsType.FullName, wrapper);
                }

                bool settingsAlreadyExists = true;
                if (wrapper.PropertySettings == null)
                {
                    wrapper.PropertySettings = ((IPropertySettings)Activator.CreateInstance(updater.SettingsType)).GetDefaultValues();
                    settingsAlreadyExists    = false;
                }

                if (settingsAlreadyExists && !updater.OverWriteExisting)
                {
                    return;
                }

                int hashBeforeUpdate = updater.GetSettingsHashCode(wrapper.PropertySettings);
                updater.UpdateSettings(wrapper.PropertySettings);
                int hashAfterUpdate = updater.GetSettingsHashCode(wrapper.PropertySettings);
                if (hashBeforeUpdate != hashAfterUpdate || !settingsAlreadyExists)
                {
                    _propertySettingsRepositoryMethod().Save(container);
                }
            });
        }
        public void Synchronize()
        {
            var updaters = globalPropertySettingsLocator.GetGlobalPropertySettingsUpdaters();

            foreach (var updater in updaters)
            {
                var existingWrappers = _propertySettingsRepositoryMethod().GetGlobals(updater.SettingsType);
                var matchingWrappers = existingWrappers.Where(wrapper => updater.Match(wrapper)).ToList();

                matchingWrappers.ForEach(wrapper =>
                {
                    var existingWrapperValues = WrapperValuesSerialized(updater, wrapper);

                    if (updater.OverWriteExisting)
                    {
                        updater.UpdateSettings(wrapper.PropertySettings);
                    }

                    UpdateWrapperValues(updater, wrapper);
                    var isChanged = !WrapperValuesSerialized(updater, wrapper).Equals(existingWrapperValues);
                    
                    if (updater.OverWriteExisting && isChanged)
                    {
                        _propertySettingsRepositoryMethod().SaveGlobal(wrapper);
                        globalSettingsIds.Add(wrapper.Id);
                        //globalSettingsIds.Add(wrapper.PropertySettings.Id);
                    }
                });

                if (matchingWrappers.Count() == 0)
                {
                    var settings = ((IPropertySettings)Activator.CreateInstance(updater.SettingsType)).GetDefaultValues();
                    updater.UpdateSettings(settings);
                    var newWrapper = new PropertySettingsWrapper(updater.DisplayName, updater.Description, updater.IsDefault.GetValueOrDefault(), true, settings);
                    UpdateWrapperValues(updater, newWrapper);
                    _propertySettingsRepositoryMethod().SaveGlobal(newWrapper);
                }
            }
        }
        void UpdatePageDefinitionsGlobalPropertySettings(PageTypePropertyDefinition propertyDefinition, PageTypeDefinition pageTypeDefinition, PageDefinition pageDefinition)
        {
            IEnumerable <object> attributes = GetPropertyAttributes(propertyDefinition, pageTypeDefinition);
            var useGlobalSettingsAttribute  = attributes.OfType <UseGlobalSettingsAttribute>().FirstOrDefault();

            if (useGlobalSettingsAttribute != null)
            {
                var container = GetPropertySettingsContainer(pageDefinition);
                //TODO: Should validate not null and valid type at startup
                var globalSettingsUpdater = globalPropertySettingsLocator.GetGlobalPropertySettingsUpdaters().First(u => u.WrappedInstanceType == useGlobalSettingsAttribute.Type);
                var wrapper = _propertySettingsRepositoryMethod().GetGlobals(globalSettingsUpdater.SettingsType)
                              .First(w => globalSettingsUpdater.Match(w));
                PropertySettingsWrapper existingWrapper = container.Settings.ContainsKey(globalSettingsUpdater.SettingsType.FullName)
                    ? container.Settings[globalSettingsUpdater.SettingsType.FullName]
                    : null;
                if (existingWrapper == null || existingWrapper.Id != wrapper.Id)
                {
                    container.Settings[globalSettingsUpdater.SettingsType.FullName] = wrapper;
                    //TODO: Add spec validating that exception is thrown with the below uncommented (An item with the same key has already been added.)
                    //container.Settings.Add(globalSettingsUpdater.SettingsType.FullName, wrapper);
                    _propertySettingsRepositoryMethod().Save(container);
                }
            }
        }
 public void SaveGlobal(PropertySettingsWrapper global)
 {
     throw new NotImplementedException();
 }
        public bool Match(PropertySettingsWrapper propertySettingsWrapper)
        {
            var matchMethod = typeof(IUpdateGlobalPropertySettings <>).MakeGenericType(SettingsType).GetMethod("Match", new[] { typeof(PropertySettingsWrapper) });

            return((bool)matchMethod.Invoke(invokationTarget, new object[] { propertySettingsWrapper }));
        }
 public void SaveGlobal(PropertySettingsWrapper global)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 18
0
 public bool Match(PropertySettingsWrapper propertySettingsWrapper)
 {
     return(propertySettingsWrapper.DisplayName.Equals(DisplayName));
 }
Ejemplo n.º 19
0
        static string WrapperValuesSerialized(GlobalPropertySettingsUpdater updater, PropertySettingsWrapper wrapper)
        {
            var hashCode = updater.GetSettingsHashCode(wrapper.PropertySettings);

            return(string.Concat((wrapper.Description ?? "null"), "||", wrapper.IsDefault, "||", hashCode));
        }
 public bool Match(PropertySettingsWrapper propertySettingsWrapper)
 {
     var matchMethod = typeof(IUpdateGlobalPropertySettings<>).MakeGenericType(SettingsType).GetMethod("Match", new[] { typeof(PropertySettingsWrapper) });
     return (bool)matchMethod.Invoke(invokationTarget, new object[] { propertySettingsWrapper });
 }
 static string WrapperValuesSerialized(GlobalPropertySettingsUpdater updater, PropertySettingsWrapper wrapper)
 {
     var hashCode = updater.GetSettingsHashCode(wrapper.PropertySettings);
     return string.Concat((wrapper.Description ?? "null"), "||", wrapper.IsDefault, "||", hashCode);
 }