Пример #1
0
        public async Task <QueryResponse> ExecuteQuery(QueryRequest input)
        {
            var newInput      = _fragmentService.Fix(input.Text);
            var contextResult = await _databaseContextService.GetDatabaseContext(input.ConnectionString, input.ServerType);

            if (contextResult.Code != Api.StatusCode.Ok)
            {
                return(new QueryResponse {
                    Code = contextResult.Code, Message = contextResult.Message
                });
            }
            var assmName      = Guid.NewGuid().ToIdentifierWithPrefix("a");
            var implName      = Guid.NewGuid().ToIdentifierWithPrefix("UserCodeImpl");
            var programSource = CodeTemplate
                                .Replace("##NS##", assmName)
                                .Replace("##SCHEMA##", "") // schema is linked
                                .Replace("##DB##", contextResult.Type.ToString())
                                .Replace("##IMPLNAME##", implName)
                                .Replace("##SOURCE##", newInput.Text);

            var compileResult = _hostService.StartGenerated(input.Id, programSource, assmName, contextResult.Reference);

            return(new QueryResponse
            {
                Id = Guid.NewGuid(),
                Created = DateTime.Now,
                Diagnostics = compileResult.Diagnostics,
                Code = compileResult.Code
            });
        }
Пример #2
0
        public async Task <TemplateResponse> GetTemplate(QueryRequest input)
        {
            var srcToken     = "##SOURCE##";
            var assmName     = Guid.NewGuid().ToIdentifierWithPrefix("a");
            var implName     = Guid.NewGuid().ToIdentifierWithPrefix("UserCodeImpl");
            var schemaResult = await _schemaService.GetSchemaSource(input.ConnectionString, input.ServerType, assmName, withUsings : false);

            var schemaSrc = schemaResult.Schema;
            var userText  = input.Text ?? string.Empty;

            LinePosition tokenPos;
            var          src = CodeTemplate
                               .Replace("##NS##", assmName)
                               .Replace("##DB##", "Proxy")
                               .Replace("##SCHEMA##", schemaSrc)
                               .Replace("##IMPLNAME##", implName)
                               .ReplaceToken(srcToken, userText, out tokenPos);

            return(new TemplateResponse
            {
                Template = src,
                Namespace = assmName,
                LineOffset = tokenPos.Line,
                ColumnOffset = tokenPos.Character,
                DefaultQuery = string.Format("{0}.Take(100).Dump();{1}{1}", schemaResult.DefaultTable, Environment.NewLine)
            });
        }
Пример #3
0
        private static async void Method11()
        {
            Console.WriteLine("请输入代码模板:");
            string       input    = Console.ReadLine();
            CodeProject  project  = null;
            CodeTemplate template = null;
            await _provider.ExecuteScopedWorkAsync(provider =>
            {
                IDataContract contract = provider.GetRequiredService <IDataContract>();
                CodeProject[] projects = contract.GetCodeProject(m => true);
                project  = projects[0];
                template = contract.CodeTemplates.FirstOrDefault(m => m.Name == input);
                return(Task.CompletedTask);
            });

            if (template == null)
            {
                Console.WriteLine($"模板 {input} 不存在");
                return;
            }
            ICodeGenerator generator = _provider.GetService <ICodeGenerator>();

            //var model = project.Modules.First().Entities.First();
            //var model = project.Modules.First();
            var      model = project;
            CodeFile file  = await generator.GenerateCode(template, model);

            File.WriteAllText(@"D:\Temp\11.txt", file.SourceCode);
            Console.WriteLine(file.SourceCode);
        }
Пример #4
0
        public static void Main()
        {
            string path   = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\StoredProcedures.cst");
            var    engine = new TemplateEngine(new DefaultEngineHost(System.IO.Path.GetDirectoryName(path)));

            CompileTemplateResult result = engine.Compile(path);

            if (result.Errors.Count == 0)
            {
                var         database = new DatabaseSchema(new SqlSchemaProvider(), @"Server=.;Database=PetShop;Integrated Security=True;");
                TableSchema table    = database.Tables["Inventory"];

                CodeTemplate template = result.CreateTemplateInstance();
                template.SetProperty("SourceTable", table);
                template.SetProperty("IncludeDrop", false);
                template.SetProperty("InsertPrefix", "Insert");

                template.Render(Console.Out);
            }
            else
            {
                foreach (var error in result.Errors)
                {
                    Console.Error.WriteLine(error.ToString());
                }
            }

            Console.WriteLine("\r\nPress any key to continue.");
            Console.ReadKey();
        }
Пример #5
0
        public static async Task <GenerateNode[]> ToGenerateNodesAsync(this CodeTemplate template, JObject request)
        {
            // Split Inputs
            List <JObject> inputObjects = new List <JObject> {
                new JObject()
            };

            if (template.Inputs != null && template.Inputs.Any())
            {
                foreach (var input in template.Inputs)
                {
                    JToken         jToken           = request?.Property(input.Name, StringComparison.CurrentCultureIgnoreCase)?.Value;
                    List <JObject> tempInputObjects = new List <JObject>();
                    foreach (var inputObject in inputObjects)
                    {
                        if (input.IsSplit && jToken is JArray jArray)
                        {
                            foreach (JToken arrayToken in jArray)
                            {
                                var cloneInputObject = JObject.Parse(inputObject.ToString());
                                cloneInputObject.Add(input.Name, arrayToken);
                                tempInputObjects.Add(cloneInputObject);
                            }
                        }
                        else
                        {
                            inputObject.Add(input.Name, jToken);
                            tempInputObjects.Add(inputObject);
                        }
                    }
                    inputObjects = tempInputObjects;
                }
            }

            List <GenerateNode> generateNodes = new List <GenerateNode>();

            foreach (var inputObject in inputObjects)
            {
                // 依照 AdapterNodes 的設定, 生成 TransactionAdapter
                List <CodeTemplate.TransactionTemplateNode> transactionTemplateNodes = new List <CodeTemplate.TransactionTemplateNode>();
                foreach (var templateNode in template.TemplateNodes)
                {
                    CodeTemplate.TransactionTemplateNode transactionTemplateNode = templateNode.JsonConvertTo <CodeTemplate.TransactionTemplateNode>();
                    transactionTemplateNodes.AddRange(await transactionTemplateNode.GenerateTransactionAdapter(inputObject));
                }

                // 依照 ParameterNodes 的設定, 生成可直接串接的 TransactionParameterNodes
                foreach (CodeTemplate.TransactionTemplateNode transactionTemplateNode in transactionTemplateNodes)
                {
                    await transactionTemplateNode.GenerateTransactionParameterNodes(inputObject);
                }

                // 將 TransactionTemplateNode 轉換成 GenerateNode
                foreach (CodeTemplate.TransactionTemplateNode transactionTemplateNode in transactionTemplateNodes)
                {
                    generateNodes.AddRange(await transactionTemplateNode.ToGenerateNodesAsync(inputObject));
                }
            }
            return(generateNodes.ToArray());
        }
Пример #6
0
 private void GenerateAccessoryFile(string fileName, string templateFile, CslaObjectInfo objInfo, bool activeObjects, CslaGeneratorUnit unit)
 {
     // Create Inheritance file if it does not exist
     if (!File.Exists(fileName)) //&& objInfo.ObjectType != CslaObjectType.NameValueList)
     {
         // string tPath = this._fullTemplatesPath + objInfo.OutputLanguage.ToString() + "\\InheritFromBase.cst";
         string       tPath    = _fullTemplatesPath + objInfo.OutputLanguage + templateFile;
         CodeTemplate template = GetTemplate(objInfo, tPath);
         if (template != null)
         {
             template.SetProperty("ActiveObjects", activeObjects);
             template.SetProperty("CurrentUnit", unit);
             FileStream fs = File.Open(fileName, FileMode.Create);
             OnGenerationFileName(fileName);
             StreamWriter sw = new StreamWriter(fs);
             try
             {
                 template.Render(sw);
             }
             catch (Exception e)
             {
                 ShowExceptionInformation(e);
             }
             finally
             {
                 sw.Close();
             }
         }
     }
 }
Пример #7
0
        public CodeResponse ExecuteCode(CodeRequest input)
        {
            var sw = new Stopwatch();

            sw.Start();
            var newInput = _fragmentService.Fix(input.Text);

            var assmName = Guid.NewGuid().ToIdentifierWithPrefix("a");
            var implName = Guid.NewGuid().ToIdentifierWithPrefix("UserCodeImpl");

            var programSource = CodeTemplate
                                .Replace("##SOURCE##", newInput.Text)
                                .Replace("##NS##", assmName)
                                .Replace("##IMPLNAME##", implName);

            var compileResult = _hostService.StartGenerated(input.Id, programSource, assmName);

            return(new CodeResponse
            {
                Id = Guid.NewGuid(),
                Created = DateTime.Now,
                Diagnostics = compileResult.Diagnostics,
                Code = compileResult.Code
            });
        }
Пример #8
0
        public override void Update()
        {
            if (Session.FindObject <PersistentAssemblyInfo>(info => info.Name == DynamicAssemblyCalculatedField.AttributeRegistrator.MasterDetailDynamicAssembly) == null)
            {
                IPersistentAssemblyInfo persistentAssemblyInfo = new DynamicAssemblyBuilder(Session).Build(DynamicAssemblyCalculatedField.AttributeRegistrator.DMDCustomer, DMDOrder,
                                                                                                           DMDOrderLine, DynamicAssemblyCalculatedField.AttributeRegistrator.MasterDetailDynamicAssembly);
                IPersistentClassInfo persistentClassInfo =
                    persistentAssemblyInfo.PersistentClassInfos.Single(info => info.Name == DynamicAssemblyCalculatedField.AttributeRegistrator.DMDCustomer);
                var persistentCoreTypeMemberInfo = new PersistentCoreTypeMemberInfo(persistentClassInfo.Session);
                persistentCoreTypeMemberInfo.TypeAttributes.Add(new PersistentVisibleInDetailViewAttribute(persistentCoreTypeMemberInfo.Session));
                persistentCoreTypeMemberInfo.TypeAttributes.Add(new PersistentVisibleInListViewAttribute(persistentCoreTypeMemberInfo.Session));
                persistentCoreTypeMemberInfo.TypeAttributes.Add(new PersistentVisibleInLookupListViewAttribute(persistentCoreTypeMemberInfo.Session));
                persistentCoreTypeMemberInfo.TypeAttributes.Add(new PersistentPersistentAliasAttribute(persistentCoreTypeMemberInfo.Session)
                {
                    AliasExpression = "DMDOrders.Min(OrderDate)"
                });
                persistentCoreTypeMemberInfo.Name     = "FirstOrderDate";
                persistentCoreTypeMemberInfo.DataType = DBColumnType.DateTime;
                var codeTemplateInfo = new CodeTemplateInfo(persistentCoreTypeMemberInfo.Session);
                var codeTemplate     = new CodeTemplate(codeTemplateInfo.Session)
                {
                    TemplateType = TemplateType.XPCalculatedPropertyMember
                };
                codeTemplate.SetDefaults();
                codeTemplate.Name             = "CalculatedProperty";
                codeTemplateInfo.TemplateInfo = codeTemplate;

                persistentCoreTypeMemberInfo.CodeTemplateInfo = codeTemplateInfo;
                persistentClassInfo.OwnMembers.Add(persistentCoreTypeMemberInfo);
                XPObjectSpace.FindObjectSpaceByObject(persistentClassInfo).CommitChanges();
            }
        }
Пример #9
0
        public void Test1()
        {
            string       file     = resourcesFilePath + "TemplateTest1.test";
            CodeTemplate template = (new CodeTemplate(file)).ReadTemplate();

            Assert.Equal(1, template.Root.ChildNodeList.Count);
        }
Пример #10
0
        public string GetTemplatePath(CodeTemplate template)
        {
            var coreProject   = GetProject("Core");
            var templatesPath = coreProject.GetPath("Templates");

            return(System.IO.Path.Combine(templatesPath, template.TemplatePath));
        }
Пример #11
0
        public FunctionOpenResult <bool> UpdateCodeTemplateByID(CodeTemplate info)
        {
            var r = new FunctionOpenResult <bool>();

            r.Data = CodeTemplateDal.Update(info) > 0;
            return(r);
        }
Пример #12
0
        public FunctionResult <Solution> MakeCodeForDao(List <string> tables, CodeTemplate codeTemplate, string databaseConnection, String databaseName, String savePath, String modelSpacename = null)
        {
            var result = new FunctionResult <Solution>();

            result.Data = new Solution()
            {
                SolutionPath = savePath
            };
            //返回数据模型
            List <DatabaseTable> list = MariadbDao.GetTables(tables, databaseConnection, databaseName);

            //生成代码
            if (list != null)
            {
                list.ForEach(t =>
                {
                    StringBuilder codeBuilder = new StringBuilder();
                    StringBuilder xmlBuilder  = new StringBuilder();
                    if (codeTemplate.Language == CodeLanaguage.CSharp)
                    {
                        CreateCSharpDaoCode(t, codeBuilder, databaseName);
                    }
                    if (codeTemplate.Language == CodeLanaguage.Java)
                    {
                        CreateJavaDaoCode(t, codeBuilder, databaseName);
                        CreateMybatisXml(codeTemplate, t, xmlBuilder, databaseName, modelSpacename);
                        BuilderMybatisXmlFile(xmlBuilder, savePath, t.Name);
                    }
                    BuilderDaoCodeFile(codeTemplate, codeBuilder, savePath, t.Name);
                });
            }
            return(result);
        }
Пример #13
0
 private string GenerateProcedure(CslaObjectInfo objInfo, Criteria crit, string templateName, string sprocName)
 {
     if (objInfo != null)
     {
         try
         {
             if (templateName != String.Empty)
             {
                 string       path     = _templatesDirectory + @"sprocs\" + templateName;
                 CodeTemplate template = GetTemplate(objInfo, path);
                 if (crit != null)
                 {
                     template.SetProperty("Criteria", crit);
                 }
                 template.SetProperty("IncludeParentProperties", objInfo.DataSetLoadingScheme);
                 if (template != null)
                 {
                     using (StringWriter sw = new StringWriter())
                     {
                         template.Render(sw);
                         sprocSuccess++;
                         return(sw.ToString());
                     }
                 }
             }
         }
         catch (Exception e)
         {
             sprocFailed++;
             throw (new Exception("Error generating " + GetFileNameWithoutExtension(templateName) + ": " + sprocName, e));
         }
     }
     return(String.Empty);
 }
Пример #14
0
        public override string GetLauncher(string StagerCode, byte[] StagerAssembly, Grunt grunt, ImplantTemplate template)
        {
            this.StagerCode         = StagerCode;
            this.Base64ILByteString = Convert.ToBase64String(StagerAssembly);
            string code = CodeTemplate.Replace("{{GRUNT_IL_BYTE_STRING}}", this.Base64ILByteString);

            List <Compiler.Reference> references = grunt.DotNetFrameworkVersion == Common.DotNetVersion.Net35 ? Common.DefaultNet35References : Common.DefaultNet40References;

            references.Add(new Compiler.Reference
            {
                File = grunt.DotNetFrameworkVersion == Common.DotNetVersion.Net35 ? Common.CovenantAssemblyReferenceNet35Directory + "System.Configuration.Install.dll" :
                       Common.CovenantAssemblyReferenceNet40Directory + "System.Configuration.Install.dll",
                Framework = grunt.DotNetFrameworkVersion,
                Enabled   = true
            });
            this.DiskCode = Convert.ToBase64String(Compiler.Compile(new Compiler.CompilationRequest
            {
                Language            = template.Language,
                Source              = code,
                TargetDotNetVersion = grunt.DotNetFrameworkVersion,
                OutputKind          = OutputKind.DynamicallyLinkedLibrary,
                References          = references
            }));

            this.LauncherString = "InstallUtil.exe" + " " + "/U" + " " + "file.dll";
            return(this.LauncherString);
        }
Пример #15
0
        public void Resolve()
        {
            _c.Lines(2);
            _c.HorizontalRule();
            Console.WriteLine(@"** LOCATION CONFLICT (Select a location) **");
            Console.WriteLine(Description);
            _c.Line();
            int count            = 1;
            int selectedTemplate = -1;

            foreach (CodeTemplate template in ConflictedTemplates)
            {
                Console.WriteLine(count + @". " + template.Description + @" from " + template.ParentGuid + @"-" + template.Id);
                Console.WriteLine(@"	Location: "+ template.Category);
                count++;
            }
            Console.Write(@"Your choice is: ");
            selectedTemplate = Int32.Parse(Console.ReadKey().KeyChar.ToString());
            while (selectedTemplate - 1 < 0 || selectedTemplate - 1 >= ConflictedTemplates.Count)
            {
                Console.WriteLine(@"Invalid Selection. Choose a template from the list above.");
                selectedTemplate = Int32.Parse(Console.ReadKey().KeyChar.ToString());
            }
            ResolutionTemplate = ConflictedTemplates.ElementAt(selectedTemplate - 1);
        }
Пример #16
0
        private ExpansionTemplate Convert(CodeTemplate codeTemplate)
        {
            var codeSnippet = new CodeSnippet();

            codeSnippet.Code        = codeTemplate.Code;
            codeSnippet.Description = codeTemplate.Description;
            codeSnippet.Fields      = new List <ExpansionField> ();
            foreach (var variable in codeTemplate.Variables)
            {
                var field = new ExpansionField();
                field.Editable = variable.IsEditable;
                field.Function = ConvertFunctionName(variable.Function);
                field.ToolTip  = variable.ToolTip;
                field.Default  = variable.Default ?? "";
                if ("GetConstructorModifier()" == variable.Function && string.IsNullOrEmpty(field.Default))
                {
                    field.Default = "public ";
                }
                field.ID = variable.Name;
                codeSnippet.Fields.Add(field);
            }
            codeSnippet.Language = codeTemplate.MimeType;
            codeSnippet.Shortcut = codeTemplate.Shortcut;
            codeSnippet.Title    = codeTemplate.Shortcut;
            return(new ExpansionTemplate(codeSnippet));
        }
Пример #17
0
        internal void InsertTemplate(CodeTemplate template, MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext context)
        {
            using (var undo = editor.OpenUndoGroup()) {
                var result = template.InsertTemplateContents(editor, context);

                var links = result.TextLinks.Select(l => new Mono.TextEditor.TextLink(l.Name)
                {
                    Links         = l.Links.Select(s => (ISegment) new TextSegment(s.Offset, s.Length)).ToList(),
                    IsEditable    = l.IsEditable,
                    IsIdentifier  = l.IsIdentifier,
                    GetStringFunc = l.GetStringFunc != null ? (Func <Func <string, string>, Mono.TextEditor.PopupWindow.IListDataProvider <string> >)(arg => new ListDataProviderWrapper(l.GetStringFunc(arg))) : null
                }).ToList();
                var tle = new TextLinkEditMode(this, result.InsertPosition, links);
                tle.TextLinkMode = TextLinkMode.General;
                if (tle.ShouldStartTextLinkMode)
                {
                    tle.OldMode = CurrentMode;
                    tle.StartMode();
                    CurrentMode = tle;
                    GLib.Timeout.Add(10, delegate {
                        tle.UpdateTextLinks();
                        return(false);
                    });
                }
            }
        }
        ///--------------------------------------------------------------------------------
        /// <summary>This method loads templates from a directory into the view model.</summary>
        ///
        /// <param name="directory">The directory to load.</param>
        /// <param name="refresh">Flag whether to refresh view.</param>
        ///--------------------------------------------------------------------------------
        public void LoadTemplateDirectory(string directory, bool refresh = true)
        {
            if (!String.IsNullOrEmpty(directory) && Directory.Exists(directory))
            {
                foreach (string file in Directory.GetFiles(directory, "*.mpt"))
                {
                    CodeTemplate template = new CodeTemplate();
                    template.TemplateID = Guid.NewGuid();
                    template.Solution   = Solution;
                    template.FilePath   = file;
                    template.LoadTemplateFileData();
                    Solution.CodeTemplates[template.TemplateKey] = template;
                    AddTemplate(new CodeTemplateViewModel(template, Solution), refresh);
                }
                foreach (string subDirectory in Directory.GetDirectories(directory))
                {
                    LoadTemplateDirectory(subDirectory, refresh);
                }
            }

            if (refresh == true)
            {
                Refresh(true);
            }
        }
Пример #19
0
        /// <summary>
        /// 根据模板名称得到模板
        /// </summary>
        /// <param name="TemplateName"></param>
        /// <returns></returns>
        public CodeTemplate GetCodeTemplate(string TemplateName)
        {
            CodeTemplateCompiler compiler = new CodeTemplateCompiler(this.CodeTemplateInfo.DirectoryName + TemplateName);

            CodeTemplate template = null;

            compiler.CodeTemplateInfo.ToString();
            compiler.Compile();
            if (compiler.Errors.Count == 0)
            {
                template = compiler.CreateInstance();
            }
            else
            {
                System.Text.StringBuilder errorMessage = new System.Text.StringBuilder();
                for (int i = 0; i < compiler.Errors.Count; i++)
                {
                    errorMessage.Append(compiler.Errors[i].ToString()).Append("\r\n");
                }
                throw new ApplicationException(errorMessage.ToString());
            }

            //复制属性
            if (template != null)
            {
                CopyPropertiesTo(template);
            }

            return(template);
        }
Пример #20
0
        /// <summary>
        /// 通用根据模板生成文件方法
        /// </summary>
        /// <param name="isRender"></param>
        /// <param name="templatePath"></param>
        /// <param name="directory"></param>
        /// <param name="Tables"></param>
        /// <param name="fileName"></param>
        public void RenderToFileByTablesFixFileName(bool isRender, string templatePath, string directory, TableSchemaCollection Tables, string fileName = null)
        {
            if (isRender)
            {
                if (directory.IndexOf("{dbname}") >= 0)
                {
                    directory = directory.Replace("{dbname}", Tables[0].Database.Name);
                }
                if (string.IsNullOrWhiteSpace(fileName))
                {
                    fileName = Tables[0].Database.Name;
                }
                else
                {
                    if (!string.IsNullOrWhiteSpace(fileName) && fileName.IndexOf("{dbname}") >= 0)
                    {
                        fileName = fileName.Replace("{dbname}", Tables[0].Database.Name);
                    }
                }
                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
                //载入子模板
                CodeTemplate template = GetCodeTemplate(templatePath);

                //CopyPropertiesTo(template);

                template.SetProperty("Tables", Tables);

                template.RenderToFile(directory + fileName, true);

                Response.WriteLine(templatePath + "代码生成完毕!");
            }
        }
Пример #21
0
        public static void RunTableTemplate(CodeTemplate Parent, TableSchema SourceTable, string Path, string Template, string Output, bool debug)
        {
            // admin datamodel
            try
            {

                PreserveRegionsMergeStrategy strategy = new PreserveRegionsMergeStrategy("^[ \t]*(?i:Custom)", "C#");
                CodeTemplate template = null;
                if (!debug)
                {
                    template = Parent.GetCodeTemplateInstance(Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Template);
                }
                else
                {
                    template = CompileTemplate(Parent, Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Template);
                }

                if (template != null)
                {
                    template.SetProperty("SourceTable", SourceTable);
                    template.RenderToFile(Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Output, strategy);
                    Parent.Response.WriteLine("File: " + Output + " Created Successfully");
                }
                else
                {
                    Parent.Response.WriteLine("Template is null: " + Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Template);
                }
            }
            catch (Exception ex)
            {
                Parent.Response.WriteLine("Template: " + Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Template);
                Parent.Response.WriteLine("Error: " + ex.Message);
                Parent.Response.WriteLine("StackTrace: " + ex.StackTrace);
            }
        }
Пример #22
0
        public override string GetLauncher(Listener listener, Grunt grunt, HttpProfile profile)
        {
            this.StagerCode         = listener.GetGruntStagerCode(grunt, profile);
            this.Base64ILByteString = listener.CompileGruntStagerCode(grunt, profile, this.OutputKind, true);
            string code = CodeTemplate.Replace("{{GRUNT_IL_BYTE_STRING}}", this.Base64ILByteString);

            List <Compiler.Reference> references = grunt.DotNetFrameworkVersion == Common.DotNetVersion.Net35 ? Common.DefaultNet35References : Common.DefaultNet40References;

            references.Add(new Compiler.Reference
            {
                File      = "System.Configuration.Install.dll",
                Framework = grunt.DotNetFrameworkVersion,
                Enabled   = true
            });
            this.DiskCode = Convert.ToBase64String(Compiler.Compile(new Compiler.CompilationRequest
            {
                Source = code,
                TargetDotNetVersion = grunt.DotNetFrameworkVersion,
                OutputKind          = OutputKind.DynamicallyLinkedLibrary,
                References          = references
            }));

            this.LauncherString = "InstallUtil.exe" + " " + "/U" + " " + "file.dll";
            return(this.LauncherString);
        }
Пример #23
0
        public FunctionResult <Solution> MakeCodeForService(List <string> tables, CodeTemplate codeTemplate, string databaseConnection, string databaseName, string savePath)
        {
            var result = new FunctionResult <Solution>();

            result.Data = new Solution()
            {
                SolutionPath = savePath
            };
            //返回数据模型
            List <DatabaseTable> list = MariadbDao.GetTables(tables, databaseConnection, databaseName);

            //生成代码
            if (list != null)
            {
                StringBuilder codeBuilder = null;
                list.ForEach(t =>
                {
                    if (codeTemplate.Language == CodeLanaguage.CSharp)
                    {
                        codeBuilder = CreateForCSharp(t);
                    }
                    else
                    {
                        codeBuilder = CreateForJava(t);
                    }
                    BuilderServiceFile(codeTemplate, codeBuilder, savePath, t.Name);
                });
            }
            return(result);
        }
Пример #24
0
 public EACodeLanguage(string name, IPointerMaker pointerMaker, Tuple <string, List <Priority> >[][] pointerList, ICodeTemplateStorer codeStorer, StringComparer stringComparer)
 {
     this.name        = name;
     this.codeStorage = codeStorer;
     foreach (ICodeTemplate codeTemplate1 in (IEnumerable <ICodeTemplate>)codeStorer)
     {
         CodeTemplate codeTemplate2 = codeTemplate1 as CodeTemplate;
         if (codeTemplate2 != null)
         {
             codeTemplate2.PointerMaker = pointerMaker;
         }
     }
     this.reservedWords = new List <string>()
     {
         offsetChanger,
         alignOffset,
         currentOffset,
         messagePrinter,
         errorPrinter,
         warningPrinter,
         pushOffset,
         popOffset,
         assertion,
         protectCode
     };
     this.assembler    = new EAExpressionAssembler(this.codeStorage, (IParser <Token, IExpression <int> >)null);
     this.disassembler = new EACodeLanguageDisassembler(this.codeStorage, pointerMaker, pointerList);
 }
Пример #25
0
        void Init()
        {
            List <CodeTemplateGroup> groups = new List <CodeTemplateGroup>();

            CodeTemplateGroup group = new CodeTemplateGroup();

            group.TemplateGroupName = "Group Test 1";

            CodeTemplate tmp = new CodeTemplate();

            tmp.TemplateName = "Test";

            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes("echo heeloo");

            tmp.TemplateCode = System.Convert.ToBase64String(plainTextBytes);
            List <CodeTemplate> temps = new List <CodeTemplate>();

            temps.Add(tmp);

            group.CodeTemplateList = temps;

            groups.Add(group);

            string xml = Utility.Serializer.XML.Serialize(groups);

            File.WriteAllText("CodeTemplates.XML", xml);
        }
Пример #26
0
 private void btnOke_Click(object sender, EventArgs e)
 {
     this.CodeTemplate = new CodeTemplate(txtTemplateName.Text, Utility.StringUtility.Base64Encode(txtCode.Text));
     this.CodeTemplate.DefaultFilename = txtDefaultFilename.Text;
     this.IsCanceled = false;
     this.Close();
 }
Пример #27
0
        public static void RunTableTemplate(CodeTemplate Parent, TableSchema SourceTable, string Path, string Template, string Output, bool debug)
        {
            // admin datamodel
            try
            {
                PreserveRegionsMergeStrategy strategy = new PreserveRegionsMergeStrategy("^[ \t]*(?i:Custom)", "C#");
                CodeTemplate template = null;
                if (!debug)
                {
                    template = Parent.GetCodeTemplateInstance(Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Template);
                }
                else
                {
                    template = CompileTemplate(Parent, Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Template);
                }

                if (template != null)
                {
                    template.SetProperty("SourceTable", SourceTable);
                    template.RenderToFile(Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Output, strategy);
                    Parent.Response.WriteLine("File: " + Output + " Created Successfully");
                }
                else
                {
                    Parent.Response.WriteLine("Template is null: " + Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Template);
                }
            }
            catch (Exception ex)
            {
                Parent.Response.WriteLine("Template: " + Parent.CodeTemplateInfo.DirectoryName + Path + "\\" + Template);
                Parent.Response.WriteLine("Error: " + ex.Message);
                Parent.Response.WriteLine("StackTrace: " + ex.StackTrace);
            }
        }
Пример #28
0
    /// <summary>
    /// 生成数据仓库代码
    /// </summary>
    /// <param name="tables"></param>
    /// <returns></returns>
    public int GenerateBusinessRepositoryClasses(ViewSchemaCollection views)
    {
        if (views == null || views.Count <= 0)
        {
            return(0);
        }
        int          tempIntTableNum            = 0;
        CodeTemplate BusinessRepositoryTemplate = GetCodeTemplate("ViewBusinessRepository.cst");

        foreach (ViewSchema view in views)
        {
            BusinessRepositoryTemplate.SetProperty("TargetView", view);
            BusinessRepositoryTemplate.SetProperty("CommonNamespace", CommonNamespace);
            BusinessRepositoryTemplate.SetProperty("BusinessRepositoryNamespace", BusinessRepositoryNamespace);
            BusinessRepositoryTemplate.SetProperty("EntityNamespace", EntityNamespace);
            BusinessRepositoryTemplate.SetProperty("DBUtilityNamespace", DBUtilityNamespace);
            BusinessRepositoryTemplate.SetProperty("CreatePerson", CreatePerson);
            BusinessRepositoryTemplate.SetProperty("CompanyName", CompanyName);
            BusinessRepositoryTemplate.SetProperty("BusinessRepositorySuffix", BusinessRepositorySuffix);
            BusinessRepositoryTemplate.SetProperty("FileDesc", "表[" + view.Name + "]的 数据仓库代码");
            string tempFilePath = string.Format(@"{0}{1}\{2}", this.OutputDirectory, BusinessRepositoryNamespace, BusinessRepositoryTemplate.GetFileName());
            BusinessRepositoryTemplate.RenderToFile(tempFilePath, true);
            WriteInfo("成功在路径[" + this.OutputDirectory + BusinessRepositoryNamespace + "] 生成 BusinessReposity 层代码文件:" + BusinessRepositoryTemplate.GetFileName() + "");
            tempIntTableNum++;
        }
        WriteInfo("-----成功在路径[" + this.OutputDirectory + BusinessRepositoryNamespace + "] 生成:" + tempIntTableNum + " 个 BusinessReposity 层代码文件-----");
        return(tempIntTableNum);
    }
        public override string GetLauncher(string StagerCode, byte[] StagerAssembly, Grunt grunt, ImplantTemplate template)
        {
            this.StagerCode         = StagerCode;
            this.Base64ILByteString = Convert.ToBase64String(StagerAssembly);

            var code = CodeTemplate.Replace("{{GRUNT_IL_BYTE_STRING}}", this.Base64ILByteString);

            var references = grunt.DotNetVersion == Common.DotNetVersion.Net35 ? Common.DefaultNet35References : Common.DefaultNet40References;

            references.Add(new Compiler.Reference
            {
                File      = grunt.DotNetVersion == Common.DotNetVersion.Net35 ? Common.CovenantAssemblyReferenceNet35Directory + "System.ServiceProcess.dll" : Common.CovenantAssemblyReferenceNet40Directory + "System.ServiceProcess.dll",
                Framework = grunt.DotNetVersion,
                Enabled   = true
            });

            this.DiskCode = Convert.ToBase64String(Compiler.Compile(new Compiler.CsharpFrameworkCompilationRequest
            {
                Language            = template.Language,
                Source              = code,
                TargetDotNetVersion = grunt.DotNetVersion,
                OutputKind          = OutputKind.ConsoleApplication,
                References          = references
            }));

            this.LauncherString = string.Format("{0}{1}.exe", template.Name, "SVC");
            return(this.LauncherString);
        }
Пример #30
0
        ///--------------------------------------------------------------------------------
        /// <summary>This method is used to copy/paste a new item.</summary>
        ///
        /// <param name="copyItem">The item to copy/paste.</param>
        /// <param name="savePaste">Flag to determine whether to save the results of the paste.</param>
        ///--------------------------------------------------------------------------------
        public CodeTemplateViewModel PasteCodeTemplate(CodeTemplateViewModel copyItem, bool savePaste = true)
        {
            CodeTemplate newItem = new CodeTemplate();

            newItem.ReverseInstance = new CodeTemplate();
            newItem.TransformDataFromObject(copyItem.CodeTemplate, null, false);
            newItem.TemplateID    = Guid.NewGuid();
            newItem.IsAutoUpdated = false;

            newItem.Solution = Solution;
            newItem.Solution = Solution;
            CodeTemplateViewModel newView = new CodeTemplateViewModel(newItem, Solution);

            newView.ResetModified(true);
            AddCodeTemplate(newView);

            // paste children
            if (savePaste == true)
            {
                Solution.CodeTemplateList.Add(newItem);
                newView.OnUpdated(this, null);
                Solution.ResetModified(true);
            }
            return(newView);
        }
Пример #31
0
        private async Task UpgradeFileAsync(CodeTemplate template, object oldModel, object newModel, SolutionAccessor solution, IGenerationObject oldGenerationObject, IGenerationObject newGenerationObject)
        {
            var oldContent  = ProcessTemplate(template, solution, oldModel);
            var newContent  = ProcessTemplate(template, solution, newModel);
            var oldFilePath = GetTemplateFilePath(template, solution, oldGenerationObject);
            var newFilePath = GetTemplateFilePath(template, solution, newGenerationObject);

            if (!File.Exists(oldFilePath))
            {
                _logger.LogWarning($"File {oldFilePath} is not found. Skip upgrade");
                return;
            }
            var oldFileContent = await ReadFileAsync(oldFilePath);

            var newFileContent = _merge.Merge(oldContent, newContent, oldFileContent);

            if (oldFilePath != newFilePath)
            {
                File.Delete(oldFilePath);
            }
            if (oldFileContent == newFileContent && oldFilePath == newFilePath)
            {
                return;
            }
            await WriteFileAsync(newFilePath, newFileContent);
        }
Пример #32
0
        public static CodeTemplate CompileTemplate(CodeTemplate parent, string template)
        {
            CodeTemplateCompiler compiler = new CodeTemplateCompiler(template);
            compiler.Compile();

            if (compiler.Errors.Count == 0)
            {
                return compiler.CreateInstance();
            }
            else
            {
                for (int i = 0; i < compiler.Errors.Count; i++)
                {
                    parent.Response.WriteLine(compiler.Errors[i].ToString());
                }
                return null;
            }
        }
        ICodeTemplate ParseCode(IList<LanguageElement> lines,
            ICollection<string> usedLanguages, out Priority priority)
        {
            ParsedLine header = lines[0].ParsedLine;

            priority = Priority.none;
            bool canBeRepeated = false;
            bool checkForProblems = true;
            bool endingCode = false;
            bool canBeDisAssembled = true;
            bool canBeAssembled = true;
            int indexMode = 1;
            bool itemList = false;
            byte endingByte = 0;
            int offsetMod = 4;

            #region Flags

            foreach (string item in header.flags)
            {
                if (item.StartsWith("language") || item.StartsWith("game"))
                {
                    string[] languagesS = item.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 1; i < languagesS.Length; i++)
                    {
                        usedLanguages.Add(languagesS[i].Trim());
                    }
                }
                else if (item.StartsWith("priority"))
                {
                    int index = item.IndexOf(':');
                    string priorityS = item.Substring(index + 1);
                    if (Enum.GetNames(typeof(Priority)).Contains(priorityS))
                    {
                        priority = (Priority)Enum.Parse(typeof(Priority), priorityS);
                    }
                    else
                    {
                        throw new FormatException("Error in enum priority: " + item);
                    }
                }
                else if (item.StartsWith("repeatable"))
                {
                    canBeRepeated = true;
                }
                else if (item.StartsWith("unsafe"))
                {
                    checkForProblems = false;
                }
                else if (item.StartsWith("end"))
                {
                    endingCode = true;
                }
                else if (item.StartsWith("noDisassembly"))
                {
                    canBeDisAssembled = false;
                }
                else if (item.StartsWith("noAssembly"))
                {
                    canBeAssembled = false;
                }
                else if (item.StartsWith("indexMode"))
                {
                    int index = item.IndexOf(':');
                    string indexModeS = item.Substring(index + 1);
                    indexMode = int.Parse(indexModeS);
                }
                else if (item.StartsWith("terminatingList"))
                {
                    int index = item.IndexOf(':');
                    string endingByteS = item.Substring(index + 1);
                    endingByte = (byte)int.Parse(endingByteS);
                    itemList = true;
                }
                else if (item.StartsWith("offsetMod"))
                {
                    int index = item.IndexOf(':');
                    string offsetModeS = item.Substring(index + 1);
                    offsetMod = (byte)int.Parse(offsetModeS);
                }
                else
                {
                    throw new FormatException("Unknown option " +
                        item + " in parameter " + header.name);
                }
            }
            #endregion

            //if (priority == Priority.none && header.number1 == 0)
            //{
            //    throw new Exception("ID has to be non-zero for default priority.");
            //}

            header.number2 = header.number2 * indexMode;

            List<TemplateParameter> parameters = new List<TemplateParameter>();
            for (int i = 1; i < lines.Count; i++)
            {
                ParsedLine line = lines[i].ParsedLine;
                line.number1 *= indexMode;
                line.number2 *= indexMode;
                TemplateParameter param = ParsedLine.ParseParameter(line);
                parameters.Add(param);
            }

            ICodeTemplate code;
            if (itemList)
            {
                code = new TerminatingStringTemplate(header.name, parameters, endingByte, offsetMod);
            }
            else
            {
                code = new CodeTemplate(header.name, header.number1, header.number2, parameters, canBeRepeated, checkForProblems, endingCode, offsetMod, canBeAssembled, canBeDisAssembled);
            }
            return code;
        }
 private static void WriteDoc(TextWriter writer, CodeTemplate code)
 {
     writer.Write(code.Name);
     writer.Write(' ');
     foreach (var parameter in code)
     {
         if (parameter.MaxDimensions > 1)
         {
             writer.Write('[');
             for (int i = 0; i < parameter.MaxDimensions; i++)
             {
                 WriteName(writer, parameter.Name, i, parameter.MaxDimensions);
                 if (i != parameter.MaxDimensions - 1)
                 {
                     writer.Write(", ");
                 }
             }
             writer.Write("] ");
         }
         else
         {
             WriteName(writer, parameter.Name, 0, parameter.MaxDimensions);
             writer.Write(' ');
         }
     }
     writer.WriteLine();
 }
            public ObjectInfo(CodeTemplate template)
            {
                if (!TemplateHelper.IsObjectType(template.CodeTemplateInfo))
                    throw new ArgumentException(string.Format("Template '{0}' is not a business object template type", template.CodeTemplateInfo.FileName));

                Initialize(template);

                string xmlpath = (string)template.GetProperty("XmlFilePath");
                bool isFromXml = (xmlpath != null && xmlpath.Length > 0);
                if (isFromXml)
                    LoadFromXml(template);
                else
                    LoadFromSchema(template);

                if (_baseClass.Length == 0)
                {
                    //assign base class
                    switch (_objectType)
                    {
                        case ObjectType.EditableRoot:
                        case ObjectType.EditableChild:
                        case ObjectType.EditableSwitchable:
                            _baseClass = BusinessBase;
                            break;
                        case ObjectType.ReadOnlyRoot:
                        case ObjectType.ReadOnlyChild:
                            _baseClass = ReadOnlyBase;
                            break;
                        case ObjectType.EditableChildList:
                        case ObjectType.EditableRootList:
                            _baseClass = BusinessListBase;
                            break;
                        case ObjectType.ReadOnlyRootList:
                        case ObjectType.ReadOnlyChildList:
                            _baseClass = ReadOnlyListBase;
                            break;
                        case ObjectType.NameValueList:
                            _baseClass = NameValueListBase;
                            break;
                    }
                }

                //validate object
                Validate();
            }
Пример #36
0
 public void OutputTemplate(CodeTemplate template)
 {
     this.CopyPropertiesTo(template);
     template.Render(this.Response);
 }
            private void Initialize(CodeTemplate template)
            {
                _namespace = (string)template.GetProperty("ClassNamespace");
                _dalNamespace = (string)template.GetProperty("DalNamespace");
                if (_dalNamespace == string.Empty) _dalNamespace = "Dal";
                _objectName = (string)template.GetProperty("ObjectName");
                _baseClass = (string)template.GetProperty("BaseClass");

                //template settings
                _transactionType = (TransactionalTypes)template.GetProperty("TransactionalType");
                _propertyAuthorization = (PropertyAccessSecurity)template.GetProperty("PropertyAuthorization");
                _useSecurity = (bool)template.GetProperty("AuthorizationRules");
                _codeGenMethod = (CodeGenerationMethod)template.GetProperty("GenerationMethod");
                _classType = (GenerationClassType)template.GetProperty("ClassType");

                //db commands
                _fetchCommand = string.Format(FetchCommandFormat, _objectName);
                _insertCommand = string.Format(InsertCommandFormat, _objectName);
                _updateCommand = string.Format(UpdateCommandFormat, _objectName);
                _deleteCommand = string.Format(DeleteCommandFormat, _objectName);
            }
            private void LoadFromSchema(CodeTemplate template)
            {
                _objectType = TemplateHelper.ToObjectType(template.CodeTemplateInfo);

                //child, and parent name
                if (IsCollection)
                    _child = (string)template.GetProperty("ChildName");
                if (IsChild)
                    _parent = (string)template.GetProperty("ParentName");
                if (_parent == null) _parent = string.Empty;

                //child collections
                StringCollection types = (StringCollection)template.GetProperty("ChildCollectionTypes");
                StringCollection names = (StringCollection)template.GetProperty("ChildPropertyNames");
                StringCollection sets = (StringCollection)template.GetProperty("ChildEntitySets");
                if (types != null && types.Count > 0)
                {
                    for (int i = 0; i < types.Count; i++)
                    {
                        string type = types[i].TrimEnd();
                        if (type == string.Empty) continue;

                        string name = (names != null && i < names.Count) ? names[i] : type;
                        string set = (sets != null && i < sets.Count) ? sets[i] : types[i];

                        PropertyInfo prop = new PropertyInfo(name, type, set, this);
                        _properties.Add(prop);
                        _childCollection.Add(prop);
                    }
                }

                //table, view schema
                TableSchema table = (TableSchema)template.GetProperty("RootTable");
                ViewSchema view = (ViewSchema)template.GetProperty("RootView");
				CommandSchema command = (CommandSchema)template.GetProperty("RootCommand");
				int resultSetIndex = (int)template.GetProperty("ResultSetIndex");
                if (table == null && view == null && command == null)
                    throw new Exception("RootCommand, RootTable or RootView is required.");

                StringCollection uniqueColumns = (StringCollection)template.GetProperty("UniqueColumnNames");
                if (uniqueColumns == null) uniqueColumns = new StringCollection();

                StringCollection filterColumns = (StringCollection)template.GetProperty("FilterColumnNames");
                if (filterColumns == null) filterColumns = new StringCollection();

				if (command != null)
				{
                    _dbName = ((SchemaObjectBase)command).Database.Name;
                    _entityName = CsHelper.ConvertToSingular(((SchemaObjectBase)command).Name);
                    if (resultSetIndex == 0) _fetchCommand = command.Name;
                    LoadProperties(command, resultSetIndex, uniqueColumns, filterColumns);
				}
                else if (table != null)
                {
                    _dbName = ((SchemaObjectBase)table).Database.Name;
                    _entityName = CsHelper.ConvertToSingular(((SchemaObjectBase)table).Name);
                    LoadProperties(table);
                }
                else
                {
                    _dbName = ((SchemaObjectBase)view).Database.Name;
                    _entityName = CsHelper.ConvertToSingular(((SchemaObjectBase)view).Name);
                    LoadProperties(view, uniqueColumns, filterColumns);
                }
            }
            private void LoadFromXml(CodeTemplate template)
            {
                //read from xml file
                string path = (string)template.GetProperty("XmlFilePath");

                XmlTextReader xtr = new XmlTextReader(path);

                if(!MoveToObject(xtr, _objectName))
                    throw new ApplicationException(string.Format("Object {0} does not exist!", _objectName));
             
                //read object attributes
                while (xtr.MoveToNextAttribute())
	            {
                    switch (xtr.LocalName.ToLower())
                    {
                        case "namespace":
                            _namespace = xtr.Value;
                            break;
                        case "dalnamespace":
                            _dalNamespace = xtr.Value;
                            break;
                        case "access":                            
                            _access = xtr.Value;
                            break;
                        case "type":
                            _objectType = (ObjectType)Enum.Parse(typeof(ObjectType), xtr.Value, true);
                            break;
                        case "base":
                            _baseClass = xtr.Value;
                            break;
                    }
	            }
                if (_entityName == string.Empty)
                    _entityName = _objectName;

                //read object elements
                while (xtr.Read())
                {
                    if (xtr.NodeType == XmlNodeType.EndElement 
                        && xtr.LocalName.ToLower() == "object")
                        break;  //reach end of object node
                    if (xtr.NodeType == XmlNodeType.Element) {
                        switch (xtr.LocalName.ToLower())
                        {
                            case "properties":
                                LoadProperties(xtr); //read properties
                                break;
                            case "transactionaltype":
                                _transactionType = (TransactionalTypes)Enum.Parse(typeof(TransactionalTypes), xtr.ReadElementString());
                                break;
                            case "propertyauthorization":
                                _propertyAuthorization = (PropertyAccessSecurity)Enum.Parse(typeof(PropertyAccessSecurity), xtr.ReadElementString());
                                break;
                            case "authorizationrules":
                                _useSecurity = bool.Parse(xtr.ReadElementString());
                                break;
                            case "relationship":
                                while (xtr.MoveToNextAttribute())
                                {
                                    switch (xtr.LocalName.ToLower())
                                    {
                                        case "parent":
                                            _parent = xtr.Value;
                                            break;
                                        case "child":
                                            _child = xtr.Value;
                                            break;
                                    }
                                }
                                break;
                            case "dbcommands":
                                _dbName = xtr.GetAttribute("DbName");
                                while (xtr.Read())
                                {
                                    if (xtr.NodeType == XmlNodeType.EndElement
                                        && xtr.LocalName.ToLower() == "dbcommands")
                                        break;  //reach end of properties node
                                    if (xtr.NodeType == XmlNodeType.Element)
                                    {
                                        switch (xtr.LocalName.ToLower())
	                                    {
		                                    case "fetchcommand":
                                                _fetchCommand = xtr.ReadElementString();
                                                break;
                                            case "insertcommand":
                                                _insertCommand = xtr.ReadElementString();
                                                break;
                                            case "updatecommand":
                                                _updateCommand = xtr.ReadElementString();
                                                break;
                                            case "deletecommand":
                                                _deleteCommand = xtr.ReadElementString();
                                                break;
	                                    }
                                    }
                                }
                                break;
                        }
                    }
                    
                }   //whild(xtr.Read())

                xtr.Close();

            }
Пример #40
0
        public void BuildTemplate(CodeTemplate template, string projectLocation, string subFolderPath, string generatedFileName, string parentFileName)
        {
            if (!string.IsNullOrEmpty(parentFileName))
            {
                this.ExecuteTemplate(template, Path.Combine(this.OutputDirectory, this.SolutionName, this.CurrentProjectAlias, subFolderPath, parentFileName));
                this.AddFileToProject(projectLocation, subFolderPath, parentFileName, string.Empty);

                this.ExecuteTemplate(template, Path.Combine(this.OutputDirectory, this.SolutionName, this.CurrentProjectAlias, subFolderPath, generatedFileName));
                this.AddFileToProject(projectLocation, subFolderPath, generatedFileName, parentFileName);
            }
            else
            {
                this.ExecuteTemplate(template, Path.Combine(this.OutputDirectory, this.SolutionName, this.CurrentProjectAlias, subFolderPath, generatedFileName));
                this.AddFileToProject(projectLocation, subFolderPath, generatedFileName, string.Empty);
            }
        }
Пример #41
0
        public void ExecuteTemplate(CodeTemplate template, string formatPath)
        {
            this.CopyPropertiesTo(template);
            var masterTemplate = template as MasterTemplate;
            if (masterTemplate != null)
            {
                masterTemplate.RenderBody = formatPath.Contains(".gen.");
            }

            if (formatPath.Contains("{0}"))
            {
                template.RenderToFile(string.Format(formatPath, this.GetClassName(this.CurrentTable)), true);
            }
            else
            {
                template.RenderToFile(formatPath, true);
            }
        }
            private void LoadFromSchema(CodeTemplate template)
            {
                _objectType = TemplateHelper.ToObjectType(template.CodeTemplateInfo);

                //child, and parent name
                if (IsCollection)
                    _child = (string)template.GetProperty("ChildName");
                if (IsChild)
                    _parent = (string)template.GetProperty("ParentName");
                if (_parent == null) _parent = string.Empty;

                //child collections
                StringCollection types = (StringCollection)template.GetProperty("ChildCollectionNames");
                StringCollection names = (StringCollection)template.GetProperty("ChildPropertyNames");
                if (types != null && names != null && types.Count > 0 && names.Count > 0)
                {
                    int maxCount = types.Count < names.Count ? types.Count : names.Count;

                    for (int i = 0; i < maxCount; i++)
                    {
                        if (names[i].TrimEnd() != string.Empty && types[i].TrimEnd() != string.Empty)
                        {
                            PropertyInfo prop = new PropertyInfo(names[i], types[i], this);
                            _properties.Add(prop);
                            _childCollection.Add(prop);
                        }
                    }
                }

                //table, view schema
                TableSchema table = (TableSchema)template.GetProperty("RootTable");
                ViewSchema view = (ViewSchema)template.GetProperty("RootView");
				CommandSchema command = (CommandSchema)template.GetProperty("RootCommand");
				int resultSetIndex = (int)template.GetProperty("ResultSetIndex");
                if (table == null && view == null && command == null)
                    throw new Exception("RootCommand, RootTable or RootView is required.");

                StringCollection uniqueColumns = (StringCollection)template.GetProperty("UniqueColumnNames");
                if (uniqueColumns == null) uniqueColumns = new StringCollection();

                StringCollection filterColumns = (StringCollection)template.GetProperty("FilterColumnNames");
                if (filterColumns == null) filterColumns = new StringCollection();

				if (command != null)
				{
                    if(resultSetIndex==0) _fetchCommand = command.Name;
                    LoadProperties(command, resultSetIndex, uniqueColumns, filterColumns);
				}
                else if (table != null)
                {
                    LoadProperties(table);
                }
                else
                {
                    LoadProperties(view, uniqueColumns, filterColumns);
                }
            }
Пример #43
0
        public static void BuildSubTemplate(CodeTemplate parent, CodeTemplate template, IMergeStrategy strategy, string pathAndFile, string outputDir)
        {
            // instantiate the sub-template

                parent.Response.WriteLine(string.Format("Begin Build SubTemplate for file {0}...",Path.GetFileName(pathAndFile)));
                // Set up the DL project
                parent.CopyPropertiesTo(template);

                //Render the file
                if(strategy == null)
                    template.RenderToFile(Path.Combine(outputDir,pathAndFile), true);
                else
                    template.RenderToFile(Path.Combine(outputDir,pathAndFile), strategy);

                parent.Response.WriteLine(string.Format("Build of {0} Complete.",Path.GetFileName(pathAndFile)));
        }