Skip to content

Commit 41e3a26

Browse files
committed
293
1 parent 627c08e commit 41e3a26

5 files changed

Lines changed: 55 additions & 83 deletions

File tree

src/main/kotlin/com/github/mgramin/sqlboot/model/resourcetype/impl/FsResourceType.kt

Lines changed: 35 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ package com.github.mgramin.sqlboot.model.resourcetype.impl
2626

2727
import com.github.mgramin.sqlboot.exceptions.BootException
2828
import com.github.mgramin.sqlboot.model.connection.SimpleDbConnection
29-
import com.github.mgramin.sqlboot.model.resource.DbResource
3029
import com.github.mgramin.sqlboot.model.resourcetype.Metadata
3130
import com.github.mgramin.sqlboot.model.resourcetype.ResourceType
3231
import com.github.mgramin.sqlboot.model.resourcetype.wrappers.body.BodyWrapper
@@ -44,63 +43,49 @@ import java.nio.charset.StandardCharsets.UTF_8
4443
/**
4544
* Created by MGramin on 11.07.2017.
4645
*/
47-
class FsResourceType(
48-
private val dbConnections: List<SimpleDbConnection>,
49-
private val uri: Uri
50-
) : ResourceType {
46+
class FsResourceType(private val dbConnections: List<SimpleDbConnection>) : ResourceType {
5147

5248
private val resourceTypes: List<ResourceType> = walk(dbConnections.first().baseFolder!!.file.path)
5349

54-
private fun walk(path: String): List<ResourceType> {
55-
return File(path)
56-
.walkTopDown()
57-
.filter { it.isFile }
58-
.filter { it.extension.equals("md", true) || it.extension.equals("sql", true) }
59-
.map { return@map if (it.extension.equals("md", true)) MarkdownFile(it.name, it.readText(UTF_8)) else SimpleFile(it.name, it.readText(UTF_8).toByteArray()) }
60-
.filter { it.content().isNotEmpty() }
61-
.map {
62-
return@map SelectWrapper(
63-
SortWrapper(
64-
BodyWrapper(
65-
SqlResourceType(
66-
aliases = listOf(File(it.name()).nameWithoutExtension),
67-
sql = it.content().toString(Charset.defaultCharset()),
68-
connections = dbConnections),
69-
templateGenerator = GroovyTemplateGenerator("[EMPTY BODY]"))))
70-
}
71-
.toList()
72-
}
50+
private fun walk(path: String) =
51+
File(path)
52+
.walkTopDown()
53+
.filter { it.isFile }
54+
.filter { it.extension.equals("md", true) || it.extension.equals("sql", true) }
55+
.map { return@map if (it.extension.equals("md", true)) MarkdownFile(it.name, it.readText(UTF_8)) else SimpleFile(it.name, it.readText(UTF_8).toByteArray()) }
56+
.filter { it.content().isNotEmpty() }
57+
.map { createQuery(it) }
58+
.toList()
59+
60+
private fun createQuery(it: com.github.mgramin.sqlboot.tools.files.file.File) =
61+
SelectWrapper(
62+
SortWrapper(
63+
BodyWrapper(
64+
SqlResourceType(
65+
aliases = listOf(File(it.name()).nameWithoutExtension),
66+
sql = it.content().toString(Charset.defaultCharset()),
67+
connections = dbConnections),
68+
templateGenerator = GroovyTemplateGenerator("[EMPTY BODY]"))))
7369

7470
@Deprecated("")
75-
fun resourceTypes(): List<ResourceType> {
76-
return resourceTypes
77-
}
71+
fun resourceTypes() = resourceTypes
72+
73+
override fun aliases() = throw BootException("Not implemented!")
74+
75+
override fun path() = throw BootException("Not implemented!")
7876

79-
override fun aliases(): List<String> {
80-
throw BootException("Not implemented!")
81-
}
77+
override fun read(uri: Uri) =
78+
Flux.merge(
79+
resourceTypes
80+
.filter { it.name().matches(wildcardToRegex(uri)) }
81+
.map { it.read(uri) })
8282

83-
override fun path(): List<String> {
84-
throw BootException("Not implemented!")
85-
}
8683

87-
override fun read(uri: Uri): Flux<DbResource> {
88-
return Flux.merge(
89-
resourceTypes
90-
.filter { v -> v.name().matches(uri.type().replace("?", ".?").replace("*", ".*?").toRegex()) }
91-
.map { it.read(uri) }
92-
.toList())
93-
}
84+
override fun metaData(uri: Uri): List<Metadata> =
85+
resourceTypes
86+
.filter { it.name().matches(wildcardToRegex(uri)) }
87+
.flatMap { it.metaData(uri) }
9488

95-
override fun metaData(uri: Uri): List<Metadata> {
96-
try {
97-
return resourceTypes
98-
.asSequence()
99-
.first { v -> v.name().equals(uri.type(), ignoreCase = true) }
100-
.metaData(uri)
101-
} catch (e: Exception) {
102-
throw BootException("Type not found", 404)
103-
}
104-
}
89+
private fun wildcardToRegex(uri: Uri) = uri.type().replace("?", ".?").replace("*", ".*?").toRegex()
10590

10691
}

src/main/kotlin/com/github/mgramin/sqlboot/model/resourcetype/impl/SqlResourceType.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ class SqlResourceType(
6767
.map { connection ->
6868
return@map createQuery(uri, connection).execute(hashMapOf("uri" to uri))
6969
.map<Map<String, Any>?> {
70-
val mutableMap = it.toMutableMap()
71-
mutableMap["database"] = connection.name()
72-
mutableMap
70+
val toMutableMap = it.toMutableMap()
71+
toMutableMap["database"] = connection.name()
72+
toMutableMap
7373
}
7474
}
7575
.toList())

src/main/kotlin/com/github/mgramin/sqlboot/rest/controllers/ApiController.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import com.github.mgramin.sqlboot.model.resourcetype.ResourceType
3131
import com.github.mgramin.sqlboot.model.resourcetype.impl.FsResourceType
3232
import com.github.mgramin.sqlboot.model.uri.Uri
3333
import com.github.mgramin.sqlboot.model.uri.impl.DbUri
34-
import com.github.mgramin.sqlboot.model.uri.impl.FakeUri
3534
import com.github.mgramin.sqlboot.model.uri.wrappers.SqlPlaceholdersWrapper
3635
import org.springframework.beans.factory.annotation.Autowired
3736
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
@@ -64,7 +63,7 @@ class ApiController {
6463

6564
@RequestMapping(value = ["/api/{connectionName}/types"])
6665
fun types(@PathVariable connectionName: String): List<ResourceType>? {
67-
return FsResourceType(dbConnectionList.getConnectionsByMask(connectionName), FakeUri()).resourceTypes()
66+
return FsResourceType(dbConnectionList.getConnectionsByMask(connectionName)).resourceTypes()
6867
}
6968

7069

@@ -89,7 +88,7 @@ class ApiController {
8988
private fun getListResponseEntityHeaders(uri: Uri): ResponseEntity<List<Map<String, Any>>> {
9089
val connections = dbConnectionList.getConnectionsByMask(uri.connection())
9190
try {
92-
val headers = FsResourceType(connections, uri)
91+
val headers = FsResourceType(connections)
9392
.read(uri)
9493
.map { it.headers() }
9594
.collectList()
@@ -110,7 +109,7 @@ class ApiController {
110109

111110
private fun responseEntity(uri: Uri): ResponseEntity<List<Metadata>> {
112111
val fsResourceTypes = FsResourceType(
113-
listOf(dbConnectionList.getConnectionByName(uri.connection())), uri)
112+
listOf(dbConnectionList.getConnectionByName(uri.connection())))
114113
val resourceType = fsResourceTypes
115114
.resourceTypes()
116115
.stream()

src/main/kotlin/com/github/mgramin/sqlboot/rest/controllers/SwaggerController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ package com.github.mgramin.sqlboot.rest.controllers
2727
import com.fasterxml.jackson.core.JsonProcessingException
2828
import com.github.mgramin.sqlboot.model.connection.DbConnectionList
2929
import com.github.mgramin.sqlboot.model.resourcetype.impl.FsResourceType
30-
import com.github.mgramin.sqlboot.model.uri.impl.FakeUri
3130
import io.swagger.models.Info
3231
import io.swagger.models.ModelImpl
3332
import io.swagger.models.Operation
@@ -93,7 +92,7 @@ class SwaggerController {
9392

9493
private fun getSwaggerDescription(request: HttpServletRequest, connectionName: String): Swagger {
9594
val fsResourceTypes = FsResourceType(
96-
listOf(dbConnectionList.getConnectionByName(connectionName)), FakeUri())
95+
listOf(dbConnectionList.getConnectionByName(connectionName)))
9796
val resourceTypes = fsResourceTypes.resourceTypes()
9897
val swagger = Swagger()
9998

src/test/kotlin/com/github/mgramin/sqlboot/model/resourcetype/impl/FsResourceTypeTest.kt

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ package com.github.mgramin.sqlboot.model.resourcetype.impl
2626

2727
import com.github.mgramin.sqlboot.exceptions.BootException
2828
import com.github.mgramin.sqlboot.model.connection.SimpleDbConnection
29-
import com.github.mgramin.sqlboot.model.resourcetype.Metadata
3029
import com.github.mgramin.sqlboot.model.uri.impl.DbUri
31-
import com.github.mgramin.sqlboot.model.uri.impl.FakeUri
3230
import org.junit.jupiter.api.Assertions.assertEquals
3331
import org.junit.jupiter.api.Assertions.assertThrows
3432
import org.junit.jupiter.api.Test
@@ -66,41 +64,32 @@ class FsResourceTypeTest {
6664
"prod/tab*/bookings,5",
6765
"prod/table/bookings,5",
6866
"prod/table/bookings.airports,1")
69-
fun read(uri: String, count: Long) {
70-
StepVerifier
71-
.create(FsResourceType(listOf(db), FakeUri()).read(DbUri(uri)))
72-
.expectNextCount(count)
73-
.verifyComplete()
74-
}
67+
fun read(uri: String, count: Long) =
68+
StepVerifier
69+
.create(FsResourceType(listOf(db)).read(DbUri(uri)))
70+
.expectNextCount(count)
71+
.verifyComplete()
7572

7673
@Test
7774
@Deprecated("Deprecated")
78-
fun resourceTypes() {
79-
assertEquals(sequenceOf("locks", "query", "sessions", "column", "index", "pk", "table", "schema").sorted().toList(),
80-
FsResourceType(listOf(db), FakeUri()).resourceTypes().map { it.name() }.sorted())
81-
}
75+
fun resourceTypes() =
76+
assertEquals(sequenceOf("locks", "query", "sessions", "column", "index", "pk", "table", "schema").sorted().toList(),
77+
FsResourceType(listOf(db)).resourceTypes().map { it.name() }.sorted())
8278

8379
@Test
84-
fun aliases() {
85-
assertThrows(BootException::class.java) { FsResourceType(listOf(db), FakeUri()).aliases() }
86-
}
80+
fun aliases() = assertThrows(BootException::class.java) { FsResourceType(listOf(db)).aliases() }
8781

8882
@Test
89-
fun path() {
90-
assertThrows(BootException::class.java) { FsResourceType(listOf(db), FakeUri()).path() }
91-
}
83+
fun path() = assertThrows(BootException::class.java) { FsResourceType(listOf(db)).path() }
9284

9385
@ParameterizedTest
9486
@CsvSource(
9587
"prod/sessions,7",
9688
"prod/schema,9",
97-
// "prod/s*,5",
98-
// "prod/tab*/bookings,5",
89+
"prod/s*,16",
90+
"prod/tab*/bookings,6",
9991
"prod/table/bookings,6",
10092
"prod/table/bookings.airports,6")
101-
fun metaData(uri: String, count: Int) {
102-
val metaData: List<Metadata> = FsResourceType(listOf(db), DbUri(uri)).metaData(DbUri(uri))
103-
assertEquals(count, metaData.count())
104-
}
93+
fun metaData(uri: String, count: Int) = assertEquals(count, FsResourceType(listOf(db)).metaData(DbUri(uri)).count())
10594

10695
}

0 commit comments

Comments
 (0)