diff --git a/src/Artemis.Core/Models/Profile/Conditions/Abstract/DisplayConditionPart.cs b/src/Artemis.Core/Models/Profile/Conditions/Abstract/DisplayConditionPart.cs index 7c1baa735..a72efd032 100644 --- a/src/Artemis.Core/Models/Profile/Conditions/Abstract/DisplayConditionPart.cs +++ b/src/Artemis.Core/Models/Profile/Conditions/Abstract/DisplayConditionPart.cs @@ -1,10 +1,13 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; namespace Artemis.Core.Models.Profile.Conditions.Abstract { public abstract class DisplayConditionPart { + public Guid EntityId { get; internal set; } + private readonly List _children; protected DisplayConditionPart() diff --git a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionGroup.cs b/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionGroup.cs index a2cb69f9e..46577f280 100644 --- a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionGroup.cs +++ b/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionGroup.cs @@ -1,13 +1,42 @@ -using Artemis.Core.Models.Profile.Conditions.Abstract; +using System; +using Artemis.Core.Models.Profile.Conditions.Abstract; +using Artemis.Storage.Entities.Profile; namespace Artemis.Core.Models.Profile.Conditions { public class DisplayConditionGroup : DisplayConditionPart { + public DisplayConditionGroup(DisplayConditionPart parent) + { + Parent = parent; + EntityId = Guid.NewGuid(); + } + + public DisplayConditionGroup(DisplayConditionPart parent, DisplayConditionGroupEntity entity) + { + DisplayConditionGroupEntity = entity; + Parent = parent; + EntityId = DisplayConditionGroupEntity.Id; + BooleanOperator = (BooleanOperator) DisplayConditionGroupEntity.BooleanOperator; + + foreach (var childEntity in DisplayConditionGroupEntity.Children) + { + if (childEntity is DisplayConditionGroupEntity groupEntity) + AddChild(new DisplayConditionGroup(this, groupEntity)); + if (childEntity is DisplayConditionPredicateEntity predicateEntity) + AddChild(new DisplayConditionPredicate(this, predicateEntity)); + } + } + public BooleanOperator BooleanOperator { get; set; } + public DisplayConditionGroupEntity DisplayConditionGroupEntity { get; set; } public override void ApplyToEntity() { + DisplayConditionGroupEntity.Id = EntityId; + DisplayConditionGroupEntity.ParentId = Parent?.EntityId ?? new Guid(); + DisplayConditionGroupEntity.BooleanOperator = (int) BooleanOperator; + foreach (var child in Children) child.ApplyToEntity(); } diff --git a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionPredicate.cs b/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionPredicate.cs index b260f3449..6536352e3 100644 --- a/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionPredicate.cs +++ b/src/Artemis.Core/Models/Profile/Conditions/DisplayConditionPredicate.cs @@ -4,11 +4,25 @@ using System.Linq.Expressions; using Artemis.Core.Models.Profile.Conditions.Abstract; using Artemis.Core.Plugins.Abstract.DataModels; using Artemis.Core.Services.Interfaces; +using Artemis.Storage.Entities.Profile; namespace Artemis.Core.Models.Profile.Conditions { public class DisplayConditionPredicate : DisplayConditionPart { + public DisplayConditionPredicate(DisplayConditionPart parent) + { + Parent = parent; + } + + public DisplayConditionPredicate(DisplayConditionPart parent, DisplayConditionPredicateEntity entity) + { + Parent = parent; + DisplayConditionPredicateEntity = entity; + } + + public DisplayConditionPredicateEntity DisplayConditionPredicateEntity { get; set; } + public PredicateType PredicateType { get; set; } public DisplayConditionOperator Operator { get; set; } @@ -96,6 +110,11 @@ namespace Artemis.Core.Models.Profile.Conditions StaticConditionLambda = Expression.Lambda>(conditionExpression, leftSideParameter); CompiledStaticConditionLambda = StaticConditionLambda.Compile(); } + + public override void ApplyToEntity() + { + + } } public enum PredicateType diff --git a/src/Artemis.Core/Models/Profile/Folder.cs b/src/Artemis.Core/Models/Profile/Folder.cs index 2d0f58c01..ff7900999 100644 --- a/src/Artemis.Core/Models/Profile/Folder.cs +++ b/src/Artemis.Core/Models/Profile/Folder.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Artemis.Core.Plugins.LayerEffect.Abstract; using Artemis.Storage.Entities.Profile; +using Artemis.Storage.Entities.Profile.Abstract; using SkiaSharp; namespace Artemis.Core.Models.Profile diff --git a/src/Artemis.Core/Models/Profile/Layer.cs b/src/Artemis.Core/Models/Profile/Layer.cs index ce23f175d..41be991d5 100644 --- a/src/Artemis.Core/Models/Profile/Layer.cs +++ b/src/Artemis.Core/Models/Profile/Layer.cs @@ -13,6 +13,7 @@ using Artemis.Core.Plugins.LayerEffect.Abstract; using Artemis.Core.Services; using Artemis.Core.Services.Interfaces; using Artemis.Storage.Entities.Profile; +using Artemis.Storage.Entities.Profile.Abstract; using SkiaSharp; namespace Artemis.Core.Models.Profile diff --git a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs index 83bc2289e..19fbb7070 100644 --- a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs +++ b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs @@ -6,6 +6,7 @@ using Artemis.Core.Annotations; using Artemis.Core.Models.Profile.Conditions; using Artemis.Core.Plugins.LayerEffect.Abstract; using Artemis.Storage.Entities.Profile; +using Artemis.Storage.Entities.Profile.Abstract; using SkiaSharp; namespace Artemis.Core.Models.Profile diff --git a/src/Artemis.Storage/Entities/Profile/Abstract/DisplayConditionPartEntity.cs b/src/Artemis.Storage/Entities/Profile/Abstract/DisplayConditionPartEntity.cs new file mode 100644 index 000000000..c80d7fc09 --- /dev/null +++ b/src/Artemis.Storage/Entities/Profile/Abstract/DisplayConditionPartEntity.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace Artemis.Storage.Entities.Profile.Abstract +{ + public abstract class DisplayConditionPartEntity + { + public Guid Id { get; set; } + public Guid ParentId { get; set; } + + public List Children { get; set; } + } +} \ No newline at end of file diff --git a/src/Artemis.Storage/Entities/Profile/EffectsEntity.cs b/src/Artemis.Storage/Entities/Profile/Abstract/EffectsEntity.cs similarity index 77% rename from src/Artemis.Storage/Entities/Profile/EffectsEntity.cs rename to src/Artemis.Storage/Entities/Profile/Abstract/EffectsEntity.cs index d443c3573..2840a76e3 100644 --- a/src/Artemis.Storage/Entities/Profile/EffectsEntity.cs +++ b/src/Artemis.Storage/Entities/Profile/Abstract/EffectsEntity.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Artemis.Storage.Entities.Profile +namespace Artemis.Storage.Entities.Profile.Abstract { public abstract class EffectsEntity : PropertiesEntity { diff --git a/src/Artemis.Storage/Entities/Profile/PropertiesEntity.cs b/src/Artemis.Storage/Entities/Profile/Abstract/PropertiesEntity.cs similarity index 81% rename from src/Artemis.Storage/Entities/Profile/PropertiesEntity.cs rename to src/Artemis.Storage/Entities/Profile/Abstract/PropertiesEntity.cs index af9f308a0..121307668 100644 --- a/src/Artemis.Storage/Entities/Profile/PropertiesEntity.cs +++ b/src/Artemis.Storage/Entities/Profile/Abstract/PropertiesEntity.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Artemis.Storage.Entities.Profile +namespace Artemis.Storage.Entities.Profile.Abstract { public abstract class PropertiesEntity { diff --git a/src/Artemis.Storage/Entities/Profile/BrushEntity.cs b/src/Artemis.Storage/Entities/Profile/BrushEntity.cs deleted file mode 100644 index 99101eb4a..000000000 --- a/src/Artemis.Storage/Entities/Profile/BrushEntity.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace Artemis.Storage.Entities.Profile -{ - public class BrushEntity - { - public Guid BrushPluginGuid { get; set; } - public string BrushType { get; set; } - public string Configuration { get; set; } - } -} \ No newline at end of file diff --git a/src/Artemis.Storage/Entities/Profile/DisplayConditionGroupEntity.cs b/src/Artemis.Storage/Entities/Profile/DisplayConditionGroupEntity.cs new file mode 100644 index 000000000..b99d01170 --- /dev/null +++ b/src/Artemis.Storage/Entities/Profile/DisplayConditionGroupEntity.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Artemis.Storage.Entities.Profile.Abstract; + +namespace Artemis.Storage.Entities.Profile +{ + public class DisplayConditionGroupEntity : DisplayConditionPartEntity + { + public DisplayConditionGroupEntity() + { + Children = new List(); + } + + public int BooleanOperator { get; set; } + } +} \ No newline at end of file diff --git a/src/Artemis.Storage/Entities/Profile/DisplayConditionPredicateEntity.cs b/src/Artemis.Storage/Entities/Profile/DisplayConditionPredicateEntity.cs index eb4e70d0c..0ade47a6f 100644 --- a/src/Artemis.Storage/Entities/Profile/DisplayConditionPredicateEntity.cs +++ b/src/Artemis.Storage/Entities/Profile/DisplayConditionPredicateEntity.cs @@ -1,8 +1,9 @@ using System; +using Artemis.Storage.Entities.Profile.Abstract; namespace Artemis.Storage.Entities.Profile { - public class DisplayConditionPredicateEntity + public class DisplayConditionPredicateEntity : DisplayConditionPartEntity { public Guid LeftDataModelGuid { get; set; } public string LeftPropertyPath { get; set; } diff --git a/src/Artemis.Storage/Entities/Profile/FolderEntity.cs b/src/Artemis.Storage/Entities/Profile/FolderEntity.cs index a48924b3c..3cfc24d3b 100644 --- a/src/Artemis.Storage/Entities/Profile/FolderEntity.cs +++ b/src/Artemis.Storage/Entities/Profile/FolderEntity.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Artemis.Storage.Entities.Profile.Abstract; using LiteDB; namespace Artemis.Storage.Entities.Profile @@ -9,7 +10,6 @@ namespace Artemis.Storage.Entities.Profile public FolderEntity() { PropertyEntities = new List(); - Conditions = new List(); LayerEffects = new List(); ExpandedPropertyGroups = new List(); } diff --git a/src/Artemis.Storage/Entities/Profile/LayerEntity.cs b/src/Artemis.Storage/Entities/Profile/LayerEntity.cs index 65b2c3919..04a640eb6 100644 --- a/src/Artemis.Storage/Entities/Profile/LayerEntity.cs +++ b/src/Artemis.Storage/Entities/Profile/LayerEntity.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Artemis.Storage.Entities.Profile.Abstract; using LiteDB; namespace Artemis.Storage.Entities.Profile @@ -10,7 +11,6 @@ namespace Artemis.Storage.Entities.Profile { Leds = new List(); PropertyEntities = new List(); - Conditions = new List(); LayerEffects = new List(); ExpandedPropertyGroups = new List(); }