using System;
using System.Collections.Generic;
using System.Text;
using TierGenerator.Common.Util.Generate;
using TierGenerator.Common.Util.Model;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;
namespace TierGenerator.Common.Util.ObjectGenerate.BusinessLogic
{
internal class BllBuilder
{
#region Class Members
private TierModel tierModel;
private string serviceName;
#endregion
public BllBuilder(TierModel tierModel)
{
this.tierModel = tierModel;
this.serviceName = ServiceBuilderHelper.GetServiceNameByNamespace(tierModel.ServiceName);
}
#region Public Properties
public TierModel TierModel
{
get { return tierModel; }
}
public string ServiceName
{
get { return serviceName; }
}
#endregion
#region Public Methods
public void Generate()
{
ProjectItem bllProjectItem = GenerateBllService();
ProjectItem bllProjectItemTg = GenerateBllService_TG();
GenerateBllServiceFacade_TG();
bllProjectItemTg.Parent = bllProjectItem;
bllProjectItemTg.Dependency = ProjectItemDependencies.Code;
string csprojPath = ServiceBuilderHelper.GetCsprojFile(this.TierModel.Settings.BllPath);
ServiceBuilderHelper.UpdateCsprojFile(csprojPath, bllProjectItemTg);
ServiceBuilderHelper.UpdateCsprojFile(csprojPath, bllProjectItem);
}
#endregion
#region Helper Methods
private ProjectItem GenerateBllService()
{
string bllFileName = ServiceBuilderHelper.MakeNamespaceFolder(TierModel.Settings.BllPath, TierModel.Namespace) + ServiceName + ".cs";
if (File.Exists(bllFileName))
{
return null;
}
StringBuilder bllService = new StringBuilder(2000);
bllService.AppendLine("using System;");
bllService.AppendLine();
bllService.AppendLine(String.Format("using {0}.BusinessLogic.Util;", TierModel.Solution));
bllService.AppendLine(String.Format("using {0}.Common.Data;", TierModel.Solution));
bllService.AppendLine(String.Format("using {0}.Common.Exception;", TierModel.Solution));
bllService.AppendLine(String.Format("using {0}.DalFactory;", TierModel.Solution));
bllService.AppendLine(String.Format("using {0}.IDal.{1};", TierModel.Solution, TierModel.Namespace));
bllService.AppendLine(String.Format("using {0}.Model.{1};", TierModel.Solution, TierModel.Namespace));
bllService.AppendLine();
bllService.AppendLine(String.Format("namespace {0}.BusinessLogic.{1}", TierModel.Solution, TierModel.Namespace));
bllService.AppendLine("{");
bllService.AppendLine(String.Format(" public partial class {0} : BaseService", ServiceName));
bllService.AppendLine(" {");
bllService.AppendLine();
#region Constructors
bllService.AppendLine(" #region Public Constructors");
// static constructor
bllService.AppendLine(String.Format(" static {0}()", ServiceName));
bllService.AppendLine(" {");
bllService.AppendLine(" }");
//bllService.AppendLine();
// public constructor
bllService.AppendLine(String.Format(" public {0}()", ServiceName));
bllService.AppendLine(" {");
bllService.AppendLine(" }");
//bllService.AppendLine();
// public constructor
bllService.AppendLine(String.Format(" public {0}(Session session)", ServiceName));
bllService.AppendLine(" : base(session)");
bllService.AppendLine(" {");
bllService.AppendLine(" }");
//bllService.AppendLine();
bllService.AppendLine(" #endregion Public Constructors");
#endregion Constructors
// closing patterns for class and namespace declarations
bllService.AppendLine(" }");
bllService.AppendLine("}");
ServiceBuilderHelper.SaveToFile(bllFileName, bllService.ToString());
return new ProjectItem(
Path.GetFileName(bllFileName),
String.Concat(this.TierModel.Namespace, "\\", Path.GetFileName(bllFileName)),
ProjectItemTypes.Compile
);
}
private ProjectItem GenerateBllService_TG()
{
StringBuilder bllService = new StringBuilder(2000);
string bllFileName = ServiceBuilderHelper.MakeNamespaceFolder(TierModel.Settings.BllPath, TierModel.Namespace) + ServiceName + ".ntg.cs";
GenerateBllServiceHeader_TG(bllService);
GenerateBllInfoService_TG(bllService);
GenerateBllUdfService_TG(bllService);
GenerateBllServiceFooter_TG(bllService);
ServiceBuilderHelper.SaveToFile(bllFileName, bllService.ToString());
return new ProjectItem(
Path.GetFileName(bllFileName),
String.Concat(this.TierModel.Namespace, "\\", Path.GetFileName(bllFileName)),
ProjectItemTypes.Compile
);
}
private void GenerateBllServiceHeader_TG(StringBuilder bllService)
{
bllService.AppendLine("using System;");
bllService.AppendLine("using System.Collections.Generic;");
bllService.AppendLine();
bllService.AppendLine(String.Format("using {0}.BusinessLogic.Util;", TierModel.Solution));
bllService.AppendLine(String.Format("using {0}.Common.Data;", TierModel.Solution));
bllService.AppendLine(String.Format("using {0}.Common.Exception;", TierModel.Solution));
bllService.AppendLine(String.Format("using {0}.DalFactory;", TierModel.Solution));
bllService.AppendLine(String.Format("using {0}.IDal.{1};", TierModel.Solution, TierModel.Namespace));
bllService.AppendLine(String.Format("using {0}.Model.{1};", TierModel.Solution, TierModel.Namespace));
if (TierModel.DeclarationList.Count > 0)
{
bllService.Append(TierModel.AdditionalUsingString);
}
bllService.AppendLine();
bllService.AppendLine(String.Format("namespace {0}.BusinessLogic.{1}", TierModel.Solution, TierModel.Namespace));
bllService.AppendLine("{");
bllService.AppendLine(String.Format("\tpublic partial class {0} : BaseService", ServiceName));
bllService.AppendLine("\t{");
bllService.AppendLine("\t\t#region Static Members");
bllService.AppendLine(String.Format("\t\tprivate static readonly I{0}Dal dal = DalManager.CreateInstance(\"{1}.{0}Dal\") as I{0}Dal;", ServiceName, TierModel.Namespace));
//bllService.AppendLine(String.Format(" private static readonly string dalName = \"{0}.{1}Dal\";", Namespace, ServiceName));
foreach (ItemInfo item in this.TierModel.ItemInfoList)
{
if (item.AllowCaching && item.SelectMethod.BllAccess)
{
bllService.AppendLine();
bllService.AppendLine(String.Format("\t\tprivate const string {0} = \"{1}.{2}.{3}_\";", item.GetItemByIdConstant(), serviceName, item.ClassName, item.GetItemByIdConstant()));
bllService.AppendLine(String.Format("\t\tprivate const double {0}_CACHE_INTERVAL = 0.2 * 60;", item.GetItemByIdConstant()));
bllService.AppendLine(String.Format("\t\tprivate static readonly object {0}_SINC_KEY = new object();", item.GetItemByIdConstant()));
}
}
bllService.AppendLine("\t\t#endregion Static Members");
bllService.AppendLine();
}
private void GenerateBllInfoService_TG(StringBuilder bllService)
{
foreach (ItemInfo item in TierModel.ItemInfoList)
{
#region public get method by key field
if (item.SelectMethod.NeedToCreate && item.SelectMethod.BllAccess)
{
bllService.AppendLine(String.Format("\t\tpublic {0}Model Get{0}By{1}({2} {3})", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), CSharpTypeHelper.GetCSharpTypeName(item.KeyColumn.CSharpColumn), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine("\t\t{");
if (item.AllowCaching)
{
bllService.AppendLine(String.Format("\t\t\tstring key = String.Concat({0}.{1}, {2}.ToString());", this.ServiceName, item.GetItemByIdConstant(), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine(String.Format("\t\t\treturn CacheService.GetData<{0}Model>(", item.ClassName));
bllService.AppendLine("\t\t\t\tkey,");
bllService.AppendLine(String.Format("\t\t\t\t{0}.{1}_SINC_KEY,", this.ServiceName, item.GetItemByIdConstant()));
bllService.AppendLine(String.Format("\t\t\t\tTimeSpan.FromSeconds({0}.{1}_CACHE_INTERVAL),", this.ServiceName, item.GetItemByIdConstant()));
bllService.AppendLine(String.Format("\t\t\t\tdelegate"));
bllService.AppendLine("\t\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\t\tusing (Session session = base.OpenSession())"));
bllService.AppendLine("\t\t\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\t\t\treturn dal.Get{0}By{1}(session.Current, {2});", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine("\t\t\t\t\t}");
bllService.AppendLine("\t\t\t\t}");
bllService.AppendLine("\t\t\t);");
}
else
{
bllService.AppendLine("\t\t\tusing (Session session = base.OpenSession())");
bllService.AppendLine("\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\treturn dal.Get{0}By{1}(session.Current, {2});", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine("\t\t\t}");
}
bllService.AppendLine("\t\t}");
}
#endregion public get method by key field
#region base select blob by key field methods
if (item.HasBlob)
{
foreach (ColumnInfo column in item.ColumnList)
{
if (column.IsBlob && column.CSharpColumn.NeedSeparateLoad)
{
bllService.AppendLine();
bllService.AppendLine(String.Format("\t\tpublic byte[] Get{0}{1}By{2}({3} {4})", item.ClassName, column.CSharpColumn.Name, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), CSharpTypeHelper.GetCSharpTypeName(item.KeyColumn.CSharpColumn), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine("\t{");
bllService.AppendLine("\t\t\tusing (Session session = base.OpenSession())");
bllService.AppendLine("\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\treturn dal.Get{0}{1}By{2}(session.Current, {3});", item.ClassName, column.CSharpColumn.Name, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine("\t\t\t}");
bllService.AppendLine("\t\t}");
}
}
}
#endregion base select blob by key field methods
#region public delete method by key field
if (item.DeleteMethod.NeedToCreate && item.DeleteMethod.BllAccess)
{
bllService.AppendLine();
bllService.AppendLine(String.Format("\t\tpublic void Delete{0}By{1}({2} {3})", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), CSharpTypeHelper.GetCSharpTypeName(item.KeyColumn.CSharpColumn), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine("\t\t{");
if (item.AllowCaching)
{
bllService.AppendLine(String.Format("\t\t\tCacheService.Current.Remove(String.Concat({0}.{1}, {2}.ToString()));", this.ServiceName, item.GetItemByIdConstant(), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
}
bllService.AppendLine("\t\t\tusing (Session session = base.OpenSession())");
bllService.AppendLine("\t\t\t{");
if (item.AllowHistory)
{
bllService.AppendLine("\t\t\t\tusing (Transaction tx = session.BeginTransaction())");
bllService.AppendLine("\t\t\t\t{");
bllService.AppendLine("\t\t\t\t\ttry");
bllService.AppendLine("\t\t\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\t\t\tdal.Delete{0}By{1}(session.Current, {2});", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine(String.Format("\t\t\t\t\t\tServiceFacade.HistoryService.LogDelete(typeof({0}Model), {1});", ServiceBuilderHelper.Capitalize(item.ClassName), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
bllService.AppendLine("\t\t\t\t\t\ttx.Commit();");
bllService.AppendLine("\t\t\t\t\t}");
bllService.AppendLine("\t\t\t\t\tcatch");
bllService.AppendLine("\t\t\t\t\t{");
bllService.AppendLine("\t\t\t\t\t\ttx.Rollback();");
bllService.AppendLine("\t\t\t\t\t\tthrow;");
bllService.AppendLine("\t\t\t\t\t}");
bllService.AppendLine("\t\t\t\t}");
}
else
{
bllService.AppendLine(String.Format("\t\t\t\tdal.Delete{0}By{1}(session.Current, {2});", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
}
bllService.AppendLine("\t\t\t}");
bllService.AppendLine("\t\t}");
}
#endregion public delete method by key field
#region public insert method
if (item.InsertMethod.NeedToCreate && item.InsertMethod.BllAccess)
{
bllService.AppendLine();
bllService.AppendLine(String.Format("\t\tpublic void Insert{0}({0}Model {1}Model)", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine("\t\t{");
bllService.AppendLine(String.Format("\t\t\t{0}Model.Validate();", ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine();
bllService.AppendLine("\t\t\tusing (Session session = base.OpenSession())");
bllService.AppendLine("\t\t\t{");
if (item.AllowHistory)
{
bllService.AppendLine("\t\t\t\tusing (Transaction tx = session.BeginTransaction())");
bllService.AppendLine("\t\t\t\t{");
bllService.AppendLine("\t\t\t\t\ttry");
bllService.AppendLine("\t\t\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\t\t\tdal.Insert{0}(session.Current, {1}Model);", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine(String.Format("\t\t\t\t\t\tServiceFacade.HistoryService.LogModification({0}Model);", ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine("\t\t\t\t\t\ttx.Commit();");
bllService.AppendLine("\t\t\t\t\t}");
bllService.AppendLine("\t\t\t\t\tcatch");
bllService.AppendLine("\t\t\t\t\t{");
bllService.AppendLine("\t\t\t\t\t\ttx.Rollback();");
bllService.AppendLine("\t\t\t\t\t\tthrow;");
bllService.AppendLine("\t\t\t\t\t}");
bllService.AppendLine("\t\t\t\t}");
}
else
{
bllService.AppendLine(String.Format("\t\t\t\tdal.Insert{0}(session.Current, {1}Model);", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
}
bllService.AppendLine("\t\t\t}");
bllService.AppendLine("\t\t}");
}
#endregion public insert method
#region public update method
if (item.UpdateMethod.NeedToCreate && item.UpdateMethod.BllAccess)
{
bllService.AppendLine();
bllService.AppendLine(String.Format("\t\tpublic void Update{0}({0}Model {1}Model)", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine("\t\t{");
bllService.AppendLine(String.Format("\t\t\t{0}Model.Validate();", ServiceBuilderHelper.Decapitalize(item.ClassName)));
if (item.AllowCaching)
{
bllService.AppendLine(String.Format("\t\t\tCacheService.Current.Remove(String.Concat({0}.{1}, {2}Model.{3}.ToString()));", this.ServiceName, item.GetItemByIdConstant(), ServiceBuilderHelper.Decapitalize(item.ClassName), ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name)));
}
bllService.AppendLine();
bllService.AppendLine("\t\t\tusing (Session session = base.OpenSession())");
bllService.AppendLine("\t\t\t{");
if (item.AllowHistory)
{
bllService.AppendLine("\t\t\t\tusing (Transaction tx = session.BeginTransaction())");
bllService.AppendLine("\t\t\t\t{");
bllService.AppendLine("\t\t\t\t\ttry");
bllService.AppendLine("\t\t\t\t\t{");
if (item.Equatable)
{
bllService.AppendLine(String.Format("\t\t\t\t\t\t{0}Model tmpInfo = dal.Get{0}By{1}(session.Current, {2}Model.{1});", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine(String.Format("\t\t\t\t\t\tif (tmpInfo != null && !tmpInfo.Equals({0}Model))", ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine("\t\t\t\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\t\t\t\tdal.Update{0}(session.Current, {1}Model);", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine(String.Format("\t\t\t\t\t\t\tServiceFacade.HistoryService.LogModification({0}Model);", ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine("\t\t\t\t\t\t}");
}
else
{
bllService.AppendLine(String.Format("\t\t\t\t\t\tdal.Update{0}(session.Current, {1}Model);", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
bllService.AppendLine(String.Format("\t\t\t\t\t\tServiceFacade.HistoryService.LogModification({0}Model);", ServiceBuilderHelper.Decapitalize(item.ClassName)));
}
bllService.AppendLine("\t\t\t\t\t\ttx.Commit();");
bllService.AppendLine("\t\t\t\t\t}");
bllService.AppendLine("\t\t\t\t\tcatch");
bllService.AppendLine("\t\t\t\t\t{");
bllService.AppendLine("\t\t\t\t\t\ttx.Rollback();");
bllService.AppendLine("\t\t\t\t\t\tthrow;");
bllService.AppendLine("\t\t\t\t\t}");
bllService.AppendLine("\t\t\t\t}");
}
else
{
bllService.AppendLine(String.Format("\t\t\t\tdal.Update{0}(session.Current, {1}Model);", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
}
bllService.AppendLine("\t\t\t}");
bllService.AppendLine("\t\t}");
}
#endregion public update method
}
}
private void GenerateBllUdfService_TG(StringBuilder bllService)
{
GenerateBllSelectUdfService_TG(bllService);
GenerateBllUpdateUdfService_TG(bllService);
GenerateBllDeleteUdfService_TG(bllService);
}
private void GenerateBllSelectUdfService_TG(StringBuilder bllService)
{
foreach (UdfInfo udf in TierModel.SelectMethodList)
{
if (!udf.BllAccess)
{
continue;
}
#region Declaration
bllService.AppendLine();
if (!CSharpTypeHelper.IsSimpleType(udf.ReturnType))
{
if (!String.IsNullOrEmpty(udf.Comment))
{
bllService.AppendLine(String.Format("\t\t/// {0}", udf.Comment));
}
switch (udf.ReturnType)
{
case CSharpTypeEnum.ILIST:
bllService.AppendLine(String.Format("\t\tpublic IList<{0}> {1}({2})", CSharpTypeHelper.GetCSharpTypeName(udf.Type), udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
break;
case CSharpTypeEnum.LIST_PAGE:
bllService.AppendLine(String.Format("\t\tpublic ListPage {0}(ListQuery query{1}{2})", udf.Name, udf.ColumnList.Count != 0 ? ", " : "", ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
break;
case CSharpTypeEnum.ITEM_INFO:
case CSharpTypeEnum.LIST_ITEM:
bllService.AppendLine(String.Format("\t\tpublic {0}Model {1}({2})", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
break;
case CSharpTypeEnum.UNDEFINED:
if (!String.IsNullOrEmpty(udf.Type))
{
bllService.AppendLine(String.Format("\t\tpublic {0}Model {1}({2})", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
}
break;
}
}
else
{
if (udf.ReturnType == CSharpTypeEnum.ENUM)
{
bllService.AppendLine(String.Format("\t\tpublic {0} {1}({2})", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
}
else if (udf.ReturnType != CSharpTypeEnum.UNDEFINED)
{
bllService.AppendLine(String.Format("\t\tpublic {0} {1}({2})", CSharpTypeHelper.GetCSharpTypeName(udf.ReturnType), udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
}
else
{
bllService.AppendLine(String.Format("\t\tpublic {0}Model {1}({2})", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
}
}
#endregion
bllService.AppendLine("\t\t{");
bllService.AppendLine("\t\t\tusing (Session session = base.OpenSession())");
bllService.AppendLine("\t\t\t{");
#region Footer
if (!CSharpTypeHelper.IsSimpleType(udf.ReturnType))
{
switch (udf.ReturnType)
{
case CSharpTypeEnum.ILIST:
bllService.AppendLine(String.Format("\t\t\t\treturn dal.{0}(session.Current{1});", udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
break;
case CSharpTypeEnum.LIST_PAGE:
bllService.AppendLine(String.Format("\t\t\t\treturn dal.{0}(session.Current, query{1});", udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
break;
case CSharpTypeEnum.ITEM_INFO:
case CSharpTypeEnum.LIST_ITEM:
bllService.AppendLine(String.Format("\t\t\t\treturn dal.{0}(session.Current{1});", udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
break;
case CSharpTypeEnum.UNDEFINED:
if (!String.IsNullOrEmpty(udf.Type))
{
bllService.AppendLine(String.Format("\t\t\t\treturn dal.{0}(session.Current{1});", udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
}
break;
}
}
else
{
//if (udf.ReturnType != CSharpTypeEnum.UNDEFINED)
//{
// bllService.AppendLine(String.Format("\t\t\t\treturn ({0}) dal.{1}(session.Current{2});", CSharpTypeHelper.GetCSharpTypeName(udf.ReturnType), udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
//}
//else
//{
// bllService.AppendLine(String.Format("\t\t\t\treturn ({0}Model) dal.{1}(session.Current{2});", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
//}
bllService.AppendLine(String.Format("\t\t\t\treturn dal.{0}(session.Current{1});", udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
}
bllService.AppendLine("\t\t\t}");
bllService.AppendLine("\t\t}");
#endregion
}
}
private void GenerateBllUpdateUdfService_TG(StringBuilder bllService)
{
foreach (UdfInfo udf in TierModel.UpdateMethodList)
{
if (!udf.BllAccess)
{
continue;
}
bllService.AppendLine();
bllService.AppendLine(String.Format("\t\tpublic void {0}({1})", udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
bllService.AppendLine("\t\t{");
bllService.AppendLine("\t\t\tusing (Session session = base.OpenSession())");
bllService.AppendLine("\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\tdal.{0}(session.Current{1});", udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
bllService.AppendLine("\t\t\t}");
bllService.AppendLine("\t\t}");
}
}
private void GenerateBllDeleteUdfService_TG(StringBuilder bllService)
{
foreach (UdfInfo udf in TierModel.DeleteMethodList)
{
if (!udf.BllAccess)
{
continue;
}
bllService.AppendLine();
bllService.AppendLine(String.Format("\t\tpublic void {0}({1})", udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, true)));
bllService.AppendLine("\t\t{");
bllService.AppendLine("\t\t\tusing (Session session = base.OpenSession())");
bllService.AppendLine("\t\t\t{");
bllService.AppendLine(String.Format("\t\t\t\tdal.{0}(session.Current{1});", udf.Name, ServiceBuilderHelper.GetPropertyCSharpProperties(udf, true)));
bllService.AppendLine("\t\t\t}");
bllService.AppendLine("\t\t}");
}
}
private void GenerateBllServiceFooter_TG(StringBuilder bllService)
{
// closing patterns for class and namespace declarations
bllService.AppendLine("\t}");
bllService.AppendLine("}");
}
private void GenerateBllServiceFacade_TG()
{
if (TierModel.Settings.IsDebug)
{
return;
}
string serviceFacadePath = TierModel.Settings.BllPath + "ServiceFacade.cs";
FileInfo file = new FileInfo(serviceFacadePath);
StreamReader streamReader = file.OpenText();
string serviceFacadeText = streamReader.ReadToEnd();
streamReader.Close();
// check if service is already declared
if (serviceFacadeText.IndexOf(string.Format("public static {0}", ServiceName)) > 0 &&
serviceFacadeText.IndexOf(string.Format("internal static {0}", ServiceName)) > 0)
{
return;
}
#region Add Public Property declaration
int propRegionStart = serviceFacadeText.IndexOf("#region Public Properties - Autogenerated") + 43;
int propRegionEnd = serviceFacadeText.IndexOf("#endregion Public Properties - Autogenerated") - 10;
string propRegion = serviceFacadeText.Substring(propRegionStart, propRegionEnd - propRegionStart);
string[] propRegionArr = propRegion.Split(new char[] { '\n' });
SortedList propList = new SortedList();
int index = 0;
foreach (string str in propRegionArr)
{
index = str.IndexOf("public static");
if (index > 0)
{
propList.Add(StringUtil.GetWord(str, 2), null);
}
}
if (!propList.ContainsKey(ServiceName))
{
propList.Add(ServiceName, null);
}
StringBuilder newPropRegion = new StringBuilder(500);
foreach (string key in propList.Keys)
{
newPropRegion.AppendLine(string.Format("\t\t\t\tpublic static {0} {0}", key));
newPropRegion.AppendLine("\t\t\t\t{");
newPropRegion.AppendLine(string.Format("\t\t\t\t\t\tget {1} return new {0}(null); {2}", key, "{", "}"));
newPropRegion.AppendLine("\t\t\t\t}");
}
#endregion Add Public Property declaration
#region Add Internal Method declaration
int methRegionStart = serviceFacadeText.IndexOf("#region Internal Methods - Autogenerated") + 42;
int methRegionEnd = serviceFacadeText.IndexOf("#endregion Internal Methods - Autogenerated") - 10;
string methRegion = serviceFacadeText.Substring(methRegionStart, methRegionEnd - methRegionStart);
string[] methRegionArr = methRegion.Split(new char[] { '\n' });
SortedList methList = new SortedList();
foreach (string str in methRegionArr)
{
index = str.IndexOf("internal static");
if (index > 0)
{
methList.Add(StringUtil.GetWord(str, 2), null);
}
}
if (!methList.ContainsKey(ServiceName))
{
methList.Add(ServiceName, null);
}
StringBuilder newMethRegion = new StringBuilder(500);
foreach (string key in methList.Keys)
{
newMethRegion.AppendLine(string.Format("\t\t\t\tinternal static {0} Get{0}(Session session)", key));
newMethRegion.AppendLine("\t\t\t\t{");
newMethRegion.AppendLine(string.Format("\t\t\t\t\treturn new {0}(session);", key));
newMethRegion.AppendLine("\t\t\t\t}");
}
#endregion Add Internal Method declaration
#region Merge and save ServiceFacade
string[] serviceFacadeTextArr = serviceFacadeText.Split(new char[] { '\n' });
int propRegionStartIndex = 0;
int propRegionEndIndex = 0;
int methRegionStartIndex = 0;
int methRegionEndIndex = 0;
for (int i = 0; i < serviceFacadeTextArr.Length; i++)
{
if (serviceFacadeTextArr[i].IndexOf("#region Public Properties - Autogenerated") > 0)
{
propRegionStartIndex = i;
}
if (serviceFacadeTextArr[i].IndexOf("#endregion Public Properties - Autogenerated") > 0)
{
propRegionEndIndex = i;
}
if (serviceFacadeTextArr[i].IndexOf("#region Internal Methods - Autogenerated") > 0)
{
methRegionStartIndex = i;
}
if (serviceFacadeTextArr[i].IndexOf("#endregion Internal Methods - Autogenerated") > 0)
{
methRegionEndIndex = i;
}
}
StringBuilder newServiceFacadeText = new StringBuilder(500);
for (int i = 0; i < serviceFacadeTextArr.Length; i++)
{
if (i < propRegionStartIndex ||
(i > propRegionEndIndex && i < methRegionStartIndex) ||
i > methRegionEndIndex)
{
newServiceFacadeText.AppendLine(serviceFacadeTextArr[i].Replace("\r", "\n").Replace("\n", ""));
}
else if (i == propRegionStartIndex)
{
newServiceFacadeText.AppendLine("\t\t\t\t#region Public Properties - Autogenerated");
newServiceFacadeText.Append(newPropRegion.ToString());
newServiceFacadeText.AppendLine("\t\t\t\t#endregion Public Properties - Autogenerated");
}
else if (i == methRegionStartIndex)
{
newServiceFacadeText.AppendLine("\t\t\t\t#region Internal Methods - Autogenerated");
newServiceFacadeText.Append(newMethRegion.ToString());
newServiceFacadeText.AppendLine("\t\t\t\t#endregion Internal Methods - Autogenerated");
}
}
try
{
string newServiceFacadeTextString = newServiceFacadeText.ToString();
ServiceBuilderHelper.SaveToFile(serviceFacadePath, newServiceFacadeTextString);
Console.WriteLine("Updated - ServiceFacade.cs");
}
catch (IOException)
{
Console.WriteLine(string.Format("Can't write to {0}", serviceFacadePath));
}
#endregion Merge and save ServiceFacade
}
#endregion
}
}