From 0d6a8b272a74cd0a2bd343b2e7a0e75bd5265d01 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Thu, 29 Jun 2017 16:58:59 +0200 Subject: [PATCH] When saving a new or modified procedure there is a test of the Name uniqueness --- Config/Config.csproj | 1 + Config/Entities/BenchPath.cs | 2 +- Config/Entities/Component.cs | 2 +- Config/Entities/FeedingPath.cs | 2 +- Config/Entities/HeatMetersPath.cs | 2 +- Config/Entities/IHasName.cs | 11 +++++++++++ Config/Entities/MetersPath.cs | 2 +- Config/Entities/OutputPath.cs | 2 +- Config/Entities/Procedure.cs | 2 +- Config/Entities/Test.cs | 2 +- Config/Entities/TransitionSequence.cs | 2 +- Config/Entities/VirtualBenchSequence.cs | 2 +- TestBenchFramework/ProcedureDlg.cs | 15 ++++++++++++++- .../UiControls/BaseWithListViewEx.cs | 13 +++++++++++++ TestBenchFramework/UiControls/ProceduresCtrl.cs | 12 +++++++----- 15 files changed, 56 insertions(+), 16 deletions(-) create mode 100644 Config/Entities/IHasName.cs diff --git a/Config/Config.csproj b/Config/Config.csproj index 66057c8b2..96a973b16 100644 --- a/Config/Config.csproj +++ b/Config/Config.csproj @@ -75,6 +75,7 @@ + diff --git a/Config/Entities/BenchPath.cs b/Config/Entities/BenchPath.cs index bac041d58..8572a10d9 100644 --- a/Config/Entities/BenchPath.cs +++ b/Config/Entities/BenchPath.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; namespace Config.Entities { - public class BenchPath : IHasItemNr, IHasValves + public class BenchPath : IHasName, IHasItemNr, IHasValves { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/Component.cs b/Config/Entities/Component.cs index b70510bad..177cec997 100644 --- a/Config/Entities/Component.cs +++ b/Config/Entities/Component.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; namespace Config.Entities { - public class Component : IHasItemNr + public class Component : IHasName, IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/FeedingPath.cs b/Config/Entities/FeedingPath.cs index ffca2e87d..dac4a6d59 100644 --- a/Config/Entities/FeedingPath.cs +++ b/Config/Entities/FeedingPath.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; namespace Config.Entities { - public class FeedingPath : IHasItemNr, IHasValves + public class FeedingPath : IHasName, IHasItemNr, IHasValves { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/HeatMetersPath.cs b/Config/Entities/HeatMetersPath.cs index a1b6066ec..95e7c0068 100644 --- a/Config/Entities/HeatMetersPath.cs +++ b/Config/Entities/HeatMetersPath.cs @@ -5,7 +5,7 @@ using System; namespace Config.Entities { - public class HeatMetersPath : IHasItemNr + public class HeatMetersPath : IHasName, IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/IHasName.cs b/Config/Entities/IHasName.cs new file mode 100644 index 000000000..44bd1137c --- /dev/null +++ b/Config/Entities/IHasName.cs @@ -0,0 +1,11 @@ +/// +/// Copyright (c) 2017 Sensus Metering Systems +/// +namespace Config.Entities +{ + public interface IHasName + { + int Id { get; } + string Name { get; set; } + } +} diff --git a/Config/Entities/MetersPath.cs b/Config/Entities/MetersPath.cs index 501114738..6c105a891 100644 --- a/Config/Entities/MetersPath.cs +++ b/Config/Entities/MetersPath.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; namespace Config.Entities { - public class MetersPath : IHasItemNr + public class MetersPath : IHasName, IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/OutputPath.cs b/Config/Entities/OutputPath.cs index f8fb5f231..8b375f3b5 100644 --- a/Config/Entities/OutputPath.cs +++ b/Config/Entities/OutputPath.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; namespace Config.Entities { - public class OutputPath : IHasItemNr, IHasValves + public class OutputPath : IHasName, IHasItemNr, IHasValves { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/Procedure.cs b/Config/Entities/Procedure.cs index a9be17197..9ed215cf8 100644 --- a/Config/Entities/Procedure.cs +++ b/Config/Entities/Procedure.cs @@ -11,7 +11,7 @@ namespace Config.Entities /// /// Stores one test procedure, supports revisions and history log /// - public class Procedure : IHasItemNr + public class Procedure : IHasName, IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/Test.cs b/Config/Entities/Test.cs index b5b83287e..f06a2c439 100644 --- a/Config/Entities/Test.cs +++ b/Config/Entities/Test.cs @@ -11,7 +11,7 @@ namespace Config.Entities /// /// Test, consisting of one or more repetitions of the test 'SingleTest'. /// - public class Test : IHasItemNr + public class Test : IHasName, IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/TransitionSequence.cs b/Config/Entities/TransitionSequence.cs index b71f3da8f..d17ef434a 100644 --- a/Config/Entities/TransitionSequence.cs +++ b/Config/Entities/TransitionSequence.cs @@ -8,7 +8,7 @@ namespace Config.Entities /// /// Stores one transition sequence containing a list of transition steps /// - public class TransitionSequence : IHasItemNr + public class TransitionSequence : IHasName, IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/Config/Entities/VirtualBenchSequence.cs b/Config/Entities/VirtualBenchSequence.cs index 857dc8fbd..151d8c20c 100644 --- a/Config/Entities/VirtualBenchSequence.cs +++ b/Config/Entities/VirtualBenchSequence.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; namespace Config.Entities { - public class VirtualBenchSequence : IHasItemNr + public class VirtualBenchSequence : IHasName, IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } diff --git a/TestBenchFramework/ProcedureDlg.cs b/TestBenchFramework/ProcedureDlg.cs index 981a18791..da714a064 100644 --- a/TestBenchFramework/ProcedureDlg.cs +++ b/TestBenchFramework/ProcedureDlg.cs @@ -30,6 +30,8 @@ namespace TBF /// public Procedure LoadedProcedure; + IList usedNames; /// Already used names + /// Auxiliary public lists used also by user controls in tab pages public IList TbfComponents; public IList Valves; @@ -88,13 +90,15 @@ namespace TBF parametersListViewEx.SubItemEndEditing += new Results.Forms.SubItemEndEditingEventHandler(parametersListViewEx_SubItemEndEditing); } - public ProcedureDlg(Config.Entities.Procedure procedure) + public ProcedureDlg(Config.Entities.Procedure procedure, IList usedNames) : this() { if (procedure == null) throw new ArgumentNullException("procedure"); LoadedProcedure = procedure; + this.usedNames = usedNames; + sharedButtons.RequiredGroupMembership = procedure.Protected ? Users.Grp.GID.Metrologists : Users.Grp.GID.TestingSpecialists; /// Prepare a list of components and a list of all valves in the test bench @@ -1606,6 +1610,15 @@ namespace TBF foreach (var ctrl in testParamsCtrls) ctrl.UpdateAll(); foreach (var ctrl in procedureParamsCtrls) ctrl.UpdateAll(); + if (usedNames != null && usedNames.Contains(LoadedProcedure.Name)) + { + MessageBox.Show(string.Format("There is already a procedure named '{0}'.{1}Choose another name please.", LoadedProcedure.Name, Environment.NewLine), + Strings.Warning, + MessageBoxButtons.OK, + MessageBoxIcon.Exclamation); + return; + } + Program.LocalSettings.OneProcedureDlgLeft = Location.X; Program.LocalSettings.OneProcedureDlgTop = Location.Y; Program.LocalSettings.OneProcedureDlgWidth = Size.Width; diff --git a/TestBenchFramework/UiControls/BaseWithListViewEx.cs b/TestBenchFramework/UiControls/BaseWithListViewEx.cs index 1a39b4579..59597c7bc 100644 --- a/TestBenchFramework/UiControls/BaseWithListViewEx.cs +++ b/TestBenchFramework/UiControls/BaseWithListViewEx.cs @@ -199,5 +199,18 @@ namespace TBF.UiControls Items[ix + 1].Selected = true; Items[ix + 1].EnsureVisible(); } + + + public IList GetUsedNames() + { + IList usedNames = new List(); + + if (MyItems != null) + { + foreach (var item in MyItems) if (item is IHasName) usedNames.Add((item as IHasName).Name); + } + + return usedNames; + } } } diff --git a/TestBenchFramework/UiControls/ProceduresCtrl.cs b/TestBenchFramework/UiControls/ProceduresCtrl.cs index c56740c46..5396014f9 100644 --- a/TestBenchFramework/UiControls/ProceduresCtrl.cs +++ b/TestBenchFramework/UiControls/ProceduresCtrl.cs @@ -163,7 +163,7 @@ namespace TBF.UiControls newProcedure.CreationUser = Users.GlobalData.CurrentUser.UserName; newProcedure.CreationTime = DateTime.Now; - if (new ProcedureDlg(newProcedure).ShowDialog() == DialogResult.OK) + if (new ProcedureDlg(newProcedure, GetUsedNames()).ShowDialog() == DialogResult.OK) { /// TODO: Make name uniqueness test parent.Unlock(); @@ -231,9 +231,11 @@ namespace TBF.UiControls modifiedProcedure.Revision = originalProcedure.Revision + 1; modifiedProcedure.ObtainedByCopy = false; - if (new ProcedureDlg(modifiedProcedure).ShowDialog() == DialogResult.OK) + IList usedNames = GetUsedNames(); + usedNames.Remove(originalProcedure.Name); /// Allow original procedure name + /// + if (new ProcedureDlg(modifiedProcedure, usedNames).ShowDialog() == DialogResult.OK) { - /// TODO: Make name uniqueness test parent.Unlock(); using (var transaction = session.BeginTransaction()) @@ -285,7 +287,7 @@ namespace TBF.UiControls newProcedure.CreationTime = DateTime.Now; newProcedure.Protected = false; - if ((new ProcedureDlg(newProcedure)).ShowDialog() == DialogResult.OK) + if ((new ProcedureDlg(newProcedure, GetUsedNames())).ShowDialog() == DialogResult.OK) { /// TODO: Make name uniqueness test parent.Unlock(); @@ -338,7 +340,7 @@ namespace TBF.UiControls newProcedure.CreationUser = Users.GlobalData.CurrentUser.UserName; newProcedure.CreationTime = DateTime.Now; - if ((new ProcedureDlg(newProcedure)).ShowDialog() == DialogResult.OK) + if ((new ProcedureDlg(newProcedure, GetUsedNames())).ShowDialog() == DialogResult.OK) { /// TODO: Make name uniqueness test parent.Unlock();