Example #1
0
        internal static StringBuilder GenerateJsProxyScript(Incubator incubator, string[] classes, bool includeLocal = false)
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("(function(b, d, $, win){");
            stringBuilder.AppendLine(DaoProxyRegistration.GetDaoJsCtorScript(incubator, classes).ToString());

            foreach (string className in classes)
            {
                Type   type    = incubator[className];
                string varName = GetVarName(type);
                string var     = string.Format("\tb.{0}", className);
                stringBuilder.Append(var);
                stringBuilder.Append(" = {};\r\n");
                stringBuilder.Append(var);
                stringBuilder.Append(".proxyName = \"{0}\";\r\n"._Format(varName));

                foreach (MethodInfo method in type.GetMethods())
                {
                    if (WillProxyMethod(method, includeLocal))
                    {
                        stringBuilder.AppendLine(GetMethodCall(type, method));
                    }
                }

                MethodInfo modelTypeMethod = type.GetMethod("GetDaoType");
                if (modelTypeMethod != null && modelTypeMethod.ReturnType == typeof(Type))
                {
                    Type modelType = (Type)modelTypeMethod.Invoke(null, null);
                    stringBuilder.Append("\td.entities = d.entities || {};");
                    stringBuilder.Append("\td.fks = d.fks || [];");
                    stringBuilder.AppendFormat("\td.entities.{0} = b.{0};\r\n", className);
                    stringBuilder.AppendFormat("\td.entities.{0}.ctx = '{1}';\r\n", className, Dao.ConnectionName(modelType));
                    stringBuilder.AppendFormat("\td.entities.{0}.cols = [];\r\n", className);

                    PropertyInfo[] modelProps = modelType.GetProperties();
                    foreach (PropertyInfo prop in modelProps)
                    {
                        if (prop.HasCustomAttributeOfType(out ColumnAttribute col))
                        {
                            string typeName = prop.PropertyType.Name;
                            if (prop.PropertyType.IsGenericType &&
                                prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>))
                            {
                                typeName = prop.PropertyType.GetGenericArguments()[0].Name;
                            }

                            stringBuilder.AppendFormat("\td.entities.{0}.cols.push({{name: '{1}', type: '{2}', nullable: {3} }});\r\n", className, col.Name, typeName, col.AllowNull ? "true" : "false");
                        }

                        if (prop.HasCustomAttributeOfType(out ForeignKeyAttribute fk))
                        {
                            stringBuilder.AppendFormat("\td.fks.push({{ pk: '{0}', pt: '{1}', fk: '{2}', ft: '{3}', nullable: {4} }});\r\n", fk.ReferencedKey, fk.ReferencedTable, fk.Name, fk.Table, fk.AllowNull ? "true" : "false");
                        }
                    }
                }

                stringBuilder.AppendFormat("\twin.{0} = win.{0} || {{}};\r\n", varName);
                stringBuilder.AppendFormat("\t$.extend(win.{0}, {1});\r\n", varName, var.Trim());
                stringBuilder.AppendFormat("\twin.{0}.className = '{1}';\r\n", varName, className);
                stringBuilder.AppendFormat("\td.{0} = b.{1};\r\n", varName, className);
            }

            stringBuilder.AppendLine("})(bam, dao, jQuery, window || {});");

            return(stringBuilder);
        }
Example #2
0
        internal static StringBuilder GenerateJsProxyScript(Incubator incubator, string[] classes, bool includeLocal = false, IRequest request = null)
        {
            string daoNs = request?.QueryString?["daoNs"] ?? "dao";
            string bamNs = request?.QueryString?["bamNs"] ?? "bam";

            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("(function(b, d, $, win){");
            stringBuilder.AppendLine(DaoProxyRegistration.GetDaoJsCtorScript(incubator, classes).ToString());

            foreach (string className in classes)
            {
                Type   type    = incubator[className];
                string varName = GetVarName(type);
                string var     = string.Format("\tb.{0}", className);
                stringBuilder.Append(var);
                stringBuilder.Append(" = {};\r\n");
                stringBuilder.Append(var);
                stringBuilder.Append(".proxyName = \"{0}\";\r\n"._Format(varName));
                if (request != null && request.Url != null)
                {
                    string protocol = request.Url.Scheme;
                    string host     = request.Url.Host;
                    int    port     = request.Url.Port;
                    if (!string.IsNullOrEmpty(request.Headers["X-Forwarded-For"])) // if the request was passed through a proxy set the port to 80
                    {
                        port = 80;
                    }
                    stringBuilder.Append(var);
                    stringBuilder.Append(".protocol = \"{0}\";\r\n"._Format(protocol));
                    stringBuilder.Append(var);
                    stringBuilder.Append(".host = \"{0}\";\r\n"._Format(host));
                    stringBuilder.Append(var);
                    stringBuilder.Append(".port = \"{0}\";\r\n"._Format(port));
                    stringBuilder.Append($"\tb.proxy('{className}', " + "{" + $"protocol: '{protocol}:', host: '{host}', port: '{port}'" + "});\r\n");
                }

                foreach (MethodInfo method in type.GetMethods())
                {
                    if (method.WillProxy(includeLocal))
                    {
                        stringBuilder.AppendLine(GetJsMethodCall(type, method));
                    }
                }

                MethodInfo modelTypeMethod = type.GetMethod("GetDaoType");
                if (modelTypeMethod != null && modelTypeMethod.ReturnType == typeof(Type))
                {
                    Type modelType = (Type)modelTypeMethod.Invoke(null, null);
                    stringBuilder.Append("\td.entities = d.entities || {};");
                    stringBuilder.Append("\td.fks = d.fks || [];");
                    stringBuilder.AppendFormat("\td.entities.{0} = b.{0};\r\n", className);
                    stringBuilder.AppendFormat("\td.entities.{0}.ctx = '{1}';\r\n", className, Dao.ConnectionName(modelType));
                    stringBuilder.AppendFormat("\td.entities.{0}.cols = [];\r\n", className);

                    PropertyInfo[] modelProps = modelType.GetProperties();
                    foreach (PropertyInfo prop in modelProps)
                    {
                        if (prop.HasCustomAttributeOfType(out ColumnAttribute col))
                        {
                            string typeName = prop.PropertyType.Name;
                            if (prop.PropertyType.IsGenericType &&
                                prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>))
                            {
                                typeName = prop.PropertyType.GetGenericArguments()[0].Name;
                            }

                            stringBuilder.AppendFormat("\td.entities.{0}.cols.push({{name: '{1}', type: '{2}', nullable: {3} }});\r\n", className, col.Name, typeName, col.AllowNull ? "true" : "false");
                        }

                        if (prop.HasCustomAttributeOfType(out ForeignKeyAttribute fk))
                        {
                            stringBuilder.AppendFormat("\td.fks.push({{ pk: '{0}', pt: '{1}', fk: '{2}', ft: '{3}', nullable: {4} }});\r\n", fk.ReferencedKey, fk.ReferencedTable, fk.Name, fk.Table, fk.AllowNull ? "true" : "false");
                        }
                    }
                }

                stringBuilder.AppendFormat("\twin.{0} = win.{0} || {{}};\r\n", varName);
                stringBuilder.AppendFormat("\t$.extend(win.{0}, {1});\r\n", varName, var.Trim());
                stringBuilder.AppendFormat("\twin.{0}.className = '{1}';\r\n", varName, className);
                stringBuilder.AppendFormat("\td.{0} = b.{1};\r\n", varName, className);
            }

            stringBuilder.AppendLine("})(" + bamNs + ", " + daoNs + ", jQuery, window || {});");

            return(stringBuilder);
        }
Example #3
0
 protected void OnInitializedAppDaoTemplates(string appName, DaoProxyRegistration reg)
 {
     InitializedAppDaoTemplates?.Invoke(appName, reg);
 }
Example #4
0
 public string Ctors()
 {
     return(DaoProxyRegistration.GetDaoJsCtorScript(_serviceProvider, _serviceProvider.ClassNames).ToString());
 }
Example #5
0
 protected void OnInitializedCommonDaoTemplates(DaoProxyRegistration reg)
 {
     InitializedCommonDaoTemplates?.Invoke(reg);
 }