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()); }
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(); }
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(); }
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); }
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); } } }
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); } }
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)); }
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); } }
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("}"); }
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); } }
public bool Accept(DBean type) { return(false); }
public void Accept(DBean type, RawTextTable x) { }
public static string GetImplTypeName(DBean bean) { return(GetImplTypeName(bean.ImplType, bean.Type)); }
public Record(DBean data, string source, List <string> tags) { Data = data; Source = source; Tags = tags; }
public abstract string Accept(DBean type);
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(); } }