Ejemplo n.º 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;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Создает описание списка при первом обращении.
        /// Параметр делегата CreateCacheValue.
        /// </summary>
        /// <param name="sKey">Ключ в формате {Наименование типа}:{Наименование списка}</param>
        /// <param name="value">XStorageConnection</param>
        /// <returns>экземпляр ListInfoWithAccessCheck</returns>
        private static ListInfoWithAccessCheck createListInfo(string sKey, object value)
        {
            #region Copy-paste кода из XInterfaceObjectsHolder::createListInfo

            XStorageConnection connection      = (XStorageConnection)value;
            XMetadataManager   metadataManager = connection.MetadataManager;

            // Ключ для сохранения в реестре (кеше) XModel в данном случае
            // ДОЛЖЕН БЫТЬ в виде {Наименование типа}:{Наименование списка}
            // Разберем этот ключ - выделим наименование типа и наименование списка
            Debug.Assert(sKey.IndexOf(":") > -1, "Отсутствует символ ':' в ключе");
            int    nIndex    = sKey.IndexOf(":");
            string sTypeName = sKey.Substring(0, nIndex);
            Debug.Assert(sTypeName.Length > 0, "Не задан тип");
            string sName = sKey.Substring(nIndex + 1, sKey.Length - nIndex - 1);

            // Сформируем XPath-запрос и загрузим метаописание списка; при формировании
            // запроса учитваем что метанаименование списка - параметр необязательный
            string sXPath = "ds:type[@n='" + sTypeName + "']/i:objects-list";
            if (sName.Length > 0)
            {
                sXPath = sXPath + "[@n='" + sName + "']";
            }

            XmlElement xmlList = (XmlElement)metadataManager.SelectSingleNode(sXPath);
            if (xmlList == null)
            {
                throw new ArgumentException(
                          "Неизвестное определение списка i:objects-list с метанаименованием " +
                          "'" + sName + "', для типа '" + sTypeName + "' " +
                          "(не найдено в метаданных, XPath='" + sXPath + "')");
            }

            #endregion
            //Создаем описание списка ListInfoWithAccessCheck.
            ListInfoWithAccessCheck listInfo = new ListInfoWithAccessCheck(xmlList, connection.MetadataManager.NamespaceManager, connection.MetadataManager.XModel);
            XPrivilegeSet           privSet  = new XPrivilegeSet();

            //Зачитываем из метаданных необходимые привилегии для доступа к заданному списку и записываем их в контейнер привилегий.
            foreach (XmlElement xmlNode in xmlList.SelectNodes("it-sec:access-requirements/*", connection.MetadataManager.NamespaceManager))
            {
                string            sPrivName = xmlNode.GetAttribute("n");
                ITSystemPrivilege priv      = new ITSystemPrivilege(SystemPrivilegesItem.GetItem(sPrivName));
                privSet.Add(priv);
            }
            listInfo.AccessSecurity.SetRequiredPrivileges(privSet);
            return(listInfo);
        }
Ejemplo n.º 3
0
        private void initialize(XMetadataManager mdManager)
        {
            m_mdManager = mdManager;
            m_treePageInfoDefaultProvider = new XTreePageInfoProviderStd(mdManager);
            m_treePageInfoProviders       = new HybridDictionary();
            IXTreePageInfoProvider provider;
            XTreePageInfo          treePage;
            string sName;

            foreach (XmlElement xmlTreePage in m_mdManager.SelectNodes("i:objects-tree | i:objects-tree-selector"))
            {
                sName = xmlTreePage.GetAttribute("n");
                if (sName.Length == 0)
                {
                    throw new XInvalidMetadataException("Не задано наименование иерархии: " + xmlTreePage.OuterXml.Substring(0, 100));
                }
                provider = getTreePageInfoProvider(xmlTreePage.GetAttribute("provider", NAMESPACE_URI), sName);
                treePage = provider.CreateTreePageInfo(xmlTreePage);
                m_treePages.Add(sName, treePage);
            }
        }
Ejemplo n.º 4
0
 public XDatagramFromXml(XmlElement xmlRoot, XMetadataManager mdManager)
 {
     m_xmodel = mdManager.XModel;
     parseXmlForest(xmlRoot);
     checkReverseProps();
     foreach (XStorageObjectBase xobj in m_objects)
     {
         // с момента вызова normalizeObject коллекция m_objects и словарь m_objectsDictionary не согласованы:
         // normalizeObject добавляет все создаваемые объекты в m_objectsDictionary, но не добавляет в коллекцию m_objects
         ArrayList aNewObject = normalizeObject(xobj);
         // если что-то вернут, то это будет список "новых" обновляемых объектов,
         // т.е. объекты которые надо проапдейтить в результате помещения ссылок на них в линки текущего объекта
         if (aNewObject != null)
         {
             foreach (XStorageObjectToSave xobjDetached in aNewObject)
             {
                 addUpdatedInternal(xobjDetached);
             }
         }
         if (xobj is XStorageObjectToDelete)
         {
             addDeletedInternal((XStorageObjectToDelete)xobj);
         }
         else
         {
             XStorageObjectToSave xobjSave = (XStorageObjectToSave)xobj;
             if (xobjSave.IsToInsert)
             {
                 addInsertedInternal(xobjSave);
             }
             else
             {
                 addUpdatedInternal(xobjSave);
             }
         }
     }
 }
Ejemplo n.º 5
0
        private XmlElement serializeObject(DomainObjectData xobj, XmlDocument xmlDoc, PreloadsNavigator nav)
        {
            XmlElement xmlObject = XMetadataManager.CreateObjectTemplate(xobj.TypeInfo, xmlDoc, false);//m_mdManager.CreateObjectTemplate(xobj.TypeInfo, xmlDoc, false);

            xmlObject.SetAttribute("oid", XmlConvert.ToString(xobj.ObjectID));
            if (xobj.IsNew)
            {
                xmlObject.SetAttribute("new", "1");
            }
            else if (xobj.TS > -1)
            {
                xmlObject.SetAttribute("ts", XmlConvert.ToString(xobj.TS));
            }
            if (nav != null)
            {
                nav.MoveNext();
            }
            foreach (XmlElement xmlProp in xmlObject.ChildNodes)
            {
                if (nav != null && nav.HasProp(xmlProp.LocalName))
                {
                    // развернуть объекты в свойстве
                    serializePropertyInternal(xobj, xmlProp, nav);
                }
                else
                {
                    // в свойстве только заглушки
                    serializePropertyInternal(xobj, xmlProp, null);
                }
            }
            if (nav != null)
            {
                nav.MoveBack();
            }
            return(xmlObject);
        }
Ejemplo n.º 6
0
 public XTreeMenuHandlerFactoryStd(XMetadataManager mdManager)
 {
     m_mdManager = mdManager;
 }
Ejemplo n.º 7
0
 public DomainObjectDataXmlFormatter(XMetadataManager mdManager)
 {
     m_mdManager = mdManager;
 }
 public TreePageWithAccessCheckInfoProvider(XMetadataManager mdManager)
     : base(mdManager)
 {
 }
Ejemplo n.º 9
0
 public static void Initialize(XMetadataManager mdManager)
 {
     m_Instance = new XTreeController();
     m_Instance.initialize(mdManager);
 }