示例#1
0
        // CodeMapping Function
        public string Templates(int depth)
        {
            if (TemplateContents == null)
            {
                return(null);
            }

            var builder = new IndentStringBuilder(depth);

            for (int i = 0; i < TemplateContents.Length; i++)
            {
                if (i > 0)
                {
                    builder.AppendLine();
                }

                builder.AppendLine($"<DataTemplate x:Key=\"{TemplateNames[i]}\">");

                builder.AppendBlock(TemplateContents[i], 1);
                builder.AppendLine();

                builder.AppendLine("</DataTemplate>");
            }

            return(builder.ToString());
        }
示例#2
0
        private void GenModelCode(object sender, EventArgs args)
        {
            var codeFrm = new ShowCodeFrm();
            var model   = ModelManager.Instance().GetModel(this.FileId.Value);
            //var ns = "";
            //var p = this.Parent as FolderNode;
            //if (p != null)
            //{
            //    ns = p.NameSpace;
            //}

            var module = ModelManager.Instance().MakeSureParseModule(model.File);

            if (module == null)
            {
                System.Windows.Forms.MessageBox.Show("模块还没解析");
                return;
            }

            var builder = new IndentStringBuilder();

            //module.NameSpace = ns;
            ((WorkflowDB)module).RenderModel(builder);
            codeFrm.SetText(builder.ToString());
            codeFrm.Show();
        }
示例#3
0
        // CodeMapping Function
        public string ComponentInitialize()
        {
            var indentBuilder = new IndentStringBuilder(3);

            foreach (var kv in this.Mapper.NameContainer)
            {
                var    attr = kv.Value.GetAttribute <WPFAttribute>();
                string name = kv.Key.Trim('_');

                indentBuilder.AppendLine($"{name} = this.FindElement<{attr.Name}>(\"{name}\");");
            }

            logicCodes.Clear();
            logicCodes.AddRange(this.NativeGenerator.Generate().ToArray());

            if (logicCodes.Count > 0)
            {
                indentBuilder.AppendLine();
                indentBuilder.AppendLine("// Event Handlers");

                indentBuilder.AppendBlock(logicCodes[0]);
            }

            return(indentBuilder.ToString());
        }
示例#4
0
        // CodeMapping Function
        public string CallbackHandlers(int depth = 0)
        {
            // [0] : Handler 연결 부분
            // [1] : Data Binding 부분

            if (logicCodes.Count > 3)
            {
                var indentBuilder = new IndentStringBuilder(depth);

                for (int i = 3; i < logicCodes.Count; i++)
                {
                    indentBuilder.AppendBlock(logicCodes[i]);

                    if (i < logicCodes.Count - 1)
                    {
                        indentBuilder.AppendLine();
                        indentBuilder.AppendLine();
                    }
                }

                return(indentBuilder.ToString());
            }

            return(null);
        }
示例#5
0
        public override void Trigger(EditableView.ClickPosition.Sources source, EditableView pnlView, Transaction transaction)
        {
            Scriptable scriptable = pnlView.CurrentPage.SelectedShapes.First() as Scriptable;

            if (scriptable == null)
            {
                return;
            }
            // write the list of shapes into a byte buffer; this way we control the serialisation
            DataObject data = new DataObject();

            using (MemoryStream buffer = new MemoryStream(1000))
                using (DataWriter writer = new DataWriter(buffer, (FileMarkers)Shape.Shapes.Scriptable))
                {
                    writer.Write(scriptable);
                    data.SetData("Splash scripts", false, buffer.GetBuffer());
                }

            IndentStringBuilder output = new IndentStringBuilder();

            // store as text as well
            foreach (Scriptable.ScriptTypes type in Enum.GetValues(typeof(Scriptable.ScriptTypes)))
            {
                Script script = scriptable.GetScript(type);
                script?.WriteExportText(output, Strings.Item("SAW_ScriptType_" + type));
            }

            if (output.Length > 0)
            {
                data.SetText(output.ToString());
            }

            // store result on clipboard
            Clipboard.SetDataObject(data);
        }
示例#6
0
        private string GenerateCallback(PTrigger trigger)
        {
            var callbackBuilder = new IndentStringBuilder();

            string declareName = trigger.EventInfo.DeclaringType.GetAttribute <WPFAttribute>().Name;

            ParameterInfo[] infos = trigger.EventInfo.GetParameters();

            callbackBuilder.Append($"private async void {CallbackContainer[trigger]}(");

            for (int i = 0; i < infos.Length; i++)
            {
                string paramName = infos[i].Name;

                if (paramName == "sender")
                {
                    paramName = "oSender";
                }

                callbackBuilder.Append(infos[i].ParameterType.Name);
                callbackBuilder.Append(" ");
                callbackBuilder.Append(paramName);

                if (i < infos.Length - 1)
                {
                    callbackBuilder.Append(", ");
                }
            }

            callbackBuilder.AppendLine(")");

            // Ex: private void Button_Click(object oSender, EventArgs)

            callbackBuilder.AppendLine("{");
            //callbackBuilder.AppendLine("try", 1);
            //callbackBuilder.AppendLine("{", 1);

            callbackBuilder.AppendLine($"var sender = oSender as {declareName};", 1);
            callbackBuilder.AppendLine();
            callbackBuilder.AppendLine("{Code}");

            //callbackBuilder.AppendLine("}", 1);
            //callbackBuilder.AppendLine("catch (Exception ex)", 1);
            //callbackBuilder.AppendLine("{", 1);
            //callbackBuilder.AppendLine("MessageBox.Show(ex.ToString());", 1);
            //callbackBuilder.AppendLine("}", 1);
            callbackBuilder.Append("}");

            /*
             * Ex: private void Button_Click(object oSender, EventArgs)
             *  {
             *      var sender = oSender as {SenderType};
             *  {Code:1}
             *  }
             */

            return(callbackBuilder.ToString());
        }
示例#7
0
        protected virtual void RenderView(IndentStringBuilder builder, T_Field f, AssignOperatorInfo?op, IndentStringBuilder rightBuilder)
        {
            var p = "";

            if (rightBuilder != null)
            {
                p = rightBuilder.ToString();
            }

            //builder.AppendFormat(".{0}({1})", f.Name, p);

            builder.AppendFormat(".{0}", f.Name);

            if (op.HasValue)
            {
                builder.AppendFormat("{0}{1}", op.Value.GetDescription(), rightBuilder.ToString());
            }
        }
示例#8
0
        // CodeMapping Function
        public string WindowConstructor(int depth = 0)
        {
            var indentBuilder = new IndentStringBuilder(depth);

            if (Parameter.Option.TargetPlatform == Platform.Android)
            {
                indentBuilder.Append("this.SetAndroidStyle();");
            }

            return(indentBuilder.ToString());
        }
示例#9
0
        protected virtual void RenderView(IndentStringBuilder builder, T_Method m, IndentStringBuilder paras)
        {
            var p = "";

            if (paras != null)
            {
                p = paras.ToString();
            }

            builder.AppendFormat(".{0}({1})", m.Name, p);
        }
示例#10
0
        public virtual void AddFirst()
        {
            IndentStringBuilder orig = _sb;

            _sb = new IndentStringBuilder();

            Add();

            orig.sb.Insert(0, _sb.ToString());
            _sb = orig;
        }
示例#11
0
        // CodeMapping Function
        public string LoadDynamicAssembly(int depth = 0)
        {
            var indentBuilder = new IndentStringBuilder(depth);

            foreach (string dllName in WPFCompiler.DynamicLibraries)
            {
                indentBuilder.AppendLine($"DynamicLoadDll(\"{dllName}\");");
            }

            return(indentBuilder.ToString());
        }
示例#12
0
        private void ValidateModel(object sender, EventArgs args)
        {
            var codeFrm = new ShowCodeFrm();
            var model   = ModelManager.Instance().GetModel(this.FileId.Value);

            var module  = ModelManager.Instance().MakeSureParseModule(model.File);
            var builder = new IndentStringBuilder();

            ((ViewModelDB)module).Render(builder);
            codeFrm.SetText(builder.ToString());
            codeFrm.Show();
        }
示例#13
0
        public override void Trigger(EditableView.ClickPosition.Sources source, EditableView pnlView, Transaction transaction)
        {
            string file = FileDialog.ShowSave(FileDialog.Context.UserExport, "*.txt|*.txt");

            if (string.IsNullOrEmpty(file))
            {
                return;
            }
            IndentStringBuilder output = new IndentStringBuilder();

            CurrentDocument.WriteExportText(output);
            File.WriteAllText(file, output.ToString());
        }
示例#14
0
        // CodeMapping Function
        public string ComponentInitialize(int depth = 0)
        {
            var indentBuilder = new IndentStringBuilder(depth);

            try
            {
                foreach (var kv in this.Mapper.NameContainer)
                {
                    var    attr = kv.Value.GetAttribute <WPFAttribute>();
                    string name = kv.Key.Trim('_');

                    indentBuilder.AppendLine($"{name} = this.FindElement<{attr.Name}>(\"{name}\");");
                }

                logicCodes.Clear();
                logicCodes.AddRange(this.NativeGenerator.Generate().ToArray());

                if (logicCodes.Count > 0 && logicCodes[0].Length > 0)
                {
                    indentBuilder.AppendLine();
                    indentBuilder.AppendLine("// Event Handlers");

                    indentBuilder.AppendBlock(logicCodes[0]);
                }

                if (logicCodes.Count > 1 && logicCodes[1].Length > 0)
                {
                    indentBuilder.AppendLine();
                    indentBuilder.AppendLine();
                    indentBuilder.AppendLine("// Data Bindings");

                    indentBuilder.AppendBlock(logicCodes[1]);
                }

                if (logicCodes.Count > 2 && logicCodes[2].Length > 0)
                {
                    indentBuilder.AppendLine();
                    indentBuilder.AppendLine();
                    indentBuilder.AppendLine("// Template Setting");

                    indentBuilder.AppendBlock(logicCodes[2]);
                }
            }
            catch (System.Exception e)
            {
            }

            return(indentBuilder.ToString());
        }
示例#15
0
 public override void Add()
 {
     if (_t.IsInterface)
     {
         IndentStringBuilder tempsb = _sb;
         _sb = new IndentStringBuilder();
         base.Add();
         string fname = _t.FullCLRName.Replace(_t.CLRName, _t.Name);
         string res   = _sb.ToString().Replace(_t.FullCLRName + "::", fname + "::");
         _sb = tempsb;
         _sb.AppendLine(res);
     }
     else
     {
         base.Add();
     }
 }
示例#16
0
        private void ValidateModel(object sender, EventArgs args)
        {
            var codeFrm = new ShowCodeFrm();
            var model   = ModelManager.Instance().GetModel(this.FileId.Value);

            var module = ModelManager.Instance().MakeSureParseModule(model.File);

            if (module == null)
            {
                System.Windows.Forms.MessageBox.Show("模块还未生成");
                return;
            }

            var builder = new IndentStringBuilder();

            ((WorkflowDB)module).Render(builder);
            codeFrm.SetText(builder.ToString());
            codeFrm.Show();
        }
示例#17
0
        private void Mnu_GenerateDBCode(object sender, EventArgs args)
        {
            var codeFrm = new ShowCodeFrm();
            var model   = ModelManager.Instance().GetModel(this.FileId.Value);
            var module  = ModelManager.Instance().MakeSureParseModule(model.File);

            if (module == null)
            {
                System.Windows.Forms.MessageBox.Show("模块还没解析");
                return;
            }

            var builder = new IndentStringBuilder();

            //module.NameSpace = ns;
            ((DmModelDB)module).RenderSql(builder);
            codeFrm.SetText(builder.ToString());
            codeFrm.Show();
        }
示例#18
0
        // CodeMapping Function
        public string GlobalVariableDefine()
        {
            var indentBuilder = new IndentStringBuilder(2);

            for (int i = 0; i < this.Mapper.NameContainer.Count; i++)
            {
                var kv   = this.Mapper.NameContainer.ElementAt(i);
                var attr = kv.Value.GetAttribute <WPFAttribute>();

                indentBuilder.Append($"private {attr.Name} {kv.Key.Trim('_')};");

                if (i < this.Mapper.NameContainer.Count - 1)
                {
                    indentBuilder.AppendLine();
                }
            }

            return(indentBuilder.ToString());
        }
示例#19
0
        private void InsertDB_Transitions(WorkflowContext ctx, NodeInfo nodeInfo, Dictionary <string, Guid> nodes)
        {
            if (nodeInfo.Translation == null ||
                nodeInfo.Translation.Statments == null)
            {
                return;
            }

            foreach (var tr in nodeInfo.Translation.Statments)
            {
                var transition = new Sys_Transition(Guid.NewGuid());
                transition.FromNodeId = nodes[nodeInfo.Name.ToLower().Trim()];
                transition.ToNodeId   = nodes[tr.Target.ToLower().Trim()];
                var builder = new IndentStringBuilder();
                tr.Expression.Render(builder);
                transition.Condition  = builder.ToString();
                transition.CreateTime = DateTime.Now;
                ctx.Sys_Transitions.Add(transition);
            }
        }
示例#20
0
        // CodeMapping Function
        public string PageInitialize()
        {
            var indentBuilder = new IndentStringBuilder(3);

            for (int i = 0; i < this.Parameter.Screens.Length; i++)
            {
                /* Ex
                 * var p0 = GenResourceManager.LoadXaml("Screen1") as DeXignPage;
                 * dw.Add(p0);
                 */

                indentBuilder.AppendLine($"var p{i} = GenResourceManager.LoadXaml(\"{this.Parameter.Screens[i].GetPageName()}.xaml\") as DeXignPage;");
                indentBuilder.AppendLine($"dw.Add(p{i});");
            }

            /* Ex
             * dw.SetPage(p0);
             */
            indentBuilder.Append($"dw.SetPage(p0);");

            return(indentBuilder.ToString());
        }
示例#21
0
        // CodeMapping Function
        public string CallbackHandlers()
        {
            if (logicCodes.Count > 1)
            {
                var indentBuilder = new IndentStringBuilder(2);

                for (int i = 1; i < logicCodes.Count; i++)
                {
                    indentBuilder.AppendBlock(logicCodes[i]);

                    if (i < logicCodes.Count - 1)
                    {
                        indentBuilder.AppendLine();
                        indentBuilder.AppendLine();
                    }
                }

                return(indentBuilder.ToString());
            }

            return(null);
        }
示例#22
0
 protected override void RenderView(IndentStringBuilder builder, T_Field f, AssignOperatorInfo?op, IndentStringBuilder opValue)
 {
     //base.RenderView(builder, f, rightBuilder);
     if (opValue != null && opValue.Length > 0)
     {
         builder.AppendFormat(".{0}({1})", f.Name, opValue.ToString());
     }
     else
     {
         if (f.Type is T_EventType)
         {
             builder.AppendFormat(".{0}", f.Name);
         }
         else if (f.Type is T_ValidateType)
         {
             builder.AppendFormat(".{0}", f.Name);
         }
         else
         {
             builder.AppendFormat(".{0}()", f.Name);
         }
     }
 }
示例#23
0
        public string GetErrorMessage(int tabs = 0)
        {
            var errorMessage = new IndentStringBuilder
            {
                Indent = tabs
            };

            var debugText = GetDebugErrorMessage();

            errorMessage.WriteLine(debugText);

            if (InnerErrors.Length > 0)
            {
                errorMessage.Indent++;
                foreach (var innerError in InnerErrors)
                {
                    errorMessage.WriteLine(innerError.GetErrorMessage(tabs + 2));
                }

                errorMessage.Indent--;
            }

            return(errorMessage.ToString());
        }
示例#24
0
        public override void Generate(StringBuilder sb)
        {
            var entityName    = Helper.GetClassName(this.Model.Name);
            var varEntityName = Helper.GetVarName(this.Model.Name);
            var dtoName       = entityName + "Dto";
            var dtoVariable   = Helper.GetVarName(dtoName);

            var viewModel    = Helper.GetViewMode(this.Model.Name);
            var varViewModel = Helper.GetVarName(viewModel);
            var builder      = new IndentStringBuilder();

            builder.Increase();

            builder.AppendFormatLine("public ActionResult Edit{0}(Edit{0}Model model)", entityName);
            builder.IncreaseIndentLine("{");
            builder.AppendLine();
            builder.AppendLine("//model.UserId = Company.ZCH49.OaSystem.WebSite.Models.User.GetCurrentUser(this).Id;");
            builder.AppendLine("model.Action();");
            builder.AppendLine("return View(model);");
            builder.AppendLine();
            builder.DecreaseIndentLine("}");

            builder.AppendLine();

            builder.AppendLine("/*[HttpPost]");
            builder.AppendFormatLine("public ActionResult Delete{0}(Guid id)", entityName);
            builder.IncreaseIndentLine("{");
            builder.AppendLine("var model = new ReturnInfo();");
            builder.AppendLine();
            builder.AppendLine("if (id == default(Guid))");
            builder.IncreaseIndentLine("{");
            builder.AppendLine("model.Message = \"no id\";");
            builder.DecreaseIndentLine("}");
            builder.AppendLine("else");
            builder.IncreaseIndentLine("{");
            builder.AppendFormatLine(" model = Edit{0}Model.Delete{0}(id);", entityName);
            builder.DecreaseIndentLine("}");
            builder.AppendLine("return Json(model, JsonRequestBehavior.AllowGet);");
            builder.AppendLine("");
            builder.DecreaseIndentLine("}*/");

            builder.AppendLine();

            builder.AppendLine("[HttpPost]");
            builder.AppendFormatLine("public ActionResult Delete{0}(List<Guid> idList)", entityName);
            builder.IncreaseIndentLine("{");
            builder.AppendLine("var model = new ReturnInfo();");
            builder.AppendLine();
            builder.AppendLine("if (idList == null || idList.Count == 0)");
            builder.IncreaseIndentLine("{");
            builder.AppendLine("model.Message = \"no id\";");
            builder.DecreaseIndentLine("}");
            builder.AppendLine("else");
            builder.IncreaseIndentLine("{");
            builder.AppendFormatLine(" model = Edit{0}Model.Delete{0}(idList);", entityName);
            builder.DecreaseIndentLine("}");
            builder.AppendLine("return Json(model, JsonRequestBehavior.AllowGet);");
            builder.AppendLine("");
            builder.DecreaseIndentLine("}");
            sb.Append(builder.ToString());
            base.Generate(sb);
        }
示例#25
0
        //private string

        public override void Generate(StringBuilder sb)
        {
            var entityName    = Helper.GetClassName(this.Model.Name);
            var varEntityName = Helper.GetVarName(this.Model.Name);
            var dtoName       = entityName + "Dto";
            var dtoVariable   = Helper.GetVarName(dtoName);

            var viewModel    = Helper.GetViewMode(this.Model.Name);
            var varViewModel = Helper.GetVarName(viewModel);

            var serivce    = Helper.GetClassName(Helper.GetModuleName(this.Model.Name) + "Service");
            var varSerivce = "_" + Helper.GetVarName(serivce);

            var builder = new IndentStringBuilder();

            builder.AppendLine(@"using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Company.ZCH49.OaSystem.WebSite.ServiceLayer;");
            builder.AppendLine();
            builder.AppendLine("namespace xxx");
            builder.IncreaseIndentLine("{");
            builder.AppendFormatLine("public class Edit{0}Model", entityName);
            builder.IncreaseIndentLine("{");
            builder.AppendLine("#region property");
            builder.AppendLine();
            foreach (var f in this.Model.Fields)
            {
                if (f.SystemType == "String")
                {
                    builder.AppendFormatLine("public {0} {1} ", f.SystemType, f.Name);
                }
                else
                {
                    builder.AppendFormatLine("public {0}? {1} ", f.SystemType, f.Name);
                }

                builder.AppendLine("{get;set;}");
                builder.AppendLine();
            }

            builder.AppendLine("public string ErrorMsg");
            builder.AppendLine("{get;set;}");
            builder.AppendLine();

            builder.AppendLine("public bool IsSave");
            builder.AppendLine("{get;set;}");
            builder.AppendLine();

            builder.AppendLine("public bool IsPostBack");
            builder.AppendLine("{get;set;}");
            builder.AppendLine();

            builder.AppendLine("#endregion");
            builder.AppendLine();
            builder.AppendFormatLine("public {0} {1} = new {0}();", serivce, varSerivce);
            builder.AppendLine();

            builder.AppendLine("public bool IsNew");
            builder.AppendLine("{");
            builder.AppendLine("\tget");
            builder.AppendLine("\t{");
            builder.AppendLine("\t\treturn !this.Id.HasValue;");
            builder.AppendLine("\t}");
            builder.AppendLine("}");
            builder.AppendLine();

            builder.AppendLine("public void Action()");
            builder.IncreaseIndentLine("{");
            builder.AppendLine("Init();");
            builder.AppendLine();
            builder.AppendLine("if (this.IsSave)");
            builder.AppendLine("{");
            builder.AppendLine("\tthis.Save();");
            builder.AppendLine("}");
            builder.DecreaseIndentLine("}");
            builder.AppendLine();

            builder.AppendLine("private void Init()");
            builder.IncreaseIndentLine("{");
            builder.AppendLine("if (this.Id.HasValue && this.IsPostBack == false)");
            builder.IncreaseIndentLine("{");
            builder.AppendFormatLine("var rslt = {0}.Get{1}(Id.Value);", varSerivce, entityName);
            builder.AppendFormatLine("if (rslt == null || !rslt.IsSuccess || rslt.Data == null)");
            builder.IncreaseIndentLine("{");
            builder.AppendLine("this.ErrorMsg = rslt == null ? \"no this data\" : rslt.Message;");
            builder.AppendLine("return;");
            builder.DecreaseIndentLine("}");
            builder.AppendLine();

            builder.AppendLine("var info = rslt.Data;");
            foreach (var f in this.Model.Fields)
            {
                builder.AppendFormatLine("this.{0} = info.{0};", Helper.GetClassName(f.Name));
            }
            builder.DecreaseIndentLine("}");
            builder.DecreaseIndentLine("}");
            builder.AppendLine();

            builder.AppendFormatLine("private bool Validate({0} info)", viewModel);
            builder.IncreaseIndentLine("{");
            foreach (var f in this.Model.Fields)
            {
                if (!f.NullAble)
                {
                    if (string.Compare(f.SystemType, "string", true) == 0)
                    {
                        builder.AppendFormatLine("if (string.IsNullOrWhiteSpace(info.{0}))", Helper.GetClassName(f.Name));
                    }
                    else
                    {
                        builder.AppendFormatLine("if (info.{0} == default({1}))", Helper.GetClassName(f.Name), f.SystemType);
                    }
                    builder.IncreaseIndentLine("{");
                    builder.AppendFormatLine("this.ErrorMsg = \"{0} Required\";", Helper.GetClassName(f.Name));
                    builder.AppendLine("return false;");
                    builder.DecreaseIndentLine("}");
                }
            }
            builder.AppendLine("return true;");
            builder.DecreaseIndentLine("}");
            builder.AppendLine();

            builder.AppendLine("private void Save()");
            builder.IncreaseIndentLine("{");

            //builder.AppendFormatLine("var {0} = new {1}();", varSerivce, serivce);

            builder.AppendFormatLine("var info = this.To{0}();", viewModel);
            builder.AppendFormatLine("if (!this.Validate(info))");
            builder.AppendLine("\treturn;");
            builder.AppendLine();
            builder.AppendFormatLine("var rslt = new ReturnInfo();", viewModel);
            builder.AppendLine();
            builder.AppendLine("if (this.IsNew)");
            builder.AppendLine("{");
            builder.AppendFormatLine("\trslt = {0}.Add{1}(info);", varSerivce, entityName);
            builder.AppendLine("}");
            builder.AppendLine("else");
            builder.AppendLine("{");
            builder.AppendFormatLine("\trslt = {0}.Update{1}(info);", varSerivce, entityName);
            builder.AppendLine("}");
            builder.AppendLine();
            builder.AppendLine("this.ErrorMsg = rslt.Message;");
            builder.DecreaseIndentLine("}");
            builder.AppendLine();

            builder.AppendFormatLine("private {0} To{0}()", viewModel);
            builder.IncreaseIndentLine("{");
            builder.AppendFormatLine("var info = new {0}()", viewModel);

            builder.IncreaseIndentLine("{");
            foreach (var f in this.Model.Fields)
            {
                if (f.NullAble)
                {
                    builder.AppendFormatLine("{0} = this.{0},", f.Name);
                }
                else
                {
                    if (f.SystemType == "Guid")
                    {
                        if (f.Name.Equals("id", StringComparison.OrdinalIgnoreCase))
                        {
                            builder.AppendFormatLine("{0} = this.{0}??Guid.NewGuid(),", f.Name);
                        }
                        else
                        {
                            builder.AppendFormatLine("{0} = this.{0}??Guid.Empty,", f.Name);
                        }
                    }
                    else if (f.SystemType == "DateTime")
                    {
                        builder.AppendFormatLine("{0} = this.{0}??DateTime.Now,", f.Name);
                    }
                    else
                    {
                        builder.AppendFormatLine("{0} = this.{0}??default({1}),", f.Name, f.SystemType);
                    }
                }
            }

            builder.DecreaseIndentLine("};");
            builder.AppendLine();
            builder.AppendLine("return info;");
            builder.DecreaseIndentLine("}");
            builder.AppendLine();

            builder.AppendFormatLine("public static ReturnInfo Delete{0}(Guid id)", entityName);
            builder.IncreaseIndentLine("{");
            builder.AppendFormatLine("var {0} = new {1}();", varSerivce, serivce);
            builder.AppendFormatLine("return {0}.Delete{1}(id);", varSerivce, entityName);
            builder.DecreaseIndentLine("}");

            builder.AppendLine();
            builder.AppendFormatLine("public static ReturnInfo Delete{0}(List<Guid> id_list)", entityName);
            builder.IncreaseIndentLine("{");
            builder.AppendFormatLine("var {0} = new {1}();", varSerivce, serivce);
            builder.AppendFormatLine("return {0}.Delete{1}(id_list);", varSerivce, entityName);
            builder.DecreaseIndentLine("}");

            builder.DecreaseIndentLine("}");
            builder.DecreaseIndentLine("}");
            sb.Append(builder.ToString());
        }
示例#26
0
        protected override IEnumerable <string> OnGenerate(IEnumerable <CodeComponent <CSharpCodeMapAttribute> > components)
        {
            var items = components.ToArray();
            CodeComponent <CSharpCodeMapAttribute> root = items.FirstOrDefault();

            // Trigger Hosts
            CodeComponent <CSharpCodeMapAttribute>[] triggers = items
                                                                .Where(cc => cc.Depth == 0)
                                                                .SelectMany(item => item.Children)
                                                                .Where(item => item.Element is PTrigger)
                                                                .Distinct(new CodeComponentComparer <CSharpCodeMapAttribute>())
                                                                .ToArray();

            //// Trigger Hosts
            //CodeComponent<CSharpCodeMapAttribute>[] triggers = items
            //    .Where(cc => cc.Depth == 0)
            //    .SelectMany(item => item.Children)
            //    .Distinct(new CodeComponentComparer<CSharpCodeMapAttribute>())
            //    .ToArray();

            // Event Handle
            var eventHandlerBuilder = new StringBuilder();

            foreach (var trigger in triggers)
            {
                var    result       = this.Mapper.Build(trigger.Element, trigger.Attribute.MappingCode);
                string source       = result.Source;
                string callbackName = Mapper.MappingProvider.GetEventCallbackName(trigger.Element as PTrigger);

                source = source.Replace("{EventCallback}", callbackName);

                eventHandlerBuilder.AppendLine(source);
            }

            yield return(eventHandlerBuilder.ToString());

            // Callback
            foreach (var trigger in triggers)
            {
                string callbackSource = GenerateCallback(trigger.Element as PTrigger);
                string code           = "";

                if (trigger.HasChildren)
                {
                    // 지역 변수 컨테이너
                    var localVariableContainer = new NameContainer();

                    code = CreateScope(trigger.Children.ToArray(), localVariableContainer, true);
                }

                yield return(callbackSource.Replace("{Code}", code));
            }

            // CreateScope (Recursive)
            string CreateScope(CodeComponent <CSharpCodeMapAttribute>[] scopeComponents, NameContainer localVariableContainer, bool isCodeBlock = false)
            {
                var scopeBuilder = new IndentStringBuilder();
                var stack        = new Stack <CodeComponent <CSharpCodeMapAttribute> >(scopeComponents);

                if (!isCodeBlock)
                {
                    scopeBuilder.AppendLine();
                    scopeBuilder.AppendLine("{");
                }

                while (stack.Count > 0)
                {
                    var cc = stack.Pop();

                    var mappingResult = this.Mapper.Build(cc.Element, cc.Attribute.MappingCode);
                    var sourceBuilder = new IndentStringBuilder(mappingResult.Source);

                    if (cc.Element is PBinderHost host)
                    {
                        foreach (DXToken token in mappingResult.Errors)
                        {
                            switch (token.Token)
                            {
                            case "Scope":
                            {
                                if (!token.IsIndexed)
                                {
                                    continue;
                                }

                                int index = int.Parse(token.Parameter) - 1;

                                var scopeBinder          = host[BindOptions.Output].ElementAt(index) as PBinder;
                                var childScopeComponents = scopeBinder.Items
                                                           .Select(item => item.Host as PBinderHost)
                                                           .Distinct()
                                                           .Select(childHost => new CodeComponent <CSharpCodeMapAttribute>(
                                                                       childHost, childHost.GetAttribute <CSharpCodeMapAttribute>()))
                                                           .ToArray();

                                sourceBuilder.Replace(
                                    token.OriginalSource,
                                    CreateScope(childScopeComponents, localVariableContainer));

                                break;
                            }

                            case "Line":
                            {
                                if (!token.IsIndexed)
                                {
                                    continue;
                                }

                                int index = int.Parse(token.Parameter) - 1;

                                var paramBinder = host[BindOptions.Parameter].ElementAt(index) as PBinder;

                                ProcessBinderValue(sourceBuilder, token, paramBinder);
                                break;
                            }

                            default:
                                break;
                            }
                        }
                    }

                    scopeBuilder.AppendBlock(sourceBuilder.ToString(), 1);
                    scopeBuilder.AppendLine();
                }

                if (!isCodeBlock)
                {
                    scopeBuilder.AppendLine("}");
                }

                return(scopeBuilder.ToString());
            }

            //string CreateLambda()

            void ProcessBinderValue(IndentStringBuilder sourceBuilder, DXToken token, PBinder binder)
            {
                string valueLine = null;

                // 직접 입력
                if (binder.IsDirectValue)
                {
                    object value = binder.DirectValue;

                    valueLine = this.Mapper.MappingProvider.GetValueLine(value, true);
                }
                // 연결됨
                else if (binder.Items.Count == 1)
                {
                    var paramOutputHost = binder.Items[0].Host;

                    var attr = paramOutputHost.GetAttribute <CSharpCodeMapAttribute>();

                    if (paramOutputHost is PTrigger)
                    {
                        valueLine = "sender";
                    }
                    else
                    {
                        valueLine = this.Mapper.Build(paramOutputHost, attr.MappingCode).Source;
                    }
                }
                else
                {
                    // Error
                }

                if (valueLine != null)
                {
                    int idx = sourceBuilder.IndexOf(token.OriginalSource);

                    // 토큰 부분 제거
                    sourceBuilder.Replace(token.OriginalSource, "");

                    sourceBuilder.Insert(idx, valueLine);
                }
            }
        }
示例#27
0
        // CreateScope (Recursive)
        internal static string CreateScope(DXMapper <CSharpCodeMapAttribute> mapper, CodeComponent <CSharpCodeMapAttribute>[] scopeComponents, NameContainer localVariableContainer, bool isCodeBlock = false)
        {
            var scopeBuilder = new IndentStringBuilder();
            var stack        = new Stack <CodeComponent <CSharpCodeMapAttribute> >(scopeComponents.Reverse());

            if (!isCodeBlock)
            {
                scopeBuilder.AppendLine();
                scopeBuilder.AppendLine("{");
            }

            while (stack.Count > 0)
            {
                var cc = stack.Pop();

                var mappingResult = mapper.Build(cc.Element, cc.Attribute.MappingCode);
                var sourceBuilder = new IndentStringBuilder(mappingResult.Source);

                if (cc.Element is PBinderHost host)
                {
                    foreach (DXToken token in mappingResult.Errors)
                    {
                        switch (token.Token)
                        {
                        case "Scope":
                        {
                            if (!token.IsIndexed)
                            {
                                continue;
                            }

                            int index = int.Parse(token.Parameters[0]) - 1;

                            if (host is PFunction)
                            {
                                index++;
                            }

                            var scopeBinder    = host[BindOptions.Output].ElementAt(index) as PBinder;
                            var scopeZeroHosts = scopeBinder.Items.Select(b => b.GetBinderHost());

                            var childScopeComponents = BinderHelper.FindZeroLevelNodes(scopeZeroHosts, withRoot: true)
                                                       .Distinct()
                                                       .Select(childHost => new CodeComponent <CSharpCodeMapAttribute>(
                                                                   childHost, childHost.GetAttribute <CSharpCodeMapAttribute>()))
                                                       .ToArray();

                            sourceBuilder.Replace(
                                token.OriginalSource,
                                CreateScope(mapper, childScopeComponents, localVariableContainer));

                            break;
                        }

                        case "Line":
                        {
                            if (!token.IsIndexed)
                            {
                                continue;
                            }

                            int index = int.Parse(token.Parameters[0]) - 1;

                            var paramBinder = host[BindOptions.Parameter].ElementAt(index) as PBinder;

                            ProcessBinderValue(mapper, sourceBuilder, token, paramBinder);
                            break;
                        }

                        default:
                            break;
                        }
                    }
                }

                scopeBuilder.AppendBlock(sourceBuilder.ToString(), 1);
                scopeBuilder.AppendLine();
            }

            if (!isCodeBlock)
            {
                scopeBuilder.AppendLine("}");
            }

            return(scopeBuilder.ToString());
        }