This commit is contained in:
2019-04-09 16:34:59 +01:00
parent 3ef1475d63
commit ef02a3a6ad
46 changed files with 2122 additions and 0 deletions
@@ -0,0 +1,51 @@
using Sarand.PatientMgr.Core.App;
using Sarand.PatientMgr.Core.Mgr;
using Sarand.Core.Base;
using Sarand.Core.IO;
using Sarand.PatientMgr.Win.Dbas.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sarand.PatientMgr.Win.Dbas.Mgr;
namespace Sarand.PatientMgr.Win.Dbas.App
{
//=======================================================================
public class SpmSystem_WinDbas : SpmSystem
{
//-------------------------------------------------------------------
// Static initialisation.
public static void InitStatics ()
{
// Initialise static environment values.
ComputerName = System.Environment.MachineName;
UserName = Environment.UserName;
ApplicationPath = System.Reflection.Assembly.GetEntryAssembly().Location;
ApplicationFolder = Path.GetDirectoryName(ApplicationPath);
AssemblyBuildAt = FileUtil.GetFileLastWriteTime(ApplicationPath);
// Initialise other statics.
SpmFileUtil.InitStatics();
}
//-------------------------------------------------------------------
// Construction.
public SpmSystem_WinDbas (PropertySet properties) : base(properties)
{
}
//-------------------------------------------------------------------
// D a t a M a n a g e r s
//-------------------------------------------------------------------
public override SpmAdmissionMgr CreateAdmissionMgr (SpmUserContext userContext)
{
return new SpmAdmissionMgr_Dbas(userContext);
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,31 @@
using Sarand.PatientMgr.Core.App;
using Sarand.PatientMgr.Core.Mgr;
using System;
using System.Collections.Generic;
using System.Text;
namespace Sarand.PatientMgr.Win.Dbas.Mgr
{
//=======================================================================
internal partial class SpmAdmissionMgr_Dbas : SpmAdmissionMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SpmAdmissionMgr_Dbas (SpmUserContext userContext) :
base(userContext)
{
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
// Utilities.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,112 @@
using Sarand.Core.Base;
using Sarand.Core.Bus;
using Sarand.Core.IO;
using Sarand.Win.Dbas.Base;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.PatientMgr.Win.Dbas.Utils
{
//=======================================================================
public static class SpmDbDfnGenerator
{
//-------------------------------------------------------------------
// Definitions.
public class DbDfnGeneratorResultData
{
public bool Success { get; internal set; }
public String ErrorMessage { get; internal set; }
}
//-------------------------------------------------------------------
// Data members.
//private static string messageBoxTitle = "PatientMgr database definition generator";
//-------------------------------------------------------------------
/// <summary>Generate database definitions.</summary>
public static DbDfnGeneratorResultData Generate (String connectionString)
{
DbDfnGeneratorResultData resultData = new DbDfnGeneratorResultData();
// Locate output folder:
String directory = GetOutputFolder(resultData);
if (String.IsNullOrEmpty(directory) || !FileUtil.IsDirectory(directory)) return resultData;
// 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:
GenerateDatabaseDefinition(database, directory, resultData);
return resultData;
}
//-------------------------------------------------------------------
private static bool GenerateDatabaseDefinition (SacsDatabase database, String directory, DbDfnGeneratorResultData resultData)
{
DatabaseDefinitionGenerator.Config config = new DatabaseDefinitionGenerator.Config();
config.Database = database;
config.OutputDirectory = directory;
config.NamespaceDefinition = "Sarand.PatientMgr.Core.App";
config.NamespaceTableObjects = "Sarand.PatientMgr.Win.Dbas.Internal";
config.ClassnameDefinition = "SpmDbDfn";
config.TablesExcluded.AddRange(new String[] { "NextId", "SaCode", "SaCodeType", "SaSecItem", "SaSecurityItem", "SaSecLink", "SaSecurityLink", "SaItemData", "SaItemDoc", "SaItemOption", "SaInterface", "SaInterfaceProcess", "SaInterfaceProcessMessage", "SaInterfaceDataItem", "SaInterfaceProcessDataItem", "SaAttrUpdate" });
// Columns to exclude from update.
config.InsertOnlyColumns.Add(".*", "CreateOn,CreateBy,CreateHost");
// Table class.
config.TableClass.NamespaceBaseClass = "Sarand.PatientMgr.Win.Dbas.Data";
config.TableClass.BaseClass = "SpmDbDataItem";
config.TableClass.MandatoryConstructorDbInfo = true;
// Generate database definition.
DatabaseDefinitionGenerator generator = new DatabaseDefinitionGenerator();
resultData.Success = generator.Generate(config);
return resultData.Success;
}
//-------------------------------------------------------------------
private static String GetOutputFolder (DbDfnGeneratorResultData resultData)
{
String fn = "SpmDbDfnGenerator.GetOutputFolder";
String assemblyDirectory = FileUtil.GetParentDirectory((Assembly.GetAssembly(typeof(DatabaseDefinitionGenerator)).Location));
String directory = assemblyDirectory;
Logger.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))
{
resultData.ErrorMessage = "Failed to find '" + projectFolder + "' solution root folder in assembly path:\n\n" + assemblyDirectory;
Logger.Warn(resultData.ErrorMessage);
return String.Empty;
}
// Code files are generated to '..\Dbas\Generated\PatientMgr\' folder.
directory += Path.DirectorySeparatorChar + "Database" + Path.DirectorySeparatorChar + "Generated" + Path.DirectorySeparatorChar + "PatientMgr";
Logger.Debug(fn + " Output folder: " + directory);
if (!FileUtil.ValidateDirectory(directory, true))
{
resultData.ErrorMessage = "Output folder not found:\n\n" + directory;
Logger.Warn(resultData.ErrorMessage);
return String.Empty;
}
return directory;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,86 @@
using Sarand.Core.Base;
using Sarand.Core.IO;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sarand.PatientMgr.Win.Dbas.Utils
{
//=======================================================================
/// <summary>
/// Static implementations of fucntions required by FileUtil.
/// </summary>
public class SpmFileUtil
{
//-------------------------------------------------------------------
// Initialise statics.
public static void InitStatics ()
{
FileUtil.DirectoryExists = IsDirectory;
FileUtil.DirectoryGetParent = GetParentDirectory;
FileUtil.DirectoryCreateDirectory = CreateDirectory;
FileUtil.FileExists = IsFile;
FileUtil.FileReadAllLines = FileReadAllLines;
}
//-------------------------------------------------------------------
// D i r e c t o r y
//-------------------------------------------------------------------
public static bool IsDirectory (String directoryPath)
{
try
{
return Directory.Exists(directoryPath);
}
catch (Exception exc) { Logger.Debug("SlmFileUtil.IsDirectory " + exc.GetType().Name + ": " + exc.Message); }
return false;
}
public static String GetParentDirectory (String filepath)
{
try
{
DirectoryInfo parentDirectoryInfo = Directory.GetParent(filepath);
if (parentDirectoryInfo != null)
return parentDirectoryInfo.FullName;
}
catch (Exception exc) { Logger.Debug("SlmFileUtil.GetParentDirectory " + exc.GetType().Name + ": " + exc.Message); }
return String.Empty;
}
public static bool CreateDirectory (String directoryPath)
{
try
{
DirectoryInfo info = Directory.CreateDirectory(directoryPath);
return info.Exists;
}
catch (Exception exc) { Logger.Debug("SlmFileUtil.CreateDirectory " + exc.GetType().Name + ": " + exc.Message); }
return false;
}
//-------------------------------------------------------------------
// F i l e
//-------------------------------------------------------------------
public static bool IsFile (String filePath)
{
try
{
return File.Exists(filePath);
}
catch (Exception exc) { Logger.Debug("SlmFileUtil.IsFile " + exc.GetType().Name + ": " + exc.Message); }
return false;
}
public static String[] FileReadAllLines (String filePath)
{
try
{
return File.ReadAllLines(filePath);
}
catch (Exception exc) { Logger.Debug("SlmFileUtil.FileReadAllLines " + exc.GetType().Name + ": " + exc.Message); }
return new String[0];
}
//-------------------------------------------------------------------
}
//=======================================================================
}