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(); } } } } } }
private void ImplementISoapableReadFrom(WsdlType t, CodeFile f) { var overrideKeyword = t.BaseType == null ? "virtual" : "override"; using (var methodScope = f.CreateMethodScope($"public {overrideKeyword}", "void", "ReadFrom", "XElement xE")) { if (t.BaseType != null) { f.WriteLine("base.ReadFrom(xE);"); } foreach (var p in t.Properties) { if (p.AllowMultiple || p.AllowNull) { f.WriteLine($"{p.CodeName} = null;"); } } f.WriteLine("foreach (var xItem in xE.Elements())"); f.Ocb(); f.WriteLine("var localName = xItem.Name.LocalName;"); bool isFirst = true; foreach (var p in t.Properties) { f.WriteLine((isFirst ? "" : "else ") + $"if (localName == \"{p.XName.Name}\")"); f.Ocb(); if (p.AllowMultiple) { f.WriteLine($"if ({p.CodeName} == null) {p.CodeName} = new {GetPropertyTypeCode(p, false)}();"); if (p.DataType.IsPrimitiveType) { f.WriteLine($"{p.CodeName}.Add({GetSinglePrimitiveTypeConversionExpression(p, "xItem.Value")});"); } else { string ItemVarName = StringUtil.ToCamelCaseName(p.CodeName + "Item"); if (p.DataType.IsAbstract || p.DataType.Properties.Any(x => x.IsTypeProperty)) { f.WriteLine($"var {ItemVarName} = InstanceCreator.Create{p.DataType.CodeName}(xItem);"); } else { f.WriteLine($"var {ItemVarName} = new {p.DataType.CodeName}();"); } f.WriteLine($"{ItemVarName}.ReadFrom(xItem);"); f.WriteLine($"{p.CodeName}.Add({ItemVarName});"); } } else { if (p.DataType.IsPrimitiveType) { f.WriteLine($"{p.CodeName} = {GetSinglePrimitiveTypeConversionExpression(p, "xItem.Value")};"); } else { if (p.DataType.IsAbstract || p.DataType.Properties.Any(x => x.IsTypeProperty)) { f.WriteLine($"{p.CodeName} = InstanceCreator.Create{p.DataType.CodeName}(xItem);"); } else { f.WriteLine($"{p.CodeName} = new {p.DataType.CodeName}();"); } f.WriteLine($"{p.CodeName}.ReadFrom(xItem);"); } } f.Ccb(); isFirst = false; } f.Ccb(); // close foreach } }
public Scope(CodeFile file, string line) { _file = file; _file.WriteLine(line); _file.Ocb(); }