Ejemplo n.º 1
0
 private void CodeComplexType(WsdlType t, bool isPublic, string directory, string namespaceName)
 {
     using (var file = new CodeFile(directory, $"{t.CodeName}.cs"))
     {
         file.WriteLine("using System;");
         file.WriteLine("using System.Collections.Generic;");
         file.WriteLine("using System.Xml.Linq;");
         file.WriteLine("");
         using (var nsScope = file.CreateNamespaceScope(namespaceName))
         {
             file.Comment(t.Documentation);
             string modifier = isPublic ? "public" : "internal";
             if (t.IsAbstract)
             {
                 modifier += " abstract";
             }
             var inherits = new List <string>();
             if (t.BaseType != null)
             {
                 inherits.Add(t.BaseType.CodeName);
             }
             inherits.Add("ISoapable");
             using (var classScope = file.CreateClassScope(modifier, t.CodeName, inherits.ToArray()))
             {
                 foreach (var p in t.Properties)
                 {
                     file.Comment(p.Documentation);
                     file.WriteLine($"public {GetPropertyTypeCode(p, false)} {p.CodeName} {{ get; set; }}");
                 }
                 ImplementISoapableReadFrom(t, file);
                 ImplementISoapableWriteTo(t, file);
             }
         }
     }
 }
Ejemplo n.º 2
0
 private void CodeApiError(WsdlType t, string directory, string namespaceName)
 {
     using (var file = new CodeFile(directory, $"{t.CodeName}.cs"))
     {
         file.WriteLine("using System;");
         file.WriteLine("using System.Xml.Linq;");
         file.WriteLine("");
         using (var nsScope = file.CreateNamespaceScope(namespaceName))
         {
             file.Comment(t.Documentation);
             var abstractKeyword = t.IsAbstract ? " abstract" : "";
             using (var classScope = file.CreateClassScope($"public{abstractKeyword}", t.CodeName, "Exception", "ISoapable"))
             {
                 file.WriteLine("public override string Message { get { return ErrorString; } }");
                 foreach (var p in t.Properties)
                 {
                     file.Comment(p.Documentation);
                     file.WriteLine($"public {GetPropertyTypeCode(p, false)} {p.CodeName} {{ get; set; }}");
                 }
                 ImplementISoapableReadFrom(t, file);
                 ImplementISoapableWriteTo(t, file);
             }
         }
     }
 }
Ejemplo n.º 3
0
 private void CodePortType(WsdlPortType portType, string directory, string namespaceName)
 {
     using (var file = new CodeFile(directory, $"{portType.CodeName}.cs"))
     {
         file.WriteLine("using System.Collections.Generic;");
         file.WriteLine("using System.Threading.Tasks;");
         file.WriteLine("");
         using (var nsScope = file.CreateNamespaceScope(namespaceName))
         {
             file.Comment(portType.Documentation);
             file.WriteLine($"public interface {portType.CodeName}");
             file.Ocb();
             foreach (var op in portType.Operations)
             {
                 var    outputType = GetPropertyTypeCode(op.OutputElement.Properties[0], true);
                 string inputs     = null;
                 if (op.InputElement.Properties.Count > 0)
                 {
                     string inputParamName = EscapeKeyword(StringUtil.ToCamelCaseName(op.InputElement.Properties[0].CodeName));
                     inputs = GetPropertyTypeCode(op.InputElement.Properties[0], true) + " " + inputParamName;
                 }
                 file.Comment(op.Documentation);
                 file.WriteLine($"Task<{outputType}> {op.CodeName}Async({inputs});");
             }
             file.Ccb();
         }
     }
 }
Ejemplo n.º 4
0
 private void CodeEnums(WsdlStructure wsdl, string directory, string namespaceName)
 {
     using (var file = new CodeFile(directory, "Enums.cs"))
     {
         using (var nsScope = file.CreateNamespaceScope(namespaceName))
         {
             foreach (var t in wsdl.Types.OfType <WsdlEnumType>().OrderBy(x => x.CodeName))
             {
                 file.Comment(t.Documentation);
                 file.WriteLine($"public enum {t.CodeName}");
                 file.Ocb();
                 var lastItem = t.Items.Last();
                 foreach (var enumItem in t.Items)
                 {
                     file.Comment(enumItem.Documentation);
                     file.WriteLine(enumItem.CodeName + (enumItem == lastItem ? "" : ","));
                 }
                 file.Ccb();
                 file.WriteLine("");
             }
         }
     }
 }
Ejemplo n.º 5
0
        private void CodeService(WsdlService s, string directory, string namespaceName)
        {
            using (var file = new CodeFile(directory, $"{s.CodeName}.cs"))
            {
                file.WriteLine("using Microsoft.Extensions.Logging;");
                file.WriteLine("using System.Collections.Generic;");
                file.WriteLine("using System.Threading.Tasks;");
                file.WriteLine("");
                using (var nsScope = file.CreateNamespaceScope(namespaceName))
                {
                    using (var classScope = file.CreateClassScope("public", s.CodeName, s.Ports.Select(x => x.Binding.PortType.CodeName).ToArray()))
                    {
                        file.WriteLine("private readonly AdWordsApiConfig _config;");
                        file.WriteLine("private readonly INetUtility _netUtil;");
                        file.WriteLine("private readonly ILogger _logger;");

                        // constructor
                        file.WriteLine($"public {s.CodeName}(AdWordsApiConfig config, INetUtility netUtil, ILoggerFactory loggerFactory)");
                        file.Ocb();
                        file.WriteLine("_config = config;");
                        file.WriteLine("_netUtil = netUtil;");
                        file.WriteLine($"_logger = loggerFactory?.CreateLogger<{s.CodeName}>();");
                        file.Ccb();

                        foreach (var p in s.Ports)
                        {
                            var headerElements = new List <WsdlType>();
                            foreach (var opBinding in p.Binding.Operations)
                            {
                                var pt = p.Binding.PortType;
                                var op = pt.Operations.First(x => x.Name == opBinding.Name);

                                var    outputType     = GetPropertyTypeCode(op.OutputElement.Properties[0], true);
                                string inputs         = null;
                                string inputParamName = null;
                                if (op.InputElement.Properties.Count > 0)
                                {
                                    var prop = op.InputElement.Properties[0];
                                    inputParamName = EscapeKeyword(StringUtil.ToCamelCaseName(prop.CodeName));
                                    inputs         = GetPropertyTypeCode(prop, true) + " " + inputParamName;
                                }
                                file.Comment(op.Documentation);
                                file.WriteLine($"public async Task<{outputType}> {op.CodeName}Async({inputs})");
                                file.Ocb();
                                file.WriteLine($"var binding = new {p.Binding.CodeName}(\"{p.SoapLocation}\", _config.AccessToken, _config.Timeout, _config.EnableGzipCompression, _netUtil, _logger);");
                                file.WriteLine($"var inData = new SoapData<{opBinding.InputSoapHeader.CodeName}, {op.InputElement.CodeName}>();");
                                file.WriteLine($"inData.Header = new {opBinding.InputSoapHeader.CodeName}();");
                                file.WriteLine("AssignHeaderValues(inData.Header);");
                                if (!headerElements.Contains(opBinding.InputSoapHeader))
                                {
                                    headerElements.Add(opBinding.InputSoapHeader);
                                }
                                file.WriteLine($"inData.Body = new {op.InputElement.CodeName}();");
                                if (inputParamName != null)
                                {
                                    var prop = op.InputElement.Properties[0];
                                    if (prop.AllowMultiple)
                                    {
                                        file.WriteLine($"inData.Body.{prop.CodeName} = new {GetPropertyTypeCode(prop, false)}({inputParamName});");
                                    }
                                    else
                                    {
                                        file.WriteLine($"inData.Body.{prop.CodeName} = {inputParamName};");
                                    }
                                }
                                file.WriteLine($"var outData = await binding.{op.CodeName}Async(inData).ConfigureAwait(false);");
                                file.WriteLine($"return outData.Body.{op.OutputElement.Properties[0].CodeName};");
                                file.Ccb();
                            }
                            foreach (var hEle in headerElements)
                            {
                                file.WriteLine($"private void AssignHeaderValues({hEle.CodeName} header)");
                                file.Ocb();
                                file.WriteLine("header.ClientCustomerId = _config.ClientCustomerId;");
                                file.WriteLine("header.DeveloperToken = _config.DeveloperToken;");
                                file.WriteLine("header.PartialFailure = _config.PartialFailure;");
                                file.WriteLine("header.UserAgent = _config.UserAgent;");
                                file.WriteLine("header.ValidateOnly = _config.ValidateOnly;");
                                file.Ccb();
                            }
                        }
                    }
                }
            }
        }