diff --git a/CHANGELOG.md b/CHANGELOG.md index 475ba065e0..f23a1e0ce3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [9.3.0] - Unreleased +- Add Extraction Name to Catalogues + ## [9.2.3] - 2026-05-28 - Fix issue with extractable project data set creation for project specific catalogues - Add ability to view proposed Archive Trigger SQL on an Extraction Dataset diff --git a/Rdmp.Core/Curation/Data/Catalogue.cs b/Rdmp.Core/Curation/Data/Catalogue.cs index e144c636b6..7966161517 100644 --- a/Rdmp.Core/Curation/Data/Catalogue.cs +++ b/Rdmp.Core/Curation/Data/Catalogue.cs @@ -106,6 +106,8 @@ public sealed class Catalogue : DatabaseEntity, IComparable, ICatalogue, IInject private string _doi; private Lazy _knownCatalogueItems; + private string _extractionName; + /// [Unique] @@ -129,6 +131,13 @@ public string Name set => SetField(ref _name, value); } + [Unique] + public string ExtractionName + { + get => _extractionName; + set => SetField(ref _extractionName, value); + } + /// [DoNotImportDescriptions] [UsefulProperty] @@ -972,6 +981,7 @@ internal Catalogue(ICatalogueRepository repository, DbDataReader r) Acronym = r["Acronym"].ToString(); Name = r["Name"].ToString(); + ExtractionName = r["ExtractionName"].ToString(); Description = r["Description"].ToString(); //detailed info url with support for invalid urls diff --git a/Rdmp.Core/Curation/Data/ICatalogue.cs b/Rdmp.Core/Curation/Data/ICatalogue.cs index 4e6632b3fe..93350d4376 100644 --- a/Rdmp.Core/Curation/Data/ICatalogue.cs +++ b/Rdmp.Core/Curation/Data/ICatalogue.cs @@ -95,7 +95,7 @@ public interface ICatalogue : IHasDependencies, IHasQuerySyntaxHelper, INamed, I /// string Description { get; set; } - + string ExtractionName { get; set; } string ShortDescription { get;set; } string DataType { get; set; } string DataSubType { get; set; } diff --git a/Rdmp.Core/DataExport/Data/ExtractableDataSet.cs b/Rdmp.Core/DataExport/Data/ExtractableDataSet.cs index 378f5a064c..a31794544b 100644 --- a/Rdmp.Core/DataExport/Data/ExtractableDataSet.cs +++ b/Rdmp.Core/DataExport/Data/ExtractableDataSet.cs @@ -129,8 +129,10 @@ public override string ToString() if (Catalogue == null) return $"DELETED CATALOGUE {Catalogue_ID}"; + + string name = Catalogue.ExtractionName != null? Catalogue.ExtractionName:Catalogue.Name; //only bother refreshing Catalogue details if we will be able to get a legit catalogue name - return Catalogue.IsDeprecated ? $"DEPRECATED CATALOGUE {Catalogue.Name}" : Catalogue.Name; + return Catalogue.IsDeprecated ? $"DEPRECATED CATALOGUE {name}" : name; } #region Stuff for updating our internal database records diff --git a/Rdmp.Core/DataExport/DataExtraction/Pipeline/Destinations/ExecuteFullExtractionToDatabaseMSSql.cs b/Rdmp.Core/DataExport/DataExtraction/Pipeline/Destinations/ExecuteFullExtractionToDatabaseMSSql.cs index 6d8e95745e..5979d1470c 100644 --- a/Rdmp.Core/DataExport/DataExtraction/Pipeline/Destinations/ExecuteFullExtractionToDatabaseMSSql.cs +++ b/Rdmp.Core/DataExport/DataExtraction/Pipeline/Destinations/ExecuteFullExtractionToDatabaseMSSql.cs @@ -420,7 +420,7 @@ private string GetIndexName() indexName = indexName.Replace("$e", _request.Configuration.ID.ToString()); if (_request is ExtractDatasetCommand extractDatasetCommand) { - indexName = indexName.Replace("$d", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Name); + indexName = indexName.Replace("$d", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.ExtractionName != null ? extractDatasetCommand.DatasetBundle.DataSet.Catalogue.ExtractionName : extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Name); indexName = indexName.Replace("$a", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Acronym); } @@ -457,7 +457,7 @@ private string GetTableName(string suffix = null) if (_request is ExtractDatasetCommand extractDatasetCommand) { - tblName = tblName.Replace("$d", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Name); + tblName = tblName.Replace("$d", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.ExtractionName != null ? extractDatasetCommand.DatasetBundle.DataSet.Catalogue.ExtractionName : extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Name); tblName = tblName.Replace("$a", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Acronym); } diff --git a/Rdmp.Core/DataExport/DataExtraction/Pipeline/Destinations/MSSqlMergeDestination.cs b/Rdmp.Core/DataExport/DataExtraction/Pipeline/Destinations/MSSqlMergeDestination.cs index 7fa9b2530b..a34d3cf720 100644 --- a/Rdmp.Core/DataExport/DataExtraction/Pipeline/Destinations/MSSqlMergeDestination.cs +++ b/Rdmp.Core/DataExport/DataExtraction/Pipeline/Destinations/MSSqlMergeDestination.cs @@ -88,7 +88,7 @@ private string GetTableName(string suffix, DataTable dt) if (_request is ExtractDatasetCommand extractDatasetCommand) { - tblName = tblName.Replace("$d", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Name); + tblName = tblName.Replace("$d", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.ExtractionName != null ? extractDatasetCommand.DatasetBundle.DataSet.Catalogue.ExtractionName : extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Name); tblName = tblName.Replace("$a", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Acronym); } diff --git a/Rdmp.Core/DataLoad/Modules/DataFlowOperations/ExtractCatalogueMetadata.cs b/Rdmp.Core/DataLoad/Modules/DataFlowOperations/ExtractCatalogueMetadata.cs index 9ef4209664..9455387d38 100644 --- a/Rdmp.Core/DataLoad/Modules/DataFlowOperations/ExtractCatalogueMetadata.cs +++ b/Rdmp.Core/DataLoad/Modules/DataFlowOperations/ExtractCatalogueMetadata.cs @@ -79,7 +79,7 @@ public string GetTableName() switch (_request) { case ExtractDatasetCommand extractDatasetCommand: - tblName = tblName.Replace("$d", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Name); + tblName = tblName.Replace("$d", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.ExtractionName != null ? extractDatasetCommand.DatasetBundle.DataSet.Catalogue.ExtractionName : extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Name); tblName = tblName.Replace("$a", extractDatasetCommand.DatasetBundle.DataSet.Catalogue.Acronym); break; case ExtractGlobalsCommand: diff --git a/Rdmp.Core/Databases/CatalogueDatabase/runAfterCreateDatabase/CreateCatalogue.sql b/Rdmp.Core/Databases/CatalogueDatabase/runAfterCreateDatabase/CreateCatalogue.sql index 72065b0dbb..1e72638765 100644 --- a/Rdmp.Core/Databases/CatalogueDatabase/runAfterCreateDatabase/CreateCatalogue.sql +++ b/Rdmp.Core/Databases/CatalogueDatabase/runAfterCreateDatabase/CreateCatalogue.sql @@ -232,6 +232,7 @@ CREATE TABLE [dbo].[Catalogue]( [ID] [int] IDENTITY(1,1) NOT NULL, [Acronym] [varchar](50) NULL, [Name] [varchar](1000) NULL, + [ExtractionName] [varchar](1000) NULL, [Description] [text] NULL, [Detail_Page_URL] [varchar](150) NULL, [Type] [varchar](50) NULL, diff --git a/Rdmp.Core/Databases/CatalogueDatabase/up/093_AddCatalogueExtractionName.sql b/Rdmp.Core/Databases/CatalogueDatabase/up/093_AddCatalogueExtractionName.sql new file mode 100644 index 0000000000..4f67391bdb --- /dev/null +++ b/Rdmp.Core/Databases/CatalogueDatabase/up/093_AddCatalogueExtractionName.sql @@ -0,0 +1,11 @@ +--Version: 9.3.0 +--Description: Add new metadata fields for catalogues +if not exists (select 1 from sys.columns where name = 'ExtractionName' and OBJECT_NAME(object_id) = 'Catalogue') +BEGIN +ALTER TABLE [dbo].[Catalogue] +ADD +[ExtractionName] [varchar](1000) NULL +END +GO + + diff --git a/Rdmp.Core/Rdmp.Core.csproj b/Rdmp.Core/Rdmp.Core.csproj index 2a4c84cb41..2321dbeda7 100644 --- a/Rdmp.Core/Rdmp.Core.csproj +++ b/Rdmp.Core/Rdmp.Core.csproj @@ -256,6 +256,7 @@ + diff --git a/Rdmp.UI/MainFormUITabs/CatalogueUI.Designer.cs b/Rdmp.UI/MainFormUITabs/CatalogueUI.Designer.cs index 0e49185516..2549664dc1 100644 --- a/Rdmp.UI/MainFormUITabs/CatalogueUI.Designer.cs +++ b/Rdmp.UI/MainFormUITabs/CatalogueUI.Designer.cs @@ -40,6 +40,9 @@ private void InitializeComponent() ticketingControl1 = new TicketingControlUI(); tabControl1 = new TabControl(); tabPage1 = new TabPage(); + groupBox27 = new GroupBox(); + AIExtractionName = new Rdmp.UI.SimpleControls.AdditionalInfomationUI(); + tbExtractionName = new TextBox(); groupBox26 = new GroupBox(); tbInternalNote = new TextBox(); groupBox23 = new GroupBox(); @@ -134,6 +137,7 @@ private void InitializeComponent() splitContainer1.SuspendLayout(); tabControl1.SuspendLayout(); tabPage1.SuspendLayout(); + groupBox27.SuspendLayout(); groupBox26.SuspendLayout(); groupBox23.SuspendLayout(); groupBox16.SuspendLayout(); @@ -258,6 +262,7 @@ private void InitializeComponent() // tabPage1.AutoScroll = true; tabPage1.BackColor = System.Drawing.Color.WhiteSmoke; + tabPage1.Controls.Add(groupBox27); tabPage1.Controls.Add(groupBox26); tabPage1.Controls.Add(groupBox23); tabPage1.Controls.Add(groupBox16); @@ -270,6 +275,31 @@ private void InitializeComponent() tabPage1.Text = "Descriptions"; tabPage1.Click += tabPage1_Click; // + // groupBox27 + // + groupBox27.Controls.Add(AIExtractionName); + groupBox27.Controls.Add(tbExtractionName); + groupBox27.Location = new System.Drawing.Point(244, 6); + groupBox27.Name = "groupBox27"; + groupBox27.Size = new System.Drawing.Size(347, 56); + groupBox27.TabIndex = 8; + groupBox27.TabStop = false; + groupBox27.Text = "Extraction Name"; + // + // AIExtractionName + // + AIExtractionName.Location = new System.Drawing.Point(98, 0); + AIExtractionName.Name = "AIExtractionName"; + AIExtractionName.Size = new System.Drawing.Size(20, 20); + AIExtractionName.TabIndex = 7; + // + // tbExtractionName + // + tbExtractionName.Location = new System.Drawing.Point(6, 22); + tbExtractionName.Name = "tbExtractionName"; + tbExtractionName.Size = new System.Drawing.Size(335, 23); + tbExtractionName.TabIndex = 0; + // // groupBox26 // groupBox26.Controls.Add(tbInternalNote); @@ -1126,6 +1156,8 @@ private void InitializeComponent() splitContainer1.ResumeLayout(false); tabControl1.ResumeLayout(false); tabPage1.ResumeLayout(false); + groupBox27.ResumeLayout(false); + groupBox27.PerformLayout(); groupBox26.ResumeLayout(false); groupBox26.PerformLayout(); groupBox23.ResumeLayout(false); @@ -1282,5 +1314,8 @@ private void InitializeComponent() private SimpleControls.MultiSelectChips.DropdownOptionsChipDisplay ddDataSource; private GroupBox groupBox26; public TextBox tbInternalNote; + private GroupBox groupBox27; + private SimpleControls.AdditionalInfomationUI AIExtractionName; + public TextBox tbExtractionName; } } diff --git a/Rdmp.UI/MainFormUITabs/CatalogueUI.cs b/Rdmp.UI/MainFormUITabs/CatalogueUI.cs index 6a8b77ee1d..2e39764bda 100644 --- a/Rdmp.UI/MainFormUITabs/CatalogueUI.cs +++ b/Rdmp.UI/MainFormUITabs/CatalogueUI.cs @@ -254,10 +254,13 @@ private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) item.Visible = false; } Bind(tbAcronym, "Text", "Acronym", c => c.Acronym); + Bind(tbExtractionName, "Text", "ExtractionName", c => c.ExtractionName); Bind(tbAbstract, "Text", "ShortDescription", c => c.ShortDescription); Bind(tbDescription, "Text", "Description", c => c.Description); aiAcronym.TooltipText = CatalogueUIHelperText.Acronym; aiAcronym.SetItemActivator(Activator); + AIExtractionName.TooltipText = CatalogueUIHelperText.ExtractionName; + AIExtractionName.SetItemActivator(Activator); aiShortDescription.TooltipText = CatalogueUIHelperText.ShortDescription; aiShortDescription.SetItemActivator(Activator); aiDescription.TooltipText = CatalogueUIHelperText.Description; diff --git a/Rdmp.UI/MainFormUITabs/CatalogueUIHelperText.cs b/Rdmp.UI/MainFormUITabs/CatalogueUIHelperText.cs index f339f2d2be..98e9801609 100644 --- a/Rdmp.UI/MainFormUITabs/CatalogueUIHelperText.cs +++ b/Rdmp.UI/MainFormUITabs/CatalogueUIHelperText.cs @@ -2,6 +2,7 @@ { public static class CatalogueUIHelperText { + public static readonly string ExtractionName = "TODO"; public static readonly string Acronym = "A shorthand name for the catalogue."; public static readonly string ShortDescription = """ The Short Description should provide a clear and brief descriptive signpost for researchers who are searching for data that may be relevant to their research. diff --git a/SharedAssemblyInfo.cs b/SharedAssemblyInfo.cs index 02b0b256af..4440615deb 100644 --- a/SharedAssemblyInfo.cs +++ b/SharedAssemblyInfo.cs @@ -10,6 +10,6 @@ [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -[assembly: AssemblyVersion("9.2.3")] -[assembly: AssemblyFileVersion("9.2.3")] -[assembly: AssemblyInformationalVersion("9.2.3")] +[assembly: AssemblyVersion("9.3.0")] +[assembly: AssemblyFileVersion("9.3.0")] +[assembly: AssemblyInformationalVersion("9.3.0")]