Esempio n. 1
0
        public void Accept(DBean type, StringBuilder x)
        {
            if (type.ImplType == null)
            {
                x.Append("null");
                return;
            }
            x.Append(type.ImplType.FullName).Append('{');
            int index = 0;

            foreach (var f in type.Fields)
            {
                var defField = type.ImplType.HierarchyFields[index++];
                x.Append(defField.Name).Append(':');
                if (f != null)
                {
                    f.Apply(this, x);
                }
                else
                {
                    x.Append("null");
                }
                x.Append(',');
            }
            x.Append('}');
        }
        public void ValidateTable(DefTable table, List <Record> records)
        {
            var keyIndex = table.IndexFieldIdIndex;

            foreach (Record r in records)
            {
                if (DataUtil.IsUnchecked(r))
                {
                    continue;
                }
                CurrentValidateRecord = r;
                DBean data = r.Data;
                _path.Clear();
                _path.Push(table.FullName);
                if (table.IsMapTable)
                {
                    _path.Push(data.Fields[keyIndex]);
                }
                if (table.ValueTType.Processors.Count > 0)
                {
                    foreach (var p in table.ValueTType.Processors)
                    {
                        if (p is IValidator v)
                        {
                            v.Validate(Ctx, table.ValueTType, data);
                        }
                    }
                }
                table.ValueTType.Apply(this, data);
            }
        }
        public override string Accept(DBean type)
        {
            var x = new StringBuilder();

            if (type.Type.IsAbstractType)
            {
                x.Append($"{{ _name:\"{type.ImplType.Name}\",");
            }
            else
            {
                x.Append('{');
            }

            int index = 0;

            foreach (var f in type.Fields)
            {
                var defField = type.ImplType.HierarchyFields[index++];
                x.Append(defField.Name).Append(':');
                if (f != null)
                {
                    x.Append(f.Apply(this));
                }
                else
                {
                    x.Append("null");
                }
                x.Append(',');
            }
            x.Append('}');
            return(x.ToString());
        }
Esempio n. 4
0
        public void Accept(DBean type, Utf8JsonWriter x)
        {
            x.WriteStartObject();

            if (type.Type.IsAbstractType)
            {
                x.WritePropertyName(DefBean.TYPE_NAME_KEY);
                x.WriteStringValue(type.ImplType.Name);
            }

            var defFields = type.ImplType.HierarchyFields;
            int index     = 0;

            foreach (var d in type.Fields)
            {
                var defField = (DefField)defFields[index++];
                if (!defField.NeedExport)
                {
                    continue;
                }

                x.WritePropertyName(defField.Name);
                // 特殊处理 bean 多态类型
                if (d == null || (d is DBean db && db.ImplType == null))
                {
                    x.WriteNullValue();
                }
Esempio n. 5
0
        public virtual void Accept(DBean type, Utf8JsonWriter x)
        {
            x.WriteStartObject();

            if (type.Type.IsAbstractType)
            {
                x.WritePropertyName(DefBean.TYPE_NAME_KEY);
                x.WriteStringValue(DataUtil.GetImplTypeName(type));
            }

            var defFields = type.ImplType.HierarchyFields;
            int index     = 0;

            foreach (var d in type.Fields)
            {
                var defField = (DefField)defFields[index++];

                // 特殊处理 bean 多态类型
                // 另外,不生成  xxx:null 这样
                if (d == null || !defField.NeedExport)
                {
                    //x.WriteNullValue();
                }
                else
                {
                    x.WritePropertyName(defField.Name);
                    d.Apply(this, x);
                }
            }
            x.WriteEndObject();
        }
Esempio n. 6
0
 public void ExportTableList(DefTable t, List <Record> records, StringBuilder s)
 {
     s.Append("return").AppendLine();
     s.Append('{').AppendLine();
     foreach (Record r in records)
     {
         DBean d = r.Data;
         s.Append(d.Apply(ToLuaLiteralVisitor.Ins));
         s.Append(',').AppendLine();
     }
     s.Append('}');
 }
        public static DType GetField(DBean bean, string fieldName)
        {
            int index = 0;

            foreach (var f in bean.ImplType.HierarchyFields)
            {
                if (f.Name == fieldName)
                {
                    return(bean.Fields[index]);
                }
                ++index;
            }
            return(null);
        }
Esempio n. 8
0
        public void Accept(DBean type, ByteBuf x)
        {
            var bean = type.Type;

            if (bean.IsAbstractType)
            {
                // null 时特殊处理
                if (type.ImplType == null)
                {
                    x.WriteInt(0);
                    return;
                }
                x.WriteInt(type.ImplType.Id);
            }
            int index = -1;

            foreach (var field in type.Fields)
            {
                ++index;
                var defField = (DefField)type.ImplType.HierarchyFields[index];
                if (!defField.NeedExport)
                {
                    continue;
                }

                if (defField.CType.Apply(NeedMarshalBoolPrefixVisitor.Ins))
                {
                    if (field != null)
                    {
                        x.WriteBool(true);
                        field.Apply(this, x);
                    }
                    else
                    {
                        x.WriteBool(false);
                    }
                }
                else
                {
                    field.Apply(this, x);
                }
            }
        }
Esempio n. 9
0
        public void Accept(DBean type, DefField _, List <ResourceInfo> y)
        {
            var def = type.ImplType;

            if (def == null)
            {
                return;
            }
            int index = 0;

            foreach (DType fieldData in type.Fields)
            {
                var fieldDef = (DefField)def.HierarchyFields[index++];
                if (fieldDef.IsResource)
                {
                    fieldData.Apply(this, fieldDef, y);
                }
            }
        }
        public void Accept(DBean type, TType x, List <ResourceInfo> y)
        {
            var def = type.ImplType;

            if (def == null)
            {
                return;
            }
            int index = 0;

            foreach (DType fieldData in type.Fields)
            {
                if (fieldData == null)
                {
                    continue;
                }
                var fieldDef = ((DefField)def.HierarchyFields[index++]).CType;
                fieldData.Apply(this, fieldDef, y);
            }
        }
Esempio n. 11
0
        public static string RenderData(this Template template, DefTable table, DBean data, Dictionary <string, object> extraModels = null)
        {
            var ctx = new TemplateContext();

            var env = new DTypeTemplateExtends
            {
                ["table"]    = table,
                ["data"]     = data,
                ["assembly"] = DefAssembly.LocalAssebmly,
            };

            if (extraModels != null)
            {
                foreach ((var k, var v) in extraModels)
                {
                    env[k] = v;
                }
            }
            ctx.PushGlobal(env);
            return(template.Render(ctx));
        }
Esempio n. 12
0
        public void ValidateTable(DefTable table, List <DType> records)
        {
            DefAssembly ass      = table.Assembly;
            var         keyIndex = table.IndexFieldIdIndex;

            foreach (DBean r in records)
            {
                CurrentValidateRecord = r;
                _path.Clear();
                _path.Push(table.FullName);
                if (table.IsMapTable)
                {
                    _path.Push(r.Fields[keyIndex]);
                }
                else if (table.IsTwoKeyMapTable)
                {
                    _path.Push(r.Fields[keyIndex]);
                    _path.Push(r.Fields[table.IndexFieldIdIndex2]);
                }
                Accept(r, ass);
            }
        }
Esempio n. 13
0
        public void Accept(DBean type, StringBuilder line)
        {
            var bean = type.Type;

            if (bean.IsAbstractType)
            {
                // null 时特殊处理
                if (type.ImplType == null)
                {
                    line.Append("nil");
                    return;
                }
                line.Append($"{{ _name='{type.ImplType.FullName}',");
            }
            else
            {
                line.Append('{');
            }
            int index = -1;

            foreach (var field in type.Fields)
            {
                ++index;
                var defField = (DefField)type.ImplType.HierarchyFields[index];
                if (!defField.NeedExport)
                {
                    continue;
                }
                if (field != null)
                {
                    line.Append(defField.Name).Append('=');
                    field.Apply(this, line);
                    line.Append(',');
                }
            }
            line.Append("}");
        }
Esempio n. 14
0
        public void Accept(DBean type, ByteBuf x)
        {
            var bean = type.Type;

            if (bean.IsAbstractType)
            {
                x.WriteInt(type.ImplType.Id);
            }

            var defFields = type.ImplType.HierarchyFields;
            int index     = 0;

            foreach (var field in type.Fields)
            {
                var defField = (DefField)defFields[index++];
                if (!defField.NeedExport)
                {
                    continue;
                }
                if (defField.CType.IsNullable)
                {
                    if (field != null)
                    {
                        x.WriteBool(true);
                        field.Apply(this, x);
                    }
                    else
                    {
                        x.WriteBool(false);
                    }
                }
                else
                {
                    field.Apply(this, x);
                }
            }
        }
        public int Accept(DBean data, TType type, Title x)
        {
            if (x.SubTitleList.Count > 0)
            {
                if (data.Type.IsAbstractType)
                {
                    if (!x.SubTitles.TryGetValue(DefBean.TYPE_NAME_KEY, out var typeTitle))
                    {
                        throw new Exception($"多态bean:{data.Type.FullName} 缺失 __type__ 标题列");
                    }
                    if (data.ImplType != null)
                    {
                        SetTitleValue(typeTitle, data.ImplType.Name);
                    }
                    else
                    {
                        SetTitleValue(typeTitle, DefBean.BEAN_NULL_STR);
                    }
                }
                else
                {
                    if (data.ImplType != null)
                    {
                    }
                    else
                    {
                        //Current(x).Value = "null";
                        throw new Exception($"title:{x.Name} 不支持 值为null的普通bean");
                    }
                }
                int rowCount = 1;
                if (data.ImplType != null)
                {
                    int index = 0;
                    foreach (var field in data.ImplType.HierarchyFields)
                    {
                        var fdata = data.Fields[index++];
                        if (!x.SubTitles.TryGetValue(field.Name, out var fieldTitle))
                        {
                            throw new Exception($"title:{x.Name} 子title:{field.Name} 缺失");
                        }

                        if (fdata != null)
                        {
                            //if (fieldTitle.SubTitleList.Count > 0)
                            //{
                            rowCount = Math.Max(rowCount, fdata.Apply(this, field.CType, fieldTitle));
                            //}
                            //else
                            //{

                            //    (_cells[_startRowIndex, fieldTitle.FromIndex] as Range).Value = data.Apply(ToExcelStringVisitor.Ins, fieldTitle.Sep);
                            //}
                        }
                        else if (field.CType is TText)
                        {
                            SetTitleValue(fieldTitle, $"null{(field.CType.HasTag("sep") ? field.CType.GetTag("sep") : "#")}null");
                        }
                    }
                }
                return(rowCount);
            }
            else
            {
                SetTitleValue(x, data.Apply(ToExcelStringVisitor.Ins, type.GetTag("sep")));
                return(1);
            }
        }
Esempio n. 16
0
 public bool Accept(DBean type)
 {
     return(false);
 }
Esempio n. 17
0
 public void Accept(DBean type, RawTextTable x)
 {
 }
Esempio n. 18
0
 public static string GetImplTypeName(DBean bean)
 {
     return(GetImplTypeName(bean.ImplType, bean.Type));
 }
Esempio n. 19
0
 public Record(DBean data, string source, List <string> tags)
 {
     Data   = data;
     Source = source;
     Tags   = tags;
 }
Esempio n. 20
0
 public abstract string Accept(DBean type);
Esempio n. 21
0
        public void Accept(DBean record, DefAssembly assembly)
        {
            if (record.ImplType == null)
            {
                return;
            }
            var defFields = record.ImplType.HierarchyFields;
            int i         = 0;

            foreach (var fieldValue in record.Fields)
            {
                var defField = (DefField)defFields[i++];
                _path.Push(defField.Name);
                switch (defField.CType)
                {
                case TArray a:
                {
                    if (defField.ValueValidators.Count > 0)
                    {
                        var arr   = (DArray)fieldValue;
                        int index = 0;
                        foreach (var value in arr.Datas)
                        {
                            _path.Push(index++);
                            foreach (var v in defField.ValueValidators)
                            {
                                v.Validate(Ctx, value, defField.IsNullable);
                            }
                            _path.Pop();
                        }
                    }
                    if (a.ElementType is TBean)
                    {
                        var arr   = (DArray)fieldValue;
                        int index = 0;
                        foreach (var value in arr.Datas)
                        {
                            _path.Push(index++);
                            Accept((DBean)value, assembly);
                            _path.Pop();
                        }
                    }
                    break;
                }

                case TList b:
                {
                    if (defField.ValueValidators.Count > 0)
                    {
                        var arr   = (DList)fieldValue;
                        int index = 0;
                        foreach (var value in arr.Datas)
                        {
                            _path.Push(index++);
                            foreach (var v in defField.ValueValidators)
                            {
                                v.Validate(Ctx, value, false);
                            }
                            _path.Pop();
                        }
                    }
                    if (b.ElementType is TBean tb)
                    {
                        var arr   = (DList)fieldValue;
                        int index = 0;
                        foreach (var value in arr.Datas)
                        {
                            _path.Push(index++);
                            Accept((DBean)value, assembly);
                            _path.Pop();
                        }


                        if (defField.IndexField != null)
                        {
                            var indexSet = new HashSet <DType>();
                            if (!tb.GetBeanAs <DefBean>().TryGetField(defField.Index, out var _, out var indexOfIndexField))
                            {
                                throw new Exception("impossible");
                            }
                            foreach (var value in arr.Datas)
                            {
                                _path.Push(index++);
                                DType indexValue = ((DBean)value).Fields[indexOfIndexField];
                                if (!indexSet.Add(indexValue))
                                {
                                    throw new Exception($"{TypeUtil.MakeFullName(_path)} index:{indexValue} 重复");
                                }
                                _path.Pop();
                            }
                        }
                    }
                    break;
                }

                case TSet c:
                {
                    if (defField.ValueValidators.Count > 0)
                    {
                        var arr = (DSet)fieldValue;
                        foreach (var value in arr.Datas)
                        {
                            foreach (var v in defField.ValueValidators)
                            {
                                v.Validate(Ctx, value, false);
                            }
                        }
                    }
                    break;
                }

                case TMap m:
                {
                    DMap map = (DMap)fieldValue;
                    if (defField.KeyValidators.Count > 0)
                    {
                        foreach (var key in map.Datas.Keys)
                        {
                            _path.Push(key);
                            foreach (var v in defField.KeyValidators)
                            {
                                v.Validate(Ctx, key, false);
                            }
                            _path.Pop();
                        }
                    }
                    if (defField.ValueValidators.Count > 0)
                    {
                        foreach (var value in map.Datas.Values)
                        {
                            _path.Push(value);
                            foreach (var v in defField.ValueValidators)
                            {
                                v.Validate(Ctx, value, false);
                            }

                            if (value is DBean dv)
                            {
                                Accept(dv, assembly);
                            }
                            _path.Pop();
                        }
                    }
                    break;
                }

                case TBean n:
                {
                    Accept((DBean)fieldValue, assembly);
                    break;
                }

                default:
                {
                    if (defField.Validators.Count > 0)
                    {
                        foreach (var v in defField.Validators)
                        {
                            v.Validate(Ctx, fieldValue, defField.IsNullable);
                        }
                    }
                    break;
                }
                }
                _path.Pop();
            }
        }