From de7a9a05f28526377fc278791c338005a57c2ccb Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Tue, 3 Sep 2024 10:03:36 +0200 Subject: [PATCH] Extending the role editor pt. 1 --- src/RoleEditor/MainWindow.xaml | 57 +++++++++++++-- src/RoleEditor/MainWindow.xaml.cs | 19 +++++ src/brecal.model/Port.cs | 106 +++++++++++++++++++++++++++ src/brecal.model/PortAssignment.cs | 111 +++++++++++++++++++++++++++++ src/brecal.model/Role.cs | 8 +-- 5 files changed, 291 insertions(+), 10 deletions(-) create mode 100644 src/brecal.model/Port.cs create mode 100644 src/brecal.model/PortAssignment.cs diff --git a/src/RoleEditor/MainWindow.xaml b/src/RoleEditor/MainWindow.xaml index 27c2af2..0a30e97 100644 --- a/src/RoleEditor/MainWindow.xaml +++ b/src/RoleEditor/MainWindow.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:RoleEditor" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" - Title="Bremen calling admin editor" Height="670" Width="800" Icon="Resources/lock_preferences.ico" Loaded="Window_Loaded"> + Title="Bremen calling admin editor" Height="670" Width="1024" Icon="Resources/lock_preferences.ico" Loaded="Window_Loaded"> @@ -16,8 +16,9 @@ - - + + + @@ -82,6 +83,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -145,7 +192,7 @@ - + @@ -199,7 +246,7 @@ - + diff --git a/src/RoleEditor/MainWindow.xaml.cs b/src/RoleEditor/MainWindow.xaml.cs index b605eb9..cb30035 100644 --- a/src/RoleEditor/MainWindow.xaml.cs +++ b/src/RoleEditor/MainWindow.xaml.cs @@ -802,5 +802,24 @@ namespace RoleEditor #endregion + private void menuItemNewPort_Click(object sender, RoutedEventArgs e) + { + + } + + private void listBoxPort_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + + } + + private void menuItemDeletePort_Click(object sender, RoutedEventArgs e) + { + + } + + private void buttonPortSave_Click(object sender, RoutedEventArgs e) + { + + } } } diff --git a/src/brecal.model/Port.cs b/src/brecal.model/Port.cs new file mode 100644 index 0000000..5a48270 --- /dev/null +++ b/src/brecal.model/Port.cs @@ -0,0 +1,106 @@ +// Copyright (c) 2023- schick Informatik +// Description: Port entity + +using System.Data; + +namespace brecal.model +{ + public class Port : DbEntity + { + + #region Properties + + public string? Name { get; set; } + + public string? Locode { get; set; } + + public bool ? IsDeleted { get; set; } + + #endregion + + #region overrides + + public override void SetCreate(IDbCommand cmd) + { + cmd.CommandText = "INSERT INTO role (name, locode) VALUES ( @NAME, @LOCODE)"; + this.SetParameters(cmd); + } + + public override void SetDelete(IDbCommand cmd) + { + cmd.CommandText = "UPDATE port SET deleted = 1 WHERE id = @ID"; + IDataParameter idParam = cmd.CreateParameter(); + idParam.ParameterName = "ID"; + idParam.Value = this.Id; + cmd.Parameters.Add(idParam); + } + + public override void SetUpdate(IDbCommand cmd) + { + cmd.CommandText = "UPDATE port set name = @NAME, locode = @LOCODE WHERE id = @ID"; + this.SetParameters(cmd); + } + + #endregion + + #region public static methods + + public static async Task> LoadAll(IDBManager manager) + { + List loadResultList = await manager.Load(SetLoadQuery, LoadElems); + List result = new(); + foreach (Port p in loadResultList.Cast()) + result.Add(p); + return result; + } + + public static void SetLoadQuery(IDbCommand cmd, params object?[] list) + { + cmd.CommandText = "SELECT id, name, locode, created, modified, deleted FROM port"; + } + + public static List LoadElems(IDataReader reader) + { + List result = new List(); + while (reader.Read()) + { + Port p = new(); + p.Id = (uint)reader.GetInt32(0); + if (!reader.IsDBNull(1)) p.Name = reader.GetString(1); + if (!reader.IsDBNull(2)) p.Locode = reader.GetString(2); + if (!reader.IsDBNull(3)) p.Created = reader.GetDateTime(3); + if (!reader.IsDBNull(4)) p.Modified = reader.GetDateTime(4); + if (!reader.IsDBNull(5)) p.IsDeleted = reader.GetBoolean(5); + result.Add(p); + } + return result; + } + + #endregion + + #region private methods + + private void SetParameters(IDbCommand cmd) + { + IDbDataParameter name = cmd.CreateParameter(); + name.ParameterName = "NAME"; + name.Value = this.Name; + cmd.Parameters.Add(name); + + IDbDataParameter desc = cmd.CreateParameter(); + desc.ParameterName = "LOCODE"; + desc.Value = this.Locode; + cmd.Parameters.Add(desc); + + IDataParameter idParam = cmd.CreateParameter(); + idParam.ParameterName = "ID"; + idParam.Value = this.Id; + cmd.Parameters.Add(idParam); + } + + #endregion + + } + + +} diff --git a/src/brecal.model/PortAssignment.cs b/src/brecal.model/PortAssignment.cs new file mode 100644 index 0000000..17ddc22 --- /dev/null +++ b/src/brecal.model/PortAssignment.cs @@ -0,0 +1,111 @@ +// Copyright (c) 2023- schick Informatik +// Description: Participant Port Map Entity + +using System.Data; + +namespace brecal.model +{ + public class PortAssignment : DbEntity + { + #region Properties + + public int? ParticipantId { get; set; } + + public int? PortId { get; set; } + + public Participant? AssignedParticipant { get; set; } + + public Port? AssignedPort { get; set; } + + #endregion + + #region public static methods + + public static async Task> LoadForParticipant(Participant? p, IDBManager manager) + { + List loadResultList = await manager.Load(SetLoadQuery, LoadElems, args: p); + List result = new(); + foreach (PortAssignment pa in loadResultList.Cast()) + { + pa.AssignedParticipant = p; + result.Add(pa); + } + return result; + } + + public static void SetLoadQuery(IDbCommand cmd, params object?[] args) + { + cmd.CommandText = "SELECT id, participant_id, port_id FROM participant_port_map WHERE participant_id = @PID"; + if (args.Length != 1 || !(args[0] is Participant)) + throw new ArgumentException("loader needs single participant as argument"); + IDataParameter pid = cmd.CreateParameter(); + pid.ParameterName = "PID"; + if (args[0] is Participant p) + pid.Value = p.Id; + cmd.Parameters.Add(pid); + } + + public static List LoadElems(IDataReader reader) + { + List result = new List(); + while (reader.Read()) + { + PortAssignment ra = new(); + ra.Id = (uint)reader.GetInt32(0); + if (!reader.IsDBNull(1)) ra.ParticipantId = reader.GetInt32(1); + if (!reader.IsDBNull(2)) ra.PortId = reader.GetInt32(2); + result.Add(ra); + } + return result; + } + + #endregion + + #region overrides + + public override void SetUpdate(IDbCommand cmd) + { + throw new NotImplementedException(); + } + + public override void SetCreate(IDbCommand cmd) + { + cmd.CommandText = "INSERT INTO participant_port_map (participant_id, port_id) VALUES (@PID, @PORTID)"; + + IDbDataParameter participantId = cmd.CreateParameter(); + participantId.ParameterName = "pID"; + participantId.Value = this.ParticipantId; + cmd.Parameters.Add(participantId); + + IDbDataParameter portId = cmd.CreateParameter(); + portId.ParameterName = "PORTID"; + portId.Value = this.PortId; + cmd.Parameters.Add(portId); + } + + public override void SetDelete(IDbCommand cmd) + { + cmd.CommandText = "DELETE FROM participant_port_map WHERE id = @ID"; + + IDataParameter idParam = cmd.CreateParameter(); + idParam.ParameterName = "ID"; + idParam.Value = this.Id; + cmd.Parameters.Add(idParam); + } + + public override string ToString() + { + if (this.AssignedPort == null) + { + return $"{Id}: "; + } + else + { + return AssignedPort.Name ?? AssignedPort.Id.ToString(); + } + } + + #endregion + + } +} diff --git a/src/brecal.model/Role.cs b/src/brecal.model/Role.cs index c85802b..c52ca1f 100644 --- a/src/brecal.model/Role.cs +++ b/src/brecal.model/Role.cs @@ -1,9 +1,7 @@ -using System; -using System.Collections.Generic; +// Copyright (c) 2023- schick Informatik +// Description: Role Entity + using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace brecal.model {