From f6aac2c650ce6e5301d78a912b033cb691b9a8bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 25 Mar 2021 16:38:35 +0100 Subject: [PATCH] [Editor] Add support for executing queries --- .../database/component/QueryFieldCell.kt | 24 ++++++++++++ .../base/editor/database/model/Field.kt | 3 ++ .../base/editor/database/model/Query.kt | 2 +- .../base/editor/database/model/Row.kt | 3 ++ .../database/view/list/TablesListView.kt | 18 ++++----- .../database/view/query/QueryResultView.kt | 39 +++++++++++++++++-- .../editor/main/controller/MainController.kt | 7 +++- 7 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/component/QueryFieldCell.kt create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Field.kt create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Row.kt diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/component/QueryFieldCell.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/component/QueryFieldCell.kt new file mode 100644 index 00000000..a5be38ba --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/component/QueryFieldCell.kt @@ -0,0 +1,24 @@ +package com.bartlomiejpluta.base.editor.database.component + +import com.bartlomiejpluta.base.editor.database.model.Field +import com.bartlomiejpluta.base.editor.database.model.Row +import javafx.scene.control.TableCell + +class QueryFieldCell : TableCell() { + + override fun updateItem(item: Field?, empty: Boolean) { + super.updateItem(item, empty) + + when { + empty || item == null -> { + text = null + graphic = null + } + + else -> { + text = item.value + graphic = null + } + } + } +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Field.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Field.kt new file mode 100644 index 00000000..2130a57a --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Field.kt @@ -0,0 +1,3 @@ +package com.bartlomiejpluta.base.editor.database.model + +class Field(val value: String) \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Query.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Query.kt index 7a0ae13f..055f17cd 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Query.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Query.kt @@ -3,7 +3,7 @@ package com.bartlomiejpluta.base.editor.database.model import tornadofx.getValue import tornadofx.toProperty -class Query(name: String, val columns: List, val data: List>) { +class Query(name: String, val columns: List, val data: List) { val nameProperty = name.toProperty() val name by nameProperty } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Row.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Row.kt new file mode 100644 index 00000000..4b42212c --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/model/Row.kt @@ -0,0 +1,3 @@ +package com.bartlomiejpluta.base.editor.database.model + +class Row(val fields: Map) \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/view/list/TablesListView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/view/list/TablesListView.kt index 22631c61..167dcdb0 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/view/list/TablesListView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/view/list/TablesListView.kt @@ -1,19 +1,17 @@ package com.bartlomiejpluta.base.editor.database.view.list import com.bartlomiejpluta.base.editor.database.component.SQLElementCell -import com.bartlomiejpluta.base.editor.database.model.Query -import com.bartlomiejpluta.base.editor.database.model.SQLDatabase -import com.bartlomiejpluta.base.editor.database.model.SQLElement -import com.bartlomiejpluta.base.editor.database.model.SQLTable +import com.bartlomiejpluta.base.editor.database.model.* +import com.bartlomiejpluta.base.editor.database.model.Field import com.bartlomiejpluta.base.editor.database.service.DatabaseService import com.bartlomiejpluta.base.editor.file.model.InMemoryStringFileNode import com.bartlomiejpluta.base.editor.main.controller.MainController import com.bartlomiejpluta.base.editor.project.context.ProjectContext import javafx.scene.control.TreeItem import org.kordamp.ikonli.javafx.FontIcon -import tornadofx.* import java.sql.Connection import java.sql.SQLException +import tornadofx.* class TablesListView : View() { private val mainController: MainController by di() @@ -90,19 +88,19 @@ class TablesListView : View() { if (results != null && metadata != null) { val columns = mutableListOf() - for (i in 1..metadata.columnCount) { + for(i in 1..metadata.columnCount) { columns += metadata.getColumnLabel(i) } - val data = mutableListOf>() + val data = mutableListOf() while (results.next()) { - val record = mutableMapOf() + val record = mutableMapOf() for (i in 1..metadata.columnCount) { - record[metadata.getColumnLabel(i)] = results.getObject(i).toString() + record[metadata.getColumnLabel(i)] = Field(results.getObject(i).toString()) } - data += record + data += Row(record) } mainController.openQuery(Query(name, columns, data)) diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/view/query/QueryResultView.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/view/query/QueryResultView.kt index 8785f126..25c57d8b 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/view/query/QueryResultView.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/view/query/QueryResultView.kt @@ -1,13 +1,46 @@ package com.bartlomiejpluta.base.editor.database.view.query -import tornadofx.View -import tornadofx.borderpane -import tornadofx.toolbar +import com.bartlomiejpluta.base.editor.database.component.QueryFieldCell +import com.bartlomiejpluta.base.editor.database.model.Field +import com.bartlomiejpluta.base.editor.database.model.Row +import com.bartlomiejpluta.base.editor.database.viewmodel.QueryVM +import javafx.scene.control.TableColumn +import tornadofx.* class QueryResultView : View() { + private val queryVM = find() + + private val table = tableview { + } + + init { + queryVM.itemProperty.addListener { _, _, _ -> refreshData() } + + refreshData() + } + + private fun refreshData() { + table.columns.clear() + table.items.clear() + queryVM.item?.let { query -> + table.items.addAll(query.data) + query.columns.map { column -> + TableColumn(column).apply { + setCellValueFactory { + it.value.fields[column].toProperty() + } + + setCellFactory { QueryFieldCell() } + } + }.forEach { table.addColumnInternal(it) } + } + } + override val root = borderpane { top = toolbar { } + + center = table } } \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt index b2280a79..125f7672 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/main/controller/MainController.kt @@ -122,8 +122,13 @@ class MainController : Controller() { fun openQuery(query: Query) { val findQuery = { q: Query -> q.name == query.name } + val updateQuery = { scope: Scope -> + openItems -= scope +// openItems[scope] = query +// find(scope).item = query + } - openItem(findQuery, {}) { + openItem(findQuery, updateQuery) { val vm = QueryVM(query) val scope = Scope() setInScope(vm, scope)