Use of remote database for procedures/tests, part 3, ver. 2.18.938

This commit is contained in:
Milan Hanajik 2018-06-20 14:38:32 +02:00
parent 72d2b602ab
commit 41c662f053
10 changed files with 124 additions and 84 deletions

View File

@ -61,7 +61,22 @@ namespace Config.Entities
Count,
}
public enum ProcedureState
/// <summary>
/// Contains a procedure name and a database specification (local/remote).
/// </summary>
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,

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -403,13 +403,13 @@ namespace TBF.BenchControl
/// Loads selected procedure from the DB.
/// Updates StateMachine.Procedure and StateMachine.Tests
/// </summary>
public static bool LoadProcedure(ISession session)
public static bool LoadProcedure(ISession session, string procedureName)
{
Procedure = null;
IList<Procedure> selectedProcs = session.QueryOver<Procedure>()
.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;

View File

@ -50,6 +50,7 @@ namespace TBF
/// </summary>
[XmlElementAttribute("LastProcedure")]
public string LastProcedureName;
public Users.Entities.DBKind LastProcedureDB;
public int LastProcedureNr;
public int BatchNr;

View File

@ -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
{
/// <summary>
/// Main program window
/// </summary>
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<Procedure> procedures = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config)
.QueryOver<Procedure>()
.Where(x => (x.ProcedureState == ProcedureState.Active))
.OrderBy(x => x.ItemNr).Asc
.List();
bool procedureSet = false;
procedureComboBox.Items.Clear();
foreach (var proc in procedures)
IList<Procedure> allProcedures = new List<Procedure>();
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<Procedure> procedures = Config.FluentCommon.CreateSession(dBase[i])
.QueryOver<Procedure>()
.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();
}

View File

@ -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")]

View File

@ -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()

View File

@ -160,16 +160,16 @@ namespace TBF.UiControls
/// Read the database and re-initialize testComboBox items.
/// Try to preserve the original selection.
/// </summary>
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<Procedure> procedures = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config)
IList<Procedure> procedures = Config.FluentCommon.CreateSession(Program.MainWnd.SelectedProcedure.DBKind)
.QueryOver<Procedure>()
.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)
{