Click here to Skip to main content
15,885,278 members
Articles / Programming Languages / XML

netTierGenerator

Rate me:
Please Sign up or sign in to vote.
4.81/5 (20 votes)
30 Nov 2008CPOL14 min read 67.4K   2.8K   108  
A 3-tier application framework and code generation tool - the way for rapid and effective development.
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
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions