/// <summary> /// /// </summary> /// <param name="pattern">已经被拆分出来的字符串 /// x 表示循环所有值,0表示第一个,>2表示从第三个开始,<2表示从第一个到第二个,Last表示最后一个,Last2表示最后两个,First表示第一个,First2表示前两个. /// {} 表示内容. /// /// aaaa <%%# [Fields[x]={<div>aac <%#= AttributeInfo.ColumnName #%></div>abcdef<div> aab <%#= AttributeInfo.ColumnName.ToParscal() #%></div> }] #%%>abcd /// /// first2<%%# [Fields[first,2]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>first2 /// /// last2<%%# [Fields[last,2]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>last2 /// /// equal(1)<%%# [Fields[equal(1)]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>equal(1) /// /// equal(3)<%%# [Fields[equal(3)]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>equal(3) /// /// >1<%%# [Fields[>1]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>>1 /// /// <3<%%# [Fields[<3]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%><3 /// /// Fields[greatless, 2, 3] 表示取<2 并且大于3 的对象. /// [greatless, 2, 4]<%%# [Fields[greatless, 2, 4]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>[greatless, 2, 4] /// /// /// [greatless, 2, last(1)] 表示取<2 并且大于长度 count - 1的值.. /// [greatless, 2, last(1)]<%%# [Fields[greatless, 2, last(1)]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>[greatless, 2, last(1)] /// /// /// [inner, 2, last(1)] 表示取>2 并且 < 长度 count - 1的值.. /// [inner, 2, last(1)]<%%# [Fields[inner, 2, last(1)]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>[inner, 2, last(1)] /// /// /// [inner, 2, 4] 表示取>2 并且 < 长度 4 的值.. /// [inner, 2, 4]<%%# [Fields[inner, 2, 4]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>[inner, 2, 4] /// /// abc<%%# [Fields[x]={<div><%#= AttributeInfo.ColumnName.ToParscal()#%></div> }] #%%>bcd /// </param> /// <param name="modelInfo"></param> /// <returns></returns> public string Transfer(string pattern, EntityInfo _entity, Object modelobj) { try { //IModelInfo modelInfo = modelobj as IModelInfo; // Fields_Express = Fields.Filter + Fields.Values; 没有头尾,中间的东东。 Dictionary<int, string> exfiltersets = RegexUtil.GetFie_FILTER_Sta_EnInfo(pattern, "Fields"); Dictionary<int, string> exvaluesets = RegexUtil.GetFie_ValueEX_Sta_EnInfo(pattern); // 先用 Fiter 来筛选符合条件的List<AttributeInfo> List<AttributeInfo> cols = new FieldCtr().GetFieldListByFilter(_entity, exfiltersets.ElementAt(0).Value); string Result = ""; foreach (AttributeInfo col in cols) { string fieldSTR = exvaluesets.ElementAt(0).Value.TrimFVSS(); string regex = @"(?is)" + AnaConfig.COLUMN_SIM_EXP_VALUE_HEAD + ".*?" + AnaConfig.COLUMN_SIM_EXP_VALUE_END; IExTransferFactory transFactory = new ColumnExTransferFactory(); string res = ContentAnalysis.Instance().AnalyAndReplace(fieldSTR, @regex, _entity, col, transFactory); Result += res; } return Result; } catch (Exception ex) { return ExCtr.Return_EX(ex, pattern); } }
/// <summary> /// calltemp_<%# Template名称 #%> /// </summary> /// <param name="content"></param> /// <param name="modelinfo"></param> /// <param name="modelInfo"></param> /// <returns></returns> public string Transfer(string methodname, EntityInfo entity, object obj) { entity = AppConf.Ins.CurrentExeEntity; string templateName = methodname.Replace("calltemp_", ""); StreamReader objReader = new StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + "//Template//" + AppConf.ExeTemplatename.Replace(".xml", "") + "//subtemp//" + templateName + ".hoyitm"); string content = objReader.ReadToEnd(); objReader.Close(); string regex = @"(?is)" + AnaConfig.EM_HEAD + ".*?" + AnaConfig.EM_END; IExTransferFactory transFactory = new ExTransferFactory(); string result = ContentAnalysis.Instance().AnalyAndReplace(content, @regex, entity, obj, transFactory); return result; //content = content.TrimEnTa().TrimCVSS(); //IObjExecute execute; //if (content.TrimEnTa().StartsWith("if(")) //{ // execute = new JudgeExecute(); //} //else //{ // execute = new BaseExecute(); //} //return execute.Execute(modelObj, modelinfo, content) as string; }
/// <summary> /// 获取所有在用的外键. /// </summary> /// <param name="ent"></param> /// <returns></returns> public List<ConstraintInfo> geta(EntityInfo ent) { var query = from m in ent.constraints where m.Using select m; return query.ToList(); }
/// <summary> /// 获取Relation关联的另外一段的实体. /// </summary> /// <param name="ent"></param> /// <returns></returns> public EntityInfo Get_Relation_Table(EntityInfo ent) { ConstraintInfo con = this.Get_Relation_Constraint(ent); // 获取到关联表. EntityInfo rel_table = AppConf.Ins.getEntiByEnname(con.REFERENCED_TABLE_NAME); return rel_table; }
private void FMEntityEditor_Load(object sender, EventArgs e) { txEntityName.Focus(); DirectoryInfo dir = new DirectoryInfo(Application.StartupPath + "\\att_temps"); foreach (FileInfo dd in dir.GetFiles()) { cmbTemplate.Items.Add(dd.Name); } if (dir.GetFiles().Length > 0) { cmbTemplate.SelectedIndex = 0; } cmbMySQLDataType.DataSource = Enum.GetValues(typeof(MySqlDbType)); this.splitContainer3.Panel2Collapsed = true; if (entity == null) { entity = new EntityInfo(); } chkNeedFPYTable.Checked = entity.NeedfpyTable; txNotes.Text = entity.Notes; BindAttributes(); BindConstraintAtt(); }
/// <summary> /// 根据模板分析,并且返回已替换内容 /// </summary> /// <param name="content"></param> /// <param name="regex"></param> /// <param name="modelInfo"></param> /// <param name="TransferFactory"></param> /// <returns></returns> public string AnalyAndReplace(string content, string regex, EntityInfo entity, Object obj, IExTransferFactory TransferFactory) { string Result = ""; Dictionary<int, string> expresses = content.RegBaseDic(@regex); ; Dictionary<int, int> patternS_E = AnaUtil.Instance().GetKeyIndVal(expresses); Result += patternS_E.Count > 0 ? content.Substring(0, patternS_E.ElementAt(0).Key) : ""; KeyValuePair<int, int> S_EPair = new KeyValuePair<int, int>(); KeyValuePair<int, int> S_EPair2 = new KeyValuePair<int, int>(); for (int i = 0; i < expresses.Count; i++) { Result += TransferFactory.CreateTransfer(expresses.ElementAt(i).Value).Transfer(expresses.ElementAt(i).Value, entity, obj); S_EPair = patternS_E.ElementAt(i); S_EPair2 = patternS_E.Count > (i + 1) ? patternS_E.ElementAt(i + 1) : patternS_E.ElementAt(i); Result += S_EPair2.Equals(S_EPair) ? "" : content.Substring(S_EPair.Value, S_EPair2.Key - S_EPair.Value); } Result += patternS_E.Count > 0 ? content.Substring(S_EPair.Value, content.Length - S_EPair.Value) : ""; Result = patternS_E.Count == 0 ? content : Result; return Result; }
public Table CreateTable(EntityInfo entity, int x, int y) { Table table = new Table(); //Set Element properties table.BackColor = Color.White; table.GradientColor = Color.FromArgb(96, SystemColors.Highlight); table.Location = new PointF(x, y); table.Width = 140; table.Height = 200; table.Indent = 10; if (entity == null) { table.Heading = "[UnNamed Element]"; table.SubHeading = "[UnNamed Class]"; } else { if (entity != null) { string cons = "conscount:" + entity.constraints.Count + " "; foreach (ConstraintInfo c in entity.constraints) { cons += "\n" + c.Constraint_name + ","; } table.Heading = entity.EntityName; table.SubHeading = entity.ClassName + "[" + cons + "]\n" + " [" + entity.Attributes.Count.ToString() + " Fields]"; //table.SubHeading = entity.ClassName + " [" + entity.Attributes.Count.ToString() + " Fields]"; } } table.DrawExpand = true; return table; }
/// <summary> /// 添加默认操作. /// </summary> /// <param name="table"></param> public void RemoveAllOperate(EntityInfo table) { if (Operaters != null) { SingleOperate so = Operaters.Single(SK => SK.Tables == table) as SingleOperate; so.Operaters = new List<IOperater>(); } }
/// <summary> /// 获取非自循环对象的第一个外键. /// </summary> /// <param name="ent"></param> /// <returns></returns> public ConstraintInfo GetConstraint(EntityInfo ent) { //var query = ent.constraints.Where(s => (!s.REFERENCED_TABLE_NAME.Equals(ent.ClassName))); //return query.Count() > 0 ? query.ToList()[0] : null; var query = ent.constraints.Where(s=>s.Using); return query.Count() > 0 ? query.ToList()[0] : null; //return ent.constraints[0]; }
/// <summary> /// 获取第一个可以用的Constraint. /// </summary> /// <param name="ent"></param> /// <returns></returns> public ConstraintInfo get0c(EntityInfo ent) { var query = from m in ent.constraints where m.Using select m; return query.ToList().Count > 0 ? query.ToList()[0] : null; }
/// <summary> /// 获取Relation关联的另外一段的实体. /// </summary> /// <param name="ent"></param> /// <returns></returns> public EntityInfo Get_Relation_OUT_Table(EntityInfo ent) { ConstraintInfo con = this.Get_Relation_Constraint(ent); // 获取到关联表. EntityInfo rel_table = AppConf.Ins.getEntiByEnname(con.REFERENCED_TABLE_NAME); EntityInfo entity2 = AppConf.Ins.getOut_UNI_Entity(rel_table.ClassName, ent.ClassName)[0]; // 全局查哪个表跟这张关联表的对应字段有关系. return entity2; }
public void RemoveLine(EntityInfo src, EntityInfo target) { // 没存KEY,这里暂时不做操作. //Model model = ClassDiagCtrl.Ins.currentModel; //ConnInfo con = new ConnInfo(); //con.SrcElementID = src.ElementID; //con.TargetElementID = target.ElementID; //con.linetype = LineType.Line; //model.Lines.Remove() }
/// <summary> /// 添加默认操作. /// </summary> /// <param name="table"></param> public void AddDefaultValueForSingle(EntityInfo table) { if (Operaters != null) { SingleOperate so = Operaters.Single(SK => SK.Tables == table) as SingleOperate; DEFAULT_OPERATE_READER.Instance.INIT_DEFAULT_OPERA(); so.Operaters = DEFAULT_OPERATE_READER.Instance.DEFAULT_OPERATE; //so.Operaters = new List<IOperater>(); // 加载默认的操作. } }
/// <summary> /// 这里可能有好几个. /// </summary> /// <param name="ent"></param> /// <returns></returns> public ConstraintInfo Get_Relation_Constraint(EntityInfo ent) { ModuleInfo module = AppConf.Ins.getByEntityInfo(ent); List<ConstraintInfo> cons = new List<ConstraintInfo>(); foreach (ConstraintInfo con in ent.constraints) { if ((con.REFERENCED_TABLE_NAME.StartsWith("r_") || con.REFERENCED_TABLE_NAME.StartsWith(module.Prefix + "r_")) && con.Using) { cons.Add(con); } } return cons.Count > 0 ? cons[0] : null; }
/// <summary> /// 是否包含实体. /// </summary> /// <param name="entity"></param> /// <returns></returns> public static bool ContainEntity(EntityInfo entity) { foreach (ModuleInfo mo in AppConf.Ins.Application.Modules) { foreach (EntityInfo ent in mo.Entitys) { if (ent.Equals(entity)) { return true; } } } return false; }
/// <summary> /// 根据模板规则生成到TargetURL路径的值. /// </summary> /// <param name="TargetURL"></param> public void Execute(EntityInfo modelInfo, string TargetURL) { foreach (TemplateRule rule in tempRules) { string STR_TargetURL = rule.TargetURL; Console.WriteLine(STR_TargetURL); URLExecute execute = new URLExecute(); STR_TargetURL = execute.Execute(TargetURL, modelInfo, STR_TargetURL) as string; Console.WriteLine(STR_TargetURL); template.ExecuteContent(modelInfo, rule.TemplateURL, STR_TargetURL); } }
public List<AttributeInfo> GetTemplate(EntityInfo entity, string templateName) { string path = Application.StartupPath + "\\att_temps\\" + templateName; List<AttributeInfo> attrs = new List<AttributeInfo>(); attrs = XmlSerializer.LoadFromXml(path, attrs.GetType()) as List<AttributeInfo>; foreach (AttributeInfo att in attrs) { att.Comment = att.Comment.Replace("%EntityName%", entity.EntityName); att.Comment = att.Comment.Replace("%ClassName%", entity.ClassName); att.ColumnName = att.ColumnName.Replace("%ClassName%", entity.ClassName); att.ColumnName = att.ColumnName.Replace("%EntityName%", entity.EntityName); } return attrs; }
public EntityInfo Clone() { EntityInfo ent = new EntityInfo(); ent.CreateDate = this.CreateDate; ent.EntityName = this.EntityName; ent.ClassName = this.ClassName; ent.X = this.X; ent.Y = this.Y; // 这里考虑是否要克隆一组,而不是直接赋值. ent.Attributes = this.Attributes; ent.operaters = this.operaters; ent.constraints = this.constraints; ent.NeedfpyTable = NeedfpyTable; ent.Notes = this.Notes; return ent; }
/// <summary> /// 翻译. /// </summary> /// <param name="content"></param> /// <param name="modelInfo"></param> /// <returns></returns> public string Transfer(string content, EntityInfo modelinfo, Object modelObj) { content = content.TrimEnTa().TrimCVSS(); IObjExecute execute; if (content.TrimEnTa().StartsWith("if(")) { execute = new JudgeExecute(); } else { execute = new BaseExecute(); } //return execute.Execute(modelObj, modelinfo, content) as string; object obb = execute.Execute(modelObj, modelinfo, content); string res = obb as string; return res; }
/// <summary> /// 执行内容生成, /// </summary> /// <param name="_modelInfo"></param> /// <param name="templateURL"></param> /// <param name="targetURL"></param> public void ExecuteContent(EntityInfo _modelInfo, string templateURL, string targetURL) { FileInfo file = new FileInfo(targetURL); string folName = file.DirectoryName; if (!Directory.Exists(folName)) { Directory.CreateDirectory(folName); } this.modelInfo = _modelInfo; StreamReader objReader = new StreamReader(System.AppDomain.CurrentDomain.BaseDirectory + templateURL); string Encode = ConfigurationManager.AppSettings["Encode"]; Encoding encoding = Encoding.UTF8; if (Encode.ToLower().Equals("utf8")) { encoding = Encoding.UTF8; } else if (Encode.ToLower().Equals("unicode")) { encoding = Encoding.Unicode; } else if (Encode.ToLower().Equals("ascii")) { encoding = Encoding.ASCII; } else if (Encode.ToLower().Equals("bigendianunicode")) { encoding = Encoding.BigEndianUnicode; } StreamWriter templateWriter = new StreamWriter(targetURL, false, encoding); string content = objReader.ReadToEnd(); string regex = @"(?is)" + AnaConfig.EM_HEAD + ".*?" + AnaConfig.EM_END; IExTransferFactory transFactory = new ExTransferFactory(); string result = ContentAnalysis.Instance().AnalyAndReplace(content, @regex, modelInfo, modelInfo, transFactory); templateWriter.Write(result); objReader.Close(); templateWriter.Close(); }
public List<ConstraintInfo> Copyfrom(EntityInfo info) { cons.Clear(); ConstraintInfo con = null; for (int i = 0; i < info.constraints.Count; i++) { con = new ConstraintInfo(); con = info.constraints[i]; cons.Add(con); } //foreach (ConstraintInfo co in info.constraints) //{ // cons.Add(co.Copy()); //} return cons; }
public Table NewEntity(Model model1, int x, int y) { EntityInfo entity = new EntityInfo(); Table table = EntityCtrl.CRA().CreateTable(entity, x, y); entity.X = x; entity.Y =y; table.Tag = entity; table.LocationChanged += table_LocationChanged; ProTreeCtrl.Ins.CheckedModule.Entitys.Add(entity); AppConf.Ins.views_enkey.Add(entity, table); AppConf.Ins.views_tbkey.Add(table, entity); entity.ElementID = "Element" + Guid.NewGuid(); model1.Shapes.Add(entity.ElementID, table); table.SelectedChanged += properGridCtrl.Ins.table_SelectedChanged; return table; }
public Table NewTable(Model model1, EntityInfo entity) { Table table = EntityCtrl.CRA().CreateTable(entity, entity.X, entity.Y); table.Tag = entity; if (entity.ElementID == null) { entity.ElementID = "Element" + Guid.NewGuid(); } model1.Shapes.Add(entity.ElementID, table); table.LocationChanged += table_LocationChanged; table.SelectedChanged += properGridCtrl.Ins.table_SelectedChanged; AppConf.Ins.views_enkey.Add(entity, table); AppConf.Ins.views_tbkey.Add(table, entity); return table; }
public string Transfer(string pattern, EntityInfo entity, object obj) { try { EntityInfo modelInfo = obj as EntityInfo; // Fields_Express = Fields.Filter + Fields.Values; 没有头尾,中间的东东。 Dictionary<int, string> exfiltersets = RegexUtil.GetFie_FILTER_Sta_EnInfo(pattern, "Operaters"); Dictionary<int, string> exvaluesets = RegexUtil.GetFie_ValueEX_Sta_EnInfo(pattern); string Result = ""; List<AttributeInfo> columns = new List<AttributeInfo>(); foreach (IOperater op in entity.operaters) { //op.currentModel = modelinfo; columns = new List<AttributeInfo>(); foreach (int i in op.FieldIndex) { columns.Add(entity.Attributes[i]); } string OperateName = exfiltersets.ElementAt(0).Value.TrimFFSS(); string OperatePattern = exvaluesets.ElementAt(0).Value.TrimFVSS(); if (OperateName.Equals(op.Type.ToString())) { string regex = @"(?is)" + AnaConfig.COLUMN_SIM_EXP_VALUE_HEAD + ".*?" + AnaConfig.COLUMN_SIM_EXP_VALUE_END; IExTransferFactory transFactory = new ColumnExTransferFactory(); string res = ContentAnalysis.Instance().AnalyAndReplace(OperatePattern, @regex, entity, op, transFactory); Result += res; } } return Result; } catch (Exception ex) { return ExCtr.Return_EX(ex, pattern); } }
/// <summary> /// 添加一个新的外键. /// </summary> /// <param name="entity1"></param> /// <param name="att1"></param> /// <param name="entity2"></param> /// <param name="att2"></param> /// <returns></returns> public ConstraintInfo AddConstraint(string Fori_NAME, EntityInfo entity1, AttributeInfo att1, EntityInfo entity2, AttributeInfo att2) { ConstraintInfo constraint = new ConstraintInfo(); if (Fori_NAME== "") { constraint.Constraint_name = "FK_" + entity1.ClassName + "_" + att1.ColumnName + "_" + entity2.ClassName + "_" + att2.ColumnName; } constraint.Table_Name = entity1.ClassName; constraint.Column_Name = att1.ColumnName; constraint.ORDINAL_POSITION = entity1.Attributes.IndexOf(att1).ToString(); constraint.POSITION_IN_UNIQUE_CONSTRAINT = entity2.Attributes.IndexOf(att2).ToString(); constraint.REFERENCED_TABLE_NAME = entity2.ClassName; constraint.REFERENCED_COLUMN_NAME = att2.ColumnName; entity1.constraints.Add(constraint); return constraint; }
public void AddLine(EntityInfo src, EntityInfo target) { try { Model model = ClassDiagCtrl.Ins.currentModel; ConnInfo con = new ConnInfo(); con.SrcElementID = src.ElementID; con.TargetElementID = target.ElementID; con.linetype = LineType.Line; AppConf.Ins.Application.Conns.Add(con); Line line = new Line((Shape)model.Shapes[con.SrcElementID], (Shape)model.Shapes[con.TargetElementID]); formConf.conLineKeys.Add(con, line); formConf.lineConKeys.Add(line, con); model.Lines.Add(model.Lines.CreateKey(), line); } catch (Exception ex) { } }
public object Execute(object obj, EntityInfo modelinfo, string pattern) { try { List<string> regex = pattern.RegBaseStrList(@"(?is)\[.*?\]"); BaseExecute exec = new BaseExecute(); string tmpstr = ""; foreach (string str in regex) { tmpstr = str.TrimStart('[').TrimEnd(']'); string result = exec.Execute(obj, modelinfo, tmpstr) as string; pattern = pattern.Replace('[' + tmpstr + ']', result); } return pattern; } catch (Exception ex) { //如果打开检查,则返回 检查的结果,否则返回空。 return ExCtr.Return_EX(ex, pattern); } }
void cf_RefreshOpera2(EntityInfo ent) { CHECKTree.SelectedNode.Text = ent.EntityName + "[" + ent.ClassName + ",ops:" + ent.operaters.Count + "]"; CHECKTree.SelectedNode.Tag = ent; }
/// <summary> /// 找出符合条件的所有字段. /// </summary> /// <param name="filter"></param> /// <param name="modelInfo"></param> /// <returns></returns> public List<AttributeInfo> GetExpressedColumn(string filter, EntityInfo modelInfo) { FieldCtr fieldCtr = new FieldCtr(); return fieldCtr.GetFieldListByFilter(modelInfo, filter); }
public string Transfer(string content, EntityInfo modelinfo, object modelInfo) { return ""; }