Example #1
0
        public MetaType(MetaTypeSet _typeSet, Tree tr)
        {
            Tree tt;
            Tree t;
            int  num, i;
            MetaGeneratedType gt;
            Guid guid = new Guid();

            gentypeRef = null;

            tt      = tr.Get_First();
            Name    = tt.Get_Value();
            tt      = tt.Get_Next();
            EName   = tt.Get_Value();
            tt      = tt.Get_Next();
            fhasuid = string_to_GUID(tt.Get_Value(), ref fuid);

            tt = tt.Get_Next();
            fserialization_ver = Convert.ToUInt32(tt.Get_Value());

            tt        = tt.Get_Next();
            fmetaname = tt.Get_Value();

            tt         = tt.Get_Next();
            femetaname = tt.Get_Value();

            tt          = tt.Get_Next();
            fimageindex = Convert.ToInt32(tt.Get_Value());

            tt            = tt.Get_Next();
            fprenameindex = Convert.ToUInt32(tt.Get_Value());

            tt          = tt.Get_Next();
            fpreidindex = Convert.ToUInt32(tt.Get_Value());

            tt    = tt.Get_Next();
            fmeta = tt.Get_Value().CompareTo("1") == 0 ? true : false;

            tt          = tt.Get_Next();
            fexporttype = (ExportType)(Convert.ToInt32(tt.Get_Value()));

            tt = tt.Get_Next();
            string_to_GUID(tt.Get_Value(), ref guid);
            fdefaultclass = Class.GetClass(guid);

            // Свойства
            tt  = tt.Get_Next();
            t   = tt.Get_First();
            num = Convert.ToInt32(t.Get_Value());
            for (i = 0; i < num; ++i)
            {
                t = t.Get_Next();
                MetaProperty mp = new MetaProperty(this, t);
                fproperties.Add(mp);
                fproperties_by_name[mp.Name.ToUpper()]  = mp;
                fproperties_by_name[mp.EName.ToUpper()] = mp;
            }

            // Элементы коллекции
            tt  = tt.Get_Next();
            t   = tt.Get_First();
            num = Convert.ToInt32(t.Get_Value());
            for (i = 0; i < num; ++i)
            {
                t = t.Get_Next();
                fscollectiontypes.Add(t.Get_Value());
            }

            // Значения
            tt  = tt.Get_Next();
            t   = tt.Get_First();
            num = Convert.ToInt32(t.Get_Value());
            for (i = 0; i < num; ++i)
            {
                t = t.Get_Next();
                MetaValue mv = new MetaValue(this, t);
                fvalues.Add(mv);
                if (mv.Name is null)
                {
                    fvalues_by_name["".ToUpper()] = mv;
                }
                else
                {
                    fvalues_by_name[mv.Name.ToUpper()] = mv;
                }

                if (mv.EName is null)
                {
                    fvalues_by_name["".ToUpper()] = mv;
                }
                else
                {
                    fvalues_by_name[mv.EName.ToUpper()] = mv;
                }

                fvalues_by_value[mv.Value] = mv;
            }

            // Генерируемые типы
            tt              = tt.Get_Next();
            t               = tt.Get_First();
            fgentypeprefix  = t.Get_Value();
            t               = t.Get_Next();
            fegentypeprefix = t.Get_Value();
            t               = t.Get_Next();
            num             = Convert.ToInt32(t.Get_Value());
            for (i = 0; i < num; ++i)
            {
                t  = t.Get_Next();
                gt = new MetaGeneratedType(t);
                fgeneratedtypes.Add(gt);
                if (gt.Name != null && gt.Name.CompareTo("Ссылка") == 0)
                {
                    //if (gt.Name.CompareTo("Ссылка") == 0)
                    gentypeRef = gt;
                }
            }

            //fserializationtree = null;

            typeSet.Add(this);
        }
Example #2
0
        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("Окончание загрузки статических типов");
        }