Use of remote database for procedures/tests, part 3, ver. 2.18.938
This commit is contained in:
parent
72d2b602ab
commit
41c662f053
@ -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,
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -50,6 +50,7 @@ namespace TBF
|
||||
/// </summary>
|
||||
[XmlElementAttribute("LastProcedure")]
|
||||
public string LastProcedureName;
|
||||
public Users.Entities.DBKind LastProcedureDB;
|
||||
public int LastProcedureNr;
|
||||
public int BatchNr;
|
||||
|
||||
|
||||
111
TBF/MainWnd.cs
111
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
|
||||
{
|
||||
/// <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();
|
||||
}
|
||||
|
||||
@ -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")]
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user