示例#1
0
        /// <summary>
        /// Иниализация операции переноса на основании метаописания уровня иерархии
        /// </summary>
        /// <param name="treeLevel">Описатель уровня иерархии</param>
        internal XXTreeNodeDrag(XTreeLevelInfo treeLevel, XMetadataManager manager)
        {
            m_xmlNSManager = treeLevel.NamespaceManager;

            string metaname = treeLevel.Xml.GetAttribute("node-drag", m_sExtensionNamespace);

            if (string.IsNullOrEmpty(metaname))
            {
                metaname = treeLevel.TreeInfo.Xml.GetAttribute("node-drag", m_sExtensionNamespace);
            }

            if (!string.IsNullOrEmpty(metaname))
            {
                string prefix = m_xmlNSManager.LookupPrefix(m_sExtensionNamespace);
                m_xmlNodeDrag = manager.SelectSingleNode(prefix + ":node-drag[@n=\"" + metaname + "\"]") as XmlElement;
            }
            if (m_xmlNodeDrag == null)
            {
                m_bIsEmpty = true;
            }
            else
            {
                m_bIsEmpty = false;
                string sValue = m_xmlNodeDrag.GetAttribute("cache-for");
                if (sValue.Length > 0)
                {
                    m_cacheMode = XTreeMenuCacheModeParser.Parse(sValue);
                }
                else
                {
                    m_cacheMode = XTreeMenuCacheMode.Unknow;
                }
            }
        }
示例#2
0
        /// <summary>
        /// Возвращает описатель меню по метаданным
        /// </summary>
        /// <param name="xmlMenu">xml-узел i:level-menu,i:empty-tree-menu,i:default-level-menu</param>
        /// <returns>Объект меню или null, если метаописание меню не содержит структуры (i:menu)</returns>
        protected XTreeMenuInfo createMenuInfo(XmlElement xmlMenu)
        {
            XTreeMenuInfo       menu  = null;
            XmlNamespaceManager nsMan = m_mdManager.NamespaceManager;
            XTreeMenuCacheMode  cacheMode;
            string sValue = xmlMenu.GetAttribute("cache-for");

            if (sValue.Length > 0)
            {
                cacheMode = XTreeMenuCacheModeParser.Parse(sValue);
            }
            else
            {
                cacheMode = XTreeMenuCacheMode.Unknow;
            }

            xmlMenu = (XmlElement)xmlMenu.SelectSingleNode("i:menu", nsMan);
            if (xmlMenu != null)
            {
                string  sCaption;
                XmlNode node = xmlMenu.SelectSingleNode("i:caption/text() | @t", nsMan);
                if (node != null)
                {
                    sCaption = node.InnerText;
                }
                else
                {
                    sCaption = String.Empty;
                }
                menu = new XTreeMenuInfo(sCaption);

                // заполним коллекции обрабочиков
                foreach (XmlElement xmlNode in xmlMenu.SelectNodes("i:macros-resolver", nsMan))
                {
                    menu.MacroResolvers.Add(new XUserCodeWeb(xmlNode.InnerText, xmlNode.GetAttribute("mode") == "replace"));
                }

                foreach (XmlElement xmlNode in xmlMenu.SelectNodes("i:visibility-handler", nsMan))
                {
                    menu.VisibilityHandlers.Add(new XUserCodeWeb(xmlNode.InnerText, xmlNode.GetAttribute("mode") == "replace"));
                }

                foreach (XmlElement xmlNode in xmlMenu.SelectNodes("i:execution-handler", nsMan))
                {
                    menu.ExecutionHandlers.Add(new XUserCodeWeb(xmlNode.InnerText, xmlNode.GetAttribute("mode") == "replace"));
                }

                buildMenuItems(menu, xmlMenu);
                menu.CacheMode = cacheMode;
            }

            return(menu);
        }
示例#3
0
        public override XmlElement ToXml(XmlDocument doc, XmlNamespaceManager nsManager)
        {
            XmlElement         xmlRoot   = base.ToXml(doc, nsManager);
            XTreeMenuCacheMode cacheMode = CacheMode;

            if (cacheMode == XTreeMenuCacheMode.Unknow)
            {
                cacheMode = XTreeMenuCacheMode.Level;
            }
            xmlRoot.SetAttribute("cache-for", XTreeMenuCacheModeParser.ToString(cacheMode));
            return(xmlRoot);
        }
示例#4
0
        public XXGetNodeDragResponse Execute(XXGetTreeNodeDragRequest oRequest, IXExecutionContext oContext)
        {
            if (null == oRequest)
            {
                throw new ArgumentNullException("oRequest");
            }
            if (null == oContext)
            {
                throw new ArgumentNullException("oContext");
            }

            // Получаем описание иерархии
            XTreeInfo treeInfo = XInterfaceObjectsHolder.Instance.GetTreeInfo(oRequest.MetaName, oContext.Connection);

            // Получаем уровень иерархии
            XTreeLevelInfo treeLevelInfo = treeInfo.GetTreeLevel(oRequest.Path.GetNodeTypes());

            // Описатель операции переноса:
            XXTreeNodeDrag treeNodeDrag = new XXTreeNodeDrag(treeLevelInfo, oContext.Connection.MetadataManager);

            if (treeNodeDrag.IsEmpty)
            {
                // нет меню для уровня иерархии
                return(new XXGetNodeDragResponse(null));
            }
            else
            {
                // Нашли описания операции переноса; склонируем его, т.к. ссылки указывают
                // непосредственно на XML, который держит менеджер метаданных
                XmlElement xmlNodeDragNode = (XmlElement)treeNodeDrag.XmlNodeDrag.CloneNode(true);

                // Проставим признак кешируемости операции переноса для клиента - атрибут
                // cache-for узла i:node-drag; Сам атрибут определяется для операции переноса в
                // метаданных; если не объявлен, считается, что кеширование
                // задано для уровня (т.е. в качестве ключа используется путь):
                XTreeMenuCacheMode cacheMode = treeNodeDrag.CacheMode;
                if (cacheMode == XTreeMenuCacheMode.Unknow)
                {
                    cacheMode = XTreeMenuCacheMode.Level;
                }
                xmlNodeDragNode.SetAttribute("cache-for", XTreeMenuCacheModeParser.ToString(cacheMode));

                return(new XXGetNodeDragResponse(xmlNodeDragNode));
            }
        }