@@ -7,37 +7,29 @@ package io.openapiparser.support
77
88import io.openapiparser.*
99import io.openapiprocessor.jsonschema.support.Types
10- import io.openapiprocessor.jsonschema.reader.StringReader
11- import io.openapiprocessor.jsonschema.reader.UriReader
1210import io.openapiprocessor.jsonschema.schema.Bucket
1311import io.openapiprocessor.jsonschema.schema.DocumentLoader
1412import io.openapiprocessor.jsonschema.schema.DocumentStore
1513import io.openapiprocessor.jsonschema.schema.Resolver
1614import io.openapiprocessor.jsonschema.schema.SchemaVersion
1715import io.openapiprocessor.snakeyaml.SnakeYamlConverter
1816import io.openapiprocessor.interfaces.Converter
19- import io.openapiprocessor.interfaces.Reader
2017import java.net.URI
2118import io.openapiparser.model.v30.OpenApi as OpenApi30
2219import io.openapiparser.model.v31.OpenApi as OpenApi31
2320
2421class ApiBuilder {
25- private var api: String? = null
26- private lateinit var apiUri: URI
22+ private val reader = TestReader ()
2723 private var converter: Converter = SnakeYamlConverter ()
2824 private var documents: DocumentStore = DocumentStore ()
2925
30- fun withApi (api : String ): ApiBuilder {
31- return withYaml(" file:///any" , api.trimIndent())
32- }
33-
34- fun withApi (api : URI ): ApiBuilder {
35- apiUri = api
26+ fun withApi (apiYaml : String ): ApiBuilder {
27+ reader.addApi(URI (" file:///openapi.yaml" ), apiYaml.trimIndent())
3628 return this
3729 }
3830
39- fun withResource ( api : String ): ApiBuilder {
40- apiUri = this :: class .java.getResource(api) !! .toURI( )
31+ fun withApi ( uri : String , apiYaml : String ): ApiBuilder {
32+ reader.addApi( URI (uri), apiYaml.trimIndent() )
4133 return this
4234 }
4335
@@ -46,59 +38,69 @@ class ApiBuilder {
4638 return this
4739 }
4840
41+ fun withDocument (uri : URI , document : Any ): ApiBuilder {
42+ documents.addId(uri, document)
43+ return this
44+ }
45+
4946 fun buildParser (): OpenApiParser {
50- return OpenApiParser (documents, DocumentLoader (getReader() , converter))
47+ return OpenApiParser (documents, DocumentLoader (reader , converter))
5148 }
5249
5350 fun buildOpenApi30 (): OpenApi30 {
51+ return buildOpenApi30(" file:///openapi.yaml" )
52+ }
53+
54+ fun buildOpenApi30 (uri : String ): OpenApi30 {
55+ var source = URI (uri)
56+ if (! source.isAbsolute) {
57+ source = this ::class .java.getResource(uri)!! .toURI()
58+ }
59+
5460 val resolver = createResolver()
55- val result = resolver.resolve(apiUri , Resolver .Settings (SchemaVersion .Draft4 ))
61+ val result = resolver.resolve(source , Resolver .Settings (SchemaVersion .Draft4 ))
5662
5763 return OpenApi30 (
5864 Context (result.scope, result.registry),
5965 Bucket (result.scope, Types .asMap(result.document)!! ))
6066 }
6167
6268 fun buildOpenApi31 (): OpenApi31 {
69+ return buildOpenApi31(" file:///openapi.yaml" )
70+ }
71+
72+ fun buildOpenApi31 (uri : String ): OpenApi31 {
73+ var source = URI (uri)
74+ if (! source.isAbsolute) {
75+ source = this ::class .java.getResource(uri)!! .toURI()
76+ }
77+
6378 val resolver = createResolver()
64- val result = resolver.resolve(apiUri , Resolver .Settings (SchemaVersion .Draft201909 ))
79+ val result = resolver.resolve(source , Resolver .Settings (SchemaVersion .Draft201909 ))
6580
6681 return OpenApi31 (
6782 Context (result.scope, result.registry),
6883 Bucket (result.scope, Types .asMap(result.document)!! ))
6984 }
7085
7186 fun <T > build (clazz : Class <T >): T {
72- return build { c, n -> clazz
87+ return build30 { c, n -> clazz
7388 .getDeclaredConstructor(Context ::class .java, Bucket ::class .java)
7489 .newInstance(c, n)
7590 }
7691 }
7792
78- private fun <T > build (factory : (context: Context , bucket: Bucket ) -> T ): T {
93+ private fun <T > build30 (factory : (context: Context , bucket: Bucket ) -> T ): T {
7994 val resolver = createResolver()
80- val result = resolver.resolve(apiUri , Resolver .Settings (SchemaVersion .Draft4 ))
95+ val result = resolver.resolve(URI ( " file:///openapi.yaml " ) , Resolver .Settings (SchemaVersion .Draft4 ))
8196
8297 return factory(
8398 Context (result.scope, result.registry),
8499 Bucket (result.scope, Types .asMap(result.document)!! ))
85100 }
86101
87102 private fun createResolver (): Resolver {
88- return Resolver (documents, DocumentLoader (getReader(), converter))
89- }
90-
91- private fun withYaml (baseUri : String , api : String ): ApiBuilder {
92- this .apiUri = URI (baseUri)
93- this .api = api
94- return this
95- }
96-
97- private fun getReader (): Reader {
98- if (api == null ) {
99- return UriReader ()
100- }
101- return StringReader (api!! )
103+ return Resolver (documents, DocumentLoader (reader, converter))
102104 }
103105}
104106
0 commit comments