/// <summary>
        /// Vérifie l'intégrité du namespace.
        /// </summary>
        /// <param name="objet">Le namespace à vérifier.</param>
        public override void Check(IModelObject objet)
        {
            ModelNamespace nmspace = objet as ModelNamespace;

            Debug.Assert(nmspace != null, "Le namespace est null.");
            if (string.IsNullOrEmpty(nmspace.Name))
            {
                RegisterBug(nmspace, "Le nom du namespace n'est pas renseigné.");
            }
            else if (!IsPascalCaseValid(nmspace.Name))
            {
                RegisterCodeStyle(nmspace, "Le nom du namespace est mal formatté.");
            }

            if (!RegisterNamespace(nmspace))
            {
                RegisterBug(nmspace, "Le namespace \"" + nmspace.Name + "\" est déjà enregistré.");
            }

            if (!nmspace.Name.EndsWith("Contract", StringComparison.Ordinal))
            {
                RegisterBug(nmspace, "Le nom du namespace n'est pas valide.");
            }

            if (nmspace.ClassList.Count < 1)
            {
                RegisterBug(nmspace, "Le namespace n'a pas de classes.");
            }

            foreach (ModelClass classe in nmspace.ClassList)
            {
                ModelClassChecker.Instance.Check(classe);
            }
        }
示例#2
0
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);

            sb.AppendFormat((minimize ?
                             "{0}=_.extend(true,{0},{{Model:Backbone.Model.extend({{initialize:function(){{if(this._revertReadonlyFields!=undefined){{this.on(\"change\",this._revertReadonlyFields);}}}},"
                :@"//Org.Reddragonit.BackBoneDotNet.JSGenerators.ModelDefinitionGenerator
{0} = _.extend(true,{0}, {{Model : Backbone.Model.extend({{
    initialize : function() {{
        if (this._revertReadonlyFields != undefined){{
            this.on(""change"",this._revertReadonlyFields);
        }}
    }},"),
                            ModelNamespace.GetFullNameForModel(modelType, host));
            _AppendDefaults(modelType, properties, sb, minimize);
            if (!hasDelete)
            {
                _AppendBlockDestroy(sb, minimize);
            }
            if (!hasAdd && !hasUpdate)
            {
                _AppendBlockSave(sb, minimize);
            }
            else if (!hasAdd)
            {
                _AppendBlockAdd(sb, minimize);
            }
            else if (!hasUpdate)
            {
                _AppendBlockUpdate(sb, minimize);
            }
            _AppendReadonly(readOnlyProperties, sb, minimize);
            _AppendValidate(modelType, properties, sb, minimize);
            _AppendParse(modelType, host, properties, readOnlyProperties, sb, minimize);
            string urlRoot = "";

            foreach (ModelRoute mr in modelType.GetCustomAttributes(typeof(ModelRoute), false))
            {
                if (mr.Host == host)
                {
                    urlRoot = mr.Path;
                    break;
                }
            }
            if (urlRoot == "")
            {
                foreach (ModelRoute mr in modelType.GetCustomAttributes(typeof(ModelRoute), false))
                {
                    if (mr.Host == "*")
                    {
                        urlRoot = mr.Path;
                        break;
                    }
                }
            }
            _AppendExposedMethods(modelType, urlRoot, host, sb, minimize);
            sb.AppendLine(string.Format((minimize ? "urlRoot:\"{0}\"}})}});" : "\turlRoot : \"{0}\"}})}});"), urlRoot));
            return(sb.ToString());
        }
        /// <summary>
        /// Enregistre le namespace.
        /// </summary>
        /// <param name="nmspace">Le namespace à enregistrer.</param>
        /// <returns><code>False</code>si le namespace est déjà enregistré.</returns>
        private bool RegisterNamespace(ModelNamespace nmspace)
        {
            if (NamespaceNameList.Contains(nmspace.Name))
            {
                return(false);
            }

            NamespaceNameList.Add(nmspace.Name);
            return(true);
        }
 private void _AppendClassName(Type modelType, string host, WrappedStringBuilder sb, bool minimize)
 {
     sb.Append((minimize ? "className:\"" : "\tclassName : \""));
     foreach (string str in ModelNamespace.GetFullNameForModel(modelType, host).Split('.'))
     {
         sb.Append(str + " ");
     }
     foreach (ModelViewClass mvc in modelType.GetCustomAttributes(typeof(ModelViewClass), false))
     {
         sb.Append(mvc.ClassName + " ");
     }
     sb.AppendLine(" CollectionView\",");
 }
示例#5
0
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            string ret = "";
            string tmp = "";

            foreach (string str in ModelNamespace.GetFullNameForModel(modelType, host).Split('.'))
            {
                ret += (minimize ?
                        (tmp.Length == 0 ? "window." + str : tmp + "." + str) + "=" + (tmp.Length == 0 ? "window." : tmp + ".") + str + "||{};"
                    : (tmp.Length == 0 ? "window." + str : tmp + "." + str) + " = " + (tmp.Length == 0 ? "window." : tmp + ".") + str + " || {};" + Environment.NewLine);
                tmp += (tmp.Length == 0 ? "" : ".") + str;
            }
            return(ret);
        }
示例#6
0
 private void _RenderDialogCode(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, WrappedStringBuilder sb, bool minimize)
 {
     _RenderDialogConstructCode(modelType, host, readOnlyProperties, properties, sb, minimize);
     sb.AppendLine((minimize ?
                    "if($('#Org_Reddragonit_BackBoneDotNet_DialogBackground').length==0){$(document.body).append($('<div id=\"Org_Reddragonit_BackBoneDotNet._DialogBackground\" class=\"Org Reddragonit BackBoneDotNet DialogBackground\"></div>'));}$('#Org_Reddragonit_BackBoneDotNet_DialogBackground').show();var frm=$('#"
         :@"      if($('#Org_Reddragonit_BackBoneDotNet_DialogBackground').length==0){
     $(document.body).append($('<div id=""Org_Reddragonit_BackBoneDotNet._DialogBackground"" class=""Org Reddragonit BackBoneDotNet DialogBackground""></div>'));
 }
 $('#Org_Reddragonit_BackBoneDotNet_DialogBackground').show();
 var frm = $('#") + ModelNamespace.GetFullNameForModel(modelType, host).Replace(".", "_") + "_dialog');");
     _AppendInputSetupCode(sb, host, properties, readOnlyProperties, modelType, minimize);
     _AppendAcceptCode(sb, minimize);
     sb.AppendLine((minimize ? "" : "\t\t") + "frm.show();");
 }
示例#7
0
        /// <summary>
        /// Méthode générant le code d'une classe.
        /// </summary>
        /// <param name="item">Classe concernée.</param>
        /// <param name="ns">Namespace.</param>
        public void Generate(ModelClass item, ModelNamespace ns)
        {
            var fileName = Path.Combine(GetDirectoryForModelClass(_parameters.OutputDirectory, item.DataContract.IsPersistent, _rootNamespace, item.Namespace.Name), item.Name + ".cs");

            using (var w = new CSharpWriter(fileName))
            {
                Console.WriteLine("Generating class " + ns.Name + "." + item.Name);

                GenerateUsings(w, item);
                w.WriteLine();
                w.WriteNamespace($"{_rootNamespace}.{ns.Name}");
                w.WriteSummary(1, item.Comment);
                GenerateClassDeclaration(w, item);
                w.WriteLine("}");
            }
        }
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            if (modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false).Length > 0)
            {
                if (((int)((ModelBlockJavascriptGeneration)modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false)[0]).BlockType & (int)ModelBlockJavascriptGenerations.Collection) == (int)ModelBlockJavascriptGenerations.Collection)
                {
                    return("");
                }
            }
            string urlRoot = "";

            foreach (ModelRoute mr in modelType.GetCustomAttributes(typeof(ModelRoute), false))
            {
                if (mr.Host == host)
                {
                    urlRoot = mr.Path;
                    break;
                }
            }
            if (urlRoot == "")
            {
                foreach (ModelRoute mr in modelType.GetCustomAttributes(typeof(ModelRoute), false))
                {
                    if (mr.Host == "*")
                    {
                        urlRoot = mr.Path;
                        break;
                    }
                }
            }
            return(string.Format((minimize ?
                                  "{0}=_.extend(true,{0},{{Collection:Backbone.Collection.extend({{model:{0}.Model,parse:function(response){{return (response.Backbone==undefined?response:response.response);}},url:\"{1}\"}})}});"
                :@"//Org.Reddragonit.BackBoneDotNet.JSGenerators.CollectionGenerator
{0} = _.extend(true,{0},{{Collection: Backbone.Collection.extend({{
    model : {0}.Model,
    parse : function(response){{return (response.Backbone == undefined ? response : response.response);}},
    url : ""{1}""
    }})
}});"),
                                 new object[] {
                ModelNamespace.GetFullNameForModel(modelType, host),
                (urlRoot.StartsWith("/") ? "" : "/") + urlRoot
            }));
        }
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);
            string urlRoot          = "";

            foreach (ModelRoute mr in modelType.GetCustomAttributes(typeof(ModelRoute), false))
            {
                if (mr.Host == host)
                {
                    urlRoot = mr.Path;
                    break;
                }
            }
            if (urlRoot == "")
            {
                foreach (ModelRoute mr in modelType.GetCustomAttributes(typeof(ModelRoute), false))
                {
                    if (mr.Host == "*")
                    {
                        urlRoot = mr.Path;
                        break;
                    }
                }
            }
            sb.AppendFormat((minimize ?
                             "{0}=_.extend(true,{0},{{"
                :@"//Org.Reddragonit.BackBoneDotNet.JSGenerators.StaticExposedMethodGenerator
{0} = _.extend(true,{0}, {{"),
                            ModelNamespace.GetFullNameForModel(modelType, host));
            foreach (MethodInfo mi in modelType.GetMethods(BindingFlags.Public | BindingFlags.Static))
            {
                if (mi.GetCustomAttributes(typeof(ExposedMethod), false).Length > 0)
                {
                    AppendMethodCall(urlRoot, host, mi, ((ExposedMethod)mi.GetCustomAttributes(typeof(ExposedMethod), false)[0]).AllowNullResponse, ref sb, minimize);
                }
            }
            while (sb.ToString().TrimEnd().EndsWith(","))
            {
                sb.Length = sb.Length - 1;
            }
            sb.AppendLine("});");
            return(sb.ToString());
        }
示例#10
0
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            if (!hasUpdate)
            {
                return("");
            }
            else if (modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false).Length > 0)
            {
                if (((int)((ModelBlockJavascriptGeneration)modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false)[0]).BlockType & (int)ModelBlockJavascriptGenerations.EditForm) == (int)ModelBlockJavascriptGenerations.EditForm)
                {
                    return("");
                }
            }
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);

            sb.AppendFormat((minimize ?
                             "{0}=_.extend(true,{0},{{editModel:function(view){{"
                :@"//Org.Reddragonit.BackBoneDotNet.JSGenerators.EditAddFormGenerator
{0} = _.extend(true,{0},{{editModel : function(view){{"),
                            ModelNamespace.GetFullNameForModel(modelType, host));

            ModelEditAddTypes meat = ModelEditAddTypes.dialog;

            if (modelType.GetCustomAttributes(typeof(ModelEditAddType), false).Length > 0)
            {
                meat = ((ModelEditAddType)modelType.GetCustomAttributes(typeof(ModelEditAddType), false)[0]).Type;
            }
            switch (meat)
            {
            case ModelEditAddTypes.dialog:
                _RenderDialogCode(modelType, host, readOnlyProperties, properties, sb, minimize);
                break;

            case ModelEditAddTypes.inline:
                _RenderInlineCode(modelType, host, readOnlyProperties, properties, viewIgnoreProperties, sb, minimize);
                break;
            }

            sb.AppendLine("}});");
            return(sb.ToString());
        }
示例#11
0
 private void _RenderDialogConstructCode(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, WrappedStringBuilder sb, bool minimize)
 {
     sb.AppendFormat((minimize ?
                      "if($('#{0}_dialog').length==0){{var dlog=$('<div></div>');dlog.attr('id','{0}_dialog');dlog.attr('class',view.className+' dialog');var frm=$('<table></table>');dlog.append(frm);frm.append('<thead><tr><th colspan=\"2\"></th></tr></thead>');frm.append('<tbody></tbody>');frm=$(frm.children()[1]);"
         :@"      if($('#{0}_dialog').length==0){{
     var dlog = $('<div></div>');
     dlog.attr('id','{0}_dialog');
     dlog.attr('class',view.className+' dialog');
     var frm = $('<table></table>');
     dlog.append(frm);
     frm.append('<thead><tr><th colspan=""2""></th></tr></thead>');
     frm.append('<tbody></tbody>');
     frm = $(frm.children()[1]);"),
                     ModelNamespace.GetFullNameForModel(modelType, host).Replace(".", "_"));
     foreach (string propName in properties)
     {
         if (propName != "id")
         {
             if (!readOnlyProperties.Contains(propName))
             {
                 Type propType = modelType.GetProperty(propName).PropertyType;
                 sb.Append((minimize ? "" : "\t\t\t") + "frm.append($('<tr><td class=\"fieldName\">" + propName + "</td><td class=\"fieldInput " + propType.Name + "\" proptype=\"" + propType.Name + "\">");
                 _RenderFieldInput(propName, propType, host, sb);
                 sb.AppendLine("</td></tr>'));");
             }
         }
     }
     _AppendArrayInputsCode(sb, minimize);
     sb.AppendFormat((minimize ?
                      "frm.append($('<tr><td colspan=\"2\" style=\"text-align:center\"><span class=\"button accept\">Okay</span><span class=\"button cancel\">Cancel</span></td></tr>'));var butCancel=$(dlog.find('tr>td>span.cancel')[0]);butCancel.bind('click',function(){{$('#{0}_dialog').hide();$('#Org_Reddragonit_BackBoneDotNet_DialogBackground').hide();}});$(document.body).append(dlog);}}"
         :@"          frm.append($('<tr><td colspan=""2"" style=""text-align:center""><span class=""button accept"">Okay</span><span class=""button cancel"">Cancel</span></td></tr>'));
     var butCancel = $(dlog.find('tr>td>span.cancel')[0]);
     butCancel.bind('click',function(){{
         $('#{0}_dialog').hide();
         $('#Org_Reddragonit_BackBoneDotNet_DialogBackground').hide();
     }});
     $(document.body).append(dlog);
 }}"),
                     ModelNamespace.GetFullNameForModel(modelType, host).Replace(".", "_"));
 }
示例#12
0
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            if (modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false).Length > 0)
            {
                if (((int)((ModelBlockJavascriptGeneration)modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false)[0]).BlockType & (int)ModelBlockJavascriptGenerations.View) == (int)ModelBlockJavascriptGenerations.View)
                {
                    return("");
                }
            }
            string editImage   = null;
            string deleteImage = null;
            EditButtonDefinition   edDef;
            DeleteButtonDefinition delDef;

            _LocateButtonImages(modelType, host, out editImage, out deleteImage, out edDef, out delDef);
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);

            sb.AppendFormat((minimize ?
                             "{0}=_.extend(true,{0},{{View : Backbone.View.extend({{"
                :@"//Org.Reddragonit.BackBoneDotNet.JSGenerators.ViewGenerator
{0} = _.extend(true,{0},{{View : Backbone.View.extend({{
    "), ModelNamespace.GetFullNameForModel(modelType, host));
            string tag = "div";

            if (modelType.GetCustomAttributes(typeof(ModelViewTag), false).Length > 0)
            {
                tag = ((ModelViewTag)modelType.GetCustomAttributes(typeof(ModelViewTag), false)[0]).TagName;
            }
            sb.AppendLine(string.Format((minimize ?  "tagName:\"{0}\",":"\ttagName : \"{0}\","), tag));

            _AppendClassName(modelType, host, sb, minimize);
            _AppendAttributes(modelType, sb, minimize);
            _AppendRenderFunction(modelType, host, tag, properties, hasUpdate, hasDelete, sb, viewIgnoreProperties, editImage, deleteImage, edDef, delDef, minimize);

            sb.AppendLine("})});");
            return(sb.ToString());
        }
        internal static void AppendMethodCall(string urlRoot, string host, MethodInfo mi, bool allowNull, ref WrappedStringBuilder sb, bool minimize)
        {
            sb.Append(string.Format((minimize ? "" : "\t") + "{0}:function(", mi.Name));
            ParameterInfo[] pars = mi.GetParameters();
            for (int x = 0; x < pars.Length; x++)
            {
                sb.Append(pars[x].Name + (x + 1 == pars.Length ? "" : ","));
            }
            sb.Append((minimize ? "){var function_data={};":"){var function_data = {};"));
            foreach (ParameterInfo par in pars)
            {
                Type propType = par.ParameterType;
                bool array    = false;
                if (propType.FullName.StartsWith("System.Nullable"))
                {
                    if (propType.IsGenericType)
                    {
                        propType = propType.GetGenericArguments()[0];
                    }
                    else
                    {
                        propType = propType.GetElementType();
                    }
                }
                if (propType.IsArray)
                {
                    array    = true;
                    propType = propType.GetElementType();
                }
                else if (propType.IsGenericType)
                {
                    if (propType.GetGenericTypeDefinition() == typeof(List <>))
                    {
                        array    = true;
                        propType = propType.GetGenericArguments()[0];
                    }
                }
                if (new List <Type>(propType.GetInterfaces()).Contains(typeof(IModel)))
                {
                    if (array)
                    {
                        sb.AppendLine(string.Format((minimize ?
                                                     "function_data.{0}=[];for(var x=0;x<{0}.length;x++){{function_data.{0}.push(({0}.at!=undefined?{0}.at(x).id:{0}[x].id));}}"
                            :@"function_data.{0}=[];
for(var x=0;x<{0}.length;x++){{
    function_data.{0}.push(({0}.at!=undefined ? {0}.at(x).id : {0}[x].id));
}}"), par.Name));
                    }
                    else
                    {
                        sb.AppendLine(string.Format((minimize ?"function_data.{0}={0}.id;" :"function_data.{0} = {0}.id;"), par.Name));
                    }
                }
                else
                {
                    sb.AppendLine(string.Format((minimize ? "function_data.{0}={0};": "function_data.{0} = {0};"), par.Name));
                }
            }
            sb.AppendLine(string.Format((minimize ?
                                         "var response = $.ajax({{type:'{4}',url:'{0}/{3}{1}',processData:false,data:escape(JSON.stringify(function_data)),content_type:'application/json; charset=utf-8',dataType:'json',async:false,cache:false}});if(response.status==200){{{2}}}else{{throw new Exception(response.responseText);}}"
:@"var response = $.ajax({{
            type:'{4}',
            url:'{0}/{3}{1}',
            processData:false,
            data:escape(JSON.stringify(function_data)),
            content_type:'application/json; charset=utf-8',
            dataType:'json',
            async:false,
            cache:false
        }});
if (response.status==200){{
        {2}
}}else{{
    throw new Exception(response.responseText);
}}
"), new object[] {
                urlRoot,
                mi.Name,
                (mi.ReturnType == typeof(void) ? "" : (minimize ? "var ret=response.responseText; if(ret!=undefined){var response=JSON.parse(ret);if(response.Backbone!=undefined){_.extend(Backbone,response.Backbone);response=response.response;}" : @"var ret=response.responseText;
    if (ret!=undefined){
    var response = JSON.parse(ret);
    if(response.Backbone!=undefined){
        _.extend(Backbone,response.Backbone);
        response=response.response;
    }")),
                (mi.IsStatic ? "" : "'+this.id+'/"),
                (mi.IsStatic ? "SMETHOD" : "METHOD")
            }));
            if (mi.ReturnType != typeof(void))
            {
                Type propType = mi.ReturnType;
                bool array    = false;
                if (propType.FullName.StartsWith("System.Nullable"))
                {
                    if (propType.IsGenericType)
                    {
                        propType = propType.GetGenericArguments()[0];
                    }
                    else
                    {
                        propType = propType.GetElementType();
                    }
                }
                if (propType.IsArray)
                {
                    array    = true;
                    propType = propType.GetElementType();
                }
                else if (propType.IsGenericType)
                {
                    if (propType.GetGenericTypeDefinition() == typeof(List <>))
                    {
                        array    = true;
                        propType = propType.GetGenericArguments()[0];
                    }
                }
                sb.AppendLine((minimize ? "if(response==null){":"if (response==null){"));
                if (!allowNull)
                {
                    sb.AppendLine("throw \"A null response was returned by the server which is invalid.\";");
                }
                else
                {
                    sb.AppendLine("return response;");
                }
                sb.AppendLine("}else{");
                if (new List <Type>(propType.GetInterfaces()).Contains(typeof(IModel)))
                {
                    if (array)
                    {
                        sb.AppendLine(string.Format((minimize ?
                                                     "if({0}.Collection!=undefined){{ret = new {0}.Collection();for(var x=0;x<response.length;x++){{ret.add(new {0}.Model({{'id':response[x].id}}));ret.at(x).attributes=ret.at(x).parse(response[x]);}}}}else{{ret=[];for(var x=0;x<response.length;x++){{ret.push(new {0}.Model({{'id':response[x].id}}));ret[x].attributes=ret[x].parse(response[x]);}}}}response=ret;"
                            : @"          if({0}.Collection!=undefined){{
                ret = new {0}.Collection();
                for (var x=0;x<response.length;x++){{
                    ret.add(new {0}.Model({{'id':response[x].id}}));
                    ret.at(x).attributes=ret.at(x).parse(response[x]);
                }}
            }}else{{
                ret=[];
                for (var x=0;x<response.length;x++){{
                    ret.push(new {0}.Model({{'id':response[x].id}}));
                    ret[x].attributes=ret[x].parse(response[x]);
                }}
            }}
            response = ret;"),
                                                    ModelNamespace.GetFullNameForModel(propType, host)));
                    }
                    else
                    {
                        sb.AppendLine(string.Format((minimize ?
                                                     "ret=new {0}.Model({{id:response.id}});ret.attributes=ret.parse(response);response=ret;"
                            :@"ret = new {0}.Model({{id:response.id}});
ret.attributes = ret.parse(response);
response=ret;"), ModelNamespace.GetFullNameForModel(propType, host)));
                    }
                }
                sb.AppendLine((minimize ?
                               "}return response;}else{return null;}"
                    :@"}
return response;}else{return null;}"));
            }
            sb.AppendLine("},");
        }
示例#14
0
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);

            if (!minimize)
            {
                sb.AppendLine("//Org.Reddragonit.BackBoneDotNet.JSGenerators.ModelListCallGenerators");
            }
            foreach (MethodInfo mi in modelType.GetMethods(Constants.LOAD_METHOD_FLAGS))
            {
                if (mi.GetCustomAttributes(typeof(ModelListMethod), false).Length > 0)
                {
                    foreach (ModelListMethod mlm in mi.GetCustomAttributes(typeof(ModelListMethod), false))
                    {
                        if (mlm.Host == host || mlm.Host == "*")
                        {
                            WrappedStringBuilder sbCurParameters = new WrappedStringBuilder(minimize);
                            sbCurParameters.Append((minimize ? "function(){return{":"function(){return {"));
                            sb.Append(string.Format((minimize ?
                                                     "{0}=_.extend({0},{{{1}:function("
                                : "{0} = _.extend({0}, {{{1}:function("), ModelNamespace.GetFullNameForModel(modelType, host), mi.Name));
                            for (int x = 0; x < (mlm.Paged ? mi.GetParameters().Length - 3 : mi.GetParameters().Length); x++)
                            {
                                sb.Append((x == 0 ? "" : ",") + mi.GetParameters()[x].Name);
                                sbCurParameters.AppendLine((x == 0 ? "" : ",") + string.Format("'{0}':{0}", mi.GetParameters()[x].Name));
                            }
                            sbCurParameters.Append("};}");
                            if (mlm.Paged)
                            {
                                if (mi.GetParameters().Length != 3)
                                {
                                    sb.Append(",");
                                }
                                sb.Append("pageStartIndex,pageSize");
                            }
                            sb.AppendLine("){");
                            string urlCode = URLUtility.CreateJavacriptUrlCode(mlm, mi, modelType);
                            sb.Append(urlCode);
                            if (mlm.Paged)
                            {
                                sb.AppendLine(string.Format((minimize ?
                                                             "pageStartIndex=(pageStartIndex==undefined?0:(pageStartIndex==null?0:pageStartIndex));pageSize=(pageSize==undefined?10:(pageSize==null?10:pageSize));var ret=Backbone.Collection.extend({{url:url+'{0}PageStartIndex='+pageStartIndex+'&PageSize='+pageSize,CurrentParameters:{1},currentIndex:pageStartIndex*pageSize,currentPageSize:pageSize,CurrentPage:Math.floor(pageStartIndex/pageSize),parse:function(response){{if(response.Backbone!=undefined){{_.extend(Backbone,response.Backbone);}}response=response.response;this.TotalPages=response.Pager.TotalPages;return response.response;}},MoveToPage:function(pageNumber){{if(pageNumber>=0&&pageNumber<this.TotalPages){{this.currentIndex=pageNumber*this.currentPageSize;{2}this.fetch();this.CurrentPage=pageNumber;}}}},ChangePageSize:function(pageSize){{this.currentPageSize=pageSize;this.MoveToPage(Math.floor(this.currentIndex/pageSize));}},MoveToNextPage:function(){{if(Math.floor(this.currentIndex/this.currentPageSize)+1<this.TotalPages){{this.MoveToPage(Math.floor(this.currentIndex/this.currentPageSize)+1);}}}},MoveToPreviousPage:function(){{if(Math.floor(this.currentIndex/this.currentPageSize)-1>=0){{this.MoveToPage(Math.floor(this.currentIndex/this.currentPageSize)-1);}}}},"
                                    :@"pageStartIndex = (pageStartIndex == undefined ? 0 : (pageStartIndex == null ? 0 : pageStartIndex));
pageSize = (pageSize == undefined ? 10 : (pageSize == null ? 10 : pageSize));
var ret = Backbone.Collection.extend({{url:url+'{0}PageStartIndex='+pageStartIndex+'&PageSize='+pageSize,
    CurrentParameters:{1},
    currentIndex : pageStartIndex*pageSize,
    currentPageSize : pageSize,
    CurrentPage : Math.floor(pageStartIndex/pageSize),
    parse : function(response){{
        if(response.Backbone!=undefined){{
            _.extend(Backbone,response.Backbone);
        }}
        response = response.response;
        this.TotalPages = response.Pager.TotalPages;
        return response.response;
    }},
    MoveToPage : function(pageNumber){{
        if (pageNumber>=0 && pageNumber<this.TotalPages){{
            this.currentIndex = pageNumber*this.currentPageSize;
            {2}
            this.fetch();
            this.CurrentPage=pageNumber;
        }}
    }},
    ChangePageSize : function(pageSize){{
        this.currentPageSize = pageSize;
        this.MoveToPage(Math.floor(this.currentIndex/pageSize));
    }},
    MoveToNextPage : function(){{
        if(Math.floor(this.currentIndex/this.currentPageSize)+1<this.TotalPages){{
            this.MoveToPage(Math.floor(this.currentIndex/this.currentPageSize)+1);
        }}
    }},
    MoveToPreviousPage : function(){{
        if(Math.floor(this.currentIndex/this.currentPageSize)-1>=0){{
            this.MoveToPage(Math.floor(this.currentIndex/this.currentPageSize)-1);
        }}
    }},"), new object[] {
                                    (mlm.Path.Contains("?") ? "&" : "?"),
                                    sbCurParameters.ToString(),
                                    (mlm.Path.Contains("?") ?
                                     (minimize ? "" : "\t\t\t") + "this.url = this.url.substring(0,this.url.indexOf('&PageStartIndex='))+'&PageStartIndex='+this.currentIndex+'&PageSize='+this.currentPageSize;" :
                                     (minimize ? "" : "\t\t\t") + "this.url = this.url.substring(0,this.url.indexOf('?'))+'?PageStartIndex='+this.currentIndex+'&PageSize='+this.currentPageSize;")
                                }));
                                if (mi.GetParameters().Length > 0)
                                {
                                    sb.Append((minimize ? "" : "\t") + "ChangeParameters: function(");
                                    for (int x = 0; x < mi.GetParameters().Length - 3; x++)
                                    {
                                        sb.Append((x == 0 ? "" : ",") + mi.GetParameters()[x].Name);
                                    }
                                    sb.AppendLine(string.Format((minimize ?
                                                                 "){{{0}url+='{1}PageStartIndex='+this.currentIndex+'&PageSize='+this.currentPageSize;this.CurrentParameters={2};this.currentIndex=0;this.url=url;this.fetch();}},"
                                        :@"){{{0}
        url+='{1}PageStartIndex='+this.currentIndex+'&PageSize='+this.currentPageSize;
        this.CurrentParameters = {2};
        this.currentIndex=0;
        this.url=url;
        this.fetch();
}},"), new object[] { urlCode, (mlm.Path.Contains("?") ? "&" : "?"), sbCurParameters.ToString() }));
                                }
                                sb.AppendLine(string.Format((minimize ?
                                                             "model:{0}.Model}});"
                                    :@" model:{0}.Model
}});"), ModelNamespace.GetFullNameForModel(modelType, host)));
                            }
                            else
                            {
                                sb.AppendLine(string.Format((minimize ?
                                                             "var ret=Backbone.Collection.extend({{url:url,CurrentParameters:{0},parse : function(response){{if(response.Backbone!=undefined){{_.extend(Backbone,response.Backbone);return response.response;}}else{{return response;}}}},"
                                    :@" var ret = Backbone.Collection.extend({{url:url,CurrentParameters:{0},parse : function(response){{
    if(response.Backbone!=undefined){{
        _.extend(Backbone,response.Backbone);
        return response.response;
    }}else{{
        return response;
    }}
}},"), sbCurParameters.ToString()));
                                if (mi.GetParameters().Length > 0)
                                {
                                    sb.Append((minimize ? "" : "\t") + "ChangeParameters: function(");
                                    for (int x = 0; x < mi.GetParameters().Length; x++)
                                    {
                                        sb.Append((x == 0 ? "" : ",") + mi.GetParameters()[x].Name);
                                    }
                                    sb.AppendLine(string.Format((minimize ?
                                                                 "){{{0}this.CurrentParameters={1};this.currentIndex=0;this.url=url;this.fetch();}},"
                                        :@"){{{0}
        this.CurrentParameters = {1};
        this.currentIndex=0;
        this.url=url;
        this.fetch();
}},"), urlCode, sbCurParameters.ToString()));
                                }
                                sb.AppendLine("model:" + ModelNamespace.GetFullNameForModel(modelType, host) + ".Model});");
                            }
                            sb.AppendLine((minimize ?
                                           "ret=new ret();return ret;}});"
                                :@"ret = new ret();
    return ret;
}});"));
                            break;
                        }
                    }
                }
            }
            return(sb.ToString());
        }
示例#15
0
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            string urlRoot = "";

            foreach (ModelRoute mr in modelType.GetCustomAttributes(typeof(ModelRoute), false))
            {
                if (mr.Host == host)
                {
                    urlRoot = mr.Path;
                    break;
                }
            }
            if (urlRoot == "")
            {
                foreach (ModelRoute mr in modelType.GetCustomAttributes(typeof(ModelRoute), false))
                {
                    if (mr.Host == "*")
                    {
                        urlRoot = mr.Path;
                        break;
                    }
                }
            }
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);

            if (!minimize)
            {
                sb.AppendLine("//Org.Reddragonit.BackBoneDotNet.JSGenerators.SelectListCallGenerator");
            }
            List <MethodInfo> methods = new List <MethodInfo>();

            foreach (MethodInfo mi in modelType.GetMethods(Constants.LOAD_METHOD_FLAGS))
            {
                if (mi.GetCustomAttributes(typeof(ModelSelectListMethod), false).Length > 0)
                {
                    methods.Add(mi);
                }
            }
            int curLen = 0;

            for (int x = 0; x < methods.Count; x++)
            {
                curLen = Math.Max(methods[x].GetParameters().Length, curLen);
            }
            int index = 0;

            while (index < methods.Count)
            {
                for (int x = index; x < methods.Count; x++)
                {
                    if (curLen == methods[x].GetParameters().Length)
                    {
                        MethodInfo mi = methods[x];
                        methods.RemoveAt(x);
                        methods.Insert(index, mi);
                        index++;
                        x = index - 1;
                    }
                }
                curLen = 0;
                for (int x = index; x < methods.Count; x++)
                {
                    curLen = Math.Max(methods[x].GetParameters().Length, curLen);
                }
            }
            if (methods.Count > 0)
            {
                sb.AppendLine(string.Format((minimize ?
                                             "{0}=_.extend(true,{0},{{SelectList:function(pars){{"
                    : "{0} = _.extend(true,{0},{{SelectList : function(pars){{"
                                             ), ModelNamespace.GetFullNameForModel(modelType, host)));
                for (int x = 0; x < methods.Count; x++)
                {
                    sb.Append((minimize ? "" : "\t") + (x == 0 ? "" : "else ") + "if(");
                    if (methods[x].GetParameters().Length == 0)
                    {
                        sb.AppendLine((minimize?
                                       "pars==undefined||pars==null){url='';"
                        : @"pars==undefined || pars==null){
        url='';"));
                    }
                    else
                    {
                        ParameterInfo[]      pars = methods[x].GetParameters();
                        WrappedStringBuilder code = new WrappedStringBuilder(minimize);
                        code.AppendLine((minimize ? "url='?';" : "\t\turl='?';"));
                        sb.Append((minimize ? "pars!=undefined&&pars!=null&&(" : "pars!=undefined && pars!=null && ("));
                        for (int y = 0; y < pars.Length; y++)
                        {
                            sb.Append((y != 0 ? (minimize ? "&&" : " && ") : "") + "pars." + pars[y].Name + "!=undefined");
                            code.AppendLine(string.Format((minimize?
                                                           "pars.{0}=(pars.{0}==null?'NULL':pars.{0});"
                                :"\t\tpars.{0} = (pars.{0} == null ? 'NULL' : pars.{0});"),
                                                          pars[y].Name));
                            if (pars[y].ParameterType == typeof(bool))
                            {
                                code.AppendLine(string.Format((minimize?
                                                               "pars.{0}=(pars.{0}==null?'false':(pars.{0}?'true':'false'));"
                                :"\t\tpars.{0} = (pars.{0} == null ? 'false' : (pars.{0} ? 'true' : 'false'));"),
                                                              pars[y].Name));
                            }
                            else if (pars[y].ParameterType == typeof(DateTime) || pars[y].ParameterType == typeof(DateTime?))
                            {
                                code.AppendLine(string.Format((minimize ?
                                                               "if(pars.{0}!='NULL'){{if(!(pars.{0} instanceof Date)){{pars.{0}=new Date(pars.{0});}}pars.{0}=Date.UTC(pars.{0}.getUTCFullYear(), pars.{0}.getUTCMonth(), pars.{0}.getUTCDate(), pars.{0}.getUTCHours(), pars.{0}.getUTCMinutes(), pars.{0}.getUTCSeconds());}}"
                                    : @"if (pars.{0} != 'NULL'){{
    if (!(pars.{0} instanceof Date)){{
        pars.{0} = new Date(pars.{0});
    }}
    pars.{0} = Date.UTC(pars.{0}.getUTCFullYear(), pars.{0}.getUTCMonth(), pars.{0}.getUTCDate(), pars.{0}.getUTCHours(), pars.{0}.getUTCMinutes(), pars.{0}.getUTCSeconds());
}}"), pars[y].Name));
                            }
                            code.AppendLine((minimize ? "" : "\t\t") + "url+='" + (y == 0 ? "" : "&") + pars[y].Name + "='+pars." + pars[y].Name + ".toString();");
                        }
                        sb.AppendLine(")){");
                        sb.Append(code.ToString());
                    }
                    sb.AppendLine("}");
                }
                sb.AppendLine(string.Format((minimize ?
                                             "else{{return null;}}var ret=$.ajax('{0}'+url,{{async:false,cache:false,type : 'SELECT'}}).responseText;var response=JSON.parse(ret);if(response.Backbone!=undefined){{_.extend(Backbone,response.Backbone);response=response.response;}}return response;}}}});"
                    :@"  else{{
        return null;
    }}
    var ret=$.ajax(
        '{0}'+url,{{
            async:false,
            cache:false,
            type : 'SELECT'
}}).responseText;
    var response = JSON.parse(ret);
    if(response.Backbone!=undefined){{
        _.extend(Backbone,response.Backbone);
        response=response.response;
    }}
return response;
}}}});"), urlRoot));
            }
            return(sb.ToString());
        }
示例#16
0
        private void _AppendParse(Type modelType, string host, List <string> properties, List <string> readOnlyProperties, WrappedStringBuilder sb, bool minimize)
        {
            bool add = false;

            foreach (string str in properties)
            {
                Type propType = modelType.GetProperty(str).PropertyType;
                if (propType.FullName.StartsWith("System.Nullable"))
                {
                    if (propType.IsGenericType)
                    {
                        propType = propType.GetGenericArguments()[0];
                    }
                    else
                    {
                        propType = propType.GetElementType();
                    }
                }
                if (propType.IsArray)
                {
                    propType = propType.GetElementType();
                }
                else if (propType.IsGenericType)
                {
                    if (propType.GetGenericTypeDefinition() == typeof(List <>))
                    {
                        propType = propType.GetGenericArguments()[0];
                    }
                }
                if (new List <Type>(propType.GetInterfaces()).Contains(typeof(IModel)) || (propType == typeof(DateTime)))
                {
                    add = true;
                    break;
                }
                else if (readOnlyProperties.Contains(str))
                {
                    add = true;
                    break;
                }
            }
            if (add)
            {
                WrappedStringBuilder jsonb = new WrappedStringBuilder(minimize);
                string lazyLoads           = "";
                jsonb.AppendLine((minimize ?
                                  "toJSON:function(){var attrs={};this._changedFields=(this._changedFields==undefined?[]:this._changedFields);"
                    :@"  toJSON : function(){
        var attrs = {};
        this._changedFields = (this._changedFields == undefined ? [] : this._changedFields);"));

                sb.AppendLine((minimize ?
                               "parse:function(response){var attrs={};this._origAttributes=(this._origAttributes==undefined?{}:this._origAttributes);if(response.Backbone!=undefined){_.extend(Backbone,response.Backbone);response=response.response;}if(response!=true){"
                    :@"  parse: function(response) {
        var attrs = {};
        this._origAttributes = (this._origAttributes==undefined ? {} : this._origAttributes);
        if(response.Backbone!=undefined){
            _.extend(Backbone,response.Backbone);
            response=response.response;
        }
        if (response!=true){"));

                foreach (string str in properties)
                {
                    bool isReadOnly = modelType.GetProperty(str).GetCustomAttributes(typeof(ReadOnlyModelProperty), false).Length > 0 ||
                                      !modelType.GetProperty(str).CanWrite;
                    Type propType = modelType.GetProperty(str).PropertyType;
                    bool array    = false;
                    if (propType.FullName.StartsWith("System.Nullable"))
                    {
                        if (propType.IsGenericType)
                        {
                            propType = propType.GetGenericArguments()[0];
                        }
                        else
                        {
                            propType = propType.GetElementType();
                        }
                    }
                    if (propType.IsArray)
                    {
                        array    = true;
                        propType = propType.GetElementType();
                    }
                    else if (propType.IsGenericType)
                    {
                        if (propType.GetGenericTypeDefinition() == typeof(List <>))
                        {
                            array    = true;
                            propType = propType.GetGenericArguments()[0];
                        }
                    }
                    if (new List <Type>(propType.GetInterfaces()).Contains(typeof(IModel)))
                    {
                        bool isLazy = modelType.GetProperty(str).GetCustomAttributes(typeof(ModelPropertyLazyLoadExternalModel), false).Length > 0;
                        if (isLazy)
                        {
                            lazyLoads += ",'" + str + "'";
                        }
                        sb.AppendLine(string.Format((minimize ? "if(response.{0}!=undefined){{" : "\t\tif (response.{0} != undefined){{"), str));
                        if (array)
                        {
                            sb.AppendFormat((minimize ?
                                             "if({0}.Collection!=undefined){{attrs.{1}=new {0}.Collection();for(var x=0;x<response.{1}.length;x++){{attrs.{1}.add(new {0}.Model({{'id':response.{1}[x].id}}));attrs.{1}.at(x).attributes=attrs.{1}.at(x).parse(response.{1}[x]);}}}}else{{attrs.{1}=[];for(var x=0;x<response.{1}.length;x++){{attrs.{1}.push(new {0}.Model({{'id':response.{1}[x].id}}));attrs.{1}[x].attributes=attrs.{1}[x].parse(response.{1}[x]);}}}}"
                                :@"          if({0}.Collection!=undefined){{
                attrs.{1} = new {0}.Collection();
                for (var x=0;x<response.{1}.length;x++){{
                    attrs.{1}.add(new {0}.Model({{'id':response.{1}[x].id}}));
                    attrs.{1}.at(x).attributes=attrs.{1}.at(x).parse(response.{1}[x]);
                }}
            }}else{{
                attrs.{1}=[];
                for (var x=0;x<response.{1}.length;x++){{
                    attrs.{1}.push(new {0}.Model({{'id':response.{1}[x].id}}));
                    attrs.{1}[x].attributes=attrs.{1}[x].parse(response.{1}[x]);
                }}
            }}"),
                                            ModelNamespace.GetFullNameForModel(propType, host),
                                            str);
                            if (isReadOnly)
                            {
                                jsonb.AppendLine((minimize ? "if(this.isNew()){" : "if (this.isNew()){"));
                            }
                            jsonb.AppendFormat((minimize ?
                                                "if(this._changedFields.indexOf('{0}')>=0||this.isNew()){{attrs.{0}=[];if(this.attributes['{0}']!=null){{for(var x=0;x<this.attributes['{0}'].length;x++){{if(this.attributes['{0}'].at!=undefined){{attrs.{0}.push({{id:this.attributes['{0}'].at(x).id}});}}else{{attrs.{0}.push({{id:this.attributes['{0}'][x].id}});}}}}}}}}"
                                :@"           if(this._changedFields.indexOf('{0}')>=0||this.isNew()){{
                    attrs.{0} = [];
                    if (this.attributes['{0}']!=null){{
                        for(var x=0;x<this.attributes['{0}'].length;x++){{
                            if(this.attributes['{0}'].at!=undefined){{
                                attrs.{0}.push({{id:this.attributes['{0}'].at(x).id}});
                            }}else{{
                                attrs.{0}.push({{id:this.attributes['{0}'][x].id}});
                            }}
                        }}
                    }}
            }}"), str);
                            if (isReadOnly)
                            {
                                jsonb.AppendLine("}");
                            }
                        }
                        else
                        {
                            sb.AppendFormat((minimize ?
                                             "attrs.{0}=new {1}.Model({{'id':response.{0}.id}});attrs.{0}.attributes=attrs.{0}.parse(response.{0});"
                                :@"          attrs.{0} = new {1}.Model({{'id':response.{0}.id}});
            attrs.{0}.attributes=attrs.{0}.parse(response.{0});"), str, ModelNamespace.GetFullNameForModel(propType, host));
                            if (isReadOnly)
                            {
                                jsonb.AppendLine((minimize? "if(this.isNew()){": "if (this.isNew()){"));
                            }
                            jsonb.AppendFormat((minimize ?
                                                "if(this._changedFields.indexOf('{0}')>=0||this.isNew()){{if(this.attributes['{0}']!=null){{attrs.{0}={{id:this.attributes['{0}'].id}};}}else{{attrs.{0}=null;}}}}"
                                :@"      if(this._changedFields.indexOf('{0}')>=0||this.isNew()){{
            if (this.attributes['{0}']!=null){{
                attrs.{0} = {{id : this.attributes['{0}'].id}};
            }}else{{
                attrs.{0} = null;
            }}
        }}"), str);
                            if (isReadOnly)
                            {
                                jsonb.AppendLine("}");
                            }
                        }
                        sb.AppendLine((minimize ? "" : "\t\t") + "}");
                    }
                    else
                    {
                        sb.AppendLine(string.Format((minimize ? "if(response.{0}!=undefined){{" : "\t\tif (response.{0} != undefined){{"), str));
                        if (propType == typeof(DateTime))
                        {
                            sb.AppendLine(string.Format((minimize ? "attrs.{0}=new Date(response.{0});" :"\t\tattrs.{0} = new Date(response.{0});"), str));
                        }
                        else
                        {
                            sb.AppendLine(string.Format((minimize ? "attrs.{0}=response.{0};":"\t\tattrs.{0} = response.{0};"), str));
                        }
                        sb.AppendLine((minimize ? "" : "\t\t") + "}");
                        if (isReadOnly)
                        {
                            jsonb.AppendLine((minimize ? "if(this.isNew()){":"if (this.isNew()){"));
                        }
                        jsonb.AppendFormat((minimize ?
                                            "if(this._changedFields.indexOf('{0}')>=0||this.isNew()){{attrs.{0}=this.attributes['{0}'];}}"
                            :@"      if(this._changedFields.indexOf('{0}')>=0||this.isNew()){{
                attrs.{0} = this.attributes['{0}'];
        }}"), str);
                        if (isReadOnly)
                        {
                            jsonb.AppendLine("}");
                        }
                    }
                }
                sb.AppendFormat((minimize ?
                                 "}}return attrs;}},{0}return attrs;}},"
                    :@"      }}
        return attrs;
    }},{0}
        return attrs;
    }},"), jsonb.ToString());
                if (lazyLoads.Length > 0)
                {
                    sb.AppendLine(string.Format((minimize ? "LazyLoadAttributes:[{0}],": "\tLazyLoadAttributes : [{0}],"), lazyLoads.Substring(1)));
                }
            }
            else
            {
                sb.AppendLine((minimize ?
                               "parse:function(response){if(response.Backbone!=undefined){_.extend(Backbone,response.Backbone);response=response.response;}return response;},"
                    :@"  parse: function(response) {
        if(response.Backbone!=undefined){
            _.extend(Backbone,response.Backbone);
            response=response.response;
        }
        return response;
    },"));
            }
        }
示例#17
0
        private string _RecurAddRenderModelPropertyCode(string prop, Type PropType, string host, string modelstring, out string arstring, bool addEls, bool minimize)
        {
            string className = ModelNamespace.GetFullNameForModel(PropType, host).Replace(".", " ") + (addEls ? " els " : "");

            foreach (ModelViewClass mvc in PropType.GetCustomAttributes(typeof(ModelViewClass), false))
            {
                className += mvc.ClassName + " ";
            }
            string code             = "";
            int    arIndex          = 0;
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);

            foreach (PropertyInfo pi in PropType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                if (pi.GetCustomAttributes(typeof(ModelIgnoreProperty), false).Length == 0)
                {
                    if (pi.GetCustomAttributes(typeof(ReadOnlyModelProperty), false).Length == 0 &&
                        pi.GetCustomAttributes(typeof(ViewIgnoreField), false).Length == 0)
                    {
                        Type ptype = pi.PropertyType;
                        bool array = false;
                        if (ptype.FullName.StartsWith("System.Nullable"))
                        {
                            if (ptype.IsGenericType)
                            {
                                ptype = ptype.GetGenericArguments()[0];
                            }
                            else
                            {
                                ptype = ptype.GetElementType();
                            }
                        }
                        if (ptype.IsArray)
                        {
                            array = true;
                            ptype = ptype.GetElementType();
                        }
                        else if (ptype.IsGenericType)
                        {
                            if (ptype.GetGenericTypeDefinition() == typeof(List <>))
                            {
                                array = true;
                                ptype = ptype.GetGenericArguments()[0];
                            }
                        }
                        if (new List <Type>(ptype.GetInterfaces()).Contains(typeof(IModel)))
                        {
                            if (array)
                            {
                                string tsets = "";
                                string tcode = _RecurAddRenderModelPropertyCode(pi.Name, ptype, host, string.Format(modelstring, pi.Name) + ".at(x).get('{0}')", out tsets, true, minimize);
                                if (tsets != "")
                                {
                                    sb.Append(tsets);
                                }
                                sb.AppendLine(string.Format((minimize ?
                                                             "var ars{0}{1}='';if({2}!=null{{for(var x=0;x<{2}).length;x++){{ars{0}{1}+='<span class=\"{3} {4} els\">'+{5}+'</span>'}}}}"
                                    :@"     var ars{0}{1} = '';
        if({2}!=null{{
            for(var x=0;x<{2}.length;x++){{
                ars{0}{1} += '<span class=""{3} {4} els"">'+{5}+'</span>'
            }}
        }}"
                                                             ), new object[] {
                                    prop,
                                    arIndex,
                                    string.Format(modelstring, pi.Name),
                                    className,
                                    pi.Name,
                                    tcode
                                }));
                                code += (code.EndsWith(">'") || code.EndsWith(">')") ? "+" : "") + "'<span class=\"" + className + " " + pi.Name + "\">'+ars" + prop + arIndex.ToString() + "+'</span>'";
                                arIndex++;
                            }
                            else
                            {
                                string tsets = "";
                                code += (code.EndsWith(">'") || code.EndsWith(">')") ? "+" : "") + "(" + string.Format(modelstring, prop) + "==null ? '' : '<span class=\"" + className + " " + pi.Name + "\">'+" + _RecurAddRenderModelPropertyCode(pi.Name, ptype, host, string.Format(modelstring, pi.Name) + ".get('{0}')", out tsets, false, minimize) + "+'</span>')";
                                if (tsets != "")
                                {
                                    sb.Append(tsets);
                                }
                            }
                        }
                        else
                        {
                            if (array)
                            {
                                sb.AppendLine(string.Format((minimize ?
                                                             "var ars{0}{1}='';if ({2}!=null){{for(x in {2}){{ars{0}{1}+='<span class=\"{3} {4} els\">'+{2}[x]+'</span>';}}}}"
                                    : @"     var ars{0}{1} = '';
        if ({2}!=null){{
            for(x in {2}){{
                ars{0}{1} += '<span class=""{3} {4} els"">'+{2}[x]+'</span>';
            }}
        }}"), new object[] {
                                    prop,
                                    arIndex,
                                    string.Format(modelstring, pi.Name),
                                    className,
                                    pi.Name
                                }));
                                code += (code.EndsWith(">'") || code.EndsWith(">')") ? "+" : "") + "'<span class=\"" + className + " " + pi.Name + "\">'+ars" + prop + arIndex.ToString() + "+'</span>'";
                                arIndex++;
                            }
                            else
                            {
                                code += (code.EndsWith(">'") || code.EndsWith(">')") ? "+" : "") + "'<span class=\"" + className + " " + pi.Name + "\">'+(" + string.Format(modelstring, pi.Name) + "==null ? '' : " + string.Format(modelstring, pi.Name) + ")+'</span>'";
                            }
                        }
                    }
                }
            }
            arstring = sb.ToString();
            return(code);
        }
示例#18
0
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);

            if (!minimize)
            {
                sb.AppendLine("//Org.Reddragonit.BackBoneDotNet.JSGenerators.RouterGenerator");
            }
            Dictionary <string, List <BackboneHashRoute> > routes = new Dictionary <string, List <BackboneHashRoute> >();

            foreach (BackboneHashRoute bhr in modelType.GetCustomAttributes(typeof(BackboneHashRoute), false))
            {
                List <BackboneHashRoute> rts = new List <BackboneHashRoute>();
                if (routes.ContainsKey(bhr.RouterName))
                {
                    rts = routes[bhr.RouterName];
                    routes.Remove(bhr.RouterName);
                }
                rts.Add(bhr);
                routes.Add(bhr.RouterName, rts);
            }
            if (routes.Count > 0)
            {
                foreach (string routerName in routes.Keys)
                {
                    if (routerName.Contains("."))
                    {
                        string tmp = "";
                        foreach (string str in ModelNamespace.GetFullNameForModel(modelType, host).Split('.'))
                        {
                            sb.AppendLine(string.Format((minimize ? "{1}{0}={2}{0}||{{}};" : "{1}{0} = {2}{0} || {{}};"),
                                                        str,
                                                        (tmp.Length == 0 ? "var " : tmp + "."),
                                                        (tmp.Length == 0 ? "" : tmp + ".")));
                            tmp += (tmp.Length == 0 ? "" : ".") + str;
                        }
                    }
                    else
                    {
                        sb.AppendLine(string.Format((minimize ? "var {0}={0}||{{}};" : "var {0} = {0} || {{}};"), routerName));
                    }
                    sb.AppendLine(string.Format((minimize ?
                                                 "if(!Backbone.History.started){{Backbone.history.start({{pushState:false}});}}if({0}.navigate==undefined){{{0}=new Backbone.Router();}}"
                        : @"if (!Backbone.History.started){{
    Backbone.history.start({{ pushState: false }});
}}
if ({0}.navigate == undefined){{
    {0} = new Backbone.Router();
}}"), routerName));
                    foreach (BackboneHashRoute bhr in routes[routerName])
                    {
                        sb.AppendFormat(@"{0}.route('{1}','{2}',function(", routerName, bhr.Path, bhr.FunctionName);
                        if (bhr.Path.Contains(":"))
                        {
                            foreach (Match m in _REG_PARS.Matches(bhr.Path))
                            {
                                sb.Append(m.Groups[1].Value + ",");
                            }
                            sb.Length = sb.Length - 1;
                        }
                        sb.AppendLine(string.Format((minimize ? "){{{0}}});" : "){{ {0} }});"), bhr.Code));
                    }
                }
            }
            return(sb.ToString());
        }
        public string GenerateJS(Type modelType, string host, List <string> readOnlyProperties, List <string> properties, List <string> viewIgnoreProperties, bool hasUpdate, bool hasAdd, bool hasDelete, bool minimize)
        {
            if (modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false).Length > 0)
            {
                if (((int)((ModelBlockJavascriptGeneration)modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false)[0]).BlockType & (int)ModelBlockJavascriptGenerations.CollectionView) == (int)ModelBlockJavascriptGenerations.CollectionView)
                {
                    return("");
                }
            }
            WrappedStringBuilder sb = new WrappedStringBuilder(minimize);

            sb.AppendFormat((minimize ?
                             "{0}=_.extend(true,{0},{{CollectionView:Backbone.View.extend({{"
    : @"//Org.Reddragonit.BackBoneDotNet.JSGenerators.CollectionViewGenerator
{0} = _.extend(true,{0}, {{CollectionView : Backbone.View.extend({{
"),
                            ModelNamespace.GetFullNameForModel(modelType, host));

            string tag = "div";

            if (modelType.GetCustomAttributes(typeof(ModelViewTag), false).Length > 0)
            {
                tag = ((ModelViewTag)modelType.GetCustomAttributes(typeof(ModelViewTag), false)[0]).TagName;
            }
            switch (tag)
            {
            case "tr":
                sb.AppendLine((minimize ? "tagName:\"table\"," : "\ttagName : \"table\","));
                break;

            default:
                sb.AppendLine((minimize ? "tagName:\"" + tag + "\"," : "\ttagName : \"" + tag + "\","));
                break;
            }

            _AppendClassName(modelType, host, sb, minimize);
            _AppendAttributes(modelType, sb, minimize);

            sb.AppendLine((minimize ?
                           "render:function(){var el=this.$el;el.html('');"
                :@"  render : function(){
        var el = this.$el;
        el.html('');"));
            if (tag.ToLower() == "tr")
            {
                sb.AppendLine((minimize ?
                               "var thead=$('<thead class=\"'+this.className+' header\"></thead>');el.append(thead);thead.append('<tr></tr>');thead=$(thead.children()[0]);"
                    :@"      var thead = $('<thead class=""'+this.className+' header""></thead>');
        el.append(thead);
        thead.append('<tr></tr>');
        thead = $(thead.children()[0]);"));
                foreach (string str in properties)
                {
                    if (str != "id" && !viewIgnoreProperties.Contains(str))
                    {
                        sb.AppendLine((minimize ? "" : "\t\t") + "thead.append('<th className=\"'+this.className+' " + str + "\">" + str + "</th>');");
                    }
                }
                sb.AppendLine((minimize ?
                               "el.append('<tbody></tbody>');el=$(el.children()[1]);"
                    : @"      el.append('<tbody></tbody>');
        el = $(el.children()[1]);"));
            }
            sb.AppendFormat((minimize ?
                             "if(this.collection.length==0){{this.trigger('pre_render_complete',this);this.trigger('render',this);}}else{{var alt=false;for(var x=0;x<this.collection.length;x++){{var vw=new {0}.View({{model:this.collection.at(x)}});if(alt){{vw.$el.addClass('Alt');}}alt=!alt;if(x+1==this.collection.length){{vw.on('render',function(){{this.col.trigger('item_render',this.view);this.col.trigger('pre_render_complete',this.col);this.col.trigger('render',this.col);}},{{col:this,view:vw}});}}else{{vw.on('render',function(){{this.col.trigger('item_render',this.view);}},{{col:this,view:vw}});}}el.append(vw.$el);vw.render();}}}}}}}})}});"
                : @"      if(this.collection.length==0){{
            this.trigger('pre_render_complete',this);
            this.trigger('render',this);
        }}else{{
            var alt=false;
            for(var x=0;x<this.collection.length;x++){{
                    var vw = new {0}.View({{model:this.collection.at(x)}});
                    if (alt){{
                        vw.$el.addClass('Alt');
                    }}
                    alt=!alt;
                    if(x+1==this.collection.length){{
                        vw.on('render',function(){{this.col.trigger('item_render',this.view);this.col.trigger('pre_render_complete',this.col);this.col.trigger('render',this.col);}},{{col:this,view:vw}});
                    }}else{{
                        vw.on('render',function(){{this.col.trigger('item_render',this.view);}},{{col:this,view:vw}});
                    }}
                    el.append(vw.$el);
                    vw.render();
            }}
        }}
    }}
}})}});"),
                            ModelNamespace.GetFullNameForModel(modelType, host));
            return(sb.ToString());
        }
示例#20
0
        private void _AppendRenderFunction(Type modelType, string host, string tag, List <string> properties, bool hasUpdate, bool hasDelete, WrappedStringBuilder sb, List <string> viewIgnoreProperties, string editImage, string deleteImage, EditButtonDefinition edDef, DeleteButtonDefinition delDef, bool minimize)
        {
            bool hasUpdateFunction = true;

            if (modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false).Length > 0)
            {
                if (((int)((ModelBlockJavascriptGeneration)modelType.GetCustomAttributes(typeof(ModelBlockJavascriptGeneration), false)[0]).BlockType & (int)ModelBlockJavascriptGenerations.EditForm) == (int)ModelBlockJavascriptGenerations.EditForm)
                {
                    hasUpdateFunction = false;
                }
            }
            sb.AppendLine((minimize ? "render:function(){" : "\trender : function(){"));
            string fstring = "";

            switch (tag.ToLower())
            {
            case "tr":
                fstring = "'<td class=\"'+this.className+' {0}\">'+{1}+'</td>'{2}";
                break;

            case "ul":
            case "ol":
                fstring = "'<li class=\"'+this.className+' {0}\">'+{1}+'</li>'{2}";
                break;

            default:
                fstring = "'<" + tag + " class=\"'+this.className+' {0}\">'+{1}+'</" + tag + ">'{2}";
                break;
            }
            int arIndex = 0;
            WrappedStringBuilder sbHtml = new WrappedStringBuilder(minimize);

            sbHtml.Append((minimize ? "" : "\t\t") + "$(this.el).html(");
            foreach (string prop in properties)
            {
                if (!viewIgnoreProperties.Contains(prop) && prop != "id")
                {
                    Type PropType = modelType.GetProperty(prop).PropertyType;
                    bool array    = false;
                    if (PropType.FullName.StartsWith("System.Nullable"))
                    {
                        if (PropType.IsGenericType)
                        {
                            PropType = PropType.GetGenericArguments()[0];
                        }
                        else
                        {
                            PropType = PropType.GetElementType();
                        }
                    }
                    if (PropType.IsArray)
                    {
                        array    = true;
                        PropType = PropType.GetElementType();
                    }
                    else if (PropType.IsGenericType)
                    {
                        if (PropType.GetGenericTypeDefinition() == typeof(List <>))
                        {
                            array    = true;
                            PropType = PropType.GetGenericArguments()[0];
                        }
                    }
                    if (new List <Type>(PropType.GetInterfaces()).Contains(typeof(IModel)))
                    {
                        if (array)
                        {
                            string tsets = "";
                            string tcode = _RecurAddRenderModelPropertyCode(prop, PropType, host, "this.model.get('" + prop + "').at(x).get('{0}')", out tsets, true, minimize);
                            if (tsets != "")
                            {
                                sb.Append(tsets);
                            }
                            sb.AppendFormat((minimize ?
                                             "var ars{0}='';if(this.model.get('{1}')!=null){{for(var x=0;x<this.model.get('{1}').length;x++){{ars{0}+={2};}}}}"
                                :@"      var ars{0} = '';
        if(this.model.get('{1}')!=null){{
            for(var x=0;x<this.model.get('{1}').length;x++){{
                ars{0}+={2};
            }}
        }}"), arIndex, prop, string.Format(tcode, prop));
                            sbHtml.Append(string.Format(fstring, prop, "ars" + arIndex.ToString(), (properties.IndexOf(prop) == properties.Count - 1 ? "" : "+")));
                            arIndex++;
                        }
                        else
                        {
                            string tsets = "";
                            string code  = _RecurAddRenderModelPropertyCode(prop, PropType, host, "this.model.get('" + prop + "').get('{0}')", out tsets, false, minimize);
                            if (tsets != "")
                            {
                                sb.Append(tsets);
                            }
                            sbHtml.Append(string.Format(fstring, prop, "(this.model.get('" + prop + "') == null ? '' : " + code + ")", (properties.IndexOf(prop) == properties.Count - 1 ? "" : "+")));
                        }
                    }
                    else
                    {
                        if (array)
                        {
                            sb.AppendFormat((minimize?
                                             "var ars{0}='';if(this.model.get('{1}')!=null){{for(x in this.model.get('{1}')){{if(this.model.get('{1}')[x]!=null){{ars{0}+='<span class=\"'+this.className+' {1} els\">'+this.model.get('{1}')[x]+'</span>';}}}}}}"
                                :@"      var ars{0} = '';
        if(this.model.get('{1}')!=null){{
            for(x in this.model.get('{1}')){{
                if(this.model.get('{1}')[x]!=null){{
                    ars{0}+='<span class=""'+this.className+' {1} els"">'+this.model.get('{1}')[x]+'</span>';
                }}
            }}
        }}"), arIndex, prop);
                            sbHtml.Append(string.Format(fstring, prop, "ars" + arIndex.ToString(), (properties.IndexOf(prop) == properties.Count - 1 ? "" : "+")));
                            arIndex++;
                        }
                        else
                        {
                            sbHtml.Append(string.Format(fstring, prop, string.Format((minimize ? "(this.model.get('{0}')==null?'':this.model.get('{0}'))":"(this.model.get('{0}')==null ? '' : this.model.get('{0}'))"), prop), (properties.IndexOf(prop) == properties.Count - 1 ? "" : "+")));
                        }
                    }
                }
            }
            sb.Append(sbHtml.ToString().Trim('+'));
            if (hasUpdate || hasDelete)
            {
                switch (tag.ToLower())
                {
                case "tr":
                    sb.Append("+'<td class=\"'+this.className+' buttons\">'");
                    break;

                case "ul":
                case "ol":
                    sb.Append("+'<li class=\"'+this.className+' buttons\">'");
                    break;

                default:
                    sb.Append("+'<" + tag + " class=\"'+this.className+' buttons\">'");
                    break;
                }
            }
            if (hasUpdate)
            {
                if (edDef == null)
                {
                    sb.Append("+'<span class=\"'+this.className+' button edit\">" + (editImage == null ? "Edit" : "<img src=\"" + editImage + "\"/>") + "</span>'");
                }
                else
                {
                    sb.Append("+'<" + edDef.Tag + " class=\"'+this.className+' button edit");
                    if (edDef.Class != null)
                    {
                        foreach (string str in edDef.Class)
                        {
                            sb.Append(" " + str);
                        }
                    }
                    sb.Append("\">" + (editImage == null ? "" : "<img src=\"" + editImage + "\"/>") + (edDef.Text == null ? "" : edDef.Text) + "</" + edDef.Tag + ">'");
                }
            }
            if (hasDelete)
            {
                if (delDef == null)
                {
                    sb.Append("+'<span class=\"'+this.className+' button delete\">" + (deleteImage == null ? "Delete" : "<img src=\"" + deleteImage + "\"/>") + "</span>'");
                }
                else
                {
                    sb.Append("+'<" + delDef.Tag + " class=\"'+this.className+' button edit");
                    if (delDef.Class != null)
                    {
                        foreach (string str in delDef.Class)
                        {
                            sb.Append(" " + str);
                        }
                    }
                    sb.Append("\">" + (deleteImage == null ? "" : "<img src=\"" + deleteImage + "\"/>") + (delDef.Text == null ? "" : delDef.Text) + "</" + delDef.Tag + ">'");
                }
            }
            if (hasUpdate || hasDelete)
            {
                switch (tag.ToLower())
                {
                case "tr":
                    sb.Append("+'</td>'");
                    break;

                case "ul":
                case "ol":
                    sb.Append("+'</li>'");
                    break;

                default:
                    sb.Append("+'</" + tag + ">'");
                    break;
                }
            }
            sb.AppendLine((minimize ?
                           ");$(this.el).attr('name',this.model.id);this.trigger('pre_render_complete',this);this.trigger('render',this);return this;}"
                : @");
        $(this.el).attr('name',this.model.id);
        this.trigger('pre_render_complete',this);
        this.trigger('render',this);
        return this;
    }") + (hasUpdate || hasDelete ? "," : ""));
            if ((hasUpdate && hasUpdateFunction) || hasDelete)
            {
                sb.AppendLine((minimize ? "events:{" : "\tevents : {"));
                if (hasUpdate && hasUpdateFunction)
                {
                    sb.AppendLine((minimize ? "'click .button.edit':'editModel'" : "\t\t'click .button.edit' : 'editModel'") + (hasDelete ? "," : ""));
                }
                if (hasDelete)
                {
                    sb.AppendLine((minimize ? "'click .button.delete':'deleteModel'" : "\t\t'click .button.delete' : 'deleteModel'"));
                }
                sb.AppendLine((minimize ? "" : "\t") + "},");
                if (hasUpdate && hasUpdateFunction)
                {
                    sb.AppendLine(string.Format((minimize ?
                                                 "editModel:function(){{{0}.editModel(this);}}"
                        : @"    editModel : function(){{
        {0}.editModel(this);
    }}"), ModelNamespace.GetFullNameForModel(modelType, host)) + (hasDelete ? "," : ""));
                }
                if (hasDelete)
                {
                    sb.AppendLine((minimize ?
                                   "deleteModel:function(){this.model.destroy();}"
                        :@"  deleteModel : function(){
        this.model.destroy();
    }"));
                }
            }
        }
示例#21
0
        private void BuildModelNamespaces(XmlNode elementsExtension, List <string> namespaceNodeIdList, string modelFile)
        {
            foreach (string namespaceNodeId in namespaceNodeIdList)
            {
                XmlNode namespaceExtensionNode = elementsExtension.SelectSingleNode(string.Format(NodeElementByIdRef, namespaceNodeId), _currentNsManager);
                XmlNode namespaceNode          = _currentEap.SelectSingleNode(string.Format(NodeNamespaceByIdRef, namespaceNodeId), _currentNsManager);

                XmlAttribute   authorAttribute = namespaceExtensionNode.SelectSingleNode(NodeProject, _currentNsManager).Attributes[PropertyAuthor];
                ModelNamespace nmspace         = new ModelNamespace()
                {
                    Label   = namespaceExtensionNode.Attributes[PropertyName].Value,
                    Name    = namespaceExtensionNode.SelectSingleNode(NodeProperties, _currentNsManager).Attributes[PropertyAlias].Value,
                    Comment = namespaceExtensionNode.SelectSingleNode(NodeProperties, _currentNsManager).Attributes[PropertyComment].Value,
                    Creator = (authorAttribute == null) ? string.Empty : authorAttribute.Value,
                    Model   = _currentModelRoot
                };
                if (string.IsNullOrEmpty(nmspace.Comment))
                {
                    RegisterError(Category.Doc, "Le package [" + nmspace.Label + "] n'a pas de commentaire.");
                }

                BuildNamespaceClasses(nmspace, namespaceNode, elementsExtension, modelFile);
                _currentModelRoot.AddNamespace(nmspace);
            }

            foreach (string nsName in _currentModelRoot.Namespaces.Keys)
            {
                ModelNamespace nmsp = _currentModelRoot.Namespaces[nsName];
                foreach (ModelClass classe in nmsp.ClassList)
                {
                    foreach (ModelProperty property in classe.PropertyList)
                    {
                        if (_regexICollection.IsMatch(property.DataType))
                        {
                            string innerType = _regexICollection.Replace(property.DataType, "$1");
                            if (!string.IsNullOrEmpty(innerType))
                            {
                                if (!_classByNameMap.ContainsKey(innerType))
                                {
                                    if (!ParserHelper.IsPrimitiveType(innerType))
                                    {
                                        RegisterError(Category.Bug, "Ajout des usings dans la classe [" + classe.Name + "] : la classe [" + innerType + "] n'a pas été trouvée.");
                                    }
                                }
                                else
                                {
                                    ModelClass usingClasse = _classByNameMap[innerType];
                                    classe.AddUsing(usingClasse.Namespace);
                                }
                            }
                            else
                            {
                                RegisterError(Category.Bug, "Impossible de récupérer le type générique de la collection pour la propriété [" + property.Name + "] de la classe [" + property.Class.Name + "].");
                            }
                        }

                        if (classe.ParentClass != null)
                        {
                            classe.AddUsing(classe.ParentClass.Namespace);
                        }
                    }
                }
            }
        }
示例#22
0
 private void _AppendInputSetupCode(WrappedStringBuilder sb, string host, List <string> properties, List <string> readOnlyProperties, Type modelType, bool minimize)
 {
     foreach (string propName in properties)
     {
         if (propName != "id")
         {
             if (!readOnlyProperties.Contains(propName))
             {
                 Type propType = modelType.GetProperty(propName).PropertyType;
                 bool array    = false;
                 if (propType.FullName.StartsWith("System.Nullable"))
                 {
                     if (propType.IsGenericType)
                     {
                         propType = propType.GetGenericArguments()[0];
                     }
                     else
                     {
                         propType = propType.GetElementType();
                     }
                 }
                 if (propType.IsArray)
                 {
                     array    = true;
                     propType = propType.GetElementType();
                 }
                 else if (propType.IsGenericType)
                 {
                     if (propType.GetGenericTypeDefinition() == typeof(List <>))
                     {
                         array    = true;
                         propType = propType.GetGenericArguments()[0];
                     }
                 }
                 if (new List <Type>(propType.GetInterfaces()).Contains(typeof(IModel)))
                 {
                     sb.AppendFormat((minimize ?
                                      "var sel{0}=$(frm.find('select[name=\"{0}\"]')[0]);var opts={1}.SelectList();for(var x=0;x<opts.length;x++){{var opt=opts[x];sel{0}.append($('<option value=\"'+opt.ID+'\">'+opt.Text+'</option>'));}}"
                         :@"      var sel{0} = $(frm.find('select[name=""{0}""]')[0]);
 var opts = {1}.SelectList();
 for(var x=0;x<opts.length;x++){{
     var opt = opts[x];
     sel{0}.append($('<option value=""'+opt.ID+'"">'+opt.Text+'</option>'));
 }}"),
                                     propName,
                                     ModelNamespace.GetFullNameForModel(propType, host));
                     if (array)
                     {
                         sb.AppendFormat((minimize ?
                                          "for(var x=0;x<view.model.get('{0}').length;x++){{;$(sel{0}.find('option[value=\"'+view.model.get('{0}')[x].get('id')+'\"]')[0]).attr('selected', 'selected');}}"
                             :@"      for(var x=0;x<view.model.get('{0}').length;x++){{;
     $(sel{0}.find('option[value=""'+view.model.get('{0}')[x].get('id')+'""]')[0]).attr('selected', 'selected');
 }}"),
                                         propName);
                     }
                     else
                     {
                         sb.AppendLine("\t\tsel.val(view.model.get('" + propName + "').id);");
                     }
                 }
                 else if (propType.IsEnum)
                 {
                     if (array)
                     {
                         sb.AppendFormat((minimize ?
                                          "var sel{0}=$(frm.find('select[name=\"{0}\"]')[0]);for(var x=0;x<view.model.get('{0}').length;x++){{$(sel.find('option[value=\"'+view.model.get('{0}')[x]+'\"]')[0]).attr('selected', 'selected');}}"
                             :@"      var sel{0} = $(frm.find('select[name=""{0}""]')[0]);
 for(var x=0;x<view.model.get('{0}').length;x++){{
     $(sel.find('option[value=""'+view.model.get('{0}')[x]+'""]')[0]).attr('selected', 'selected');
 }}"),
                                         propName);
                     }
                     else
                     {
                         sb.AppendLine((minimize ? "" : "\t\t") + "$(frm.find('select[name=\"" + propName + "\"]')[0]).val(view.model.get('" + propName + "'));");
                     }
                 }
                 else
                 {
                     if (array)
                     {
                         sb.AppendFormat((minimize ?
                                          "var ins=frm.find('input[name={0}');for(var x=1;x<ins.length;x++){{$(ins[x]).remove();}}var inp=$(ins[0]);for(var x=0;x<view.model.get('{0}').length;x++){{inp.val(view.model.get('{0}'));if (x<model.get('{0}').length-1){{var newInp=inp.clone();inp.after(newInp);inp.after('<br/>');inp=newInp;}}}}"
                     :@"      var ins = frm.find('input[name={0}');
 for(var x=1;x<ins.length;x++){{
     $(ins[x]).remove();
 }}
 var inp = $(ins[0]);
 for(var x=0;x<view.model.get('{0}').length;x++){{
     inp.val(view.model.get('{0}'));
     if (x<model.get('{0}').length-1){{
         var newInp = inp.clone();
         inp.after(newInp);
         inp.after('<br/>');
         inp = newInp;
     }}
 }}"), propName);
                     }
                     else if (propType == typeof(bool))
                     {
                         sb.AppendLine(string.Format((minimize ?
                                                      "$(frm.find('input[name=\"{0}\"][value=\"'+view.model.get('{0}')+'\"]')[0]).prop('checked',true);"
                             :"\t\t$(frm.find('input[name=\"{0}\"][value=\"'+view.model.get('{0}')+'\"]')[0]).prop('checked', true);"), propName));
                     }
                     else
                     {
                         sb.AppendLine(string.Format((minimize ?
                                                      "$(frm.find('input[name=\"{0}\"]')[0]).val(view.model.get('{0}'));"
                             :"\t\t$(frm.find('input[name=\"{0}\"]')[0]).val(view.model.get('{0}'));"), propName));
                     }
                 }
             }
         }
     }
     _AppendAcceptCode(sb, minimize);
 }
示例#23
0
        private void BuildNamespaceClasses(ModelNamespace nmspace, XmlNode namespaceNode, XmlNode elementsExtension, string modelFile)
        {
            foreach (XmlNode classNode in namespaceNode.SelectNodes(NodeClasses, _currentNsManager))
            {
                string  classNodeId        = classNode.Attributes[PropertyId].Value;
                XmlNode classExtensionNode = elementsExtension.SelectSingleNode(string.Format(NodeElementByIdRef, classNodeId), _currentNsManager);

                XmlAttribute stereotypeAttribute = classExtensionNode.SelectSingleNode(NodeProperties, _currentNsManager).Attributes[PropertyStereotype];
                XmlNode      viewNode            = classExtensionNode.SelectSingleNode(NodeTagView, _currentNsManager);
                ModelClass   classe = new ModelClass()
                {
                    Label      = classNode.Attributes[PropertyName].Value,
                    Name       = classExtensionNode.SelectSingleNode(NodeProperties, _currentNsManager).Attributes[PropertyAlias].Value,
                    Comment    = classExtensionNode.SelectSingleNode(NodeProperties, _currentNsManager).Attributes[PropertyComment].Value,
                    Stereotype = (stereotypeAttribute != null) ? stereotypeAttribute.Value : null,
                    Namespace  = nmspace,
                    ModelFile  = modelFile,
                    IsView     = viewNode != null
                };

                if (!string.IsNullOrEmpty(classe.Stereotype) && classe.Stereotype != StereotypeReference && classe.Stereotype != StereotypeStatique)
                {
                    RegisterError(Category.Error, "Classe " + classe.Name + " : seuls les stéréotypes '" + StereotypeReference + "' et '" + StereotypeStatique + "' sont acceptés.");
                }

                XmlAttribute persistenceAttribute = classExtensionNode.SelectSingleNode(NodeExtendedProperties, _currentNsManager).Attributes[PropertyPersistent];
                bool         isPersistent         = false;
                if (persistenceAttribute == null)
                {
                    RegisterError(Category.Error, "Classe " + classe.Name + " : la classe doit être définie comme persistante ou non-persistante.");
                }
                else
                {
                    if (PersistencePersistent.Equals(persistenceAttribute.Value))
                    {
                        isPersistent = true;
                    }
                    else if (PersistenceTransient.Equals(persistenceAttribute.Value))
                    {
                        isPersistent = false;
                    }
                    else
                    {
                        RegisterError(Category.Error, "Classe " + classe.Name + " : seuls les persistances '" + PersistencePersistent + "' et '" + PersistenceTransient + "' sont acceptés.");
                    }
                }

                string persistentCode = string.Empty;
                if (isPersistent)
                {
                    persistentCode = GeneratorParameters.IsProjetUesl ? ParserHelper.GetSqlTableNameFromClassName(classe.Name, classe.IsView) : ParserHelper.ConvertCsharp2Bdd(classe.Name);
                }

                classe.DataContract = new ModelDataContract()
                {
                    Name         = persistentCode,
                    Namespace    = nmspace.Model.Name + "." + nmspace.Name,
                    IsPersistent = isPersistent
                };

                // Chargement et création des propriétés de la classe
                BuildClassProperties(classe, classNode, classExtensionNode, modelFile);

                // Détermine la DefaultProperty de la classe
                foreach (ModelProperty property in classe.PropertyList)
                {
                    if (!string.IsNullOrEmpty(property.Stereotype) && StereotypeDefaultProperty.Equals(property.Stereotype))
                    {
                        if (!string.IsNullOrEmpty(classe.DefaultProperty))
                        {
                            RegisterError(Category.Bug, "La classe " + classe.Name + " a déjà une valeur pour la propriété DefaultProperty.");
                        }
                        else
                        {
                            classe.DefaultProperty = property.Name;
                        }
                    }
                }

                nmspace.AddClass(classe);

                _classByIdMap.Add(modelFile + ":" + classNode.Attributes[PropertyId].Value, classe);

                if (_classByNameMap.ContainsKey(classe.Name))
                {
                    RegisterError(Category.Bug, "Doublons dans le nommage des classes du modèle : la classe [" + classe.Name + "] existe déjà.");
                }
                else
                {
                    _classByNameMap.Add(classe.Name, classe);
                }
            }
        }
示例#24
0
        private void _RenderFieldInput(string propName, Type propType, string host, WrappedStringBuilder sb)
        {
            bool array = false;

            if (propType.FullName.StartsWith("System.Nullable"))
            {
                if (propType.IsGenericType)
                {
                    propType = propType.GetGenericArguments()[0];
                }
                else
                {
                    propType = propType.GetElementType();
                }
            }
            if (propType.IsArray)
            {
                array    = true;
                propType = propType.GetElementType();
            }
            else if (propType.IsGenericType)
            {
                if (propType.GetGenericTypeDefinition() == typeof(List <>))
                {
                    array    = true;
                    propType = propType.GetGenericArguments()[0];
                }
            }
            if (new List <Type>(propType.GetInterfaces()).Contains(typeof(IModel)))
            {
                sb.Append("<select class=\"'+view.className+' " + propName + "\" name=\"" + propName + "\" modeltype=\"" + ModelNamespace.GetFullNameForModel(propType, host) + "\" " + (array ? "multiple=\"multiple\"" : "") + "></select>");
            }
            else if (propType.IsEnum)
            {
                sb.Append("<select class=\"'+view.className+' " + propName + "\" name=\"" + propName + "\" " + (array ? "multiple=\"multiple\"" : "") + ">");
                foreach (string str in Enum.GetNames(propType))
                {
                    sb.Append("<option value=\"" + str + "\">" + str + "</option>");
                }
                sb.Append("</select>");
            }
            else
            {
                if (array)
                {
                    sb.Append("<input class=\"'+view.className+' " + propName + "\" type=\"text\" name=\"" + propName + "\" isarray=\"true\" proptype=\"" + propType.FullName + "\"/><span class=\"button add\">+</span>");
                }
                else if (propType == typeof(bool))
                {
                    sb.Append("<input class=\"'+view.className+' " + propName + " radTrue\" type=\"radio\" name=\"" + propName + "\" proptype=\"" + propType.FullName + "\" value=\"true\"/><label class=\"'+view.className+' " + propName + " lblTrue\">True</label><input class=\"'+view.className+' " + propName + " radFalse\" type=\"radio\" name=\"" + propName + "\" proptype=\"" + propType.FullName + "\" value=\"false\"/><label class=\"'+view.className+' " + propName + " lblFalse\">False</label>");
                }
                else
                {
                    sb.Append("<input class=\"'+view.className+' " + propName + "\" type=\"text\" name=\"" + propName + "\" proptype=\"" + propType.FullName + "\"/>");
                }
            }
        }