/// <summary> /// Gets the setting with the provided name. If the setting does not exist yet, it is created. /// </summary> /// <typeparam name="T">The type of the setting, can be any serializable type</typeparam> /// <param name="name">The name of the setting</param> /// <param name="defaultValue">The default value to use if the setting does not exist yet</param> /// <returns></returns> public PluginSetting <T> GetSetting <T>(string name, T defaultValue = default) { lock (_settingEntities) { // Return cached value if available if (_settingEntities.ContainsKey(name)) { return((PluginSetting <T>)_settingEntities[name]); } // Try to find in database PluginSettingEntity settingEntity = _pluginRepository.GetSettingByNameAndGuid(name, Plugin.Guid); // If not found, create a new one if (settingEntity == null) { settingEntity = new PluginSettingEntity { Name = name, PluginGuid = Plugin.Guid, Value = CoreJson.SerializeObject(defaultValue) }; _pluginRepository.AddSetting(settingEntity); } PluginSetting <T> pluginSetting = new(Plugin, _pluginRepository, settingEntity); // This overrides null with the default value, I'm not sure if that's desirable because you // might expect something to go null and you might not // if (pluginSetting.Value == null && defaultValue != null) // pluginSetting.Value = defaultValue; _settingEntities.Add(name, pluginSetting); return(pluginSetting); } }
/// <inheritdoc /> public void Save() { if (_disposed) { throw new ObjectDisposedException("DataBindingModifier"); } // Don't save an invalid state if (ParameterPath != null && !ParameterPath.IsValid) { return; } if (!DirectDataBinding.Entity.Modifiers.Contains(Entity)) { DirectDataBinding.Entity.Modifiers.Add(Entity); } // Modifier if (ModifierType?.Plugin != null) { Entity.ModifierType = ModifierType.GetType().Name; Entity.ModifierTypePluginGuid = ModifierType.Plugin.Guid; } // General Entity.Order = Order; Entity.ParameterType = (int)ParameterType; // Parameter ParameterPath?.Save(); Entity.ParameterPath = ParameterPath?.Entity; Entity.ParameterStaticValue = CoreJson.SerializeObject(ParameterStaticValue); }
/// <summary> /// Creates a deep copy of the folder /// </summary> /// <returns>The newly created copy</returns> public Folder CreateCopy() { if (Parent == null) { throw new ArtemisCoreException("Cannot create a copy of a folder without a parent"); } FolderEntity entityCopy = CoreJson.DeserializeObject <FolderEntity>(CoreJson.SerializeObject(FolderEntity, true), true) !; entityCopy.Id = Guid.NewGuid(); entityCopy.Name += " - Copy"; // TODO Children return(new Folder(Profile, Parent, entityCopy)); }
internal override void Save() { // Don't save an invalid state if (LeftPath != null && !LeftPath.IsValid || RightPath != null && !RightPath.IsValid) { return; } Entity.PredicateType = (int)PredicateType; LeftPath?.Save(); Entity.LeftPath = LeftPath?.Entity; RightPath?.Save(); Entity.RightPath = RightPath?.Entity; Entity.RightStaticValue = CoreJson.SerializeObject(RightStaticValue); if (Operator?.Plugin != null) { Entity.OperatorPluginGuid = Operator.Plugin.Guid; Entity.OperatorType = Operator.GetType().Name; } }