diff --git a/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/OracleDbToolsProvider.csproj b/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/OracleDbToolsProvider.csproj index b5fc6907b7..1dde83e05d 100644 --- a/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/OracleDbToolsProvider.csproj +++ b/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/OracleDbToolsProvider.csproj @@ -41,7 +41,6 @@ - diff --git a/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/Src/Forms/OracleFormsArtefactFactory.cs b/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/Src/Forms/OracleFormsArtefactFactory.cs index 6836a93f88..47c06f9787 100644 --- a/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/Src/Forms/OracleFormsArtefactFactory.cs +++ b/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/Src/Forms/OracleFormsArtefactFactory.cs @@ -36,7 +36,6 @@ namespace SharpDbTools.Oracle.Forms // create root node of the metadata collections tree TreeNode metaNode = new TreeNode("Db Objects"); - metaNode.Name = logicalConnectionName + ":MetaData"; // retrieve the metadata for this logical connection name @@ -85,6 +84,23 @@ namespace SharpDbTools.Oracle.Forms } return metaNode; } + + public override string[] GetDescribeTableFieldNames() + { + return tableFieldsToDisplay; + } + public override string[] GetDescribeTableColumnHeaderNames() + { + return tableFieldsColumnHeaders; + } + + private static string[] tableFieldsToDisplay = + new string [] {"COLUMN_NAME", "DATATYPE", + "LENGTH", "PRECISION", "SCALE", "NULLABLE"}; + private static string[] tableFieldsColumnHeaders = + new string[] { "Column", "Type", "Length", "Precision", "Scale", "Nullable" }; + + } } diff --git a/src/AddIns/Misc/SharpServerTools/ServerBrowserTool/SharpServerTools.addin b/src/AddIns/Misc/SharpServerTools/ServerBrowserTool/SharpServerTools.addin index 887d848e38..11b82c772a 100644 --- a/src/AddIns/Misc/SharpServerTools/ServerBrowserTool/SharpServerTools.addin +++ b/src/AddIns/Misc/SharpServerTools/ServerBrowserTool/SharpServerTools.addin @@ -21,4 +21,10 @@ shortcut = "Control|Alt|D" class = "SharpServerTools.Forms.ServerBrowserTool"/> + + + + + diff --git a/src/AddIns/Misc/SharpServerTools/SharpDbTools/SharpDbTools.csproj b/src/AddIns/Misc/SharpServerTools/SharpDbTools/SharpDbTools.csproj index 077208b45e..8bf57c815f 100644 --- a/src/AddIns/Misc/SharpServerTools/SharpDbTools/SharpDbTools.csproj +++ b/src/AddIns/Misc/SharpServerTools/SharpDbTools/SharpDbTools.csproj @@ -53,6 +53,7 @@ + diff --git a/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Data/ColumnNames.cs b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Data/ColumnNames.cs index 00a6ba5754..74fe834696 100644 --- a/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Data/ColumnNames.cs +++ b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Data/ColumnNames.cs @@ -25,10 +25,5 @@ namespace SharpDbTools.Data public const string Name = "name"; public const string ConnectionString = "connectionString"; public const string TableName = "TABLE_NAME"; - public static string[] TableTableFieldsToDisplay = - new string [] {"COLUMN_NAME", "DATATYPE", - "LENGTH", "PRECISION", "SCALE", "NULLABLE"}; - public static string[] TableTableFieldsColumnHeaders = - new string[] { "Column", "Type", "Length", "Precision", "Scale", "Nullable" }; } } diff --git a/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/FormsArtefactFactories.cs b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/FormsArtefactFactories.cs index 5ab616f662..7d34460230 100644 --- a/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/FormsArtefactFactories.cs +++ b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/FormsArtefactFactories.cs @@ -6,18 +6,35 @@ */ using System; +using System.Collections; + + using ICSharpCode.Core; +using System.Collections.Generic; + namespace SharpDbTools.Forms { /// /// Description of FormsArtefactFactories. /// - public class FormsArtefactFactories + public static class FormsArtefactFactories { - public FormsArtefactFactories() + public const string FORMS_ARTEFACT_FACTORIES_PATH = "/SharpServerTools/SharpDbTools/FormsArtefactFactory"; + public static Dictionary factories = new Dictionary(); + + static FormsArtefactFactories() { + AddInTreeNode node = + AddInTree.GetTreeNode(FORMS_ARTEFACT_FACTORIES_PATH); + List codons = node.Codons; + foreach (Codon codon in codons) { + // create an instance of the relevant FormsArtefactFactory indexed by invariant name + string invariant = codon.Id; + FormsArtefactFactory factory = (FormsArtefactFactory)node.BuildChildItem(invariant, null, null); + factories.Add(invariant, factory); + } } public static FormsArtefactFactory GetFactory(string invariantName) @@ -27,18 +44,27 @@ namespace SharpDbTools.Forms // to test this base it on hardcoded strings for the type of the factory // TODO: drive this from the AddIn tree - switch (invariantName) - { - case "System.Data.OracleClient": - Type type = Type.GetType("SharpDbTools.Oracle.Forms.OracleFormsArtefactFactory, OracleDbToolsProvider"); - FormsArtefactFactory factory = (FormsArtefactFactory)Activator.CreateInstance(type); - LoggingService.Debug("Found FormsArtefactFactory for: " + invariantName); - return factory; - default: - LoggingService.Debug("Failed to find FormsArtefactFactory for: " + invariantName); - throw new ArgumentException("There is no FormsArtefactFactory for invariant name: " + - invariantName); + + FormsArtefactFactory factory = null; + factories.TryGetValue(invariantName, out factory); + if (factory == null) { + throw new ArgumentException("No FormsArtefactFactory found for InvariantName: " + + invariantName); } + return factory; + +// switch (invariantName) +// { +// case "System.Data.OracleClient": +// Type type = Type.GetType("SharpDbTools.Oracle.Forms.OracleFormsArtefactFactory, OracleDbToolsProvider"); +// FormsArtefactFactory factory = (FormsArtefactFactory)Activator.CreateInstance(type); +// LoggingService.Debug("Found FormsArtefactFactory for: " + invariantName); +// return factory; +// default: +// LoggingService.Debug("Failed to find FormsArtefactFactory for: " + invariantName); +// throw new ArgumentException("There is no FormsArtefactFactory for invariant name: " + +// invariantName); +// } // TODO: retrieve the relevant factory from file-base config diff --git a/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/FormsArtefactFactory.cs b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/FormsArtefactFactory.cs index 6c3ad26410..26173a6e59 100644 --- a/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/FormsArtefactFactory.cs +++ b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/FormsArtefactFactory.cs @@ -20,5 +20,7 @@ namespace SharpDbTools.Forms } public abstract TreeNode CreateMetaDataNode(string name); + public abstract string[] GetDescribeTableFieldNames(); + public abstract string[] GetDescribeTableColumnHeaderNames(); } } diff --git a/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/TableDescribeViewContent.cs b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/TableDescribeViewContent.cs index b17a45151b..baf9a3cb4b 100644 --- a/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/TableDescribeViewContent.cs +++ b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/TableDescribeViewContent.cs @@ -24,7 +24,10 @@ namespace SharpDbTools.Forms DataGridView tableInfoDataGridView; - public TableDescribeViewContent(DataTable tableInfo, string tableName) : base("table: " + tableName) + public TableDescribeViewContent(DataTable tableInfo, + string tableName, + string[] fieldsToDisplay, + string[] columnHeaderNames) : base("table: " + tableName) { this.tableInfo = tableInfo; this.tableInfoDataGridView = new DataGridView(); @@ -36,12 +39,10 @@ namespace SharpDbTools.Forms v.DataSource = this.tableInfo; //v.DataMember = TableNames.Columns; - string[] fieldsToDisplay = ColumnNames.TableTableFieldsToDisplay; - string[] fieldColumnNames = ColumnNames.TableTableFieldsColumnHeaders; for (int i = 0; i < fieldsToDisplay.Length; i++ ) { DataGridViewColumn c = new DataGridViewTextBoxColumn(); c.DataPropertyName = fieldsToDisplay[i]; - c.Name = fieldColumnNames[i]; + c.Name = columnHeaderNames[i]; v.Columns.Add(c); } v.AllowUserToAddRows = false; diff --git a/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/Src/Forms/TableTreeNode.cs b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/TableTreeNode.cs similarity index 73% rename from src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/Src/Forms/TableTreeNode.cs rename to src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/TableTreeNode.cs index 20339c2844..6c5e925c89 100644 --- a/src/AddIns/Misc/SharpServerTools/OracleDbToolsProvider/Src/Forms/TableTreeNode.cs +++ b/src/AddIns/Misc/SharpServerTools/SharpDbTools/Src/Forms/TableTreeNode.cs @@ -10,7 +10,6 @@ using System.Drawing; using System.Windows.Forms; using System.Data; -using SharpDbTools.Forms; using SharpDbTools.Data; using SharpServerTools.Forms; @@ -19,16 +18,14 @@ using ICSharpCode.Core; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; -namespace SharpDbTools.Oracle.Forms +namespace SharpDbTools.Forms { /// /// specialisation of the TreeNode to add context menu and click handling /// to invoke the DescribeTable component for Oracle tables. - /// Does not change any data or metadata content so does not need to be - /// a ServerExplorerTreeNode /// - class TableTreeNode: TreeNode + public class TableTreeNode: TreeNode { string logicalConnectionName; @@ -49,7 +46,13 @@ namespace SharpDbTools.Oracle.Forms string tableName = s.TreeNode.Text; LoggingService.Debug("describe table clicked for: " + logicalConnectionName + " and table name: " + tableName); DataTable tableInfo = DbModelInfoService.GetTableInfo(logicalConnectionName, tableName); - TableDescribeViewContent tableDescribeViewContent = new TableDescribeViewContent(tableInfo, tableName); + string invariantName = DbModelInfoService.GetDbModelInfo(logicalConnectionName).InvariantName; + // TODO: get field names and column header names from factory + FormsArtefactFactory factory = FormsArtefactFactories.GetFactory(invariantName); + + TableDescribeViewContent tableDescribeViewContent = + new TableDescribeViewContent(tableInfo, tableName, factory.GetDescribeTableFieldNames(), + factory.GetDescribeTableColumnHeaderNames()); WorkbenchSingleton.Workbench.ShowView(tableDescribeViewContent); } }