113 lines
4.5 KiB
C#
113 lines
4.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using Sarand.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.IO;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using Sarand.Net.Standard.Dbas.Base;
|
|
|
|
namespace Sarand.Net.Standard.Dbas.ItemOptions
|
|
{
|
|
//=======================================================================
|
|
public static class SaItemOptionsDbDfnGenerator
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
//private static string messageBoxTitle = "Sarand Item Options Module database definition generator";
|
|
//private static String dbConnectionString = "Driver={SQL Server Native Client 11.0};Server=Sarand106\\SQL2014;Database=SaStockTracker_Solent_STN;Trusted_Connection=Yes;MARS_Connection=yes;";
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Generate database definitions.
|
|
/// </summary>
|
|
public static bool Generate(String connectionString)
|
|
{
|
|
String fn = nameof(SaItemOptionsDbDfnGenerator) + ".Generate";
|
|
|
|
// Locate output folder:
|
|
String directory = GetOutputFolder();
|
|
if (String.IsNullOrEmpty(directory) || !FileUtil.IsDirectory(directory)) return false;
|
|
|
|
// Open database.
|
|
// NB Must be ODBC connection - especially to retrieve index columns.
|
|
SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig();
|
|
config.connectionString = connectionString;
|
|
SacsDatabase database = SacsDatabaseConsole.OpenOdbcDatabase(config);
|
|
|
|
// Generate database definition.
|
|
try
|
|
{
|
|
return GenerateDatabaseDefinition(database, directory);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SaLogger.Error(fn + " " + ExceptionUtil.GetLogMessage(exc));
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
private static bool GenerateDatabaseDefinition(SacsDatabase database, String directory)
|
|
{
|
|
DatabaseDefinitionGenerator.Config config = new DatabaseDefinitionGenerator.Config()
|
|
{
|
|
SarandCommonVersion = DatabaseDefinitionGenerator.SarandCommonVersion.VS2019,
|
|
DotNetVersion = DatabaseDefinitionGenerator.DotNetVersion.Core3,
|
|
Database = database,
|
|
OutputDirectory = directory,
|
|
};
|
|
// Schema - Tables.
|
|
config.Schema.Tables_Included.AddRange(new String[] { "SaItemOption" });
|
|
config.Schema.Tables_Excluded.AddRange(new String[] { });
|
|
// Schema - Columns.
|
|
config.Schema.InsertOnlyColumns.Add(".*", "CreateOn,CreateBy,CreateHost");
|
|
config.Schema.InsertOnlyColumns.Add("SaItemOption", "ItemType,ItemId,Name,Context");
|
|
// Database Definition class.
|
|
config.DefinitionClass.Namespace = "Sarand.Net.Standard.Base.ItemOptions";
|
|
config.DefinitionClass.Classname = "SaItemOptionDbDfn";
|
|
// Table class.
|
|
config.TableClass.Namespace = "Sarand.Net.Standard.Dbas.ItemOptions.Internal";
|
|
|
|
// Generate database definition.
|
|
DatabaseDefinitionGenerator generator = new DatabaseDefinitionGenerator();
|
|
return generator.Generate(config);
|
|
}
|
|
//-------------------------------------------------------------------
|
|
private static String GetOutputFolder()
|
|
{
|
|
String fn = nameof(SaItemOptionsDbDfnGenerator) + ".GetOutputFolder";
|
|
String assemblyDirectory = FileUtil.GetParentDirectory((Assembly.GetAssembly(typeof(DatabaseDefinitionGenerator)).Location));
|
|
String directory = assemblyDirectory;
|
|
SaLogger.Debug(fn + " Assembly folder: " + directory);
|
|
// Locate the parent of the 'Workspace' solution root folder.
|
|
String projectFolder = "Workspace";
|
|
while (!String.IsNullOrEmpty(directory))
|
|
{
|
|
if (FileUtil.IsDirectory(directory + Path.DirectorySeparatorChar + projectFolder))
|
|
{
|
|
break;
|
|
}
|
|
directory = FileUtil.GetParentDirectory(directory);
|
|
}
|
|
if (String.IsNullOrEmpty(directory))
|
|
{
|
|
SaLogger.Error(fn + " Failed to find '" + projectFolder + "' solution root folder in assembly path:\n\t" + assemblyDirectory);
|
|
return String.Empty;
|
|
}
|
|
// Code files are generated to '..\Dbas\Generated\ItemOptions\' folder.
|
|
directory += Path.DirectorySeparatorChar + "Database" + Path.DirectorySeparatorChar + "Generated" + Path.DirectorySeparatorChar + "ItemOptions";
|
|
SaLogger.Debug(fn + " Output folder: " + directory);
|
|
if (!FileUtil.ValidateDirectory(directory, true))
|
|
{
|
|
SaLogger.Error(fn + " Output folder not found:\n\n" + directory);
|
|
return String.Empty;
|
|
}
|
|
return directory;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|