using System;
using System.Collections.Generic;
using System.Text;
using Harlinn.DBTool.CodeGenerators.Utils;
using Harlinn.DBTool.Projects;
namespace Harlinn.DBTool.CodeGenerators.Client
{
public class ClientGenerator : GeneratorBase
{
private Project project;
private string className = "DataClient";
SortedSet<string> methodNames = new SortedSet<string>();
public ClientGenerator(Project project)
{
this.project = project;
}
public override string GetFilename()
{
string directory = GetDirectory();
string result = directory + "\\" + className + ".cs";
return result;
}
public override string GetDirectory()
{
string namespace_ = project.ClientNamespace;
string directory = project.NamespaceToDirectory(namespace_);
return directory;
}
public void Generate()
{
string commonNamespace = project.CommonNamespace;
string dataNamespace = project.DataNamespace;
string implementationNamespace = project.ServiceImplementationNamespace;
string clientNamespace = project.ClientNamespace;
WriteLine("using System;");
WriteLine("using System.Text;");
WriteLine("using System.ComponentModel;");
WriteLine("using System.Collections.Generic;");
WriteLine("using System.ServiceModel;");
WriteLine("using System.Reflection;");
WriteLine();
WriteLine("using " + commonNamespace + ";");
WriteLine("using " + implementationNamespace + ";");
WriteLine("using " + dataNamespace + ";");
WriteLine("using " + dataNamespace + ".Operations;");
WriteLine("using "+clientNamespace+";");
WriteLine();
WriteLine("namespace " + clientNamespace);
WriteLine("{");
WriteLine();
WriteLine();
WriteLine(" public partial class " + className + " : IDataContextProvider");
WriteLine(" {");
WriteLine(" private static readonly log4net.ILog sfLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);");
WriteLine();
WriteLine(" private static void LogException(Exception exc, MethodBase method)");
WriteLine(" {");
WriteLine(" Logger.LogException(sfLog, exc, method);");
WriteLine(" }");
WriteLine();
WriteLine(" static void Entering( MethodBase method )");
WriteLine(" {");
WriteLine(" Logger.Entering(sfLog, method);");
WriteLine(" }");
WriteLine();
WriteLine(" static void Leaving( MethodBase method )");
WriteLine(" {");
WriteLine(" Logger.Leaving(sfLog, method);");
WriteLine(" }");
WriteLine();
WriteLine(" private void LogDebug(string message)");
WriteLine(" {");
WriteLine(" sfLog.Debug(message);");
WriteLine(" }");
WriteLine();
WriteLine(" private void LogMessage(string message)");
WriteLine(" {");
WriteLine(" sfLog.Info(message);");
WriteLine(" }");
WriteLine();
WriteLine(" private void LogError(string message)");
WriteLine(" {");
WriteLine(" sfLog.Error(message);");
WriteLine(" }");
WriteLine();
WriteLine(" private static readonly string ENDPOINT_CONFIGURATION_NAME = \"DataService\";");
WriteLine();
CreateEvents();
WriteLine();
WriteLine(" private static object commonSynchObject = new object();");
WriteLine(" private static DataClient instance;");
WriteLine();
WriteLine(" public static DataClient Instance");
WriteLine(" {");
WriteLine(" get");
WriteLine(" {");
WriteLine(" if (instance == null)");
WriteLine(" {");
WriteLine(" lock (commonSynchObject)");
WriteLine(" {");
WriteLine(" if (instance == null)");
WriteLine(" {");
WriteLine(" instance = new DataClient();");
WriteLine(" }");
WriteLine(" }");
WriteLine(" }");
WriteLine(" return instance;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" DateTime faultTime;");
WriteLine(" DataServiceClient dataServiceClient;");
WriteLine(" private void CreateDataServiceClient()");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" InstanceContext instanceContext = new InstanceContext(this);");
WriteLine(" dataServiceClient = new DataServiceClient(ENDPOINT_CONFIGURATION_NAME);");
WriteLine(" dataServiceClient.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;");
WriteLine(" dataServiceClient.InnerChannel.Faulted += InnerChannel_Faulted;");
WriteLine(" dataServiceClient.InnerChannel.Closing += InnerChannel_Closing;");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, System.Reflection.MethodBase.GetCurrentMethod());");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" private void InnerChannel_Closing(object sender, EventArgs e)");
WriteLine(" {");
WriteLine(" LogMessage(\"Server channel closed.\");");
WriteLine(" if (dataServiceClient != null)");
WriteLine(" {");
WriteLine(" dataServiceClient.InnerChannel.Faulted -= InnerChannel_Faulted;");
WriteLine(" dataServiceClient.InnerChannel.Closing -= InnerChannel_Closing;");
WriteLine(" dataServiceClient = null;");
WriteLine(" OnChannelClosed( );");
WriteLine(" }");
WriteLine(" }");
WriteLine(" private void InnerChannel_Faulted(object sender, EventArgs e)");
WriteLine(" {");
WriteLine(" LogError(\"Server channel faulted.\");");
WriteLine(" faultTime = DateTime.Now;");
WriteLine(" if (dataServiceClient != null)");
WriteLine(" {");
WriteLine(" dataServiceClient.InnerChannel.Faulted -= InnerChannel_Faulted;");
WriteLine(" dataServiceClient.InnerChannel.Closing -= InnerChannel_Closing;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" dataServiceClient.Abort();");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, System.Reflection.MethodBase.GetCurrentMethod());");
WriteLine(" }");
WriteLine(" dataServiceClient = null;");
WriteLine(" OnChannelFaulted( );");
WriteLine(" }");
WriteLine(" }");
WriteLine(" private void CloseConnection()");
WriteLine(" {");
WriteLine(" if (dataServiceClient != null)");
WriteLine(" {");
WriteLine(" dataServiceClient.InnerChannel.Faulted -= InnerChannel_Faulted;");
WriteLine(" dataServiceClient.InnerChannel.Closing -= InnerChannel_Closing;");
WriteLine(" dataServiceClient.Close();");
WriteLine(" dataServiceClient = null;");
WriteLine(" OnChannelClosed( );");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine();
WriteLine(" private bool isDisconnected;");
WriteLine(" private Guid clientId;");
WriteLine(" private object synchObject = new object();");
WriteLine(" private DateTime serverCallStarted = DateTime.MinValue;");
WriteLine(" private DateTime serverCallCompleted = DateTime.MinValue;");
WriteLine();
WriteLine();
WriteLine(" public bool Connect()");
WriteLine(" {");
WriteLine(" bool result = false;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" bool connected = false;");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" isDisconnected = false;");
WriteLine(" if (dataServiceClient == null)");
WriteLine(" {");
WriteLine(" CreateDataServiceClient();");
WriteLine();
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" clientId = dataServiceClient.Connect( );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed Connect in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine();
WriteLine(" result = true;");
WriteLine(" connected = true;");
WriteLine(" }");
WriteLine(" else");
WriteLine(" {");
WriteLine(" result = true;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" if( connected )");
WriteLine(" {");
WriteLine(" LogMessage(\"Connected to Server\");");
WriteLine(" OnConnected( );");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod);");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
WriteLine();
WriteLine(" public void Disconnect()");
WriteLine(" {");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" bool disconnected = false;");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" isDisconnected = true;");
WriteLine(" if (dataServiceClient != null)");
WriteLine(" {");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" dataServiceClient.Disconnect( );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed Disconnect in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" CloseConnection();");
WriteLine(" disconnected = true;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" if( disconnected )");
WriteLine(" {");
WriteLine(" LogMessage(\"Disconnected\");");
WriteLine(" OnDisconnected( );");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod);");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine(" private void EnsureConnected( )");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if (isDisconnected == true)");
WriteLine(" {");
WriteLine(" throw new Exception(\"Client is disconnected.\");");
WriteLine(" }");
WriteLine(" if (dataServiceClient == null)");
WriteLine(" {");
WriteLine(" Connect();");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, System.Reflection.MethodBase.GetCurrentMethod());");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine();
WriteLine(" public event EventHandler OnConnectedEvent;");
WriteLine(" public event EventHandler OnDisconnectedEvent;");
WriteLine(" public event EventHandler OnChannelFaultedEvent;");
WriteLine(" public event EventHandler OnChannelClosedEvent;");
WriteLine();
WriteLine();
WriteLine(" protected virtual void OnConnected()");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if (OnConnectedEvent != null)");
WriteLine(" {");
WriteLine(" EventArgs eventArgs = new EventArgs();");
WriteLine(" OnConnectedEvent(this, eventArgs);");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, System.Reflection.MethodBase.GetCurrentMethod());");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine();
WriteLine(" protected virtual void OnDisconnected()");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if (OnDisconnectedEvent != null)");
WriteLine(" {");
WriteLine(" EventArgs eventArgs = new EventArgs();");
WriteLine(" OnDisconnectedEvent(this, eventArgs);");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, System.Reflection.MethodBase.GetCurrentMethod());");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine();
WriteLine(" protected virtual void OnChannelFaulted()");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if (OnChannelFaultedEvent != null)");
WriteLine(" {");
WriteLine(" EventArgs eventArgs = new EventArgs();");
WriteLine(" OnChannelFaultedEvent(this, eventArgs);");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, System.Reflection.MethodBase.GetCurrentMethod());");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine();
WriteLine(" protected virtual void OnChannelClosed()");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if (OnChannelClosedEvent != null)");
WriteLine(" {");
WriteLine(" EventArgs eventArgs = new EventArgs();");
WriteLine(" OnChannelClosedEvent(this, eventArgs);");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, System.Reflection.MethodBase.GetCurrentMethod());");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine(" public Guid ClientId");
WriteLine(" {");
WriteLine(" get");
WriteLine(" {");
WriteLine(" return clientId;");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine();
ProcessNotofications( );
WriteLine();
WriteLine();
Process( );
WriteLine();
WriteLine();
WriteLine(" }");
WriteLine();
WriteLine();
WriteLine("}");
}
private void CreateEvents()
{
WriteLine();
CreateEvents(project.GetProjectTables());
}
private void CreateEvents(ProjectTables projectTables)
{
foreach (ProjectTable projectTable in projectTables.Children)
{
CreateEvents(projectTable);
}
}
private void CreateEvents(ProjectTable projectTable)
{
string baseName = projectTable.BaseName;
WriteLine(" public event On" + baseName + "InsertedDelegate On" + baseName + "InsertedEvent;");
WriteLine(" public event On" + baseName + "ChangedDelegate On" + baseName + "ChangedEvent;");
WriteLine(" public event On" + baseName + "DeletedDelegate On" + baseName + "DeletedEvent;");
WriteLine();
}
private void ProcessNotofications()
{
ProjectTables projectTables = project.GetProjectTables();
WriteLine(" public void HandleNotification( OperationNotification operationNotification )");
WriteLine(" {");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if ( operationNotification == null )");
WriteLine(" {");
WriteLine(" throw new ArgumentNullException(\"operationNotification\");");
WriteLine(" }");
WriteLine(" ServiceOperation serviceOperation = operationNotification.ServiceOperation;");
WriteLine(" switch (serviceOperation)");
WriteLine(" {");
foreach (ProjectTable projectTable in projectTables.Children)
{
string baseName = projectTable.BaseName;
WriteLine(" case ServiceOperation.Insert" + baseName + ":");
WriteLine(" HandleInsert" + baseName + "Notification((Insert" + baseName + "Notification)operationNotification);");
WriteLine(" break;");
WriteLine(" case ServiceOperation.Update" + baseName + ":");
WriteLine(" HandleUpdate" + baseName + "Notification((Update" + baseName + "Notification)operationNotification);");
WriteLine(" break;");
WriteLine(" case ServiceOperation.Delete" + baseName + ":");
WriteLine(" HandleDelete" + baseName + "Notification((Delete" + baseName + "Notification)operationNotification);");
WriteLine(" break;");
}
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod);");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" }");
WriteLine();
WriteLine();
foreach (ProjectTable projectTable in projectTables.Children)
{
ProcessNotofications(projectTable);
}
WriteLine();
WriteLine();
}
private void ProcessNotofications(ProjectTable projectTable)
{
ProcessInsertNotofication(projectTable);
ProcessUpdateNotofication(projectTable);
ProcessDeleteNotofication(projectTable);
}
private void ProcessInsertNotofication(ProjectTable projectTable)
{
string baseName = projectTable.BaseName;
string dataClassName = projectTable.DataClassName;
List<ProjectTabularField> fields = projectTable.GetFieldList();
WriteLine(" public void HandleInsert" + baseName + "Notification( Insert" + baseName + "Notification operationNotification )");
WriteLine(" {");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if ( operationNotification == null )");
WriteLine(" {");
WriteLine(" throw new ArgumentNullException(\"operationNotification\");");
WriteLine(" }");
WriteLine(" if (On" + baseName + "InsertedEvent != null)");
WriteLine(" {");
if (projectTable.IsTagTable)
{
string arguments = ColumnHelper.GetCommaSeparatedPropertyNameList("operationNotification",fields);
WriteLine(" TagElementData elementData = TagElementData.Create(" + arguments + ");");
}
else
{
WriteLine(" " + dataClassName + " elementData = new " + dataClassName + "();");
WriteLine();
if (projectTable.IsTagValue)
{
WriteLine(" elementData.Tag = operationNotification.Tag;");
}
ProjectTabularField concurrencyField = projectTable.GetConcurrencyField();
if (concurrencyField != null)
{
WriteLine(" elementData." + projectTable.ElementStatePropertyName + " = operationNotification." + projectTable.ElementStatePropertyName + ";");
}
for (int i = 0; i < fields.Count; i++)
{
ProjectTabularField field = fields[i];
WriteLine(" elementData." + field.PropertyName + " = operationNotification." + field.PropertyName + ";");
}
}
WriteLine();
WriteLine(" On" + baseName + "InsertedEventArgs eventArgs = new On" + baseName + "InsertedEventArgs(operationNotification.ClientId, elementData);");
WriteLine(" On" + baseName + "InsertedEvent( this, eventArgs );");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod);");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" }");
WriteLine();
}
private void ProcessUpdateNotofication(ProjectTable projectTable)
{
string baseName = projectTable.BaseName;
string dataClassName = projectTable.DataClassName;
List<ProjectTabularField> fields = projectTable.GetFieldList();
WriteLine(" public void HandleUpdate" + baseName + "Notification( Update" + baseName + "Notification operationNotification )");
WriteLine(" {");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if ( operationNotification == null )");
WriteLine(" {");
WriteLine(" throw new ArgumentNullException(\"operationNotification\");");
WriteLine(" }");
WriteLine(" if (On" + baseName + "ChangedEvent != null)");
WriteLine(" {");
if (projectTable.IsTagTable)
{
string arguments = ColumnHelper.GetCommaSeparatedPropertyNameList("operationNotification", fields);
WriteLine(" TagElementData elementData = TagElementData.Create(" + arguments + ");");
}
else
{
WriteLine(" " + dataClassName + " elementData = new " + dataClassName + "();");
WriteLine();
if (projectTable.IsTagValue)
{
WriteLine(" elementData.Tag = operationNotification.Tag;");
}
ProjectTabularField concurrencyField = projectTable.GetConcurrencyField();
if (concurrencyField != null)
{
WriteLine(" elementData." + projectTable.ElementStatePropertyName + " = operationNotification." + projectTable.ElementStatePropertyName + ";");
}
for (int i = 0; i < fields.Count; i++)
{
ProjectTabularField field = fields[i];
WriteLine(" elementData." + field.PropertyName + " = operationNotification." + field.PropertyName + ";");
}
}
WriteLine();
WriteLine(" On" + baseName + "ChangedEventArgs eventArgs = new On" + baseName + "ChangedEventArgs(operationNotification.ClientId, elementData);");
WriteLine(" On" + baseName + "ChangedEvent( this, eventArgs );");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod);");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" }");
WriteLine();
}
private void ProcessDeleteNotofication(ProjectTable projectTable)
{
string baseName = projectTable.BaseName;
WriteLine(" public void HandleDelete" + baseName + "Notification( Delete" + baseName + "Notification operationNotification )");
WriteLine(" {");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if ( operationNotification == null )");
WriteLine(" {");
WriteLine(" throw new ArgumentNullException(\"operationNotification\");");
WriteLine(" }");
WriteLine(" if (On" + baseName + "DeletedEvent != null)");
WriteLine(" {");
if (projectTable.IsTagValue)
{
WriteLine(" On" + baseName + "DeletedEventArgs eventArgs = new On" + baseName + "DeletedEventArgs(operationNotification.ClientId, operationNotification.Tag, operationNotification.TimeStamp);");
}
else
{
WriteLine(" On" + baseName + "DeletedEventArgs eventArgs = new On" + baseName + "DeletedEventArgs(operationNotification.ClientId, operationNotification.Id);");
}
WriteLine(" On" + baseName + "DeletedEvent(this, eventArgs);");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod);");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" }");
WriteLine();
}
private void Process()
{
WriteLine();
Process(project.GetProjectTables());
WriteLine();
WriteLine(" public Interval GetTagValueInterval( long tag )");
WriteLine(" {");
WriteLine(" Interval result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" if ( tag == 0 )");
WriteLine(" {");
WriteLine(" throw new ArgumentException(\"Invalid tag:0\");");
WriteLine(" }");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient.GetTagValueInterval( tag );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed GetTagValueInterval in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException( exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
private void Process(ProjectTables projectTables)
{
foreach (ProjectTable projectTable in projectTables.Children)
{
Process(projectTable);
WriteLine();
}
}
private void Process(ProjectTable projectTable)
{
GenerateGetMethods(projectTable);
GenerateSaveMethod(projectTable);
GenerateInsertMethod(projectTable);
GenerateUpdateMethod(projectTable);
GenerateDeleteMethod(projectTable);
}
public void GenerateGetMethods(ProjectTable projectTable)
{
GenerateGetAllMethod(projectTable);
GenerateGetByPrimaryKeyMethod(projectTable);
ProjectTabularIndexes indexes = projectTable.GetIndexes();
foreach (ProjectTabularIndex index in indexes.Children)
{
GenerateGetByIndexMethod(projectTable, index);
}
ProjectTabularReferences references = projectTable.GetReferences();
foreach (ProjectTabularReference reference in references.Children)
{
GenerateGetByReferenceMethod(projectTable, reference);
}
GenerateTagValueGetMethods(projectTable);
}
private void GenerateGetAllMethod(ProjectTable projectTable)
{
string tagArgDecl = "";
string tagArg = "";
if (projectTable.IsTagValue)
{
tagArgDecl = " long tag ";
tagArg = " tag ";
}
string baseName = projectTable.GetBaseName();
string dataClassName = projectTable.GetDataTypeClassName();
string methodName = "GetAll" + baseName + "s";
WriteLine(" public List<" + dataClassName + "> " + methodName + "(" + tagArgDecl + ")");
WriteLine(" {");
WriteLine(" List<" + dataClassName + "> result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
if (projectTable.IsTagValue)
{
WriteLine(" if ( tag == 0 )");
WriteLine(" {");
WriteLine(" throw new ArgumentException(\"Invalid tag:0\");");
WriteLine(" }");
}
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "(" + tagArg + ");");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
private void GenerateGetByPrimaryKeyMethod(ProjectTable projectTable)
{
string tagArgDecl = "";
string tagArg = "";
if (projectTable.IsTagValue)
{
tagArgDecl = " long tag,";
tagArg = " tag,";
}
string dataClassName = projectTable.GetDataTypeClassName();
ProjectTabularPrimaryKey primaryKey = projectTable.GetPrimaryKey();
List<ProjectTabularField> fields = primaryKey.GetFieldList();
string methodName = MethodNamesHelper.GetServiceGetByMethodName(primaryKey);
string argDecl = ColumnHelper.GetArgumentDeclarationList(fields);
string args = ColumnHelper.GetCommaSeparatedPropertyFieldNameList(fields);
WriteLine(" public " + dataClassName + " " + methodName + "(" + tagArgDecl + argDecl + " )");
WriteLine(" {");
WriteLine(" " + dataClassName + " result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
if (projectTable.IsTagValue)
{
WriteLine(" if ( tag == 0 )");
WriteLine(" {");
WriteLine(" throw new ArgumentException(\"Invalid tag:0\");");
WriteLine(" }");
}
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "(" + tagArg + args + ");");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
private void GenerateGetByIndexMethod(ProjectTable projectTable, ProjectTabularIndex index)
{
string tagArgDecl = "";
string tagArg = "";
if (projectTable.IsTagValue)
{
tagArgDecl = " long tag,";
tagArg = " tag,";
}
string dataClassName = projectTable.GetDataTypeClassName();
List<ProjectTabularField> fields = index.GetFieldList();
string argDecl = ColumnHelper.GetArgumentDeclarationList(fields);
string args = ColumnHelper.GetCommaSeparatedPropertyFieldNameList(fields);
string methodName = MethodNamesHelper.GetServiceGetByMethodName(index);
WriteLine(" public " + dataClassName + " " + methodName + "(" + tagArgDecl + argDecl + " )");
WriteLine(" {");
WriteLine(" " + dataClassName + " result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "(" + tagArg + args + ");");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
if ((projectTable.IsTimeSeries) && (projectTable.IsTagValue == false))
{
methodName = MethodNamesHelper.GetServiceGetByForTimeStampMethodName(index);
WriteLine(" public " + dataClassName + " " + methodName + "(" + tagArgDecl + argDecl + " )");
WriteLine(" {");
WriteLine(" " + dataClassName + " result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "(" + tagArg + args + ");");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
}
private void GenerateGetByReferenceMethod(ProjectTable projectTable, ProjectTabularReference reference)
{
string tagArgDecl = "";
string tagArg = "";
if (projectTable.IsTagValue)
{
tagArgDecl = " long tag,";
tagArg = " tag,";
}
string baseName = projectTable.GetBaseName();
string accessorClassName = projectTable.GetDataAccessClassName();
string dataClassName = projectTable.GetDataTypeClassName();
string readerClassName = projectTable.GetReaderClassName();
List<ProjectTabularField> fields = reference.GetFieldList();
string argDecl = ColumnHelper.GetArgumentDeclarationList(fields);
string args = ColumnHelper.GetCommaSeparatedPropertyFieldNameList(fields);
string methodName = MethodNamesHelper.GetServiceGetByMethodName(reference);
string accessorMethodName = MethodNamesHelper.GetManagerGetByMethodName(reference);
WriteLine(" public List<" + dataClassName + "> " + methodName + "(" + tagArgDecl + argDecl + " )");
WriteLine(" {");
WriteLine(" List<" + dataClassName + "> result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "(" + tagArg + args + ");");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
private void GenerateTagValueGetMethods(ProjectTabular tabular)
{
if (tabular is ProjectTable)
{
ProjectTable projectTable = (ProjectTable)tabular;
if (projectTable.IsTagValue)
{
string baseName = projectTable.GetBaseName();
string dataClassName = projectTable.GetDataTypeClassName();
string methodName = "Get" + baseName + "ForTimeStamp";
WriteLine(" public " + dataClassName + " " + methodName + "( long tag, DateTime ts )");
WriteLine(" {");
WriteLine(" " + dataClassName + " result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "( tag, ts);");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" }");
WriteLine();
methodName = "Get" + baseName + "ForLastTimeStamp";
WriteLine(" public " + dataClassName + " " + methodName + "( long tag )");
WriteLine(" {");
WriteLine(" " + dataClassName + " result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "( tag );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" }");
WriteLine();
methodName = "Get" + baseName + "ForInterval";
WriteLine(" public List<" + dataClassName + "> " + methodName + "( long tag, DateTime startOfInterval, DateTime endOfInterval )");
WriteLine(" {");
WriteLine(" List<" + dataClassName + "> result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "( tag, startOfInterval, endOfInterval );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
}
}
private void GenerateSaveMethod(ProjectTable projectTable)
{
ProjectTabularField concurrencyField = projectTable.GetConcurrencyField();
if (concurrencyField == null)
{
return;
}
string baseName = projectTable.GetBaseName();
string accessorClassName = projectTable.GetDataAccessClassName();
string dataClassName = projectTable.GetDataTypeClassName();
string readerClassName = projectTable.GetReaderClassName();
string methodName = "Save" + baseName;
WriteLine(" public " + dataClassName + " " + methodName + "(Guid clientId, " + dataClassName + " element )");
WriteLine(" {");
WriteLine(" " + dataClassName + " result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "( clientId, element );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
private void GenerateInsertMethod(ProjectTable projectTable)
{
string baseName = projectTable.GetBaseName();
string accessorClassName = projectTable.GetDataAccessClassName();
string dataClassName = projectTable.GetDataTypeClassName();
string readerClassName = projectTable.GetReaderClassName();
string methodName = "Insert" + baseName;
WriteLine(" public " + dataClassName + " " + methodName + "(Guid clientId, " + dataClassName + " element )");
WriteLine(" {");
WriteLine(" " + dataClassName + " result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "( clientId, element );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
WriteLine(" public void " + methodName + "List(Guid clientId, List<" + dataClassName + "> elements )");
WriteLine(" {");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" dataServiceClient." + methodName + "List( clientId, elements );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" }");
WriteLine();
}
private void GenerateUpdateMethod(ProjectTable projectTable)
{
string baseName = projectTable.GetBaseName();
string accessorClassName = projectTable.GetDataAccessClassName();
string dataClassName = projectTable.GetDataTypeClassName();
string readerClassName = projectTable.GetReaderClassName();
string methodName = "Update" + baseName;
WriteLine(" public " + dataClassName + " " + methodName + "( Guid clientId, " + dataClassName + " element )");
WriteLine(" {");
WriteLine(" " + dataClassName + " result = null;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "( clientId, element );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
private void GenerateDeleteMethod(ProjectTable projectTable)
{
string tagArgDecl = "";
string tagArg = "";
if (projectTable.IsTagValue)
{
tagArgDecl = " long tag,";
tagArg = " tag,";
}
string baseName = projectTable.GetBaseName();
List<ProjectTabularField> fields = projectTable.GetPrimaryKeyFieldList();
ProjectTabularField concurrencyField = projectTable.GetConcurrencyField();
if (concurrencyField != null)
{
fields.Add(concurrencyField);
}
string argDecl = ColumnHelper.GetArgumentDeclarationList(fields);
string args = ColumnHelper.GetCommaSeparatedPropertyFieldNameList(fields);
string methodName = "Delete" + baseName;
WriteLine(" public int " + methodName + "( Guid clientId, " + tagArgDecl + argDecl + " )");
WriteLine(" {");
WriteLine(" int result = 0;");
WriteLine(" MethodBase currentMethod = MethodBase.GetCurrentMethod();");
WriteLine(" Entering(currentMethod);");
WriteLine(" try");
WriteLine(" {");
WriteLine(" try");
WriteLine(" {");
WriteLine(" lock(synchObject)");
WriteLine(" {");
WriteLine(" EnsureConnected();");
WriteLine(" serverCallStarted = DateTime.UtcNow;");
WriteLine(" try");
WriteLine(" {");
WriteLine(" result = dataServiceClient." + methodName + "( clientId, " + tagArg + args + " );");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" serverCallCompleted = DateTime.UtcNow;");
WriteLine(" }");
WriteLine("#if DEBUG");
WriteLine(" TimeSpan serverCallTimeSpan = serverCallCompleted - serverCallStarted;");
WriteLine(" LogDebug(string.Format(\"Executed " + methodName + " in {0}\",serverCallTimeSpan));");
WriteLine("#endif");
WriteLine(" }");
WriteLine(" }");
WriteLine(" catch (Exception exc)");
WriteLine(" {");
WriteLine(" LogException(exc, currentMethod );");
WriteLine(" throw;");
WriteLine(" }");
WriteLine(" }");
WriteLine(" finally");
WriteLine(" {");
WriteLine(" Leaving(currentMethod);");
WriteLine(" }");
WriteLine(" return result;");
WriteLine(" }");
WriteLine();
}
}
}