private void _work_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { _dte.OutString(Properties.Resources.CollseAll); _dte.Solution.CollapseAllProject(); _dte.Solution.RebuildSln(); _dte.OutString(string.Format(Properties.Resources.BuildComplete, KeywordContainer.Resove("$ProjectName$"))); }
public KeywordView(BohemianArtifact bbshelf, Vector3 position, Vector3 size) { bookshelf = bbshelf; bookshelf.Library.SelectedArtifactChanged += new ArtifactLibrary.SelectedArtifactHandler(library_SelectedArtifactChanged); bookshelf.Library.LanguageChanged += new ArtifactLibrary.ChangeLanguageHandler(Library_LanguageChanged); this.position = position; this.size = size; draggedText = null; titleText = new SelectableText(XNA.Font, "Keywords", new Vector3(0.4f, 0, 0), bookshelf.GlobalTextColor, Color.White); titleText.InverseScale(0.8f, size.X, size.Y); WavyText.createAllLetters(bbshelf.Library.Artifacts); centerCircleRadius = 0.1f; relatedCircleRadius = centerCircleRadius * 0.5f; artifactCircles = new List<KeywordContainer>(); for (int i = 0; i < MAX_CIRCLES; i++) { KeywordContainer newContainer = new KeywordContainer(); newContainer.Circle = new SelectableEllipse(new Vector2(center.X, center.Y), relatedCircleRadius, centerCircleRadius * 0.05f, Color.White, new Color(1, 1, 1, 0), Color.Black, null); newContainer.Circle.TouchActivated += new TouchActivatedEventHandler(Circle_TouchActivated); newContainer.Circle.TouchReleased += new TouchReleaseEventHandler(Circle_TouchReleased); bookshelf.SelectableObjects.AddObject(newContainer.Circle); artifactCircles.Add(newContainer); } artifactCircles[CENTER_CIRCLE_ID].Circle.Radius = centerCircleRadius; PositionRelatedCircles(); }
/// <summary> /// 生成临时代码 /// </summary> /// <param name="info"></param> /// <returns></returns> public override bool GenerateCode(object[] info) { try { using (StreamReader reader = new StreamReader(info[1].ToString())) { while (reader.Peek() != -1) { string temp = reader.ReadLine(); temp = KeywordContainer.Replace(temp); TempBuild.AppendLine(temp); } } if ((bool)info[2]) { KeywordContainer.RegistSource(TemplateName, TempBuild.ToString()); TempBuild.Clear(); } return(true); } catch (Exception ex) { throw ex; } }
/// <summary> /// 确定事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOk_Click(object sender, EventArgs e) { KeywordContainer.RegistSource("$ProjectName$", ProjectName); KeywordContainer.RegistSource("$Infrastructure$", Infrastructure); KeywordContainer.RegistSource("$IApplication$", IApplica); KeywordContainer.RegistSource("$Application$", Applica); KeywordContainer.RegistSource("$Data2Object$", Data2Object); KeywordContainer.RegistSource("$DomainContext$", DomainContxt); KeywordContainer.RegistSource("$DomainEntity$", DomainEntity); KeywordContainer.RegistSource("$Service$", Service); PrjCmdId.SetProjectName(PrjCmdId.Infrastructure, Infrastructure); PrjCmdId.SetProjectName(PrjCmdId.IApplication, IApplica); PrjCmdId.SetProjectName(PrjCmdId.Application, Applica); PrjCmdId.SetProjectName(PrjCmdId.Data2Object, Data2Object); PrjCmdId.SetProjectName(PrjCmdId.Service, Service); PrjCmdId.SetProjectName(PrjCmdId.DomainContext, DomainContxt); PrjCmdId.SetProjectName(PrjCmdId.DomainEntity, DomainEntity); if (this.chkService.Checked) { KeywordContainer.RegistSource("$IsPartService$", "true"); } CodeFirstTools.TableFilterInclude = regex; CodeFirstTools.DbContextName = txtContextName.Text; KeywordContainer.RegistSource("$ContextName$", txtContextName.Text); this.DialogResult = DialogResult.OK; }
private void IniDgv() { dataGridView1.Rows.Clear(); foreach (var kv in KeywordContainer.GetAll()) { int index = this.dataGridView1.Rows.Add(); dataGridView1[0, index].Value = kv.Key; dataGridView1[1, index].Value = kv.Value; } }
/// <summary> /// 处理容器 /// </summary> /// <param name="containerArgment"></param> public override void HandleGenerateContainer(Dictionary <string, string> containerArgment) { if (containerArgment != null) { foreach (var item in containerArgment) { KeywordContainer.RegistSource(item.Key, item.Value); } } }
/// <summary> /// 转换需要生成的项目项名称(提供关键字容器的解析) /// </summary> /// <param name="guid">项目项ID</param> /// <returns></returns> public static string ConvertFileName(string guid) { string tempName = CdeCmdId.TempFileName(guid); if (tempName == null) { string modelPath = TemplateContainer.Resove <string>(guid); tempName = Path.GetFileNameWithoutExtension(modelPath) + ".cs"; } else { tempName = KeywordContainer.Replace(tempName); } return(tempName); }
/// <summary> /// 创建代码 /// </summary> /// <param name="info"></param> /// <returns></returns> public override bool GenerateCode(object[] info) { try { StringBuilder _tempBuild = new StringBuilder(); using (StreamReader reader = new StreamReader(info[3].ToString())) { while (reader.Peek() != -1) { string temp = reader.ReadLine(); temp = KeywordContainer.Replace(temp); _tempBuild.AppendLine(temp); } } string guid = info[0].ToString(); Project prjt = info[2] as Project; string folder = string.Empty; Encoding encode = Encoding.Default; if (guid == CdeCmdId.ServiceId.WebConfig) { encode = Encoding.UTF8; } if (CdeCmdId.HasForlder(guid, out folder)) { prjt.AddFromFileString(_tempBuild.ToString(), folder, StringConverter.ConvertFileName(guid), encode); } else { prjt.AddFromFileString(_tempBuild.ToString(), StringConverter.ConvertFileName(guid), encode); } return(true); } catch (Exception ex) { throw ex; } }
/// <summary> /// This function is the callback used to execute a command when the a menu item is clicked. /// See the Initialize method to see how the menu item is associated to this function using /// the OleMenuCommandService service and the MenuCommand class. /// </summary> private void CreateCode(object sender, EventArgs e) { if (CommonContainer.CommonServer == null) { CommonContainer.CommonServer = (DTE)(GetService(typeof(DTE))); } CommonContainer.CommonServer.OutString(Resources.BeginCollectInfo, true); //获取项目的信息 FormMain frm = new FormMain(); if (frm.ShowDialog() != DialogResult.OK) { return; } FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.RootFolder = Environment.SpecialFolder.MyComputer; dialog.Description = Resources.SolutionPath; if (dialog.ShowDialog() == DialogResult.OK) { string projectName = KeywordContainer.Resove("$ProjectName$"); string space = IniManager.ReadString(Resources.NodeName, Resources.NameSpaceName, ""); CommonContainer.CommonServer.Solution.Create(string.Format("{1}.{0}.sln", projectName, space), string.Format("{1}.{0}", projectName, space)); CommonContainer.CommonServer.Solution.SaveAs(Path.Combine(dialog.SelectedPath, string.Format("{1}.{0}.sln", projectName, space))); CommonContainer.SolutionPath = dialog.SelectedPath; } else { return; } SolutionStrategy strategy = new SolutionStrategy(); strategy.BeginStrategy(); }
/// <summary> /// 添加构架应用程序 /// </summary> /// <param name="ProjectCommon"></param> private void NewProject() { try { bool allowNew = true; bool isPartService = KeywordContainer.Resove("$IsPartService$") == "true"; GenerateContext context = new GenerateContext(); context.GeneratedOne += context_GeneratedOne; CodeGenerate generateCode = new CodeGenerate(); TempGenerate generateTemp = new TempGenerate(); generateTemp.TempBuild = new StringBuilder(); generateTemp.TemplateName = "$DBContextContent$"; TempGenerate generateProTemp = new TempGenerate(); generateProTemp.TempBuild = new StringBuilder(); generateProTemp.TemplateName = "$ProfileContent$"; TempGenerate serverProTemp = new TempGenerate(); serverProTemp.TempBuild = new StringBuilder(); serverProTemp.TemplateName = "$ServiceContent$"; TempGenerate iServerProTemp = new TempGenerate(); iServerProTemp.TempBuild = new StringBuilder(); iServerProTemp.TemplateName = "$IServiceContent$"; TempGenerate containerTemp = new TempGenerate(); containerTemp.TempBuild = new StringBuilder(); containerTemp.TemplateName = "$ContainerContent$"; Dictionary <string, string> container = new Dictionary <string, string>(); string str = string.Empty; if (CodeFirstTools.DataType == "MicrosoftSqlServer") { str = "<add name=\"" + CodeFirstTools.DbContextName + "\" providerName=\"" + CodeFirstTools.ProviderName + "\" connectionString=\"" + CodeFirstTools.ConnectionString + ";MultipleActiveResultSets=True;Pooling=True;\"/>"; } else { str = "<add name=\"" + CodeFirstTools.DbContextName + "\" providerName=\"Oracle.DataAccess.Client\" connectionString=\"" + CodeFirstTools.ConnectionString + "\"/>"; } int totalPercent = CodeFirstLogic.Tables.Count; #region 循环实体 _processCurrentCount = 0; _processTotalCount = CodeFirstLogic.Tables.Count; _totalPercent = 0.6f; //循环实体 foreach (Table tbl in CodeFirstLogic.Tables.Where(t => !t.IsMapping).OrderBy(x => x.NameHumanCase)) { _processCurrentCount++; Dictionary <string, string> keycontainer = new Dictionary <string, string>(); keycontainer.Add("$Entity$", tbl.Name); keycontainer.Add("$Data2Obj$", tbl.NameHumanCase); keycontainer.Add("$Schema$", tbl.Schema); keycontainer.Add("$MapPrimaryKey$", tbl.PrimaryKeyNameHumanCase()); string xmlPath = Path.Combine(CommonContainer.SolutionPath, CommonContainer.xmlName); xmlManager.WriteEntity(tbl.Name, tbl.NameHumanCase, xmlPath); StringBuilder build = new StringBuilder(); StringBuilder entityBuild = new StringBuilder(); StringBuilder dtoBuild = new StringBuilder(); //主键 foreach (Column col in tbl.Columns.Where(x => !x.Hidden).OrderBy(x => x.Ordinal)) { build.AppendLine(col.Config); entityBuild.AppendLine(" " + CodeFirstLogic.WritePocoColumn(col)); dtoBuild.AppendLine(" [DataMember]"); dtoBuild.AppendLine(string.Format(" public {0}{1} {2} {3}", col.PropertyType, CodeFirstTools.CheckNullable(col), col.PropertyName, "{get; set; }")); } keycontainer.Add("$MapProperty$", build.ToString()); keycontainer.Add("$Property$", entityBuild.ToString()); keycontainer.Add("$Data2ObjContent$", dtoBuild.ToString()); build.Clear(); entityBuild.Clear(); dtoBuild.Clear(); //外键 if (tbl.HasForeignKey) { foreach (Column col in from c in tbl.Columns.OrderBy(x => x.Ordinal) where c.ConfigFk != null select c) { build.AppendLine(col.ConfigFk); } foreach (Column col in from c in tbl.Columns.OrderBy(x => x.EntityFk) where c.EntityFk != null select c) { entityBuild.AppendLine(" " + col.EntityFk); } } keycontainer.Add("$MapForeignKey$", build.ToString()); keycontainer.Add("$ForeignKey$", entityBuild.ToString()); build.Clear(); entityBuild.Clear(); //导航属性 if (tbl.ReverseNavigationProperty.Count() > 0) { foreach (string s in tbl.ReverseNavigationProperty.OrderBy(x => x)) { entityBuild.AppendLine(" " + s); } } keycontainer.Add("$Navigation$", entityBuild.ToString()); entityBuild.Clear(); //构造函数 if (tbl.Columns.Where(c => c.Default != string.Empty).Count() > 0 || tbl.ReverseNavigationCtor.Count() > 0) { entityBuild.AppendLine(" public " + tbl.Name + "()"); entityBuild.AppendLine(" {"); foreach (Column col in tbl.Columns.OrderBy(x => x.Ordinal).Where(c => c.Default != string.Empty)) { entityBuild.AppendLine(" " + col.PropertyName + "=" + col.Default + ";"); } foreach (string s in tbl.ReverseNavigationCtor) { entityBuild.AppendLine(" " + s); } entityBuild.AppendLine(" }"); } keycontainer.Add("$Constructor$", entityBuild.ToString()); entityBuild.Clear(); context.injection(generateCode, CdeCmdId.DomainContextId.IRepository, allowNew, keycontainer); //IRepository context.injection(generateCode, CdeCmdId.InfrastructureId.Repository, allowNew, keycontainer); //Repositor context.injection(generateCode, CdeCmdId.ApplicationId.Application, allowNew, keycontainer); //Application context.injection(generateCode, CdeCmdId.IApplicationId.IApplication, allowNew, keycontainer); //IApplication context.injection(generateCode, CdeCmdId.Data2ObjectId.Data2Obj, allowNew, keycontainer); //Data2Obj context.injection(generateCode, CdeCmdId.InfrastructureId.Map, allowNew, keycontainer); //Map context.injection(generateCode, CdeCmdId.DomainEntityId.Entity, allowNew, keycontainer); //Entity context.injection(generateProTemp, CdeCmdId.Data2ObjectId.Profile.UnFix, _processCurrentCount == CodeFirstLogic.Tables.Count, keycontainer); //ProfiTemp context.injection(generateTemp, CdeCmdId.InfrastructureId.DBContext.UnFix, _processCurrentCount == CodeFirstLogic.Tables.Count, keycontainer); //DbContextTemp context.injection(serverProTemp, CdeCmdId.ServiceId.Service.UnFix, isPartService || _processCurrentCount == CodeFirstLogic.Tables.Count, keycontainer); //ServerTemp context.injection(iServerProTemp, CdeCmdId.ServiceId.IService.UnFix, isPartService || _processCurrentCount == CodeFirstLogic.Tables.Count, keycontainer); //IServerTemp if (isPartService) { keycontainer.Add("$ServiceName$", tbl.NameHumanCase); context.injection(generateCode, CdeCmdId.ServiceId.IService.Fix, allowNew, keycontainer); //IServer context.injection(generateCode, CdeCmdId.ServiceId.CodeBehind, allowNew, keycontainer); //CodeBehind context.injection(generateCode, CdeCmdId.ServiceId.Service.Fix, allowNew, keycontainer); //Server } context.injection(containerTemp, CdeCmdId.ServiceId.Container.UnFix, _processCurrentCount == CodeFirstLogic.Tables.Count, keycontainer); //ContainerTemp _currentTotalCount = context.Count; context.Commit(); } container.Add("$ConnectionString$", str); container.Add("$DBSchemaApp$", string.Format("<add key=\"DBSchema\" value=\"{0}\"/>", CodeFirstTools.SchemaName)); #endregion context.injection(generateCode, CdeCmdId.InfrastructureId.DbContextExtensions, allowNew, container); //DbContextExtensions context.injection(generateCode, CdeCmdId.InfrastructureId.DBContext.Fix, allowNew, null); //DbContext context.injection(generateCode, CdeCmdId.Data2ObjectId.Profile.Fix, allowNew, null); //DbContext context.injection(generateCode, CdeCmdId.InfrastructureId.ContextUnit, allowNew, null); //DbContextUnit if (!isPartService) { container.Add("$ServiceName$", KeywordContainer.Resove("$ProjectName$")); context.injection(generateCode, CdeCmdId.ServiceId.IService.Fix, allowNew, container); //IServer context.injection(generateCode, CdeCmdId.ServiceId.CodeBehind, allowNew, container); //CodeBehind context.injection(generateCode, CdeCmdId.ServiceId.Service.Fix, allowNew, container); //Server } context.injection(generateCode, CdeCmdId.ServiceId.Container.Fix, allowNew, null); //Container context.injection(generateCode, CdeCmdId.ServiceId.WebConfig, allowNew, null); //WebConfig context.injection(generateCode, CdeCmdId.ServiceId.UnityInstanceProviderServiceBehavior, allowNew, null); //UnityInstanceProviderServiceBehavior context.injection(generateCode, CdeCmdId.ServiceId.UnityInstanceProvider, allowNew, null); //UnityInstanceProvider context.injection(generateCode, CdeCmdId.ServiceId.AttachDataSignBehavior, allowNew, null); //AttachDataSignBehavior , _totalPercent = 0.8f; _processTotalCount = 1; _processCurrentCount = 1; _currentTotalCount = context.Count; context.Commit(); Project serverProject = TemplateContainer.Resove <Project>(PrjCmdId.Service); serverProject.SetLog4netWatch(); CommonContainer.CommonServer.SetStartup(serverProject); //保存解决方案 if (_dte.Solution.Saved == false) { _dte.Solution.SaveAs(_dte.Solution.FullName); KeywordContainer.SetContainer(); } } catch (Exception ex) { Utility.Help.MsgBoxHelp.ShowError("Entity2Code Error:", ex); } }
/// <summary> /// 开始执行上下文中所有的内容 /// </summary> public void Commit() { while (_gEntityQueue.Count() > 0) { GenerateEntity queue = _gEntityQueue.Dequeue(); try { queue.GenerateEngin.Generate(queue.GenerateId, queue.GenerateArgment, queue.GenerateContainer); } catch (Exception ex) { MsgBoxHelp.ShowError(string.Format(Properties.Resource.GenerateError, PrjCmdId.FindProjectName(queue.GenerateId)), ex); } finally { if (GeneratedOne != null) { GeneratedOne(this, new EventGeneratedArg(queue.GenerateId, Count, KeywordContainer.Resove("$Entity$"))); } } } }