public PageMainTemplate(IonicCompile ionicCompile, ScreenDefinition screenDef, ProjectDocument doc) { this.Compile = ionicCompile; this.ScreenDef = screenDef; this.Documnet = doc; Initial(); }
public ModelTemplate(IonicCompile ionicCompile, ProjectDocument doc, EntityDefinition def) { this.Compile = ionicCompile; this.Documnet = doc; this.EntityDef = def; InitialMembers(); }
public override void Build(CompileBase compile, ProjectDocument doc) { IonicCompile ionicCompile = compile as IonicCompile; BuildProjectConfig(ionicCompile); BuildPlatformConfig(ionicCompile); BuildEntityDefinition(ionicCompile); }
/// <summary> /// 生成项目配置文件 /// </summary> /// <param name="ionicCompile"></param> private void BuildProjectConfig(IonicCompile ionicCompile) { StringBuilder sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) { JsonWriter jsonWriter = new JsonTextWriter(sw); jsonWriter.Formatting = Formatting.Indented; var frontConfig = ionicCompile.Project.Configures.OfType <FrontEndConfigure>().FirstOrDefault(); //创建配置对象 jsonWriter.WriteStartObject(); #region jsonWriter.WritePropertyName("projectid"); jsonWriter.WriteValue(ionicCompile.ProjectId); jsonWriter.WritePropertyName("name"); jsonWriter.WriteValue(ionicCompile.Project.Identity); jsonWriter.WritePropertyName("title"); jsonWriter.WriteValue(ionicCompile.Project.Root.Title); jsonWriter.WritePropertyName("desc"); jsonWriter.WriteValue(ionicCompile.Project.Description); jsonWriter.WritePropertyName("api_endpoint"); jsonWriter.WriteValue(frontConfig.ServerUrl + "odata" + "/" + ionicCompile.Project.Identity); #endregion jsonWriter.WriteEndObject(); //获取JSON串 string output = sw.ToString(); jsonWriter.Close(); sw.Close(); var targetDirectory = new System.IO.FileInfo(new Uri(this.GetType().Assembly.CodeBase).AbsolutePath).Directory.FullName; string outputPath = Path.Combine(targetDirectory.Replace("\\Wilmar.Service\\bin\\Extension", ""), @"Wilmar.Mobile\src\config", ionicCompile.Project.Identity); outputPath = HttpUtility.UrlDecode(outputPath); if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } var file = Path.Combine(outputPath, ionicCompile.Project.Identity + ".config.ts"); if (File.Exists(file)) { File.Delete(file); } string content = string.Format("export const {0}_CONFIG=", ionicCompile.Project.Identity.ToUpper()) + output; File.WriteAllText(file, content, System.Text.UTF8Encoding.UTF8); var devFile = Path.Combine(outputPath, ionicCompile.Project.Identity + ".config.dev.ts"); if (File.Exists(devFile)) { File.Delete(devFile); } string devContent = string.Format("export const {0}_CONFIG=", ionicCompile.Project.Identity.ToUpper()) + output; File.WriteAllText(devFile, devContent, System.Text.UTF8Encoding.UTF8); } }
/// <summary> /// 生成平台配置文件 /// </summary> /// <param name="ionicCompile"></param> private void BuildPlatformConfig(IonicCompile ionicCompile) { StringBuilder sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) { JsonWriter jsonWriter = new JsonTextWriter(sw); jsonWriter.Formatting = Formatting.Indented; var frontConfig = ionicCompile.Project.Configures.OfType <FrontEndConfigure>().FirstOrDefault(); //创建配置对象 jsonWriter.WriteStartObject(); #region jsonWriter.WritePropertyName("name"); jsonWriter.WriteValue("kds3.0 Mobile"); jsonWriter.WritePropertyName("title"); jsonWriter.WriteValue("kds3.0 移动端"); jsonWriter.WritePropertyName("version"); jsonWriter.WriteValue("1.0.0"); jsonWriter.WritePropertyName("desc"); jsonWriter.WriteValue("kds3.0 移动端平台系统"); jsonWriter.WritePropertyName("logo"); jsonWriter.WriteValue("kds3.0 logo"); jsonWriter.WritePropertyName("startup_page"); jsonWriter.WriteValue(ionicCompile.Project.Identity); jsonWriter.WritePropertyName("login_page"); jsonWriter.WriteValue("Login"); jsonWriter.WritePropertyName("auth_endpoint"); jsonWriter.WriteValue(frontConfig.ServerUrl); #endregion jsonWriter.WriteEndObject(); //获取JSON串 string output = sw.ToString(); jsonWriter.Close(); sw.Close(); var targetDirectory = new System.IO.FileInfo(new Uri(this.GetType().Assembly.CodeBase).AbsolutePath).Directory.FullName; string outputPath = Path.Combine(targetDirectory.Replace("\\Wilmar.Service\\bin\\Extension", ""), @"Wilmar.Mobile\src\config", "platform"); outputPath = HttpUtility.UrlDecode(outputPath); var file = Path.Combine(outputPath, "platform.config.ts"); if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } if (File.Exists(file)) { File.Delete(file); } string content = string.Format("export const PLATFORM_CONFIG=") + output; File.WriteAllText(file, content, System.Text.UTF8Encoding.UTF8); } }
/// <summary> /// 生成方法 /// </summary> public static Dictionary <string, MetaDataMethod> RegisterMethods(IonicCompile ionicCompile, ScreenDefinition screenDef, ProjectDocument doc) { Dictionary <string, MetaDataMethod> MethodData = new Dictionary <string, MetaDataMethod>(); var items = screenDef.Children.Where(a => a.MemberType == EMemberType.Method).ToList(); foreach (var item in items) { MetaDataMethod methodMember = GetMethodContent(item); MethodData.Add(item.Name, methodMember); } return(MethodData); }
/// <summary> /// 生成属性 /// </summary> public static Dictionary <string, MetaDataProperty> RegisterPropertys(IonicCompile ionicCompile, ScreenDefinition screenDef, ProjectDocument doc) { Dictionary <string, MetaDataProperty> PropertyData = new Dictionary <string, MetaDataProperty>(); var items = screenDef.Children.Where(a => a.MemberType == EMemberType.Property).ToList(); foreach (var item in items) { MetaDataProperty propertyMember = GetPropertyContent(item); PropertyData.Add(item.Name, propertyMember); } return(PropertyData); }
/// <summary> /// 生成数据集 /// </summary> /// <param name="ionicCompile"></param> /// <param name="screenDef"></param> /// <param name="doc"></param> /// <returns></returns> public static Dictionary <string, MetaDataDataSet> RegisterDataSets(IonicCompile ionicCompile, ScreenDefinition screenDef, ProjectDocument doc) { Dictionary <string, MetaDataDataSet> DataSetData = new Dictionary <string, MetaDataDataSet>(); var items = screenDef.Children.Where(a => a.MemberType == EMemberType.DataSet || a.MemberType == EMemberType.Objects).ToList(); foreach (var item in items) { if (item.MemberType == EMemberType.DataSet) { #region 远程数据集(有实体) DataSet dats = item as DataSet; var entityItem = ionicCompile.ProjectItems.Where(a => a.Value.DocumentType == GlobalIds.DocumentType.Entity && a.Key == dats.EntityId).FirstOrDefault(); if (entityItem.Value != null) { MetaDataDataSet metaDataSet = BuildMetaDataDataSet(entityItem.Value.Name, item); if (metaDataSet != null) { DataSetData.Add(item.Name, metaDataSet); } } #endregion } else { Objects objs = item as Objects; var entityItem = ionicCompile.ProjectItems.Where(a => a.Value.DocumentType == GlobalIds.DocumentType.Entity && a.Key == objs.EntityId).FirstOrDefault(); if (entityItem.Value != null) { #region 本地对象(有实体) MetaDataDataSet metaDataSet = BuildMetaDataDataSet(entityItem.Value.Name, item); if (metaDataSet != null) { DataSetData.Add(item.Name, metaDataSet); } #endregion } else { #region 本地对象(无实体) MetaDataDataSet metaDataSet = BuildMetaDataDataSet("", item); if (metaDataSet != null) { DataSetData.Add(item.Name, metaDataSet); } #endregion } } } return(DataSetData); }
/// <summary> /// 事件生成 /// </summary> /// <param name="ionicCompile"></param> /// <param name="screenDef"></param> /// <param name="doc"></param> /// <returns></returns> public static Dictionary <string, MetaDataMethod> RegisterEvents(IonicCompile ionicCompile, ScreenDefinition screenDef, ProjectDocument doc) { Dictionary <string, MetaDataMethod> EventData = new Dictionary <string, MetaDataMethod>(); var items = screenDef.Children.Where(a => a.MemberType == EMemberType.Events).ToList(); foreach (var item in items) { foreach (var child in item.Children) { MetaDataMethod eventMember = GetEventContent(child); if (eventMember != null) { EventData.Add(child.Name, eventMember); } } } return(EventData); }
/// <summary> /// 生成屏幕参数 /// </summary> /// <param name="ionicCompile"></param> /// <param name="screenDef"></param> /// <param name="doc"></param> /// <returns></returns> public static Dictionary <string, MetaDataScreenParam> RegisterScreenParams(IonicCompile ionicCompile, ScreenDefinition screenDef, ProjectDocument doc) { Dictionary <string, MetaDataScreenParam> ScreenParamData = new Dictionary <string, MetaDataScreenParam>(); var items = screenDef.Children.Where(a => a.MemberType == EMemberType.ScreenParameters).ToList(); StringBuilder screenParams = new StringBuilder(); foreach (var item in items) { string parasStr = GetParameterContent(item); if (!string.IsNullOrEmpty(parasStr)) { parasStr = parasStr.Substring(0, parasStr.Length - 3); } screenParams.Append(parasStr); } var ScreenParamMember = new MetaDataScreenParam { Content = screenParams.ToString() }; ScreenParamData.Add(doc.Name, ScreenParamMember); return(ScreenParamData); }
/// <summary> /// 生成实体对应模型 /// </summary> /// <param name="ionicCompile"></param> private void BuildEntityDefinition(IonicCompile ionicCompile) { var targetDirectory = new System.IO.FileInfo(new Uri(this.GetType().Assembly.CodeBase).AbsolutePath).Directory.FullName; string outputPath = Path.Combine(targetDirectory.Replace("\\Wilmar.Service\\bin\\Extension", ""), @"Wilmar.Mobile\src\projects", ionicCompile.Project.Identity, "models"); outputPath = HttpUtility.UrlDecode(outputPath); if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); } //生成实体文件 var entityItems = ionicCompile.ProjectItems.Where(a => a.Value.DocumentType == GlobalIds.DocumentType.Entity).ToList(); foreach (var entityItem in entityItems) { ProjectDocument doc = entityItem.Value as ProjectDocument; var def = ionicCompile.GetDocumentBody(entityItem.Value) as EntityDefinition; var file = Path.Combine(outputPath, doc.Name + ".ts"); if (File.Exists(file)) { File.Delete(file); } string content = new ModelTemplate(ionicCompile, doc, def).TransformText(); File.WriteAllText(file, content, System.Text.UTF8Encoding.UTF8); } //生成Container文件 var ContainerFile = Path.Combine(outputPath, ionicCompile.Project.Identity + ".container.ts"); if (File.Exists(ContainerFile)) { File.Delete(ContainerFile); } string Container = new PageContainerTemplate(ionicCompile).TransformText(); File.WriteAllText(ContainerFile, Container, System.Text.UTF8Encoding.UTF8); }
public PageContainerTemplate(IonicCompile ionicCompile) { this.Compile = ionicCompile; Initial(); }
public ModuleTemplate(IonicCompile ionicCompile, ProjectDocument doc) { this.Compile = ionicCompile; this.Documnet = doc; Initial(); }