Click here to Skip to main content
15,893,190 members
Articles / Programming Languages / C#

Test Driving NHibernate 3.0, LINQ and the Entity Framework CTP 5 with the Abstract Factory Design Pattern

Rate me:
Please Sign up or sign in to vote.
4.89/5 (18 votes)
2 Apr 2011CPOL12 min read 229.4K   1.7K   53  
Developing an N-Tier application with C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;

namespace ORMWebApplication.Helpers
{

    public class MenuHelper
    {
        public TopLevelMenu topLevelMenuItems;
        public SubLevelMenu subLevelMenuItems;
        public List<TopLevelMenu> topLevelMenu;
        public List<SubLevelMenu> subLevelMenu;


        public MenuHelper()
        {
            ConstructMenu();
        }

        /// <summary>
        /// Build Menu
        /// </summary>
        /// <param name="selectedMenuItem"></param>
        /// <param name="selectedSubMenuItem"></param>
        /// <returns></returns>
        public string BuildMenu(string selectedMenuItem, string selectedSubMenuItem)
        {


            int selectedMenuItemID = 0;
            int selectedSubMenuItemID = 0;
     
            var subMenu = from subMenuItems in subLevelMenu
                          where subMenuItems.menuController == selectedMenuItem
                          && subMenuItems.menuText == selectedSubMenuItem
                          select subMenuItems;

            foreach (var m in subMenu)
            {
                selectedMenuItemID = m.menuID;
                selectedSubMenuItemID = m.subMenuID;

            }

            return BuildMenu(selectedMenuItemID, selectedSubMenuItemID);

        }

        /// <summary>
        /// Consruct
        /// </summary>
        private void ConstructMenu()
        {
            topLevelMenu = new List<TopLevelMenu>();
            subLevelMenu = new List<SubLevelMenu>();

            topLevelMenuItems = new TopLevelMenu();
            topLevelMenuItems.menuID = 1;
            topLevelMenuItems.menuText = "Customers";
            topLevelMenuItems.menuAction = "Index";
            topLevelMenuItems.menuController = "Customer";
            topLevelMenu.Add(topLevelMenuItems);

            subLevelMenuItems = new SubLevelMenu();
            subLevelMenuItems.menuID = 1;
            subLevelMenuItems.subMenuID = 1;
            subLevelMenuItems.menuText = "Customer Entry";
            subLevelMenuItems.menuAction = "Index";
            subLevelMenuItems.menuController = "Customer";
            subLevelMenu.Add(subLevelMenuItems);

            subLevelMenuItems = new SubLevelMenu();
            subLevelMenuItems.menuID = 1;
            subLevelMenuItems.subMenuID = 2;
            subLevelMenuItems.menuText = "Customer Inquiry";
            subLevelMenuItems.menuAction = "CustomerInquiry";
            subLevelMenuItems.menuController = "Customer";
            subLevelMenu.Add(subLevelMenuItems);

            subLevelMenuItems = new SubLevelMenu();
            subLevelMenuItems.menuID = 1;
            subLevelMenuItems.subMenuID = 3;
            subLevelMenuItems.menuText = "Customer Audit";
            subLevelMenuItems.menuAction = "CustomerAudit";
            subLevelMenuItems.menuController = "Customer";
            subLevelMenu.Add(subLevelMenuItems);

            subLevelMenuItems = new SubLevelMenu();
            subLevelMenuItems.menuID = 1;
            subLevelMenuItems.subMenuID = 4;
            subLevelMenuItems.menuText = "Customer Reporting";
            subLevelMenuItems.menuAction = "CustomerReporting";
            subLevelMenuItems.menuController = "Customer";
            subLevelMenu.Add(subLevelMenuItems);

            topLevelMenuItems = new TopLevelMenu();
            topLevelMenuItems.menuID = 2;
            topLevelMenuItems.menuText = "Products";
            topLevelMenuItems.menuAction = "Index";
            topLevelMenuItems.menuController = "Products";
            topLevelMenu.Add(topLevelMenuItems);

            subLevelMenuItems = new SubLevelMenu();
            subLevelMenuItems.menuID = 2;
            subLevelMenuItems.subMenuID = 1;
            subLevelMenuItems.menuText = "Create a product";
            subLevelMenuItems.menuAction = "ProductEntry";
            subLevelMenuItems.menuController = "Products";
            subLevelMenu.Add(subLevelMenuItems);

            subLevelMenuItems = new SubLevelMenu();
            subLevelMenuItems.menuID = 2;
            subLevelMenuItems.subMenuID = 2;
            subLevelMenuItems.menuText = "Product Inquiry";
            subLevelMenuItems.menuAction = "ProductInquiry";
            subLevelMenuItems.menuController = "Products";
            subLevelMenu.Add(subLevelMenuItems);

            topLevelMenuItems = new TopLevelMenu();
            topLevelMenuItems.menuID = 3;
            topLevelMenuItems.menuText = "Orders";
            topLevelMenuItems.menuAction = "Index";
            topLevelMenuItems.menuController = "Orders";
            topLevelMenu.Add(topLevelMenuItems);

            subLevelMenuItems = new SubLevelMenu();
            subLevelMenuItems.menuID = 3;
            subLevelMenuItems.subMenuID = 1;
            subLevelMenuItems.menuText = "Create a order";
            subLevelMenuItems.menuAction = "OrderEntry";
            subLevelMenuItems.menuController = "Orders";
            subLevelMenu.Add(subLevelMenuItems);

            subLevelMenuItems = new SubLevelMenu();
            subLevelMenuItems.menuID = 3;
            subLevelMenuItems.subMenuID = 2;
            subLevelMenuItems.menuText = "Order Inquiry";
            subLevelMenuItems.menuAction = "OrderInquiry";
            subLevelMenuItems.menuController = "Orders";
            subLevelMenu.Add(subLevelMenuItems);

        }

        /// <summary>
        /// Build Menu
        /// </summary>
        /// <param name="selectedMenuItem"></param>
        /// <param name="selectedSubMenuItem"></param>
        /// <returns></returns>
        public string BuildMenu(int selectedMenuItem, int selectedSubMenuItem)
        {          
            string htmlTable = BuildHTMLTable(selectedMenuItem, selectedSubMenuItem);
            return htmlTable;
        }

        /// <summary>
        /// Build HTML Table
        /// </summary>
        /// <param name="selectedMenuItem"></param>
        /// <param name="selectedSubMenuItem"></param>
        /// <returns></returns>
        private string BuildHTMLTable(int selectedMenuItem, int selectedSubMenuItem)
        {
            int counter = 0;

            StringBuilder menuBuilder = new StringBuilder();
            menuBuilder.Append("<table id='MyMainMenuTable1' cellpadding=0 cellspacine=0 border=0; ><tr><td>");
            menuBuilder.Append("<table id='MyMainMenuTable2' cellpadding=0 cellspacing=0><tr>");

            var mainMenu = from topMenu in topLevelMenu select topMenu;
            counter = 0;

            foreach (var m in mainMenu)
            {
                counter++;
                if (selectedMenuItem != m.menuID)
                {
                    menuBuilder.Append("<td style='width:100px; text-align:center; padding: 5px 5px 5px 5px; background-color:White'>");
                    menuBuilder.Append("<a href='/" + m.menuController + "/" + m.menuAction + "'/>");
                    menuBuilder.Append(m.menuText);
                    menuBuilder.Append("</td>");
                }
                else
                {
                    menuBuilder.Append("<td style='width:100px; text-align:center; background-color:#D3DCE5'>");
                    menuBuilder.Append(m.menuText);
                    menuBuilder.Append("</td>");

                }
                if (counter < mainMenu.Count())
                {
                    menuBuilder.Append("<td>&nbsp;</td>");
                }
            }

            menuBuilder.Append("</tr></table>");
            menuBuilder.Append("</td></tr></table>");

            var subMenu = from subMenuItems in subLevelMenu
                          where subMenuItems.menuID == selectedMenuItem
                          select subMenuItems;

            menuBuilder.Append("<table id='menuTable' style='width:100%; border=0; border-color:#D3DCE5;'><tr><td>");
            menuBuilder.Append("<table id='SubMenuTable' cellpadding=0 cellspacing=0><tr>");
            counter = 0;

            foreach (var m in subMenu)
            {
                counter++;
                if (selectedSubMenuItem == m.subMenuID)
                {
                    menuBuilder.Append("<td style='background-color:WhiteSmoke'>");
                    menuBuilder.Append(m.menuText);
                    menuBuilder.Append("</td>");
                }
                else
                {
                    menuBuilder.Append("<td>");
                    menuBuilder.Append("<a href='/" + m.menuController + "/" + m.menuAction + "'/>");
                    menuBuilder.Append(m.menuText);
                    menuBuilder.Append("</a>");
                    menuBuilder.Append("</td>");
                }

                if (counter < subMenu.Count())
                    menuBuilder.Append("<td>|</td>");
            }
            menuBuilder.Append("</tr></table>");
            menuBuilder.Append("</td></tr></table>");

            string htmlTable = menuBuilder.ToString();
            return htmlTable;
        }


    }

    public class TopLevelMenu
    {
        public int menuID { get; set; }
        public string menuText { get; set; }
        public string menuController { get; set; }
        public string menuAction { get; set; }
    }

    public class SubLevelMenu
    {
        public int menuID { get; set; }
        public int subMenuID { get; set; }
        public string menuText { get; set; }
        public string menuController { get; set; }
        public string menuAction { get; set; }

    }


}

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 Joey Software Solutions
United States United States
Mark Caplin has specialized in Information Technology solutions for the past 30 years. Specializing in full life-cycle development projects for both enterprise-wide systems and Internet/Intranet based solutions.

For the past fifteen years, Mark has specialized in the Microsoft .NET framework using C# as his tool of choice. For the past four years Mark has been implementing Single Page Applications using the Angular platform.

When not coding, Mark enjoys playing tennis, listening to U2 music, watching Miami Dolphins football and watching movies in Blu-Ray technology.

In between all this, his wife of over 25 years, feeds him well with some great home cooked meals.

You can contact Mark at mark.caplin@gmail.com

...

Comments and Discussions