/// <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; } } }
/// <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); }
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); } }
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); } } } }
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); }
public XTreeMenuHandlerFactoryStd(XMetadataManager mdManager) { m_mdManager = mdManager; }
public DomainObjectDataXmlFormatter(XMetadataManager mdManager) { m_mdManager = mdManager; }
public TreePageWithAccessCheckInfoProvider(XMetadataManager mdManager) : base(mdManager) { }
public static void Initialize(XMetadataManager mdManager) { m_Instance = new XTreeController(); m_Instance.initialize(mdManager); }