Example #1
0
        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);
            }
        }
Example #2
0
        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();
        }
Example #3
0
        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 + "}");
        }
Example #4
0
        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 + "}");
        }
Example #5
0
 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)}]");
 }
Example #6
0
        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);
        }
Example #7
0
        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 + "}");
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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);
        }
Example #10
0
        //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 + "}");
        }
Example #11
0
        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 + "}");
        }
Example #12
0
        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 + "}");
        }
Example #13
0
        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();
        }
Example #14
0
        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);
        }
Example #15
0
        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();
        }