diff --git a/Config/Entities/Enums.cs b/Config/Entities/Enums.cs index d4ee6580c..0558d7dcd 100644 --- a/Config/Entities/Enums.cs +++ b/Config/Entities/Enums.cs @@ -61,7 +61,22 @@ namespace Config.Entities Count, } - public enum ProcedureState + /// + /// Contains a procedure name and a database specification (local/remote). + /// + public class ProcedureInfo + { + public readonly string Name; + public readonly Users.Entities.DBKind DBKind; + + public ProcedureInfo(string name, Users.Entities.DBKind dbKind) + { + Name = name; + DBKind = dbKind; + } + } + + public enum ProcedureState { Active, History, diff --git a/Config/FluentCommon.cs b/Config/FluentCommon.cs index c873c745f..ca8b42f6c 100644 --- a/Config/FluentCommon.cs +++ b/Config/FluentCommon.cs @@ -41,7 +41,7 @@ namespace Config break; case Users.Entities.DBKind.RemoteConfig: dbType = Data.CurrentBench.UsersDBSettings.DbType; - connectionString = Data.CurrentBench.WaterMetersDBSettings.ConnectionString; + connectionString = Data.CurrentBench.UsersDBSettings.ConnectionString; break; } diff --git a/TBF/BenchControl/Operations/LoadProcedureOp.cs b/TBF/BenchControl/Operations/LoadProcedureOp.cs index f21b413fe..591588ea1 100644 --- a/TBF/BenchControl/Operations/LoadProcedureOp.cs +++ b/TBF/BenchControl/Operations/LoadProcedureOp.cs @@ -44,7 +44,7 @@ namespace TBF.BenchControl.Operations { ISession session = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config); StateMachine.LoadPathsAndTransitions(session); - StateMachine.LoadProcedure(session); + StateMachine.LoadProcedure(session, TBF.UiBridge.Bridge.SelectedProcedure.Name); StateMachine.LoadProcedureParams(StateMachine.Procedure); completed = true; diff --git a/TBF/BenchControl/Sequences/MainSeq.cs b/TBF/BenchControl/Sequences/MainSeq.cs index b79f716af..d93e06a4f 100644 --- a/TBF/BenchControl/Sequences/MainSeq.cs +++ b/TBF/BenchControl/Sequences/MainSeq.cs @@ -318,58 +318,32 @@ namespace TBF.BenchControl.Sequences { StateMachine.LoadPathsAndTransitions(localSession); } - } - catch (Exception) { continue; } - - Users.Entities.DBKind[] configDBs; - /// - if (BenchInfo == null || BenchInfo.RemoteDBUse == RemoteDBUse.LocalDBOnly) - { - configDBs = new Users.Entities.DBKind[] { Users.Entities.DBKind.Config }; - } - else if (BenchInfo.RemoteDBUse == RemoteDBUse.RemoteDBOnly) - { - configDBs = new Users.Entities.DBKind[] { Users.Entities.DBKind.RemoteConfig }; - } - else if (BenchInfo.RemoteDBUse == RemoteDBUse.BothDBsLocalFirst) - { - configDBs = new Users.Entities.DBKind[] { Users.Entities.DBKind.Config, Users.Entities.DBKind.RemoteConfig }; - } - else if (BenchInfo.RemoteDBUse == RemoteDBUse.BothDBsRemoteFirst) - { - configDBs = new Users.Entities.DBKind[] { Users.Entities.DBKind.RemoteConfig, Users.Entities.DBKind.Config }; - } - else - { - configDBs = new Users.Entities.DBKind[] { Users.Entities.DBKind.Config }; - } - - /// - /// Try to load all parameters for the selected procedure from databases as specifie in BenchInfo - /// - foreach (var cfgDb in configDBs) - { - try + /// + /// Try to load all parameters for the selected procedure from databases as specifie in BenchInfo + /// + if ((Bridge.SelectedProcedure != null) && !string.IsNullOrEmpty(Bridge.SelectedProcedure.Name)) { /// TODO: Repeate twice for Users.Entities.DBKind.Config and Users.Entities.DBKind.RemoteConfig - using (ISession remoteOrLocalSession = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config)) + using (ISession remoteOrLocalSession = Config.FluentCommon.CreateSession(Bridge.SelectedProcedure.DBKind)) { - StateMachine.LoadProcedure(remoteOrLocalSession); + StateMachine.LoadProcedure(remoteOrLocalSession, Bridge.SelectedProcedure.Name); StateMachine.LoadProcedureParams(StateMachine.Procedure); /// This is to load Procedure.Tests and tets.MoreParams for each test int a = 0; foreach (var test in StateMachine.Procedure.Tests) a += test.MoreParams.Count; } - - if (StateMachine.Procedure != null) break; } - catch (Exception) + else { StateMachine.Procedure = null; } } + catch (Exception) + { + StateMachine.Procedure = null; + } } while (StateMachine.Procedure == null); /// Make sure a valid procedure is selected diff --git a/TBF/BenchControl/StateMachine.cs b/TBF/BenchControl/StateMachine.cs index d4e41d2ee..87bbec0ae 100644 --- a/TBF/BenchControl/StateMachine.cs +++ b/TBF/BenchControl/StateMachine.cs @@ -403,13 +403,13 @@ namespace TBF.BenchControl /// Loads selected procedure from the DB. /// Updates StateMachine.Procedure and StateMachine.Tests /// - public static bool LoadProcedure(ISession session) + public static bool LoadProcedure(ISession session, string procedureName) { Procedure = null; IList selectedProcs = session.QueryOver() .Where(x => (x.ProcedureState == ProcedureState.Active)) - .And(x => (x.Name == TBF.UiBridge.Bridge.SelectedProcedureName)) + .And(x => (x.Name == procedureName)) .List(); if (selectedProcs.Count != 1) return false; diff --git a/TBF/LocalSettings.cs b/TBF/LocalSettings.cs index 97336f746..f227bfb08 100644 --- a/TBF/LocalSettings.cs +++ b/TBF/LocalSettings.cs @@ -50,6 +50,7 @@ namespace TBF /// [XmlElementAttribute("LastProcedure")] public string LastProcedureName; + public Users.Entities.DBKind LastProcedureDB; public int LastProcedureNr; public int BatchNr; diff --git a/TBF/MainWnd.cs b/TBF/MainWnd.cs index 40e5183d8..64226c968 100644 --- a/TBF/MainWnd.cs +++ b/TBF/MainWnd.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2013-2018 Sensus Metering Systems +/// Copyright (c) 2013-2018 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; @@ -13,6 +13,9 @@ using System.Threading; namespace TBF { + /// + /// Main program window + /// public partial class MainWnd : Form { static readonly ILog log = LogManager.GetLogger(typeof(MainWnd)); @@ -20,7 +23,7 @@ namespace TBF const string ProcSeparator = " "; /// string separating procedure number and procedure name public UiControls.BenchControlPanel BenchControlPanel; - public string ProcedureName; + public ProcedureInfo SelectedProcedure; public Procedure CurrentProcedure; public bool CycleRunning; @@ -257,7 +260,8 @@ namespace TBF } procedureComboBox.Text = string.Format("{0}{1}{2}", Program.LocalSettings.LastProcedureNr, ProcSeparator, Program.LocalSettings.LastProcedureName); - ProcedureName = Program.LocalSettings.LastProcedureName; + SelectedProcedure = new ProcedureInfo(Program.LocalSettings.LastProcedureName, Program.LocalSettings.LastProcedureDB); + rightHorizSplitContainer.SplitterDistance = Program.LocalSettings.RightPaneHorizSplitterDistance; topVerticalSplitContainer.SplitterDistance = Program.LocalSettings.TopPaneVerticalSplitterDistance; @@ -286,6 +290,7 @@ namespace TBF new System.ComponentModel.ComponentResourceManager(typeof(MainWnd)).ApplyResources(BenchControlPanel, "benchControlPanel"); BenchControlPanel.Name = "benchControlPanel"; rightHorizSplitContainer.Panel2.Controls.Add(BenchControlPanel); + ReloadProcedureComboBoxItems(); /// Select the initial tab page @@ -448,50 +453,85 @@ namespace TBF public void ReloadProcedureComboBoxItems() { int separPos = procedureComboBox.Text.IndexOf(ProcSeparator); - ReloadProcedureComboBoxItems((separPos >= 0) ? procedureComboBox.Text.Substring(separPos + ProcSeparator.Length) : string.Empty); + string procName = (separPos >= 0) ? procedureComboBox.Text.Substring(separPos + ProcSeparator.Length) : string.Empty; + ReloadProcedureComboBoxItems(procName); } public void ReloadProcedureComboBoxItems(string procedureNameToSelect) { + BenchControl.GenericDevices.IBenchInfo benchInfo = BenchControl.Sequences.ProcessData.BenchInfo; + RemoteDBUse remoteDbUse = (benchInfo != null) ? benchInfo.RemoteDBUse : RemoteDBUse.LocalDBOnly; + + Users.Entities.DBKind[] dBase; + string[] signature; + /// + switch (remoteDbUse) + { + default: + case RemoteDBUse.LocalDBOnly: + dBase = new Users.Entities.DBKind[] { Users.Entities.DBKind.Config }; + signature = new string[] { "" }; + break; + case RemoteDBUse.RemoteDBOnly: + dBase = new Users.Entities.DBKind[] { Users.Entities.DBKind.RemoteConfig }; + signature = new string[] { "R" }; + break; + case RemoteDBUse.BothDBsLocalFirst: + dBase = new Users.Entities.DBKind[] { Users.Entities.DBKind.Config, Users.Entities.DBKind.RemoteConfig }; + signature = new string[] { "L", "R" }; + break; + case RemoteDBUse.BothDBsRemoteFirst: + dBase = new Users.Entities.DBKind[] { Users.Entities.DBKind.RemoteConfig, Users.Entities.DBKind.Config }; + signature = new string[] { "R", "L" }; + break; + } + if (procedureComboBox.Enabled) { - IList procedures = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config) - .QueryOver() - .Where(x => (x.ProcedureState == ProcedureState.Active)) - .OrderBy(x => x.ItemNr).Asc - .List(); bool procedureSet = false; procedureComboBox.Items.Clear(); - foreach (var proc in procedures) + IList allProcedures = new List(); + + for (int i = 0; i < dBase.Length; i++) { - string itemText = string.Format("{0}{1}{2}", proc.ItemNr + 1, ProcSeparator, proc.Name); - procedureComboBox.Items.Add(itemText); - if (procedureNameToSelect == proc.Name) + IList procedures = Config.FluentCommon.CreateSession(dBase[i]) + .QueryOver() + .Where(x => (x.ProcedureState == ProcedureState.Active)) + .OrderBy(x => x.ItemNr).Asc + .List(); + foreach (var proc in procedures) { - procedureComboBox.Text = itemText; - ProcedureName = procedureNameToSelect; - procedureSet = true; + string itemText = string.Format("{0}{1}{2}{3}", signature[i], proc.ItemNr + 1, ProcSeparator, proc.Name); + procedureComboBox.Items.Add(itemText); + if ((procedureNameToSelect == proc.Name) && !procedureSet) + { + procedureComboBox.Text = itemText; + SelectedProcedure = new ProcedureInfo(procedureNameToSelect, dBase[i]); + procedureSet = true; + } } } if (!procedureSet) { - if (procedures.Count > 0) + if (allProcedures.Count > 0) { - procedureComboBox.Text = string.Format("{0}{1}{2}", procedures[0].ItemNr + 1, ProcSeparator, procedures[0].Name); - ProcedureName = procedures[0].Name; + procedureComboBox.Text = string.Format("{0}{1}{2}", allProcedures[0].ItemNr + 1, ProcSeparator, allProcedures[0].Name); + Users.Entities.DBKind dbKind = ((remoteDbUse == RemoteDBUse.BothDBsRemoteFirst) || (remoteDbUse == RemoteDBUse.RemoteDBOnly)) ? Users.Entities.DBKind.RemoteConfig : Users.Entities.DBKind.Config; + SelectedProcedure = new ProcedureInfo(allProcedures[0].Name, dbKind); + procedureSet = true; } else { procedureComboBox.Text = string.Empty; - ProcedureName = null; + SelectedProcedure = null; } } ProceduresUpdated = false; - BenchControlPanel.ReloadTests(); + if (SelectedProcedure != null) BenchControlPanel.ReloadTests(); } else { @@ -501,16 +541,30 @@ namespace TBF private void procedureComboBox_SelectedIndexChanged(object sender, EventArgs e) { - int ix = procedureComboBox.Text.IndexOf(ProcSeparator); - int procNr = int.Parse(procedureComboBox.Text.Substring(0, ix)); - string procName = procedureComboBox.Text.Substring(ix + ProcSeparator.Length); - UpdateProcedure(procNr, procName); + int startFrom; + Users.Entities.DBKind dbKind; + if (!string.IsNullOrEmpty(procedureComboBox.Text) && (procedureComboBox.Text[0] == 'L' || procedureComboBox.Text[0] == 'R')) + { + startFrom = 1; + dbKind = (procedureComboBox.Text[0] == 'L') ? Users.Entities.DBKind.Config : Users.Entities.DBKind.RemoteConfig; + } + else + { + startFrom = 0; + dbKind = Users.Entities.DBKind.Config; + } + + int separPos = procedureComboBox.Text.IndexOf(ProcSeparator); + + int procNr = int.Parse(procedureComboBox.Text.Substring(startFrom, separPos)); + string procName = procedureComboBox.Text.Substring(separPos + ProcSeparator.Length); + UpdateProcedure(procNr, procName, dbKind); } - public void UpdateProcedure(int procedureNr, string procedureName) + public void UpdateProcedure(int procedureNr, string procedureName, Users.Entities.DBKind dbKind) { - ProcedureName = procedureName; - BenchControlPanel.ReloadTests(); + SelectedProcedure = new ProcedureInfo(procedureName, dbKind); + BenchControlPanel.ReloadTests(); if (CurrentProcedure != null && CurrentProcedure.Description != null) { descriptionLabel.Text = CurrentProcedure.Description; @@ -522,6 +576,7 @@ namespace TBF if (!string.IsNullOrEmpty(procedureName)) { Program.LocalSettings.LastProcedureName = procedureName; + Program.LocalSettings.LastProcedureDB = dbKind; Program.LocalSettings.LastProcedureNr = procedureNr; Program.LocalSettings.Save(); } diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index b3bd23afe..0d59948e4 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.18.937.0")] -[assembly: AssemblyFileVersion("2.18.937.0")] +[assembly: AssemblyVersion("2.18.938.0")] +[assembly: AssemblyFileVersion("2.18.938.0")] diff --git a/TBF/UiBridge/Bridge.cs b/TBF/UiBridge/Bridge.cs index 470adb7c9..6a3960e33 100644 --- a/TBF/UiBridge/Bridge.cs +++ b/TBF/UiBridge/Bridge.cs @@ -3,6 +3,7 @@ /// using System; using System.Collections.Generic; +using Config.Entities; using log4net; namespace TBF.UiBridge @@ -18,15 +19,9 @@ namespace TBF.UiBridge public static int BatchNr; - public static string SelectedProcedureName - { - get { return Program.MainWnd.ProcedureName; } - } + public static ProcedureInfo SelectedProcedure { get { return Program.MainWnd.SelectedProcedure; } } - public static string SelectedTestName - { - get { return Program.MainWnd.BenchControlPanel.TestName; } - } + public static string SelectedTestName { get { return Program.MainWnd.BenchControlPanel.TestName; } } static Bridge() diff --git a/TBF/UiControls/BenchControlPanel.cs b/TBF/UiControls/BenchControlPanel.cs index 946d04295..a8b43b693 100644 --- a/TBF/UiControls/BenchControlPanel.cs +++ b/TBF/UiControls/BenchControlPanel.cs @@ -160,16 +160,16 @@ namespace TBF.UiControls /// Read the database and re-initialize testComboBox items. /// Try to preserve the original selection. /// - public void ReloadTests() + public void ReloadTests() { - if (Program.MainWnd.ProcedureName == null) return; + if (Program.MainWnd.SelectedProcedure == null || string.IsNullOrEmpty(Program.MainWnd.SelectedProcedure.Name)) return; string oriTestName = testComboBox.Text; - IList procedures = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config) + IList procedures = Config.FluentCommon.CreateSession(Program.MainWnd.SelectedProcedure.DBKind) .QueryOver() .Where(x => (x.ProcedureState == ProcedureState.Active)) - .And(x => (x.Name == Program.MainWnd.ProcedureName)) + .And(x => (x.Name == Program.MainWnd.SelectedProcedure.Name)) .List(); if (procedures.Count != 1) {