Ejemplo n.º 1
0
        //2.0 operations don't have a path so....
        private OperationPath20 NormalizeOperationPath(NormalizationApiOperation op)
        {
            var pathBuilder = new StringBuilder('/');

            var basePath = NormalizeBasePath(op.BasePath);

            if (!string.IsNullOrWhiteSpace(basePath))
            {
                pathBuilder.Append(basePath);
            }
            if (!string.IsNullOrWhiteSpace(op.Path))
            {
                var opPath = op.Path;
                if (opPath.StartsWith("/", StringComparison.InvariantCultureIgnoreCase))
                {
                    opPath = opPath.Length == 1 ? string.Empty : opPath.Substring(1);
                }
                pathBuilder.Append(opPath);
            }

            var path = pathBuilder.ToString();

            var versionParam = op.Parameters.FirstOrDefault(x => x.Name.IndexOf(Constants.ParameterName_Version, StringComparison.InvariantCultureIgnoreCase) >= 0);

            if (versionParam != null)
            {
                var template = new UriTemplate(path, true);
                template.SetParameter(versionParam.Name, op.ApiVersion);
                path = template.Resolve();
                op.Parameters.Remove(versionParam);
            }

            return(new OperationPath20(path));
        }
        public Task <ILifecycleContext> Execute(ILifecycleContext context)
        {
            OperationFilter          = context.OperationFilter ?? Defaults.DefaultOperationFilter;
            OperationParameterFilter = context.OperationParameterFilter ?? Defaults.DefaultOperationParameterFilter;

            var ctx = new LifecycleContext(context)
            {
                State = LifecycleState.Continue
            };

            foreach (var apiOp in ExtractApiOperations(context))
            {
                if (!OperationFilter(apiOp.JObject))
                {
                    continue;
                }

                NormalizationApiOperation op = ParseOperationData(apiOp);
                op.ApiNamespace   = context.ApiNamespace;
                op.ModelNamespace = context.ModelNamespace;

                op.Response.ApiNamespace   = context.ApiNamespace;
                op.Response.ModelNamespace = context.ModelNamespace;

                foreach (var param in op.Parameters)
                {
                    param.ApiNamespace   = context.ApiNamespace;
                    param.ModelNamespace = context.ModelNamespace;
                }

                ctx.NormalizationContext.Operations.Add(op);
            }

            return(Task.FromResult <ILifecycleContext>(ctx));
        }
        private ResponseDefinition NormalizeResponseDefinition(NormalizationApiOperation op)
        {
            var dt = op.Response.AsDataType();

            return(new ResponseDefinition(op.Response.AsMetadata())
            {
                DataType = dt
            });
        }
Ejemplo n.º 4
0
        private ResponseDefinition NormalizeResponseDefinition(NormalizationApiOperation op)
        {
            var dt = op.Response.AsDataType();

            //this is a weird way of going about this.
            dt.Title20 = op.Response.Title20;
            return(new ResponseDefinition(op.Response.AsMetadata())
            {
                DataType = dt
            });
        }
Ejemplo n.º 5
0
        private QualifiedName ExtractName(NormalizationApiOperation op)
        {
            var name = op.Name;

            if (name[0] == '_')
            {
                name = name.Substring(1);
            }

            if (char.IsLower(name[0]))
            {
                name = char.ToUpperInvariant(name[0]) + name.Substring(1);
            }

            return(new QualifiedName(name));
        }
        private QualifiedName ExtractName(NormalizationApiOperation op)
        {
            var name         = op.Name;
            var resourceName = op.ResourcePath.ResourceNameFromPath();

            if (name.StartsWith(resourceName))
            {
                name = name.Substring(resourceName.Length);
            }

            if (name[0] == '_')
            {
                name = name.Substring(1);
            }

            if (char.IsLower(name[0]))
            {
                name = char.ToUpperInvariant(name[0]) + name.Substring(1);
            }

            return(new QualifiedName(name));
        }
        private NormalizationApiOperation ParseOperationData(object obj)
        {
            dynamic extractedOp = obj;
            var     opObj       = extractedOp.JObject;

            var op = new NormalizationApiOperation
            {
                ApiVersion   = (string)extractedOp.ApiVersion,
                BasePath     = (string)extractedOp.BasePath,
                Path         = (string)extractedOp.OperationPath,
                ResourcePath = (string)extractedOp.ResourcePath,
                HttpMethod   = (opObj.ContainsKey("method") ? (string)opObj.method : string.Empty).ParseHttpMethodType(),
                Description  = opObj.ContainsKey("summary") ? (string)opObj.summary : string.Empty,
                Name         = opObj.ContainsKey("nickname") ? (string)opObj.nickname : string.Empty
            };

            op.Parameters.AddRange(ParseParameters(opObj));
            op.Response = ParseResponse(opObj);
            op.SupportsStreamingUpload   = ParseSupportsStreamingUpload(opObj);
            op.SupportsStreamingDownload = ParseSupportsStreamingDownload(opObj);

            return(op);
        }
        private NormalizationApiOperation ParseOperationData(object obj)
        {
            dynamic extractedOp = obj;
            var     opObj       = extractedOp.JObject;

            //I should really iterate over opObj.Value.tags here and concatenate all tags but I'm not going to.
            //My excuse is "minimum viable product."
            var op = new NormalizationApiOperation
            {
                BasePath     = (string)extractedOp.BasePath,
                Path         = (string)extractedOp.OperationPath,
                HttpMethod   = ((string)opObj.Key).ParseHttpMethodType(),
                Description  = opObj.Value.ContainsKey("summary") ? (string)opObj.Value.summary : string.Empty,
                Name         = opObj.Value.ContainsKey("operationId") ? (string)opObj.Value.operationId : string.Empty,
                ResourcePath = opObj.Value.ContainsKey("tags") ? (string)opObj.Value.tags[0] : string.Empty
            };

            op.Parameters.AddRange(ParseParameters(opObj));
            op.Response = ParseResponse(opObj);
            op.SupportsStreamingUpload   = ParseSupportsStreamingUpload(opObj.Value);
            op.SupportsStreamingDownload = ParseSupportsStreamingDownload(opObj.Value);

            return(op);
        }