private void GenerateHttpServiceClass(string serviceName, Type type) { ClassReferenceInfo classReferenceInfo = new ClassReferenceInfo { ServiceName = serviceName, Name = type.Name, Type = ClassReferenceType.HttpServiceLevel, NameSpace = type.Namespace }; List <Type> services = type.GetTypesByAttribute <ServiceContractAttribute>(x => x.ServiceType == ServiceType.HttpService).ToList(); if (services.Count == 0) { services = new List <Type>() { type } } ; foreach (Type serviceType in services) { typeGenerated.Add(serviceType); foreach (MethodInfo methodInfo in serviceType.GetListOfDeclaredMethods().Where(x => !(x.IsSpecialName && (x.Name.StartsWith("set_") || x.Name.StartsWith("get_"))) && !x.IsStatic)) { GenerateMethod(methodInfo, classReferenceInfo); methodGenerated.Add(methodInfo); } } if (classReferenceInfo.Methods.Count > 0) { NamespaceReferenceInfo.Classes.Add(classReferenceInfo); } }
public static void GenerateModelClass(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder, MapDataClassInfo mapDataClassInfo) { string baseName = ""; if (!string.IsNullOrEmpty(classReferenceInfo.BaseClassName)) { baseName = " : " + classReferenceInfo.BaseClassName; } builder.AppendLine(prefix + "public partial class " + classReferenceInfo.Name + baseName); builder.AppendLine(prefix + "{"); foreach (PropertyReferenceInfo propertyInfo in classReferenceInfo.Properties) { if (mapDataClassInfo != null && mapDataClassInfo.IgnoreProperties.Contains(propertyInfo.Name)) { continue; } GenerateProperty(propertyInfo, prefix + prefix, true, builder); } if (mapDataClassInfo != null && !string.IsNullOrEmpty(mapDataClassInfo.Body)) { builder.AppendLine(mapDataClassInfo.Body); } builder.AppendLine(); builder.AppendLine(prefix + "}"); builder.AppendLine(); }
private static void GenerateServiceClass(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder, bool generateAyncMethods, string serviceType) { string serviceAttribute = $@"[ServiceContract(""{classReferenceInfo.ServiceName}"",{serviceType}, InstanceType.SingleInstance)]"; builder.AppendLine(prefix + serviceAttribute); builder.AppendLine(prefix + "public partial class " + classReferenceInfo.Name + $" : I{classReferenceInfo.Name}"); builder.AppendLine(prefix + "{"); builder.AppendLine($@" private SignalGo.Client.ClientProvider CurrentProvider {{ get; set; }} string ServiceName {{ get; set; }} public {classReferenceInfo.Name}(SignalGo.Client.ClientProvider clientProvider) {{ CurrentProvider = clientProvider; ServiceName = this.GetType().GetServerServiceName(true); }}"); foreach (MethodReferenceInfo methodInfo in classReferenceInfo.Methods) { GenerateMethod(methodInfo, prefix + prefix, builder); if (generateAyncMethods) { GenerateAsyncMethod(methodInfo, prefix + prefix, builder); } } builder.AppendLine(prefix + "}"); }
private static void GenerateOneWayServiceClass(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder, bool generateAyncMethods, string serviceType) { string serviceAttribute = $@"[ServiceContract(""{classReferenceInfo.ServiceName}"",{serviceType}, InstanceType.SingleInstance)]"; builder.AppendLine(prefix + serviceAttribute); builder.AppendLine(prefix + "public partial class " + classReferenceInfo.Name + $" : I{classReferenceInfo.Name}"); builder.AppendLine(prefix + "{"); builder.AppendLine(prefix + prefix + "public static " + classReferenceInfo.Name + " Current { get; set; }"); builder.AppendLine(prefix + prefix + "string _signalGoServerAddress = \"\";"); builder.AppendLine(prefix + prefix + "int _signalGoPortNumber = 0;"); builder.AppendLine(prefix + prefix + "public " + classReferenceInfo.Name + "(string signalGoServerAddress, int signalGoPortNumber)"); builder.AppendLine(prefix + prefix + "{"); builder.AppendLine(prefix + prefix + prefix + "_signalGoServerAddress = signalGoServerAddress;"); builder.AppendLine(prefix + prefix + prefix + "_signalGoPortNumber = signalGoPortNumber;"); builder.AppendLine(prefix + prefix + "}"); foreach (MethodReferenceInfo methodInfo in classReferenceInfo.Methods) { GenerateOneWayMethod(methodInfo, classReferenceInfo.ServiceName, prefix + prefix, builder); if (generateAyncMethods) { GenerateOneWayMethodAsync(methodInfo, classReferenceInfo.ServiceName, prefix + prefix, builder); } } builder.AppendLine(prefix + "}"); }
private static void GenerateHttpServiceClass(ClassReferenceInfo classReferenceInfo, StringBuilder builder) { builder.AppendLine($"{GetTabs(3)}\"name\": \"{classReferenceInfo.ServiceName}\","); builder.AppendLine($"{GetTabs(3)}\"item\": ["); foreach (MethodReferenceInfo methodInfo in classReferenceInfo.Methods) { GenerateHttpMethod(classReferenceInfo.ServiceName, methodInfo, builder); } if (builder[builder.Length - 3] == ',') { builder.Remove(builder.Length - 3, 1); } builder.AppendLine($"{GetTabs(3)}]"); }
private void GenerateProperty(PropertyInfo propertyInfo, ClassReferenceInfo classReferenceInfo) { if (!propertyInfo.CanWrite || !propertyInfo.CanRead) { return; } AddToGenerate(propertyInfo.PropertyType); PropertyReferenceInfo propertyReferenceInfo = new PropertyReferenceInfo { Name = propertyInfo.Name, ReturnTypeName = GetFullNameOfType(propertyInfo.PropertyType, true) }; classReferenceInfo.Properties.Add(propertyReferenceInfo); }
private void GenerateHttpServiceClass(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder, string baseServiceName, Dictionary <string, Dictionary <string, string> > nameSpaces) { builder.AppendLine($@"import {{ Injectable }} from '@angular/core'; import {{ ServerConnectionService }} from './server-connection.service'; @Injectable({{ providedIn: 'root' }})"); string serviceName = FirstCharToUpper(classReferenceInfo.ServiceName); builder.AppendLine(prefix + "export class " + serviceName + "Service {"); builder.AppendLine(prefix + prefix + "constructor(private server: ServerConnectionService) { }"); foreach (MethodReferenceInfo methodInfo in classReferenceInfo.Methods) { GenerateMethod(serviceName, methodInfo, prefix + prefix, builder, false, baseServiceName, nameSpaces); //GenerateAsyncMethod(methodInfo, prefix + prefix, builder, false); } builder.AppendLine(prefix + "}"); }
private void GenerateServiceClass(string serviceName, Type type, ClassReferenceType classReferenceType, ServiceType serviceTypeEnum) { ClassReferenceInfo classReferenceInfo = new ClassReferenceInfo { ServiceName = serviceName, Name = type.Name, Type = classReferenceType, NameSpace = type.Namespace }; List <Type> services = type.GetTypesByAttribute <ServiceContractAttribute>(x => x.ServiceType == serviceTypeEnum).ToList(); bool justDeclared = false; if (serviceTypeEnum == ServiceType.HttpService && services.Count == 0) { services = new List <Type>() { type }; justDeclared = true; } foreach (Type serviceType in services) { typeGenerated.Add(serviceType); List <MethodInfo> methods = null;; if (justDeclared) { methods = serviceType.GetListOfDeclaredMethods().ToList(); } else { methods = serviceType.GetListOfMethodsWithAllOfBases().Where(x => x.IsPublic && !x.IsStatic).ToList(); } foreach (MethodInfo methodInfo in methods.Where(x => !(x.IsSpecialName && (x.Name.StartsWith("set_") || x.Name.StartsWith("get_"))) && !x.IsStatic)) { GenerateMethod(methodInfo, classReferenceInfo); methodGenerated.Add(methodInfo); } } if (classReferenceInfo.Methods.Count > 0) { NamespaceReferenceInfo.Classes.Add(classReferenceInfo); } }
private void GenerateMethod(MethodInfo methodInfo, ClassReferenceInfo classReferenceInfo) { if (methodInfo.GetParameters().Any(x => x.IsOut || x.IsRetval) || methodInfo.DeclaringType == typeof(object)) { return; } if (IsRenameDuplicateMethodNames) { if (!ServiceMethods.ContainsKey(classReferenceInfo.Name)) { ServiceMethods[classReferenceInfo.Name] = new List <string>(); } } MethodReferenceInfo methodReferenceInfo = new MethodReferenceInfo(); AddToGenerate(methodInfo.ReturnType); string returnType = "void"; if (methodInfo.ReturnType != typeof(void)) { returnType = GetFullNameOfType(methodInfo.ReturnType, true); } string methodName = methodInfo.Name; if (IsRenameDuplicateMethodNames) { int i = 1; while (ServiceMethods[classReferenceInfo.Name].Contains(methodName)) { methodName = methodInfo.Name + i; i++; } } methodReferenceInfo.ReturnTypeName = returnType; methodReferenceInfo.Name = methodInfo.Name; methodReferenceInfo.DuplicateName = methodName; if (IsRenameDuplicateMethodNames) { ServiceMethods[classReferenceInfo.Name].Add(methodName); } GenerateMethodParameters(methodInfo, methodReferenceInfo); classReferenceInfo.Methods.Add(methodReferenceInfo); }
//private static void GenerateServerServiceClass(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder, bool generateAyncMethods, string serviceType) //{ // bool isInterface = classReferenceInfo.Name.StartsWith("I"); // string serviceAttribute = $@"[ServiceContract(""{classReferenceInfo.ServiceName}"",{serviceType}, InstanceType.SingleInstance)]"; // builder.AppendLine(prefix + serviceAttribute); // builder.AppendLine(prefix + "public interface " + (isInterface ? "" : "I") + classReferenceInfo.Name); // builder.AppendLine(prefix + "{"); // foreach (MethodReferenceInfo methodInfo in classReferenceInfo.Methods) // { // GenerateMethod(methodInfo, prefix + prefix, builder); // if (generateAyncMethods) // GenerateAsyncMethod(methodInfo, prefix + prefix, builder); // } // builder.AppendLine(prefix + "}"); //} private static void GenerateServiceInterface(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder, bool generateAyncMethods, string serviceType) { string serviceAttribute = $@"{prefix}[ServiceContract(""{classReferenceInfo.ServiceName}"", {serviceType}, InstanceType.SingleInstance)]"; builder.AppendLine(serviceAttribute); string interfacePrefix = classReferenceInfo.Name.StartsWith("I") ? "" : "I"; builder.AppendLine(prefix + $"public partial interface {interfacePrefix}{classReferenceInfo.Name}"); builder.AppendLine(prefix + "{"); foreach (MethodReferenceInfo methodInfo in classReferenceInfo.Methods) { GenerateInterfaceMethod(methodInfo, prefix + prefix, builder); if (generateAyncMethods) { GenerateInterfaceMethodAsync(methodInfo, prefix + prefix, builder); } } builder.AppendLine(prefix + "}"); }
private static void GenerateHttpServiceClass(ClassReferenceInfo classReferenceInfo, string prefix, bool generateAyncMethods, StringBuilder builder) { builder.AppendLine(prefix + "public partial class " + classReferenceInfo.Name + $" : I{classReferenceInfo.Name}"); builder.AppendLine(prefix + "{"); builder.AppendLine(" public " + classReferenceInfo.Name + @"(string serverUrl, SignalGo.Client.HttpClient httpClient = null) { _serverUrl = serverUrl; _httpClient = httpClient; if (_httpClient == null) _httpClient = new SignalGo.Client.HttpClient(); } private readonly string _serverUrl = null; private SignalGo.Client.HttpClient _httpClient; public SignalGo.Shared.Http.WebHeaderCollection RequestHeaders { get { return _httpClient.RequestHeaders; } set { _httpClient.RequestHeaders = value; } } public SignalGo.Shared.Http.WebHeaderCollection ResponseHeaders { get; set; } public System.Net.HttpStatusCode Status { get; set; } public static " + classReferenceInfo.Name + " Current { get; set; }"); foreach (MethodReferenceInfo methodInfo in classReferenceInfo.Methods) { GenerateHttpMethod(methodInfo, classReferenceInfo.ServiceName, prefix + prefix, builder, false); if (generateAyncMethods) { GenerateHttpAsyncMethod(methodInfo, classReferenceInfo.ServiceName, prefix + prefix, builder, false); } } builder.AppendLine(prefix + "}"); }
private static void GenerateHttpServiceClass(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder) { builder.AppendLine(prefix + "public class " + classReferenceInfo.Name); builder.AppendLine(prefix + "{"); builder.AppendLine(" public " + classReferenceInfo.Name + $@"(string serverUrl, SignalGoBlazorHttpClient httpClient = null) {{ _serverUrl = serverUrl; _httpClient = httpClient; if (_httpClient == null) _httpClient = new SignalGoBlazorHttpClient(); }} private readonly string _serverUrl = null; private SignalGoBlazorHttpClient _httpClient; public static {classReferenceInfo.Name} Current {{ get; set; }} public HttpResponseHeaders ResponseHeaders {{ get; set; }} public System.Net.HttpStatusCode Status {{ get; set; }}"); foreach (MethodReferenceInfo methodInfo in classReferenceInfo.Methods) { GenerateHttpAsyncMethod(methodInfo, classReferenceInfo.ServiceName, prefix + prefix, builder, false); } builder.AppendLine(prefix + "}"); }
private void GenerateModelClass(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder, MapDataClassInfo mapDataClassInfo, string baseServiceName, Dictionary <string, Dictionary <string, string> > nameSpaces) { string mainName = classReferenceInfo.Name; if (mainName.Contains("<")) { mainName = mainName.Substring(0, mainName.IndexOf('<')); } string name = mainName; //while (RenamedModels.ContainsKey(classReferenceInfo.NameSpace + "." + name)) //{ // index++; // name = mainName + index; //} if (classReferenceInfo.Name.Contains("<")) { int indexName = classReferenceInfo.Name.Count(x => x == '>' || x == '<' || x == ','); mainName = name + indexName + classReferenceInfo.Name.Substring(classReferenceInfo.Name.IndexOf('<')); if (GeneratedModels.Contains(classReferenceInfo.NameSpace + "." + mainName)) { return; } GeneratedModels.Add(classReferenceInfo.NameSpace + "." + mainName); classReferenceInfo.Name = mainName; //RenamedModels.Add(classReferenceInfo.NameSpace + "." + name, classReferenceInfo.NameSpace + "." + oldName); } else { if (GeneratedModels.Contains(classReferenceInfo.NameSpace + "." + name)) { return; } GeneratedModels.Add(classReferenceInfo.NameSpace + "." + name); classReferenceInfo.Name = name; //RenamedModels.Add(classReferenceInfo.NameSpace + "." + name, classReferenceInfo.NameSpace + "." + oldName); } string baseName = ""; if (!string.IsNullOrEmpty(classReferenceInfo.BaseClassName) && !classReferenceInfo.BaseClassName.StartsWith("SignalGo.")) { GenericInfo generic = GenericInfo.GenerateGeneric(classReferenceInfo.BaseClassName); generic.ClearNameSpaces(ClearString); string typeName = generic.ToString(); AddToDictionary(nameSpaces, classReferenceInfo.BaseClassName); baseName = " extends " + typeName; } builder.AppendLine(prefix + "export class " + classReferenceInfo.Name + baseName + "{"); foreach (PropertyReferenceInfo propertyInfo in classReferenceInfo.Properties) { if (mapDataClassInfo != null && mapDataClassInfo.IgnoreProperties.Contains(propertyInfo.Name)) { continue; } GenerateProperty(propertyInfo, prefix + prefix, false, builder, baseServiceName, nameSpaces); } if (mapDataClassInfo != null && !string.IsNullOrEmpty(mapDataClassInfo.Body)) { builder.AppendLine(mapDataClassInfo.Body); } builder.AppendLine(); builder.AppendLine(prefix + "}"); builder.AppendLine(); }
private void GenerateModelInterface(Type type) { if (type == null) { return; } if (type == typeof(Task)) { return; } else if (type.GetBaseType() == typeof(Task)) { type = type.GetGenericArguments()[0]; } if (type.IsArray) { type = type.GetElementType(); } if (ModelsCodeGenerated.Contains(type) || CannotGenerateAssemblyTypes(type)) { return; } if (type == typeof(object) || type.GetAssembly() == typeof(string).GetAssembly()) { return; } bool isGeneric = type.GetIsGenericType(); if (isGeneric && type.GetGenericTypeDefinition() != type) { GenerateModelClass(type.GetGenericTypeDefinition()); return; } ClassReferenceInfo classReferenceInfo = new ClassReferenceInfo { Type = ClassReferenceType.InterfaceLevel, NameSpace = type.Namespace }; Type baseType = type.GetBaseType(); if (baseType != typeof(object) && baseType != null) { classReferenceInfo.BaseClassName = GetFullNameOfType(baseType, true); } else { classReferenceInfo.BaseClassName = GetFullNameOfType(typeof(NotifyPropertyChangedBase), true); } classReferenceInfo.Name = GetFullNameOfType(type, false); ModelsCodeGenerated.Add(type); foreach (PropertyInfo propertyInfo in type.GetListOfDeclaredProperties()) { GenerateProperty(propertyInfo, classReferenceInfo); } GenerateModelInterface(type.GetBaseType()); NamespaceReferenceInfo.Classes.Add(classReferenceInfo); }
private void GenerateModelClass(ClassReferenceInfo classReferenceInfo, string prefix, StringBuilder builder, MapDataClassInfo mapDataClassInfo, string baseServiceName, Dictionary <string, Dictionary <string, string> > nameSpaces) { string mainName = classReferenceInfo.NormalizedName; if (mainName.Contains("<")) { mainName = mainName.Substring(0, mainName.IndexOf('<')); } string name = mainName; //while (RenamedModels.ContainsKey(classReferenceInfo.NameSpace + "." + name)) //{ // index++; // name = mainName + index; //} if (classReferenceInfo.NormalizedName.Contains("<")) { int indexName = classReferenceInfo.NormalizedName.Count(x => x == '>' || x == '<' || x == ','); mainName = name + indexName + classReferenceInfo.NormalizedName.Substring(classReferenceInfo.NormalizedName.IndexOf('<')); if (GeneratedModels.Contains(classReferenceInfo.NameSpace + "." + mainName)) { return; } GeneratedModels.Add(classReferenceInfo.NameSpace + "." + mainName); classReferenceInfo.Name = mainName; //RenamedModels.Add(classReferenceInfo.NameSpace + "." + name, classReferenceInfo.NameSpace + "." + oldName); } else { if (GeneratedModels.Contains(classReferenceInfo.NameSpace + "." + name)) { return; } GeneratedModels.Add(classReferenceInfo.NameSpace + "." + name); classReferenceInfo.Name = name; //RenamedModels.Add(classReferenceInfo.NameSpace + "." + name, classReferenceInfo.NameSpace + "." + oldName); } string baseName = ""; if (!string.IsNullOrEmpty(classReferenceInfo.BaseClassName) && !classReferenceInfo.BaseClassName.StartsWith("SignalGo.")) { GenericInfo generic = GenericInfo.GenerateGeneric(classReferenceInfo.BaseClassName); generic.ClearNameSpaces(ClearString); string typeName = generic.ToString(); AddToDictionary(nameSpaces, classReferenceInfo.BaseClassName); baseName = " extends " + typeName; } GenericInfo genericInfo = GenericInfo.GenerateGeneric(classReferenceInfo.NormalizedName, GenericNumbericTemeplateType.Skip); builder.AppendLine("import com.fasterxml.jackson.annotation.JsonProperty;"); builder.AppendLine(); builder.AppendLine("public class " + classReferenceInfo.NormalizedName + baseName + "{"); builder.AppendLine($@" public {genericInfo.Name}() {{ "); if (!string.IsNullOrEmpty(baseName)) { builder.AppendLine("super();"); } foreach (PropertyReferenceInfo propertyInfo in classReferenceInfo.Properties) { if (mapDataClassInfo != null && mapDataClassInfo.IgnoreProperties.Contains(propertyInfo.Name)) { continue; } if (propertyInfo.ReturnTypeName == "T") { continue; } SetPropertyValue(propertyInfo, prefix + prefix, false, builder, baseServiceName, nameSpaces); } //end of constructor builder.AppendLine(prefix + "}"); foreach (PropertyReferenceInfo propertyInfo in classReferenceInfo.Properties) { if (mapDataClassInfo != null && mapDataClassInfo.IgnoreProperties.Contains(propertyInfo.Name)) { continue; } GenerateProperty(propertyInfo, prefix + prefix, false, builder, baseServiceName, nameSpaces); } foreach (PropertyReferenceInfo propertyInfo in classReferenceInfo.Properties) { if (mapDataClassInfo != null && mapDataClassInfo.IgnoreProperties.Contains(propertyInfo.Name)) { continue; } GeneratePropertyGetterSetter(propertyInfo, prefix + prefix, false, builder, baseServiceName, nameSpaces); } if (mapDataClassInfo != null && !string.IsNullOrEmpty(mapDataClassInfo.Body)) { builder.AppendLine(mapDataClassInfo.Body); } builder.AppendLine(); builder.AppendLine(prefix + "}"); builder.AppendLine(); }