/// /// Copyright (c) 2013-2019 Sensus Slovensko a.s. /// using System.Collections.Generic; using Config.Entities; using TBF.BenchControl.Generic; namespace TBF.BenchControl { public static class TbfComponents { public readonly static IList Factories; static TbfComponents() { Factories = new List(); Factories.Add(new BackupAndSecurity.Default.ComponentFactory()); Factories.Add(new BenchInfo.Munich.ComponentFactory()); Factories.Add(new BenchInfo.Extended.ComponentFactory()); Factories.Add(new BenchInfo.iPerl.ComponentFactory()); Factories.Add(new Elde.ControlBoardFactory()); Factories.Add(new Elde.CoverTest.Factory()); Factories.Add(new DataEntry.Combined.EntryFormFactory()); Factories.Add(new DataEntry.HeatMeters6.Factory()); Factories.Add(new DataEntry.HeatMeters12.Factory()); Factories.Add(new DataEntry.Fewa.Factory()); Factories.Add(new DataEntry.Fewa.FactoryNoStartEnd()); Factories.Add(new DataEntry.Munich3.EntryFormFactory()); Factories.Add(new DataEntry.Munich.EntryFormFactory()); Factories.Add(new DataEntry.iPerl.EntryFormFactory()); Factories.Add(new DataEntry.Single.Factory()); Factories.Add(new DataEntry.Single.FactoryNoStartEnd()); Factories.Add(new DataEntry.Standard6.Factory()); Factories.Add(new DataEntry.Standard6.FactoryNoStartEnd()); Factories.Add(new DataEntry.Standard12.Factory()); Factories.Add(new DataEntry.Standard12.FactoryNoStartEnd()); Factories.Add(new DataEntry.Standard24.Factory()); Factories.Add(new DataEntry.Standard24.FactoryNoStartEnd()); Factories.Add(new DataEntry.Standard48.Factory()); Factories.Add(new DataEntry.Standard48.FactoryNoStartEnd()); Factories.Add(new DataEntry.StandardCamera.Factory()); Factories.Add(new RegisterReaders.KPackE.DataEntryForRadio.Factory()); /// DataEntry for KPackE radio Factories.Add(new Dummy.Balance.Factory()); Factories.Add(new Dummy.Diverter.Factory()); Factories.Add(new Dummy.FlowMeter.Factory()); Factories.Add(new Dummy.RegulValve.Factory()); Factories.Add(new Dummy.Valve.Factory()); Factories.Add(new Elde.Diverter.DiverterFactory()); Factories.Add(new Elde.FlowMeter.FlowMeterFactory()); Factories.Add(new Elde.FlowMeterDewa.Factory()); Factories.Add(new Elde.FlowMeterTwins.FlowMeterFactory()); Factories.Add(new Elde.FlowMeterTriplet.FlowMeterFactory()); Factories.Add(new TestMethods.Adjustment.Factory()); Factories.Add(new TestMethods.ChangeFlowDirection.Factory()); Factories.Add(new TestMethods.CombinedWithDetection.TestMethodFactory()); Factories.Add(new TestMethods.Counter.Factory()); Factories.Add(new TestMethods.DiverterTest.Factory()); Factories.Add(new TestMethods.Endurance.Factory()); Factories.Add(new TestMethods.FixedStart.Single.Factory()); Factories.Add(new TestMethods.FixedStart.Compound.Factory()); Factories.Add(new TestMethods.FixedStart.HeatMeters.Factory()); Factories.Add(new TestMethods.FixedStartAdvanced.Single.Factory()); Factories.Add(new TestMethods.FixedStartDeferredEvaluation.Single.Factory()); Factories.Add(new TestMethods.FixedStartDeferredEvaluation.Compound.Factory()); Factories.Add(new TestMethods.FixedStartDeferredEvaluation.HeatMeters.Factory()); Factories.Add(new TestMethods.FixedStartMassCollection.Single.Factory()); Factories.Add(new TestMethods.FixedStartMassCollection.Compound.Factory()); Factories.Add(new TestMethods.FixedStartMassCollection.HeatMeters.Factory()); Factories.Add(new TestMethods.FixedStartTankCollection.Single.Factory()); Factories.Add(new TestMethods.FixedStartTankCollection.Compound.Factory()); Factories.Add(new TestMethods.FlyingStart.Single.Factory()); Factories.Add(new TestMethods.FlyingStart.Compound.Factory()); Factories.Add(new TestMethods.FlyingStart.HeatMeters.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollection.Single.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollection.Compound.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollection.HeatMeters.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollComparative.Single.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollComparative.Compound.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollComparative.HeatMeters.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollProlonged.Single.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollProlonged.Compound.Factory()); Factories.Add(new TestMethods.FlyingStartMassCollProlonged.HeatMeters.Factory()); Factories.Add(new TestMethods.FlyingStartFirstRepetWithMassColl.Single.Factory()); Factories.Add(new TestMethods.FlyingStartFirstRepetWithMassColl.Compound.Factory()); Factories.Add(new TestMethods.FlyingStartFirstRepetWithMassColl.HeatMeters.Factory()); Factories.Add(new TestMethods.FlyingStartTankCollection.Single.Factory()); Factories.Add(new TestMethods.FlyingStartTankCollection.Compound.Factory()); Factories.Add(new TestMethods.GrabImage.Factory()); Factories.Add(new TestMethods.LeakTest.TestMethodFactory()); Factories.Add(new TestMethods.LiveStream.Factory()); Factories.Add(new TestMethods.OuterLoop.Start.Factory()); Factories.Add(new TestMethods.OuterLoop.End.Factory()); Factories.Add(new TestMethods.PMaxTest.TestMethodFactory()); Factories.Add(new TestMethods.PulsesTest.Factory()); Factories.Add(new TestMethods.PulsesTestManual.Factory()); Factories.Add(new TestMethods.Q2CorrectionFromHistory.Factory()); Factories.Add(new TestMethods.SensitivityTest.Factory()); Factories.Add(new TestMethods.iPerlCommunication.TestMethodFactory()); /// iPerlCommunication Factories.Add(new TestMethods.RoiDetection.RoiDetectionFactory()); Factories.Add(new DataEntry.WMStates.EntryFormFactory()); Factories.Add(new Ambient.Comet.Factory()); Factories.Add(new Ambient.Greco.Factory()); Factories.Add(new Hart.Common.Factory()); Factories.Add(new Hart.Nivotrack.Factory()); Factories.Add(new Keithley.Multimeter_2010_RS232.Factory()); /// Keithley.Multimeter_2010_RS232 Factories.Add(new Keithley.TempMeter.Factory()); /// Keithley.TempMeter Factories.Add(new MettlerToledo.Standard.BalanceFactory()); /// MettlerToledo Balance Factories.Add(new MettlerToledo.Standard.BalanceOldFactory()); /// MettlerToledoBalanceOld Factories.Add(new MettlerToledo.Standard.BalanceNewFactory()); /// MettlerToledoBalanceSN Factories.Add(new MettlerToledo.Multi.BalanceFactory()); /// MettlerToledo-Multi Factories.Add(new Modbus.CometAmbient.Factory()); /// Modbus.CometAmbient.Ambient Factories.Add(new Modbus.Common.Factory()); /// Modbus Factories.Add(new Modbus.Easytherm.Factory()); /// Modbus.Easytherm Factories.Add(new Modbus.PressureMeter.Meret.Factory()); /// Modbus.PressureMeter.Meret - Meret pressure meter connected via modbus Factories.Add(new Modbus.QuidoRS.Factory()); /// Modbus.QuidoRS Factories.Add(new Modbus.TankSelector.Factory()); /// Modbus.TankSelector Factories.Add(new Modbus.UltrasoundLevelMeter.Factory()); Factories.Add(new Network.Adapter.Factory()); Factories.Add(new Network.Camera.CLP1611.Factory()); Factories.Add(new Network.Camera.Display.Factory()); Factories.Add(new Network.Camera.Roi.Factory()); Factories.Add(new Network.Camera.RoiForFixedStart.Factory()); Factories.Add(new Network.Comet.Ambient.Factory()); Factories.Add(new Output.DB.ProductionTracing.Factory()); Factories.Add(new Output.DB.SaveDiverterCorrections.Factory()); Factories.Add(new Output.DB.SaveFlowmeterCorrections.Factory()); Factories.Add(new Output.DB.SensusOracle.Factory()); Factories.Add(new Output.FileWriters.Basic.FactorySingle()); Factories.Add(new Output.FileWriters.Basic.FactoryCompound()); Factories.Add(new Output.FileWriters.Basic.FactoryHeatMeters()); Factories.Add(new Output.FileWriters.Elde.FactorySingle()); Factories.Add(new Output.FileWriters.Enhanced.FactorySingle()); Factories.Add(new Output.FileWriters.Enhanced.FactoryCompound()); Factories.Add(new Output.FileWriters.Enhanced.FactoryHeatMeters()); Factories.Add(new Output.FileWriters.ImageArchiver.Factory()); Factories.Add(new Output.FileWriters.IperlLogger.Factory()); Factories.Add(new Output.FileWriters.OneFilePerMeter.FactorySingle()); Factories.Add(new Output.FileWriters.OneFilePerMeter.FactoryCompound()); Factories.Add(new Output.FileWriters.OneFilePerMeter.FactoryHeatMeters()); Factories.Add(new Output.FileWriters.Xml.FactorySingle()); Factories.Add(new Output.FileWriters.Xml.FactoryCompound()); Factories.Add(new Output.FileWriters.Xml.FactoryHeatMeters()); Factories.Add(new Output.FileWriters.XmlBatch.FactorySingle()); Factories.Add(new Output.Printers.Enhanced.FactorySingle()); Factories.Add(new Output.Printers.Enhanced.FactoryCompound()); Factories.Add(new Output.Printers.Enhanced.FactoryHeatMeters()); Factories.Add(new Output.Printers.Label.Factory()); /// Label printer Factories.Add(new Output.Printers.Munich.PrinterFactory()); Factories.Add(new Output.Printers.OnePerMeter.FactorySingle()); Factories.Add(new Output.Printers.OnePerMeter.FactoryCompound()); Factories.Add(new Output.Printers.OnePerMeter.FactoryHeatMeters()); Factories.Add(new Output.Printers.Zapiska.FactorySingle()); Factories.Add(new Output.Printers.Zapiska.FactoryCompound()); Factories.Add(new Output.Printers.Zapiska.FactoryHeatMeters()); Factories.Add(new Elde.PressureMeter.PressureMeterFactory()); Factories.Add(new Elde.PressureMeterInternal.PressureMeterFactory()); Factories.Add(new Elde.Pump.PumpFactory()); Factories.Add(new Danfoss.VLT2800.PumpFactory()); Factories.Add(new Elde.PumpWithFM.PumpFactory()); Factories.Add(new Elde.PumpTandem.PumpFactory()); Factories.Add(new Elde.RegisterReader.Factory()); /// 'RegisterReader' Factories.Add(new Elde.FixedStartRegisterReader.RegisterReaderFactory()); /// 'RegisterReader for standing start/stop' Factories.Add(new TestMethods.iPerlCommunication.iPerlHead.Factory()); /// 'RegisterReader for iPerl' Factories.Add(new RegisterReaders.SerialStream.Factory()); /// 'RegisterReader for generic serial stream' Factories.Add(new RegisterReaders.KPackE.RegisterReader.Factory()); /// KPackE register reader Factories.Add(new RegisterReaders.KPackE.Radio.Factory()); /// Radio for KPackE register readers Factories.Add(new Elde.RegulValve.RegulValveFactory()); Factories.Add(new Elde.RegulValveCoax.Factory()); Factories.Add(new Elde.RegulValveTandem.RegulValveTandemFactory()); Factories.Add(new Elde.TempMeter.TempMeterFactory()); Factories.Add(new Elde.TempMeterInternal.TempMeterFactory()); Factories.Add(new Elde.TempMeterMeret.Factory()); /// Meret temp. meter connected to control board Modbus Factories.Add(new Elde.Valve.ValveFactory()); Factories.Add(new Elde.ValveEx.ValveFactory()); Factories.Add(new Various.ErrorFlags.Factory()); Factories.Add(new Various.Evaporation.Factory()); Factories.Add(new Various.TankWithLevelMsrmnt.Factory()); Factories.Add(new WaterMeters.Munich.WaterMeterFactory()); /// 'WaterMeters.Munich' Factories.Add(new WaterMeters.WaterMeter.WaterMeterFactory()); /// 'WaterMeter' } /// /// Get a component factory given the component name /// /// Component class name /// Component factory instance public static IComponentFactory CmpntFactoryFromClassName(string className) { foreach (var factory in Factories) { if (factory.ClassName.Equals(className)) return factory; } return null; } /// /// Get a component configuration given a component DB entity /// /// DB entity /// An appropriate component configuration or null if factory was not found public static IComponentCfg CmpntCfgFromCmpntEntity(Component entity) { IComponentFactory cmpntFactory = CmpntFactoryFromClassName(entity.ClassName); if (cmpntFactory == null) return null; try { return cmpntFactory.CmpntCfgFromCmpntEntity(entity); } catch { return null; } } public static string CurrentlyLoadedComponentName; /// /// Load component entities from the database and convert them to TBF components /// derived from IComponent with mutual references. /// /// NHibernate DB session /// A list of TBF Components public static IList LoadComponentsFromDB(NHibernate.ISession session) { CurrentlyLoadedComponentName = string.Empty; foreach (var factory in Factories) factory.ResetStaticProperties(); /// Load the list of components from the database IList cmptnEntities = session.QueryOver() .OrderBy(x => x.ItemNr).Asc .List(); /// Convert database entities to TBF components IList components = new List(); foreach (var entity in cmptnEntities) { CurrentlyLoadedComponentName = entity.Name; IComponentFactory cmpntFactory = BenchControl.TbfComponents.CmpntFactoryFromClassName(entity.ClassName); if (cmpntFactory == null) continue; IComponent cmpnt = cmpntFactory.GetComponent(cmpntFactory.CmpntCfgFromCmpntEntity(entity), components); /// /// Inherit DebugMode from the parent (if any) /// if ((cmpnt.Cfg.DebugLevel == DebugMode.Inherit) && (cmpnt.Cfg is IChildComponentCfg) && !string.IsNullOrEmpty(cmpnt.Cfg.ParentName)) { bool inherited = false; foreach (var par in components) { if (par.Cfg.Name.Equals(cmpnt.Cfg.ParentName)) { /// Parent found, inherit the debug mode cmpnt.Cfg.DebugLevel = par.Cfg.DebugLevel; inherited = true; break; } } if (!inherited) { /// Applied when the parent is (most likely) in DebugMode.Off cmpnt.Cfg.DebugLevel = DebugMode.Off; } } if (cmpnt.Cfg.DebugLevel != DebugMode.Off) components.Add(cmpnt); } CurrentlyLoadedComponentName = string.Empty; return components; } /// /// Get a reference to a component with a given name from a list of components. /// /// Component name /// A list of components /// Matching component or null public static IComponent FindComponent(string name, IList components) { if (string.IsNullOrEmpty(name)) return null; foreach (var cmpnt in components) { if (cmpnt.Cfg.Name.Equals(name)) return cmpnt; } return null; } public static IComponent FindComponent(string name) { return FindComponent(name, StateMachine.Components); } } }