From 7a426ebc3a4144b4ae1937014e9622962f4cd2ff Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Mon, 1 Feb 2021 14:20:57 -0700 Subject: [PATCH] Updates factory method signature to take parent room as parameter. Adds methods to build components in ComponentRoom constructor --- .../Room/Components/ComponentFactory.cs | 12 +++--- .../Room/Components/ComponentRoom.cs | 41 ++++++++++++++++++- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Components/ComponentFactory.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Components/ComponentFactory.cs index cd4acd37..7042b0f9 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Components/ComponentFactory.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Components/ComponentFactory.cs @@ -16,7 +16,7 @@ namespace PepperDash.Essentials.Core.Room.Components { public CType CType { get; set; } public string Description { get; set; } - public Func FactoryMethod { get; set; } + public Func FactoryMethod { get; set; } public ComponentFactoryWrapper() { @@ -70,13 +70,13 @@ namespace PepperDash.Essentials.Core.Room.Components /// /// /// - public static void AddFactoryForType(string typeName, Func method) + public static void AddFactoryForType(string typeName, Func method) { Debug.Console(0, Debug.ErrorLogLevel.Notice, "Adding factory method for type '{0}'", typeName); ComponentFactory.FactoryMethods.Add(typeName, new ComponentFactoryWrapper() { FactoryMethod = method }); } - public static void AddFactoryForType(string typeName, string description, CType cType, Func method) + public static void AddFactoryForType(string typeName, string description, CType cType, Func method) { Debug.Console(0, Debug.ErrorLogLevel.Notice, "Adding factory method for type '{0}'", typeName); @@ -96,7 +96,7 @@ namespace PepperDash.Essentials.Core.Room.Components /// /// /// - public static IKeyed GetComponent(RoomComponentConfig dc) + public static IKeyed GetComponent(RoomComponentConfig dc, IComponentRoom parent) { var key = dc.Key; var name = dc.Name; @@ -109,7 +109,7 @@ namespace PepperDash.Essentials.Core.Room.Components if (FactoryMethods.ContainsKey(typeName)) { Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading '{0}' from Essentials Core", dc.Type); - return FactoryMethods[typeName].FactoryMethod(dc); + return FactoryMethods[typeName].FactoryMethod(dc, parent); } return null; @@ -186,7 +186,7 @@ namespace PepperDash.Essentials.Core.Room.Components /// /// The device config /// An instance of the device - public abstract IComponent BuildComponent(RoomComponentConfig dc); + public abstract IComponent BuildComponent(RoomComponentConfig dc, IComponentRoom parent); #endregion } diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Components/ComponentRoom.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Components/ComponentRoom.cs index 42eda1c9..c3e9b634 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Components/ComponentRoom.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Components/ComponentRoom.cs @@ -6,6 +6,7 @@ using Crestron.SimplSharp; using PepperDash.Core; using PepperDash.Essentials.Core.Interfaces.Components; +using PepperDash.Essentials.Core.Room.Components; using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.Devices; @@ -84,21 +85,59 @@ namespace PepperDash.Essentials.Core.Room try { PropertiesConfig = config.Properties.ToObject(); + + BuildComponents(); + + BuildActivities(); } catch (Exception e) { Debug.Console(1, this, "Error building ComponentRoom: \n{0}", e); } - BuildComponents(); } + private void BuildComponents() { + foreach (var compConf in PropertiesConfig.Components) + { + IKeyed newComponent = null; + newComponent = ComponentFactory.GetComponent(compConf, this); + if (newComponent != null) + { + Components.Add(newComponent as IActivatableComponent); + DeviceManager.AddDevice(newComponent); + } + else + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Unable to build room component with key: {0}", compConf.Key); + } + } } + + private void BuildActivities() + { + foreach (var compConf in PropertiesConfig.Activities) + { + IKeyed newComponent = null; + + newComponent = ComponentFactory.GetComponent(compConf, this); + + if (newComponent != null) + { + Activities.Add(newComponent as IRoomActivityComponent); + DeviceManager.AddDevice(newComponent); + } + else + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Unable to build room activity with key: {0}", compConf.Key); + } + } + } ///