private static void ParseApplicationXMLModel(ApplicationXMLModel anApplicationModel)
 {
     foreach (MenuItemModel menuItem in anApplicationModel.MenuItems.Children)
     {
         MenuItemIterator(menuItem, anApplicationModel);
     }
 }
Example #2
0
        /// <summary>
        /// Load all UXActions from the UXAction folder
        /// </summary>
        /// <param name="aPath"></param>
        /// <param name="anApplications"></param>
        private static void LoadUXActions(string aPath, Dictionary<string, ApplicationXMLModel> anApplications)
        {
            try
            {
                string[] moduleDirectoryEntries = Directory.GetDirectories(aPath);

                foreach (string subDirectoryName in moduleDirectoryEntries)
                {
                    ApplicationXMLModel app;
                    string appName;
                    bool isFrontend = subDirectoryName.Contains("_Frontend");

                    if (isFrontend)
                    {
                        DirectoryInfo dirInfo = new DirectoryInfo(subDirectoryName);

                        appName = dirInfo.Name.Split('_').First();

                        if (anApplications.ContainsKey(appName))
                        {
                            app = anApplications[appName];
                        }
                        else
                        {
                            app = new ApplicationXMLModel();
                            app.Name = appName;
                            anApplications.Add(appName, app);
                        }

                        string[] uXActionFileNames = Directory.GetFiles(subDirectoryName + "\\UXAction");
                        foreach (string uXActionPath in uXActionFileNames)
                        {

                            try
                            {
                                XmlDocument document = LoadXMLDocument(uXActionPath);
                                if (document != null)
                                {
                                    string key = document.SelectSingleNode("/UXAction/Id").InnerText;
                                    app.UXActionXMLDocuments.Documents.Add(key, document);
                                }
                            }
                            catch (Exception ex)
                            {
                                //If file size is 0 then ignore the error and continue
                                if (new FileInfo(uXActionPath).Length > 0)
                                {
                                    throw ex;
                                }
                            }
                        }
                    }
                }
            }

            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Method used to read the metamenu file generated from this application.
        /// </summary>
        /// <param name="aPath">The path to were the file is that we want to read from</param>
        /// <param name="anApplications">A Dictionary that will be populated with XML data</param>
        private static void LoadMenus(string aPath, Dictionary <string, ApplicationXMLModel> anApplications)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(aPath);
                //Read the applications. e.g. Warehouse, Transportation
                XmlNode applicationsNode = doc.SelectSingleNode("/Applications");

                foreach (XmlNode applicationNode in applicationsNode)
                {
                    ApplicationXMLModel application = new ApplicationXMLModel();
                    //Give the RootNode a name e.g. Warehouse
                    XmlNode applicationNameNode = applicationNode.SelectSingleNode("Name");
                    ThrowIfNull(applicationNameNode,
                                "applicationNameNode was null in LoadMenus method");
                    application.Name = applicationNameNode.InnerText;

                    XmlNode topMenuItemNode = applicationNode.SelectSingleNode("Menu/MenuItem");
                    ThrowIfNull(applicationNameNode,
                                "topMenuItemNode was null in LoadMenus method");

                    MenuItemModel topMenuItemModel = new MenuItemModel();

                    XmlNode captionTopMenuItemNode = topMenuItemNode.SelectSingleNode("Caption");
                    ThrowIfNull(captionTopMenuItemNode,
                                "captionTopMenuItemNode was null in LoadMenus method");
                    topMenuItemModel.Caption = captionTopMenuItemNode.InnerText;

                    XmlNode identityTopMenuItemNode = topMenuItemNode.SelectSingleNode("Id");
                    ThrowIfNull(identityTopMenuItemNode,
                                "identityTopMenuItemNode was null in LoadMenus method");
                    topMenuItemModel.Identity = identityTopMenuItemNode.InnerText;

                    topMenuItemModel.Actions = null;

                    XmlNode topMenuChildrenNode = topMenuItemNode.SelectSingleNode("Children");
                    ThrowIfNull(topMenuChildrenNode,
                                "topMenuChildrenNode was null in LoadMenus method");

                    foreach (XmlNode menuItemChildren in topMenuChildrenNode)
                    {
                        MenuItemModel menuItemModel = LoadMenu(menuItemChildren);
                        ThrowIfNull(menuItemModel, "A child node in topMenu was null in LoadMenus method");

                        topMenuItemModel.Children.Add(menuItemModel);
                    }
                    application.MenuItems = topMenuItemModel;
                    anApplications.Add(application.Name, application);
                }
            }
            catch (Exception ex)
            {
                if (ex is FileNotFoundException)
                {
                    MessageBox.Show("MetaMenu.XML not found!", "", MessageBoxButtons.OK);
                }
            }
        }
Example #4
0
        private static MenuItemModel LoadMetaData(string aPath)
        {
            //LoadDialogAndUXActionMetaData returns null?
            ApplicationXMLModel application = LoadDialogAndUXActionMetaData(aPath);
            LoadMenus(aPath, _applications);

            return null;
        }
Example #5
0
        /// <summary>
        /// Init the variables and call the Load methods for Dialogs and UXActions
        /// </summary>
        /// <param name="aPath"></param>
        /// <returns></returns>
        private static ApplicationXMLModel LoadDialogAndUXActionMetaData(string aPath)
        {
            ApplicationXMLModel metaDataModel = new ApplicationXMLModel();
            metaDataModel.DialogXmlDocuments = new DialogXMLModel();
            metaDataModel.UXActionXMLDocuments = new UXActionXMLModel();

            LoadDialogs(aPath, _applications);
            LoadUXActions(aPath, _applications);

            return null;
        }
Example #6
0
        /// <summary>
        /// Method that loads the main MenuItem then all child MenuItems
        /// </summary>
        /// <param name="aPath"></param>
        /// <param name="anApplications"></param>
        private static void LoadMenus(string aPath, Dictionary<string, ApplicationXMLModel> anApplications)
        {
            try
            {
                string[] moduleDirectoryEntries = Directory.GetDirectories(aPath);

                foreach (string subDirectoryName in moduleDirectoryEntries)
                {
                    ApplicationXMLModel app;
                    //Backend folders are not used
                    string appName;
                    bool isFrontend = subDirectoryName.Contains("_Frontend");

                    if (isFrontend)
                    {
                        DirectoryInfo dirInfo = new DirectoryInfo(subDirectoryName);

                        appName = dirInfo.Name.Split('_').First();

                        if (anApplications.ContainsKey(appName))
                        {
                            app = anApplications[appName];
                        }
                        else
                        {
                            app = new ApplicationXMLModel();
                            app.Name = appName;
                            anApplications.Add(appName, app);
                        }

                        string[] menuFileNames = Directory.GetFiles(subDirectoryName + "\\Menu");
                        foreach (string menuPath in menuFileNames)
                        {
                            XmlDocument doc = new XmlDocument();
                            doc.Load(menuPath);
                            XmlNode node = doc.SelectSingleNode("/Menu/TopMenuItem/MenuItem");
                            //For each child MenuItem add a MenuItem under the tag Children for this Menuitem
                            MenuItemModel menuItemModel = LoadMenu(node, _applications[appName]);
                            if (menuItemModel != null)
                            {
                                app.MenuItems = menuItemModel;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 private static void MenuItemIterator(MenuItemModel aMenuItem, ApplicationXMLModel anApplicationModel)
 {
     if (MenuItemHasChildren(aMenuItem))
     {
         foreach (MenuItemModel menuItemChild in aMenuItem.Children)
         {
             MenuItemIterator(menuItemChild, anApplicationModel);
         }
     }
     else
     {
         ParseUXAction(aMenuItem, anApplicationModel);
     }
 }
        private static void ParseUXAction(MenuItemModel aMenuItem, ApplicationXMLModel anApplicationModel)
        {
            string      actionIdentity = aMenuItem.Actions.FirstOrDefault().Identity;
            XmlDocument uXActionDoc    = anApplicationModel.UXActionXMLDocuments.Documents[actionIdentity];
            string      dialogId;
            XmlNode     dialogIdNode = uXActionDoc.SelectSingleNode("/UXAction/Dialog/Dialog/Id");

            if (dialogIdNode != null)
            {
                dialogId = dialogIdNode.InnerText;
                XmlDocument dialogDoc = anApplicationModel.DialogXmlDocuments.Documents[dialogId];
                ParseDialog(aMenuItem, anApplicationModel, dialogDoc);
            }
        }
        private static MenuItemModel GetUXActionsFromNode(XmlNode aViewActionNode, ApplicationXMLModel anApplicationModel)
        {
            string        errorMessageString = "{0} was null in function ActionParser.GetUXActionsFromNode";
            MenuItemModel menuItem           = new MenuItemModel();

            UXAction uXAction = new UXAction();

            XmlNode actionIdentityNode = aViewActionNode.SelectSingleNode("Action/UXAction/Id");

            ThrowIfNull(actionIdentityNode, string.Format(errorMessageString, "actionIdentityNode"));
            uXAction.Identity = actionIdentityNode.InnerText;

            XmlNode uXActionNode = anApplicationModel.UXActionXMLDocuments.Documents[uXAction.Identity];

            ThrowIfNull(uXActionNode, string.Format(errorMessageString, "uXActionNode"));

            XmlNode uXActionCaptionNode = uXActionNode.SelectSingleNode("/UXAction/Caption");

            ThrowIfNull(uXActionCaptionNode, string.Format(errorMessageString, "uXActionCaptionNode"));

            menuItem.Caption = uXActionCaptionNode.InnerText;

            XmlNode viewActionTypeNode = aViewActionNode.SelectSingleNode("Type");

            if (viewActionTypeNode != null)
            {
                if (viewActionTypeNode.InnerText == "JumpTo")
                {
                    AddShowActionToCorrectStartAction(aViewActionNode, anApplicationModel);
                    return(null);
                }
                else if (viewActionTypeNode.InnerText == "Drilldown")
                {
                    menuItem.Caption += " (Drilldown)";
                    AddDrilldownsActionChildren(uXActionNode, menuItem, anApplicationModel);
                }
            }

            XmlNode uxActionDialogNode = aViewActionNode.SelectSingleNode("/UXAction/Dialog/Dialog/Id");

            if (uxActionDialogNode != null)
            {
                menuItem.Identity = uxActionDialogNode.InnerText;
            }

            menuItem.Actions = new List <UXAction>();
            menuItem.Actions.Add(uXAction);

            return(menuItem);
        }
 private static void AddShowActionToCorrectStartAction(XmlNode aViewNode, ApplicationXMLModel anApplicationModel)
 {
     try
     {
         //find dialog in applicatinXMLModel using viewnodes UXAction/ID
         string startActionIdentity = GetStartActionFromUXAction(aViewNode, anApplicationModel);
         //dialog id is also start action id, iterate applicationmodels menuItems and find
         //menuitem with the Start action id, add show action id to menuitems actions
         MoveShowActionToStartAction(startActionIdentity, aViewNode, anApplicationModel);
     }
     catch (Exception)
     {
         throw;
     }
 }
Example #11
0
        /// <summary>
        /// Method that builds XML.
        /// An application e.g. Warehouse has a menu called Warehouse
        /// with children called Inbound, Outbound, etc
        /// whom each have children e.g Inbound Overview
        /// </summary>
        /// <param name="anApplicationXmlModel"></param>
        /// <param name="anApplicationElement"></param>
        /// <returns></returns>
        private static XmlElement CreateApplicationElem(ApplicationXMLModel anApplicationXmlModel, XmlElement anApplicationElement)
        {
            XmlDocument doc = anApplicationElement.OwnerDocument;

            XmlElement applicationElem = doc.CreateElement("Application");

            XmlElement applicationNameElement = doc.CreateElement("Name");

            applicationNameElement.InnerText = anApplicationXmlModel.Name;
            applicationElem.AppendChild(applicationNameElement);

            XmlElement menuElement = doc.CreateElement("Menu");

            applicationElem.AppendChild(menuElement);

            XmlElement topMenuItemElement = doc.CreateElement("MenuItem");

            menuElement.AppendChild(topMenuItemElement);

            XmlElement captionElement = doc.CreateElement("Caption");

            captionElement.InnerText = anApplicationXmlModel.MenuItems.Caption;
            topMenuItemElement.AppendChild(captionElement);

            XmlElement idElement = doc.CreateElement("Id");

            idElement.InnerText = anApplicationXmlModel.MenuItems.Identity;
            topMenuItemElement.AppendChild(idElement);

            XmlElement actionsElement = doc.CreateElement("Actions");

            topMenuItemElement.AppendChild(actionsElement);

            XmlElement childrenElement = doc.CreateElement("Children");

            topMenuItemElement.AppendChild(childrenElement);

            foreach (MenuItemModel item in anApplicationXmlModel.MenuItems.Children)
            {
                XmlElement childElement = LoadChildElement(childrenElement, item);
                if (childElement != null)
                {
                    childrenElement.AppendChild(childElement);
                }
            }
            return(applicationElem);
        }
        private static void ProcessActions(MenuItemModel menuitem, ApplicationXMLModel anApplication)
        {
            try
            {
                if (menuitem.Actions == null) return;
                foreach (UXAction action in menuitem.Actions)
                {
                    string newIdentity;
                    if (action == null) continue;
                    var uxActionNode = anApplication.UXActionXMLDocuments.Documents[action.Identity];
                    if (uxActionNode == null) continue;

                    var uxActionCaptionNode = uxActionNode.SelectSingleNode("/UXAction/Caption");
                    var dialogIdentityNode = uxActionNode.SelectSingleNode("/UXAction/Dialog/Dialog/Id");
                    if (dialogIdentityNode == null) continue;

                    var dialogIdentityDoc = anApplication.DialogXmlDocuments.Documents[dialogIdentityNode.InnerText];
                    if (dialogIdentityNode == null) continue;

                    newIdentity = dialogIdentityNode.InnerText;
                    var uxCaption = uxActionCaptionNode.InnerText;
                    var dialogTitleNode = dialogIdentityDoc.SelectSingleNode("/Dialog/Title");
                    if (dialogTitleNode == null) continue;

                    var dialogTitle = dialogTitleNode.InnerText;
                    if (uxCaption.Equals(dialogTitle)) continue;

                    var uxActionNameNode = uxActionNode.SelectSingleNode("/UXAction/Name");
                    var uxName = uxActionNameNode.InnerText;
                    var dialogNameNode = dialogIdentityDoc.SelectSingleNode("/Dialog/Name");
                    var dialogName = dialogNameNode.InnerText;

                    uxName = uxName.ToUpper();
                    dialogName = dialogName.ToUpper();

                    if (uxName.Equals(dialogName)) continue;

                    if (uxName.StartsWith("SHOW") && !dialogName.StartsWith("SHOW")) continue;

                    action.Identity = newIdentity;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
 private static void ProcessMenuItem(List<MenuItemModel> aMenuItems, ApplicationXMLModel anApplication)
 {
     try
     {
         foreach (MenuItemModel menuItem in aMenuItems)
         {
             if (menuItem != null)
             {
                 ProcessActions(menuItem, anApplication);
                 ProcessMenuItem(menuItem.Children, anApplication);
             }
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
        private static string GetStartActionFromUXAction(XmlNode aViewNode, ApplicationXMLModel anApplicationModel)
        {
            XmlNode uXActionIdentityNode = aViewNode.SelectSingleNode("Action/UXAction/Id");

            if (uXActionIdentityNode == null)
            {
                return(null);
            }
            string uXActionIdentity = uXActionIdentityNode.InnerText;

            XmlDocument uXActionDoc = anApplicationModel.UXActionXMLDocuments.Documents[uXActionIdentity];

            XmlNode dialogIdentityNode = uXActionDoc.SelectSingleNode("/UXAction/Dialog/Dialog/Id");

            if (dialogIdentityNode == null)
            {
                return(null);
            }
            return(dialogIdentityNode.InnerText);
        }
        private static void ParseDialog(MenuItemModel aMenuItem, ApplicationXMLModel anApplicationModel, XmlDocument dialogDoc)
        {
            string errorMessageString = "{0} was null in function ActionParser.ParseDialog";

            //läs in alla actions från dialogDoc och lägg dem i aMenuItem
            try
            {
                XmlNode viewActionsNode = dialogDoc.SelectSingleNode("/Dialog/RootViewNode/ViewNode/ViewActions");
                ThrowIfNull(viewActionsNode, string.Format(errorMessageString, "viewActionsNode"));
                List <MenuItemModel> mainActions = new List <MenuItemModel>();

                foreach (XmlNode viewActionNode in viewActionsNode.ChildNodes)
                {
                    MenuItemModel menuItem = GetUXActionsFromNode(viewActionNode, anApplicationModel);
                    if (menuItem != null)
                    {
                        XmlNode sequenceNode = viewActionNode.SelectSingleNode("Sequence");
                        menuItem.Sequence = int.Parse(sequenceNode.InnerText);
                        mainActions.Add(menuItem);
                    }
                }

                mainActions.Sort();
                aMenuItem.Children.AddRange(mainActions);

                XmlNode viewNodeChildrenNode = dialogDoc.SelectSingleNode("/Dialog/RootViewNode/ViewNode/Children");
                ThrowIfNull(viewNodeChildrenNode, string.Format("viewNodeChildrenNode"));

                foreach (XmlNode childViewNode in viewNodeChildrenNode)
                {
                    AddActionsToMenuItem(aMenuItem, childViewNode, anApplicationModel);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private static void AddActionsToMenuItem(MenuItemModel aMenuItem, XmlNode aViewNode, ApplicationXMLModel anApplicationModel)
        {
            //Add current viewNode actions to aMenuItem.Children
            XmlNode viewActionsNode        = aViewNode.SelectSingleNode("ViewActions");
            List <MenuItemModel> childList = new List <MenuItemModel>();

            if (viewActionsNode != null)
            {
                foreach (XmlNode viewActionNode in viewActionsNode.ChildNodes)
                {
                    MenuItemModel menuItem = GetUXActionsFromNode(viewActionNode, anApplicationModel);

                    XmlNode sequenceNode = viewActionNode.SelectSingleNode("Sequence");
                    if (sequenceNode != null && menuItem != null)
                    {
                        menuItem.Sequence = int.Parse(sequenceNode.InnerText);
                        childList.Add(menuItem);
                    }
                }
                childList.Sort();
                aMenuItem.Children.AddRange(childList);
            }
            //check if aViewNode has any children, call self recursively
            XmlNode children = aViewNode.SelectSingleNode("Children");

            if (children != null)
            {
                foreach (XmlNode childViewNode in children)
                {
                    AddActionsToMenuItem(aMenuItem, childViewNode, anApplicationModel);
                }
            }
        }
        private static void AddDrilldownsActionChildren(XmlNode uXActionNode, MenuItemModel aMenuItem, ApplicationXMLModel anApplicationModel)
        {
            XmlNode dialogIdentityNode = uXActionNode.SelectSingleNode("/UXAction/Dialog/Dialog/Id");

            if (dialogIdentityNode == null)
            {
                return;
            }
            ParseDialog(aMenuItem, anApplicationModel, anApplicationModel.DialogXmlDocuments.Documents[dialogIdentityNode.InnerText]);
        }
        private static void MoveShowActionToStartAction(string aStartActionIdentity, XmlNode aViewNode, ApplicationXMLModel anApplicationModel)
        {
            XmlNode uXActionIdentityNode = aViewNode.SelectSingleNode("Action/UXAction/Id");

            if (uXActionIdentityNode == null)
            {
                return;
            }

            string uXActionIdentity = uXActionIdentityNode.InnerText;

            MenuItemModel menuItemResult = FindStartItem(aStartActionIdentity, anApplicationModel.MenuItems);

            if (menuItemResult == null)
            {
                return;
            }

            if (ActionsContainsIdentity(menuItemResult.Actions, uXActionIdentity))
            {
                return;
            }

            menuItemResult.Actions.Add(new UXAction {
                Identity = uXActionIdentity, Parent = aStartActionIdentity
            });
        }
Example #19
0
        /// <summary>
        /// Method that searches for children of a MenuItem
        /// and connects that child to the parent MenuItem
        /// </summary>
        /// <param name="aNode">A menuItem</param>
        /// <param name="depth">0 = children, 1 = grandchildren, etc</param>
        /// <returns>A child MenuItem</returns>
        private static MenuItemModel LoadMenu(XmlNode aNode, ApplicationXMLModel anApplication, int depth = 0)
        {
            try
            {
                MenuItemModel menu = new MenuItemModel();
                menu.Identity = aNode.SelectSingleNode("Id").InnerText;
                menu.Caption = aNode.SelectSingleNode("Caption").InnerText;
                if (IdentityExceptionHelper.Contains(menu.Caption)) return null;

                XmlNode sequenceNode = aNode.SelectSingleNode("Sequence");
                if (sequenceNode != null) menu.Sequence = int.Parse(sequenceNode.InnerText);

                UXAction action = new UXAction();
                XmlNode uXActionIdentityNode = aNode.SelectSingleNode("Action/UXAction/Id");
                if (uXActionIdentityNode != null)
                {
                    action.Identity = uXActionIdentityNode.InnerText;
                    //load ux-file
                    XmlDocument uXDoc = anApplication.UXActionXMLDocuments.Documents[action.Identity];
                    XmlNode uXDialogNode = uXDoc.SelectSingleNode("/UXAction/Dialog/Dialog/Id");
                    //insert check if has dialog and if dialog is a Start-operation
                    if (uXDialogNode != null)
                    {
                        XmlDocument dialogDoc = anApplication.DialogXmlDocuments.Documents[uXDialogNode.InnerText];
                        XmlNode dialogIdNode = dialogDoc.SelectSingleNode("/Dialog/Id");
                        if (dialogIdNode != null)
                        {
                                //if it is a start-action, swap action.Identity for the dialog identity
                                action.Parent = dialogIdNode.InnerText;
                        }
                    }
                }

                if (!string.IsNullOrEmpty(action.Identity))
                {
                    if (menu.Actions == null)
                    {
                        menu.Actions = new List<UXAction>();
                    }
                    menu.Actions.Add(action);
                }

                XmlNode children = aNode.SelectSingleNode("Children");
                if (children != null)
                {
                    foreach (XmlNode child in children)
                    {
                        //Recursive call to this method in case there are grandchildren and beyond.
                        MenuItemModel childMenuItem = LoadMenu(child, anApplication, ++depth);
                        if (childMenuItem != null && menu.Children == null)
                        {
                            menu.Children = new List<MenuItemModel>();
                        }
                        if (childMenuItem != null)
                        {
                            menu.Children.Add(childMenuItem);
                        }
                    }
                }
                return menu;
            }
            catch (Exception)
            {
                return null;
            }
        }