public static void WriteRules(BlockWriter br, MetadataCli.Property entityTypeProperty, MetadataCli.Metadata metadataCli) { if (!entityTypeProperty.Nullable) { br.WriteLine("required: true,"); } switch (entityTypeProperty.Type) { case "number": br.WriteLine("number: true,"); break; case "string": br.WriteLine("maxLength: " + entityTypeProperty.MaxLength + ","); break; case "boolean": break; case "Date": br.WriteLine("date: true,"); break; case "any": case "any[]": break; default: throw new ArgumentException("Unknown data type."); } }
public static void WriteProperties(BlockWriter br, Dictionary <string, Property> etp) { foreach (var property in etp) { var nullable = property.Value.Nullable ? "?" : string.Empty; var type = property.Value.Type; nullable = (new string[] { "string", "object", "byte[]" }).Contains(type) ? string.Empty : nullable; //var integers = new List<string>() { "int", "short", "sbyte", "ushort" }; // Info credit: http://geekswithblogs.net/BlackRabbitCoder/archive/2011/01/27/c.net-little-pitfalls-the-dangers-of-casting-boxed-values.aspx br.WriteLine(string.Format("public {0}{1} {2} {{ get {{ return ({0}{1})this.entity.dto[\"{2}\"]; }} set {{ this.entity.dto[\"{2}\"] = value; }} }}", type, nullable, property.Key)); } br.WriteLine(); }
public static void WriteNavigationProperties(BlockWriter br, string entityTypeName, Dictionary <string, NavigationProperty> etnp) { foreach (var navigationProperty in etnp) { var anp = navigationProperty.Value; var multi = anp.Multiplicity == "multi"; var returnType = multi ? string.Format("IEnumerable<{0}>", anp.EntityTypeName) : anp.EntityTypeName; var navigationType = multi ? "Multi" : "Single"; br.WriteLine("[JsonIgnore]"); br.WriteLine(string.Format("public {0} {1} {{ get {{ return this.entity.Navigate{2}<{3}>(\"{4}\", \"{1}\"); }} }}", returnType, navigationProperty.Key, navigationType, anp.EntityTypeName, entityTypeName)); } br.WriteLine(); }
public static void WriteProperties(BlockWriter br, Dictionary <string, MetadataCli.Property> properties) { foreach (var property in properties) { var type = property.Value.Type; if (property.Value.Nullable) { var nullable = (new string[] { "string", "object", "byte[]" }).Contains(type) ? string.Empty : "?"; br.WriteLine(string.Format("public {0}{2} {1} {{ get {{ return ({0}{2})(this.entity.dto[\"{1}\"].HasValues ? this.entity.dto[\"{1}\"] : null); }} set {{ this.entity.dto[\"{1}\"] = new JValue(value); }} }}", type, property.Key, nullable)); } else { br.WriteLine(string.Format("public {0} {1} {{ get {{ return ({0})this.entity.dto[\"{1}\"]; }} set {{ this.entity.dto[\"{1}\"] = new JValue(value); }} }}", type, property.Key)); } } br.WriteLine(); }
public static void WriteServiceOperationsProperties(BlockWriter br, string operationTypeName, IEnumerable <Operation> operations) { foreach (var op in operations) { var parametersAsList = GeneratorUtils.GetOperationParamList(op.Parameters, "{0} {1}"); var parametersAsDictionary = GeneratorUtils.GetOperationParamList(op.Parameters, "{{ \"{1}\", {1} }}"); switch (operationTypeName) { case "functions": if (op.ReturnType != null && op.ReturnType.IsEntity && op.ReturnType.IsCollection) { br.WriteLine(string.Format("public async Task<QueryResult<{0}>> {1}({2}, QueryObject queryObject = null) {{ return await this.GetEntitiesAsync<{0}>(\"{1}\", new Dictionary<string, object>() {{ {3} }}, queryObject, \"{0}\"); }}", op.ReturnType.Type, op.Name, parametersAsList, parametersAsDictionary)); } else if (op.ReturnType != null && op.ReturnType.IsEntity && !op.ReturnType.IsCollection) { br.WriteLine(string.Format("public async Task<{0}> {1}({2}, string[] expand = null) {{ return await this.GetSingleEntityAsync<{0}>(\"{1}\", new Dictionary<string, object>() {{ {3} }}, expand != null ? new QueryObject() {{ Expand = expand }} : null, \"{0}\"); }}", op.ReturnType.Type, op.Name, parametersAsList, parametersAsDictionary)); } else { throw new Exception("invalid function description"); } break; case "actions": if (op.ReturnType == null) { br.WriteLine(string.Format("public async Task {0}({1}) {{ await this.GetValuePostOperationAsync<object>(\"{0}\", new Dictionary<string, object>() {{ {2} }}); }}", op.Name, parametersAsList, parametersAsDictionary)); } else if (op.ReturnType != null && !op.ReturnType.IsEntity) { br.WriteLine(string.Format("public async Task<{0}> {1}({2}) {{ return await this.GetValuePostOperationAsync<{0}>(\"{1}\", new Dictionary<string, object>() {{ {3} }}); }}", op.ReturnType.Type, op.Name, parametersAsList, parametersAsDictionary)); } else if (op.ReturnType != null && op.ReturnType.IsEntity && op.ReturnType.IsCollection) { br.WriteLine(string.Format("public async Task<IEnumerable<{0}>> {1}({2}) {{ return await this.GetEntitiesPostOperationAsync<{0}>(\"{1}\", new Dictionary<string, object>() {{ {3} }}, \"{0}\"); }}", op.ReturnType.Type, op.Name, parametersAsList, parametersAsDictionary)); } else if (op.ReturnType != null && op.ReturnType.IsEntity && !op.ReturnType.IsCollection) { br.WriteLine(string.Format("public async Task<{0}> {1}({2}) {{ return await this.GetEntityPostOperationAsync<{0}>(\"{1}\", new Dictionary<string, object>() {{ {3} }}, \"{0}\"); }}", op.ReturnType, op.Name, parametersAsList, parametersAsDictionary)); } else { throw new Exception("invalid action description"); } break; default: throw new Exception("invalid operation type name"); } } }
public static string Generate(MetadataSrv.Metadata metadataSrv) { var entityTypes = metadataSrv.EntityTypes.ToList(); var entitySets = (from t in metadataSrv.EntityTypes select new { name = t.Value.EntitySetName, entityTypeName = t.Key }).ToList(); Dictionary <string, string> dbTypeConvert = null; switch (metadataSrv.Dialect) { case "MSSQL": dbTypeConvert = new Dictionary <string, string>() { { "int", "int" }, { "smallint", "short" }, { "real", "float" }, { "datetime", "DateTime" }, { "nvarchar", "string" }, { "text", "string" }, { "bit", "bool" } }; break; case "MYSQL": dbTypeConvert = new Dictionary <string, string>() { { "int", "int" }, { "smallint", "short" }, // or "int" { "float", "float" }, { "decimal", "float" }, { "mediumint", "int" }, { "tinyint", "sbyte" }, // or "byte" { "datetime", "DateTime" }, { "timestamp", "DateTime" }, { "bit", "bool" }, { "char", "string" }, { "varchar", "string" }, { "text", "string" }, { "longtext", "string" }, { "enum", "string" }, { "set", "string" }, { "geometry", "object" }, { "year", "ushort" }, { "blob", "byte[]" }, }; break; default: throw new Exception("Unknown dialect"); } var br = new BlockWriter(); br.WriteLine("#pragma warning disable SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300") .WriteLine() .WriteLine("//------------------------------------------------------------------------------") .WriteLine("// This code was auto-generated.") .WriteLine("//") .WriteLine("// Manual changes to this file may cause unexpected behavior in your application.") .WriteLine("// Manual changes to this file will be overwritten if the code is regenerated.") .WriteLine("//------------------------------------------------------------------------------") .WriteLine(); br.WriteLine("using NavyBlueDtos;"); br.WriteLine("using NavyBlueEntities;"); br.WriteLine("using Newtonsoft.Json;"); br.WriteLine("using Newtonsoft.Json.Linq;"); br.WriteLine("using System;"); br.WriteLine("using System.Collections.Generic;"); br.WriteLine("using MetadataSrv = NavyBlueDtos.MetadataSrv;"); br.WriteLine(); br.WriteLine("namespace " + metadataSrv.Namespace); br.BeginBlock("{"); //var json = JsonConvert.SerializeObject(result, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore }); // DataProvider br.WriteLine("public interface IDataProvider"); br.BeginBlock("{") .WriteLine("DataService CreateDataServiceInstance();"); br.EndBlock("}"); br.WriteLine("public class DataProvider : IDataProvider"); br.BeginBlock("{") .WriteLine("private readonly IDataProviderDto dataProviderDto;") .WriteLine(); br.WriteLine("public DataProvider(IDataProviderDto dataProviderDto)"); br.BeginBlock("{") .WriteLine("this.dataProviderDto = dataProviderDto;"); br.EndBlock("}"); br.WriteLine("public DataService CreateDataServiceInstance()"); br.BeginBlock("{") .WriteLine("var dataServiceDto = this.dataProviderDto.CreateDataServiceInstance();") .WriteLine("var dataService = new DataService(dataServiceDto);") .WriteLine("return dataService;"); br.EndBlock("}", false); br.EndBlock("}"); // DataService br.WriteLine("public class DataService : DataServiceEntity<LocalEntityViews, LocalDtoViews, RemoteEntityViews, RemoteDtoViews>"); br.BeginBlock("{"); br.WriteLine("public DataService(DataServiceDto dataServiceDto) : base(dataServiceDto)"); br.BeginBlock("{"); br.WriteLine("this.From = new ServiceLocation<LocalEntityViews, LocalDtoViews, RemoteEntityViews, RemoteDtoViews>()"); br.BeginBlock("{") .WriteLine("Local = new ViewType<LocalEntityViews, LocalDtoViews>() { EntityView = new LocalEntityViews(this.DataContext), DtoView = new LocalDtoViews(this.DataContext, dataServiceDto.MetadataSrv) },") .WriteLine("Remote = new ViewType<RemoteEntityViews, RemoteDtoViews>() { EntityView = new RemoteEntityViews(dataServiceDto.DataViewDto, this.DataContext), DtoView = new RemoteDtoViews(dataServiceDto.DataViewDto) }"); br.EndBlock("};", false); br.EndBlock("}", false); // br.WriteLine("public static DataService CreateDataServiceInstance()"); // br.BeginBlock("{") // .WriteLine("var connectionString = DataProviderConfig.GetConnectionString();") // .WriteLine("var metadataSrv = DataProviderConfig.GetMetadataSrv();") // .WriteLine("var dataServiceDto = new DataServiceDto(connectionString, metadataSrv);") // .WriteLine("var dataService = new DataService(dataServiceDto);") // .WriteLine("return dataService;"); // br.EndBlock("}", false); br.EndBlock("}"); // LocalEntityViews br.WriteLine("public class LocalEntityViews : LocalEntityViewsBase"); br.BeginBlock("{"); br.WriteLine("public LocalEntityViews(DataContext dataContext) : base(dataContext)"); br.BeginBlock("{"); foreach (var es in entitySets) { br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewLocalEntity<{1}>(dataContext);", es.name, es.entityTypeName)); } br.EndBlock("}"); foreach (var es in entitySets) { br.WriteLine(string.Format("public DataViewLocalEntity<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName)); } br.EndBlock("}"); // RemoteEntityViews br.WriteLine("public class RemoteEntityViews : RemoteEntityViewsBase"); br.BeginBlock("{"); br.WriteLine("public RemoteEntityViews(DataViewDto dataViewDto, DataContext dataContext) : base(dataViewDto, dataContext)"); br.BeginBlock("{"); foreach (var es in entitySets) { br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewRemoteEntity<{1}>(dataViewDto, dataContext);", es.name, es.entityTypeName)); } br.EndBlock("}"); foreach (var es in entitySets) { br.WriteLine(string.Format("public DataViewRemoteEntity<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName)); } br.EndBlock("}"); // LocalDtoViews br.WriteLine("public class LocalDtoViews : LocalDtoViewsBase"); br.BeginBlock("{"); br.WriteLine("public LocalDtoViews(DataContext dataContext, MetadataSrv.Metadata metadataSrv) : base(dataContext, metadataSrv)"); br.BeginBlock("{"); foreach (var es in entitySets) { br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewLocalDto<{1}>(dataContext, metadataSrv);", es.name, es.entityTypeName)); } br.EndBlock("}"); foreach (var es in entitySets) { br.WriteLine(string.Format("public DataViewLocalDto<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName)); } br.EndBlock("}"); // RemoteDtoViews br.WriteLine("public class RemoteDtoViews : RemoteDtoViewsBase"); br.BeginBlock("{"); br.WriteLine("public RemoteDtoViews(DataViewDto dataViewDto) : base(dataViewDto)"); br.BeginBlock("{"); foreach (var es in entitySets) { br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewRemoteDto<{1}>(dataViewDto);", es.name, es.entityTypeName)); } br.EndBlock("}"); foreach (var es in entitySets) { br.WriteLine(string.Format("public DataViewRemoteDto {0} {{ get {{ return this.GetPropertyValue(\"{1}\"); }} }}", es.name, es.entityTypeName)); } br.EndBlock("}"); // Entities foreach (var et in entityTypes) { var entityTypeName = et.Key; var properties = et.Value.Properties; var navigationProperties = et.Value.NavigationProperties ?? new Dictionary <string, MetadataSrv.NavigationProperty>(); // with constructor generator br.WriteLine(string.Format("public sealed class {0} : IDerivedEntity", entityTypeName)); br.BeginBlock("{"); br.WriteLine(string.Format("public {0}(Entity entity)", entityTypeName)); br.BeginBlock("{") .WriteLine(string.Format("if (entity.entityTypeName != \"{0}\") {{ throw new ArgumentException(\"Incorrect entity type\"); }}", entityTypeName)) .WriteLine("this.entity = entity;"); br.EndBlock("}"); br.WriteLine("public Entity entity { get; private set; }") .WriteLine(); GeneratorUtils.WriteProperties(br, properties, dbTypeConvert); // navigation properties for intellisense GeneratorUtils.WriteNavigationProperties(br, entityTypeName, navigationProperties); br.EndBlock("}"); } br.EndBlock("}"); br.WriteLine("#pragma warning restore SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300"); return(br.ToString()); }
public static string Generate(MetadataCli.Metadata metadataCli) { var entityTypes = metadataCli.EntityTypes.ToList(); var entitySets = (from t in metadataCli.EntityTypes select new { name = t.Value.EntitySetName, entityTypeName = t.Key }).ToList(); var br = new BlockWriter(); br.WriteLine("#pragma warning disable SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300") .WriteLine() .WriteLine("//------------------------------------------------------------------------------") .WriteLine("// This code was auto-generated.") .WriteLine("//") .WriteLine("// Manual changes to this file may cause unexpected behavior in your application.") .WriteLine("// Manual changes to this file will be overwritten if the code is regenerated.") .WriteLine("//------------------------------------------------------------------------------") .WriteLine(); br.WriteLine("using NavyBlueDtos;"); br.WriteLine("using NavyBlueEntities;"); br.WriteLine("using Newtonsoft.Json;"); br.WriteLine("using Newtonsoft.Json.Linq;"); br.WriteLine("using System;"); br.WriteLine("using System.Collections.Generic;"); br.WriteLine("using MetadataSrv = NavyBlueDtos.MetadataSrv;"); br.WriteLine(); br.WriteLine("namespace Server.Models.DataAccess"); br.BeginBlock("{"); // DataProvider br.WriteLine("public interface IDataProvider"); br.BeginBlock("{") .WriteLine("DataService CreateDataServiceInstance();"); br.EndBlock("}"); br.WriteLine("public class DataProvider : IDataProvider"); br.BeginBlock("{") .WriteLine("private readonly IDataProviderDto dataProviderDto;") .WriteLine(); br.WriteLine("public DataProvider(IDataProviderDto dataProviderDto)"); br.BeginBlock("{") .WriteLine("this.dataProviderDto = dataProviderDto;"); br.EndBlock("}"); br.WriteLine("public DataService CreateDataServiceInstance()"); br.BeginBlock("{") .WriteLine("var dataServiceDto = this.dataProviderDto.CreateDataServiceInstance();") .WriteLine("var dataService = new DataService(dataServiceDto);") .WriteLine("return dataService;"); br.EndBlock("}", false); br.EndBlock("}"); // DataService br.WriteLine("public class DataService : DataServiceEntity<LocalEntityViews, LocalDtoViews, RemoteEntityViews, RemoteDtoViews>"); br.BeginBlock("{"); br.WriteLine("public DataService(DataServiceDto dataServiceDto) : base(dataServiceDto)"); br.BeginBlock("{"); br.WriteLine("this.From = new ServiceLocation<LocalEntityViews, LocalDtoViews, RemoteEntityViews, RemoteDtoViews>()"); br.BeginBlock("{") .WriteLine("Local = new ViewType<LocalEntityViews, LocalDtoViews>() { EntityView = new LocalEntityViews(this.DataContext), DtoView = new LocalDtoViews(this.DataContext, dataServiceDto.MetadataSrv) },") .WriteLine("Remote = new ViewType<RemoteEntityViews, RemoteDtoViews>() { EntityView = new RemoteEntityViews(dataServiceDto.DataViewDto, this.DataContext), DtoView = new RemoteDtoViews(dataServiceDto.DataViewDto) }"); br.EndBlock("};", false); br.EndBlock("}", false); br.EndBlock("}"); // LocalEntityViews br.WriteLine("public class LocalEntityViews : LocalEntityViewsBase"); br.BeginBlock("{"); br.WriteLine("public LocalEntityViews(DataContext dataContext) : base(dataContext)"); br.BeginBlock("{"); foreach (var es in entitySets) { br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewLocalEntity<{1}>(dataContext);", es.name, es.entityTypeName)); } br.EndBlock("}"); foreach (var es in entitySets) { br.WriteLine(string.Format("public DataViewLocalEntity<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName)); } br.EndBlock("}"); // RemoteEntityViews br.WriteLine("public class RemoteEntityViews : RemoteEntityViewsBase"); br.BeginBlock("{"); br.WriteLine("public RemoteEntityViews(DataViewDto dataViewDto, DataContext dataContext) : base(dataViewDto, dataContext)"); br.BeginBlock("{"); foreach (var es in entitySets) { br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewRemoteEntity<{1}>(dataViewDto, dataContext);", es.name, es.entityTypeName)); } br.EndBlock("}"); foreach (var es in entitySets) { br.WriteLine(string.Format("public DataViewRemoteEntity<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName)); } br.EndBlock("}"); // LocalDtoViews br.WriteLine("public class LocalDtoViews : LocalDtoViewsBase"); br.BeginBlock("{"); br.WriteLine("public LocalDtoViews(DataContext dataContext, MetadataSrv.Metadata metadataSrv) : base(dataContext, metadataSrv)"); br.BeginBlock("{"); foreach (var es in entitySets) { br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewLocalDto<{1}>(dataContext, metadataSrv);", es.name, es.entityTypeName)); } br.EndBlock("}"); foreach (var es in entitySets) { br.WriteLine(string.Format("public DataViewLocalDto<{1}> {0} {{ get {{ return this.GetPropertyValue<{1}>(); }} }}", es.name, es.entityTypeName)); } br.EndBlock("}"); // RemoteDtoViews br.WriteLine("public class RemoteDtoViews : RemoteDtoViewsBase"); br.BeginBlock("{"); br.WriteLine("public RemoteDtoViews(DataViewDto dataViewDto) : base(dataViewDto)"); br.BeginBlock("{"); foreach (var es in entitySets) { br.WriteLine(string.Format("//this.[\"{0}\"] = new DataViewRemoteDto<{1}>(dataViewDto);", es.name, es.entityTypeName)); } br.EndBlock("}"); foreach (var es in entitySets) { br.WriteLine(string.Format("public DataViewRemoteDto {0} {{ get {{ return this.GetPropertyValue(\"{1}\"); }} }}", es.name, es.entityTypeName)); } br.EndBlock("}"); // Entities foreach (var et in entityTypes) { var entityTypeName = et.Key; var properties = et.Value.Properties; var navigationProperties = et.Value.NavigationProperties ?? new Dictionary <string, MetadataCli.NavigationProperty>(); // with constructor generator br.WriteLine(string.Format("public sealed class {0} : IDerivedEntity", entityTypeName)); br.BeginBlock("{"); br.WriteLine(string.Format("public {0}(Entity entity)", entityTypeName)); br.BeginBlock("{") .WriteLine(string.Format("if (entity.entityTypeName != \"{0}\") {{ throw new ArgumentException(\"Incorrect entity type\"); }}", entityTypeName)) .WriteLine("this.entity = entity;"); br.EndBlock("}"); br.WriteLine("public Entity entity { get; private set; }") .WriteLine(); GeneratorUtils.WriteProperties(br, properties); // navigation properties for intellisense GeneratorUtils.WriteNavigationProperties(br, entityTypeName, navigationProperties); br.EndBlock("}"); } br.EndBlock("}"); br.WriteLine("#pragma warning restore SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300"); return(br.ToString()); }
public static string Generate(MetadataCli.Metadata metadataCliFull) { var entityTypes = metadataCliFull.EntityTypes.ToList(); var function = metadataCliFull.Functions != null ? metadataCliFull.Functions : Enumerable.Empty <Operation>(); var action = metadataCliFull.Actions != null ? metadataCliFull.Actions : Enumerable.Empty <Operation>(); var br = new BlockWriter(); br.WriteLine("#pragma warning disable SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300") .WriteLine() .WriteLine("//------------------------------------------------------------------------------") .WriteLine("// This code was auto-generated.") .WriteLine("//") .WriteLine("// Manual changes to this file may cause unexpected behavior in your application.") .WriteLine("// Manual changes to this file will be overwritten if the code is regenerated.") .WriteLine("//------------------------------------------------------------------------------") .WriteLine(); br.WriteLine("using Newtonsoft.Json;") .WriteLine("using Client.Modules.Utils.DAL.Common;") .WriteLine("using System;") .WriteLine("using System.Collections.Generic;") .WriteLine("using System.Threading.Tasks;") .WriteLine("using MetadataCli = Client.Modules.Utils.DAL.Common.MetadataCli;") .WriteLine(); br.WriteLine("namespace Client.Modules.Utils.DAL"); br.BeginBlock("{"); // DataService br.WriteLine("public class DataService : DataServiceBase<LocalViews, RemoteViews, ServiceFunctions, ServiceActions>"); br.BeginBlock("{"); br.WriteLine("public DataService(string baseUrl, string apiUrl, MetadataCli.Metadata metadataCli) : base(baseUrl, apiUrl, metadataCli)"); br.BeginBlock("{") .WriteLine("this.From = new ServiceLocation<LocalViews, RemoteViews>() { Local = new LocalViews(this.DataContext), Remote = new RemoteViews(this.DataAdapter, this.DataContext, metadataCli) };") .WriteLine("this.Operation = new ServiceOperation<ServiceFunctions, ServiceActions>() { Function = new ServiceFunctions(this.DataAdapter, this.DataContext), Action = new ServiceActions(this.DataAdapter, this.DataContext) };"); br.EndBlock("}", false); br.EndBlock("}"); // ServiceFunctions br.WriteLine("public class ServiceFunctions : OperationsProvider"); br.BeginBlock("{") .WriteLine("public ServiceFunctions(DataAdapter dataAdapter, DataContext dataContext) : base(dataAdapter, dataContext) { }") .WriteLine(); GeneratorUtils.WriteServiceOperationsProperties(br, "functions", function); br.EndBlock("}"); // ServiceActions br.WriteLine("public class ServiceActions : OperationsProvider"); br.BeginBlock("{") .WriteLine("public ServiceActions(DataAdapter dataAdapter, DataContext dataContext) : base(dataAdapter, dataContext) { }") .WriteLine(); GeneratorUtils.WriteServiceOperationsProperties(br, "actions", action); br.EndBlock("}"); // LocalViews br.WriteLine("public class LocalViews : PropertyList"); br.BeginBlock("{") .WriteLine("public LocalViews(DataContext dataContext) : base(dataContext) { }") .WriteLine(); foreach (var entityType in entityTypes) { br.WriteLine(string.Format("public DataViewLocal<{0}> {1} {{ get {{ return this.GetPropertyValue<DataViewLocal<{0}>>(); }} }}", entityType.Key, entityType.Value.EntitySetName)); } br.EndBlock("}"); // RemoteViews br.WriteLine("public class RemoteViews : PropertyList"); br.BeginBlock("{") .WriteLine("public RemoteViews(DataAdapter dataAdapter, DataContext dataContext, MetadataCli.Metadata metadataCli) : base(dataAdapter, dataContext, metadataCli) { }") .WriteLine(); foreach (var entityType in entityTypes) { br.WriteLine(string.Format("public DataViewRemote<{0}> {1} {{ get {{ return this.GetPropertyValue<DataViewRemote<{0}>>(); }} }}", entityType.Key, entityType.Value.EntitySetName)); } br.EndBlock("}"); // Entities foreach (var et in entityTypes) { var etp = et.Value.Properties; var etnp = et.Value.NavigationProperties ?? new Dictionary <string, NavigationProperty>(); // constructor generator br.WriteLine(string.Format("public sealed class {0} : IDerivedEntity", et.Key)); br.BeginBlock("{"); br.WriteLine(string.Format("public {0}(Entity entity)", et.Key)); br.BeginBlock("{"); br.WriteLine(string.Format("if (entity.entityTypeName != \"{0}\") {{ throw new ArgumentException(\"Incorrect entity type\"); }}", et.Key)); br.WriteLine("this.entity = entity;"); br.EndBlock("}"); br.WriteLine("public Entity entity { get; private set; }") .WriteLine(); // properties GeneratorUtils.WriteProperties(br, etp); // navigation properties GeneratorUtils.WriteNavigationProperties(br, et.Key, etnp); br.EndBlock("}"); } br.EndBlock("}"); br.WriteLine("#pragma warning restore SA1649, SA1128, SA1005, SA1516, SA1402, SA1028, SA1119, SA1507, SA1502, SA1508, SA1122, SA1633, SA1300"); return(br.ToString()); }
public static string Generate(MetadataCli.Metadata metadataCli) { var entityTypes = metadataCli.EntityTypes.ToList(); var function = metadataCli.Functions != null ? metadataCli.Functions : Enumerable.Empty <MetadataCli.Operation>(); var action = metadataCli.Actions != null ? metadataCli.Actions : Enumerable.Empty <MetadataCli.Operation>(); var br = new BlockWriter(); br.WriteLine() .WriteLine("//------------------------------------------------------------------------------") .WriteLine("// This code was auto-generated.") .WriteLine("//") .WriteLine("// Manual changes to this file may cause unexpected behavior in your application.") .WriteLine("// Manual changes to this file will be overwritten if the code is regenerated.") .WriteLine("//------------------------------------------------------------------------------") .WriteLine(); br.BeginBlock("module dataProvider {") .WriteLine(); // IServiceFunctions br.BeginBlock("export interface IServiceFunctions {"); foreach (var fc in function) { br.WriteLine(fc.Name + "?: (" + GeneratorUtils.GetFunctionParamList(fc) + ")" + " => JQueryDeferred<" + GeneratorUtils.GetParamResult(fc.ReturnType) + ">;"); } br.EndBlock(); // IServiceActions br.BeginBlock("export interface IServiceActions {"); foreach (var ac in action) { br.WriteLine(ac.Name + "?: (" + GeneratorUtils.GetActionParamList(ac) + ")" + " => JQueryDeferred<" + GeneratorUtils.GetParamResult(ac.ReturnType) + ">;"); } br.EndBlock(); // ILocalViews br.BeginBlock("export interface ILocalViews {"); foreach (var entityType in entityTypes) { br.WriteLine(string.Format("{0}?: IDataViewLocal<{1}>;", entityType.Value.EntitySetName, entityType.Key)); } br.WriteLine("[propName: string]: any;"); br.EndBlock(); // IRemoteViews br.BeginBlock("export interface IRemoteViews {"); foreach (var entityType in entityTypes) { br.WriteLine(string.Format("{0}?: IDataViewRemote<{1}>;", entityType.Value.EntitySetName, entityType.Key)); } br.WriteLine("[propName: string]: any;"); br.EndBlock(); // entityTypes br.BeginBlock("export var entityTypes = {"); foreach (var entityType in entityTypes) { br.WriteLine(string.Format("{0}: \"{0}\",", entityType.Key)); } br.EndBlock(); //// entitySets //br.BeginBlock("export var entitySets = {"); //foreach (var entityType in entityTypes) //{ // br.WriteLine(string.Format("{0}: \"{1}\",", entityType.Key, entityType.Value.EntitySetName)); //} //br.EndBlock(); // rules br.BeginBlock("export var rules = {"); foreach (var entityType in entityTypes) { var properties = entityType.Value.Properties; br.BeginBlock(entityType.Key + ": {"); foreach (var property in properties) { br.BeginBlock(property.Key + ": {"); GeneratorUtils.WriteRules(br, property.Value, metadataCli); br.EndBlock("},", false); } br.EndBlock("},", false); } br.EndBlock(); // Entities foreach (var entityType in entityTypes) { // with constructor generator br.BeginBlock("export interface " + entityType.Key + " {"); var etp = entityType.Value.Properties; foreach (var property in etp) { br.WriteLine(property.Key + ": " + property.Value.Type + ";"); } br.WriteLine(); // navigation properties for intellisense MetadataCli.NavigationProperty anp; var navigationProperties = entityType.Value.NavigationProperties; foreach (var navigationProperty in navigationProperties) { anp = navigationProperty.Value; br.WriteLine(navigationProperty.Key + ": " + anp.EntityTypeName + (anp.Multiplicity == "multi" ? "[]" : "") + ";"); } br.EndBlock(); } br.EndBlock(); br.WriteLine("export = dataProvider;"); return(br.ToString()); }