public Task<ILifecycleContext> Execute(ILifecycleContext context) { var serviceDefinition = new ServiceDefinition(context.ServiceDefinition); foreach (var normalModel in context.NormalizationContext.Models) { var normalModelName = new NormalModelName(normalModel.ResourcePath, normalModel.Name); _modelNameMaps.Add(normalModelName); var modelDef = new ModelDefinition(normalModel.AsMetadata()) { ContextName = normalModel.ResourceName, Description = normalModel.Description, Name = normalModel.Name.MapDataTypeName(), ResourceName = normalModel.ResourcePath.ResourceNameFromPath() }; normalModelName.New = modelDef.Name; modelDef.Properties.AddRange(ExtractModelProperties(normalModel.Properties)); serviceDefinition.AddModel(modelDef); } var resourceModelLookup = _modelNameMaps.ToLookup(x => x.ResourcePath); // Ensure all Operations refer to the proper model names foreach (var op in context.NormalizationContext.Operations) { if (!resourceModelLookup.Contains(op.ResourcePath)) { continue; } var resourceModels = resourceModelLookup[op.ResourcePath].ToList(); var returnItem = resourceModels.SingleOrDefault(x => op.Response.TypeName.Equals(x.Old)); if (returnItem != null) { op.Response.SetTypeName(returnItem.New); } foreach (var opParam in op.Parameters) { var paramItem = resourceModels.SingleOrDefault(x => opParam.TypeName.Equals(x.Old)); if (paramItem != null) { opParam.SetTypeName(paramItem.New); } } } var ctx = new LifecycleContext(context) { ServiceDefinition = serviceDefinition, State = LifecycleState.Continue }; return Task.FromResult<ILifecycleContext>(ctx); }
private LifecycleContext(string apiNamespace, string modelNamespace, SwaggerJsonLoader loader, SwaseyOperationWriter operationWriter, SwaseyEnumWriter enumWriter, SwaseyModelWriter modelWriter) { ApiNamespace = apiNamespace ?? Defaults.DefaultApiNamespace; ModelNamespace = modelNamespace ?? Defaults.DefaultModelNamespace; ServiceMetadata = new ServiceMetadata(ApiNamespace, ModelNamespace); ServiceDefinition = new ServiceDefinition(); Loader = loader ?? Defaults.DefaultSwaggerJsonLoader; OperationWriter = operationWriter ?? Defaults.DefaultSwaseyOperationWriter; EnumWriter = enumWriter ?? Defaults.DefaultSwaseyEnumWriter; ModelWriter = modelWriter ?? Defaults.DefaultSwaseyModelWriter; ApiPathJsonMapping = new Dictionary<string, dynamic>(); NormalizationContext = new NormalizationContext(); }
internal LifecycleContext(ILifecycleContext copyFrom) : this(copyFrom.ApiNamespace, copyFrom.ModelNamespace, copyFrom.Loader, copyFrom.OperationWriter, copyFrom.EnumWriter, copyFrom.ModelWriter) { State = copyFrom.State; ResourceListingUri = copyFrom.ResourceListingUri; ApiEnumTemplate = copyFrom.ApiEnumTemplate; ApiModelTemplate = copyFrom.ApiModelTemplate; ApiOperationTemplate = copyFrom.ApiOperationTemplate; SwaggerVersion = copyFrom.SwaggerVersion; ResourceListingJson = copyFrom.ResourceListingJson; OperationFilter = copyFrom.OperationFilter ?? Defaults.DefaultOperationFilter; OperationParameterFilter = copyFrom.OperationParameterFilter ?? Defaults.DefaultOperationParameterFilter; NormalizationContext = new NormalizationContext(copyFrom.NormalizationContext); ServiceDefinition = new ServiceDefinition(copyFrom.ServiceDefinition); copyFrom.ApiPathJsonMapping.ToList().ForEach(x => ApiPathJsonMapping.Add(x.Key, x.Value)); }
public Task<ILifecycleContext> Execute(ILifecycleContext context) { var serviceDefinition = new ServiceDefinition(context.ServiceDefinition); foreach (var normalOp in context.NormalizationContext.Operations) { var op = new OperationDefinition(NormalizeOperationPath(normalOp), normalOp.AsMetadata()) { ConsumesOctetStream = normalOp.SupportsStreaming, Description = normalOp.Description, HttpMethod = normalOp.HttpMethod, Name = ExtractName(normalOp), ResourceName = normalOp.ResourcePath.ResourceNameFromPath(), Response = NormalizeResponseDefinition(normalOp) }; normalOp.Parameters .Select(NormalizeParameterDefinition) .ToList() .ForEach(x => op.AddParameter(x)); if (serviceDefinition.Operations.Any(x => x.ResourceName == op.ResourceName && x.Name == op.Name)) { var pathParams = op.Parameters.Where(x => x.Type == ParameterType.Path && x.IsRequired).OrderBy(x => x.Name); op.Name += string.Join("And", pathParams.Select(x => "By" + x.Name.UCFirst())); } serviceDefinition.AddOperation(op); } var ctx = new LifecycleContext(context) { ServiceDefinition = serviceDefinition, State = LifecycleState.Continue }; return Task.FromResult<ILifecycleContext>(ctx); }