// Заполнить типы элементов коллекции по их именам (по fscollectiontypes заполнить fcollectiontypes) public void FillCollectionTypes() { if (fcollectiontypes.Count != 0) { fcollectiontypes.Clear(); } for (int i = 0; i < fcollectiontypes.Count; i++) { fcollectiontypes.Add(typeSet.GetTypeByName(Convert.ToString(i))); } }
// Получить тип по имени public MetaType GetTypeByName(string n) { if (String.IsNullOrEmpty(n)) { return(null); } if (!mapname.TryGetValue(n, out MetaType val)) { if ((staticTypes != null) && (staticTypes != this)) { return(staticTypes.GetTypeByName(n)); } else { return(null); } } else { return(val); } }
public static void StaticTypesLoad(Stream str) { int number, i; uint j; MetaType mtype; MetaType vtype = null; MetaProperty prop = null; MetaValue value; Tree tr; Tree tt; Tree t; Guid uid = new Guid(); string sn, sen; MetaObject metaobj; if (staticTypes != null) { staticTypes = null; } ShowMessage("Начало загрузки статических типов"); Form1.log.Info("Начало загрузки статических типов"); staticTypes = new MetaTypeSet(); tr = Tree.Parse_1Cstream(str, "", "static types"); string tr_static_types = ""; tr.OutText(ref tr_static_types); tt = tr.Get_First().Get_First(); // Параметры классов number = Convert.ToInt32(tt.Get_Value()); for (i = 0; i < number; ++i) { tt = tt.Get_Next(); new ClassParameter(tt); } // Классы tt = tt.Get_Next(); number = Convert.ToInt32(tt.Get_Value()); for (i = 0; i < number; ++i) { tt = tt.Get_Next(); new Class(tt); } // Типы tt = tt.Get_Next(); number = Convert.ToInt32(tt.Get_Value()); for (i = 0; i < number; ++i) { tt = tt.Get_Next(); mtype = new MetaType(staticTypes, tt); } staticTypes.FillAll(); // Значения по умолчанию tt = tt.Get_Next(); number = Convert.ToInt32(tt.Get_Value()); for (i = 0; i < number; ++i) { tt = tt.Get_Next(); t = tt.Get_First(); mtype = staticTypes.GetTypeByName(t.Get_Value()); t = t.Get_Next(); prop = mtype?.GetProperty(t.Get_Value()); t = t.Get_Next(); if (prop is null) { continue; } prop.defaultvaluetype = (DefaultValueType)Convert.ToInt32(t.Get_Value()); t = t.Get_Next(); switch (prop.defaultvaluetype) { case DefaultValueType.dvt_novalue: break; case DefaultValueType.dvt_bool: // TODO: Вернуться сюда после доработки MetaProperty prop.dv_union_type.dv_bool = t.Get_Value().CompareTo("1") == 0 ? true : false; break; case DefaultValueType.dvt_number: prop.dv_union_type.dv_number = Convert.ToInt32(t.Get_Value()); break; case DefaultValueType.dvt_string: prop.dv_union_type.dv_string = t.Get_Value(); break; case DefaultValueType.dvt_date: break; case DefaultValueType.dvt_undef: break; case DefaultValueType.dvt_null: break; case DefaultValueType.dvt_type: prop.dv_union_type.dv_type = staticTypes.GetTypeByName(t.Get_Value()); break; case DefaultValueType.dvt_enum: vtype = staticTypes.GetTypeByName(t.Get_Value()); break; default: break; } t = t.Get_Next(); if (prop.defaultvaluetype == DefaultValueType.dvt_enum) { prop.dv_union_type.dv_enum = vtype.GetValue(t.Get_Value()); } } // Предопределенные объекты метаданных tt = tt.Get_Next(); number = Convert.ToInt32(tt.Get_Value()); for (i = 0; i < number; ++i) { tt = tt.Get_Next(); t = tt.Get_First(); sn = t.Get_Value(); t = t.Get_Next(); sen = t.Get_Value(); t = t.Get_Next(); if (!string_to_GUID(t.Get_Value(), ref uid)) { ShowMessage("Ошибка загрузки статических типов. Ошибка преобразования УИД в предопределенном объекте метаданных. Имя " + sn + ", УИД " + t.Get_Value()); Form1.log.Info("Ошибка загрузки статических типов.Ошибка преобразования УИД в предопределенном объекте метаданных.Имя {0}, УИД {1}", sn, t.Get_Value()); continue; } metaobj = new MetaObject(uid, null, sn, sen); metaobj.SetFullName(sn); metaobj.SetEfullName(sen); MetaObject.map[uid] = metaobj; MetaObject.smap[sn.ToUpper()] = metaobj; MetaObject.smap[sen.ToUpper()] = metaobj; } // Права tt = tt.Get_Next(); number = Convert.ToInt32(tt.Get_Value()); for (i = 0; i < number; ++i) { tt = tt.Get_Next(); new MetaRight(tt); } // Деревья сериализации tt = tt.Get_Next(); number = Convert.ToInt32(tt.Get_Value()); for (i = 0; i < number; ++i) { tt = tt.Get_Next(); t = tt.Get_First(); mtype = staticTypes.GetTypeByName(t.Get_Value()); mtype?.setSerializationTree(t.Get_Next()); } tr = null; mt_empty = new MetaType(staticTypes, "<Пустой тип>", "<Empty type>", "", "", "00000000-0000-0000-0000-000000000000"); // Этот тип нигде не удаляется mt_string = staticTypes.GetTypeByName("Строка"); mt_number = staticTypes.GetTypeByName("Число"); mt_bool = staticTypes.GetTypeByName("Булево"); mt_date = staticTypes.GetTypeByName("Дата"); mt_undef = staticTypes.GetTypeByName("Неопределено"); mt_null = staticTypes.GetTypeByName("Null"); mt_type = staticTypes.GetTypeByName("Тип"); mt_uid = staticTypes.GetTypeByName("УникальныйИдентификатор"); mt_typedescrinternal = staticTypes.GetTypeByName("ОписаниеТипаВнутр"); mt_binarydata = staticTypes.GetTypeByName("ДвоичныеДанные"); mt_arbitrary = staticTypes.GetTypeByName("Произвольный"); mt_container = staticTypes.GetTypeByName("Контейнер"); mt_config = staticTypes.GetTypeByName("ОбъектМетаданныхКонфигурация"); mt_standart_attribute = staticTypes.GetTypeByName("СтандартныйРеквизит"); mt_standart_tabular_section = staticTypes.GetTypeByName("СтандартнаяТабличнаяЧасть"); mtype = staticTypes.GetTypeByName("КвалификаторыДаты"); mp_datefractions = mtype?.GetProperty("ЧастиДаты"); mt_datefractions = staticTypes.GetTypeByName("ЧастиДаты"); mv_datefractionsdate = mt_datefractions?.GetValue("Дата"); mv_datefractionstime = mt_datefractions?.GetValue("Время"); mt_tabularsection = staticTypes.GetTypeByName("ОбъектМетаданных: ТабличнаяЧасть"); mt_attribute = staticTypes.GetTypeByName("ОбъектМетаданных: Реквизит"); mt_metaobjref = staticTypes.GetTypeByName("ОбъектМетаданныхСсылка"); mt_metarefint = staticTypes.GetTypeByName("ОбъектМетаданныхСсылкаВнутр"); mt_tabsection = staticTypes.GetTypeByName("ТабличнаяЧасть"); mt_metaref = staticTypes.GetTypeByName("МетаСсылка"); if (MetaStandartTabularSection.list != null) { for (j = 0; j < MetaStandartTabularSection.list.Count; ++j) { MetaStandartTabularSection.list[(int)j]._class = Class.GetClass(MetaStandartTabularSection.list[(int)j].class_uid); } } ShowMessage("Окончание загрузки статических типов"); Form1.log.Info("Окончание загрузки статических типов"); }