private void FindApiClientArg(EntityConfig friend, ApiItem item, ProjectConfig apiProject) { var entity = GetEntity(p => p != friend && p.ReferenceKey == friend.Key); var count = friend.Properties.Count(p => p.Name != "ClientNo"); switch (count) { case 0: item.ResultArg = null; if (entity != null) { entity.Option.IsDelete = true; } return; case 1: item.ResultArg = CppTypeHelper.CppTypeToCsType(friend.Properties.FirstOrDefault(p => p.Name != "ClientNo")); if (entity != null) { entity.Option.IsDelete = true; } return; } if (entity == null) { entity = new EntityConfig { Parent = apiProject, Project = apiProject.Name, CppName = item.CallArg, Name = ToClientName(item.CallArg), Tag = friend.Tag }; apiProject.Add(entity); } entity.NoDataBase = true; entity.ReferenceKey = friend.Key; entity.Caption = item.Caption + "命令调用参数"; entity.Description = item.Caption + "命令调用参数"; item.ResultArg = entity.Name; foreach (var property in friend.Properties) { var fp = entity.Properties.FirstOrDefault(p => p.ReferenceKey == property.Key) ?? entity.Properties.FirstOrDefault(p => p.Name == property.Name); if (fp == null) { fp = new PropertyConfig(); fp.CopyFrom(property); fp.Parent = entity; entity.Add(fp); } fp.Parent = entity; fp.Option.ReferenceKey = property.Option.Key; fp.Caption = property.Caption; fp.Tag = entity.Tag + "," + property.Name; } }
private void FindNitifyClientEntity(EntityConfig friend, ProjectConfig apiProject, NotifyItem item) { var entity = GlobalConfig.GetEntity(p => p != friend && p.Tag == friend.Tag); if (entity == null) { entity = new EntityConfig { Parent = apiProject, Project = apiProject.Name, CppName = friend.Name, Name = ToClientName(friend.Name), Caption = item.Caption, Description = item.Caption + "(消息通知)", IsClass = false, Classify = friend.Classify, Tag = friend.Tag }; apiProject.Entities.Add(entity); SolutionConfig.Current.Entities.Add(entity); } item.ClientEntity = entity.Name; if (entity.PrimaryColumn == null) { entity.Properties.Add(new PropertyConfig { Name = entity.Name + "Id", Caption = entity.Caption + "ID", Description = entity.Caption + "ID", IsPrimaryKey = true, IsIdentity = true, CsType = "int", CppType = "int", Parent = entity }); } foreach (var property in friend.Properties) { property.CsType = CppTypeHelper.CppTypeToCsType(property); property.Tag = friend.Tag + "," + property.Name; var fp = entity.Properties.FirstOrDefault(p => p.Tag != null && p.Tag == property.Tag) ?? entity.Properties.FirstOrDefault(p => p.Name == property.Name); if (fp == null) { fp = new PropertyConfig(); fp.CopyFrom(property); fp.Parent = entity; entity.Properties.Add(fp); } fp.Parent = entity; fp.Tag = property.Tag; fp.Caption = property.Caption; } }
internal void RepairCpp(bool repair, EntityConfig friend = null) { if (friend != null) { if (RepairTag(friend, Property.Parent.Tag)) { Property.CsType = CppTypeHelper.CppTypeToCsType(Property); } } if (!repair) { //FindOld(); CheckEnum(); CheckStruct(); } }
private void CheckStruct() { if (Property.IsSystemField || Property.EnumConfig != null) { return; } if (Property.CppType == null) { Property.CppType = CppTypeHelper.CsTypeToCppType(Property); } if (Property.CppLastType == null) { Property.CppLastType = Property.CppType; } var type = CppTypeHelper.ToCppLastType(Property.CppType); var entity = type as EntityConfig; if (entity != null) { Property.CppLastType = entity.Name; Property.CsType = entity.Name + "Data"; if (!entity.IsReference) { return; } var friend = GetEntity(p => !p.IsReference && p != entity && p.Tag == entity.Tag); if (friend != null) { Property.CppLastType = friend.Name; Property.CsType = friend.Name + "Data"; } return; } var typedef = type as TypedefItem; if (typedef != null) { ReBindingEnum(typedef); } else { Property.CppLastType = type.ToString(); } }
/// <summary> /// 修复数组长度 /// </summary> public void RepairByArrayLen() { var type = CppTypeHelper.ToCppLastType(Property.CppLastType) as TypedefItem; if (type != null) { if (type.KeyWork == "char" && !string.IsNullOrWhiteSpace(type.ArrayLen)) { try { Property.Datalen = Int32.Parse(type.ArrayLen); } catch (Exception) { Property.Datalen = 5000; } } } else if (!Property.Parent.IsReference && Property.CsType == "string" && Property.Datalen <= 0) { Property.Datalen = 500; } }
/// <summary> /// 自动修复(从模型修复数据存储) /// </summary> public void RepairCpp(bool repair = false) { if (Entity.IsFreeze) { return; } if (Entity.IsReference) { if (repair) { foreach (var col in Entity.Properties) { col.CppLastType = CppTypeHelper.CppLastType(col.CppType); } } return; } RepairEsName(repair); EntityConfig friend = GetEntity(p => p != Entity && p.Tag == Entity.Tag); PropertyBusinessModel model = new PropertyBusinessModel(); foreach (var col in Entity.Properties) { if (col.Discard || Entity.IsFreeze) { continue; } col.Parent = Entity; model.Property = col; model.RepairCpp(repair, friend); col.IsModify = true; } Entity.IsModify = true; }
internal bool RepairTag(EntityConfig friend, string head) { if (Property.IsSystemField) { Property.Tag = "[SYSTEM]"; return(false); } if (friend == null) { Property.Tag = null; return(false); } string tag = Property.Tag ?? ""; var link = friend.Properties.FirstOrDefault(p => tag == p.Tag) ?? friend.Properties.FirstOrDefault(p => p.Name == Property.Name); if (link == null) { Property.Tag = null; //Property.CppName = null; if (Property.EnumConfig != null && Property.EnumConfig.Items.Count <= 1) { Property.EnumConfig.IsDelete = true; Property.EnumConfig = null; Property.CustomType = null; } else if (Property.EnumConfig == null && Property.CustomType != null) { Property.CustomType = null; } return(false); } tag = head + "," + link.CppType + "," + link.Name; if (friend.Tag != null && friend.Tag.Contains(tag + ",[Skip]")) { return(false); } Property.Tag = tag; var cpptype = CppTypeHelper.ToCppLastType(link.CppType); var stru = cpptype as EntityConfig; if (stru != null) { link.CppLastType = Property.CppType = GetEntity(p => p.Tag == stru.Tag && p != stru)?.Name; return(true); } var type = cpptype as TypedefItem; if (type == null) { Property.CppType = link.CppType; Property.CppLastType = link.CppType; return(true); } Property.CppType = type.KeyWork; Property.CppLastType = type.KeyWork; if (type.ArrayLen != null) { if (type.KeyWork == "char" && !string.IsNullOrWhiteSpace(type.ArrayLen)) { int len; if (Int32.TryParse(type.ArrayLen, out len)) { link.Datalen = len; Property.Datalen = len; } else { link.Datalen = 100; Property.Datalen = 100; link.ArrayLen = type.ArrayLen; } } else { link.ArrayLen = type.ArrayLen; Property.ArrayLen = type.ArrayLen; } } if (type.Items.Count <= 0) { Property.EnumConfig = null; Property.CustomType = null; return(true); } ReBindingEnum(type); return(false); }
private void FindApiClientArg(EntityConfig friend, ApiItem item, ProjectConfig apiProject) { var entity = GlobalConfig.GetEntity(p => p != friend && p.Tag == friend.Tag); var count = friend.Properties.Count(p => p.Name != "ClientNo"); switch (count) { case 0: item.ResultArg = null; if (entity != null) { entity.IsDelete = true; } return; case 1: item.ResultArg = CppTypeHelper.CppTypeToCsType(friend.Properties.FirstOrDefault(p => p.Name != "ClientNo")); if (entity != null) { entity.IsDelete = true; } return; } if (entity == null) { entity = new EntityConfig { Parent = apiProject, Project = apiProject.Name, CppName = item.CallArg, Name = ToClientName(item.CallArg) }; apiProject.Entities.Add(entity); Solution.Entities.Add(entity); } entity.IsClass = true; entity.Tag = friend.Tag; entity.Caption = item.Caption + "命令调用参数"; entity.Description = item.Caption + "命令调用参数"; item.ResultArg = entity.Name; foreach (var property in friend.Properties) { property.CsType = CppTypeHelper.CppTypeToCsType(property); if (property.Name == "ClientNo") { continue; } property.Tag = friend.Tag + "," + property.Name; var fp = entity.Properties.FirstOrDefault(p => p.Tag != null && p.Tag == property.Tag) ?? entity.Properties.FirstOrDefault(p => p.Name == property.Name); if (fp == null) { fp = new PropertyConfig(); fp.CopyFrom(property); fp.Parent = entity; entity.Properties.Add(fp); } fp.Parent = entity; fp.Tag = property.Tag; fp.Caption = property.Caption; } }