From 7ebf862abaf3d88a3aa84d482e69c897042a781e Mon Sep 17 00:00:00 2001 From: SurfaceYellowDuck Date: Mon, 1 May 2023 11:15:30 +0300 Subject: [PATCH] feat: add ability to delete node --- .../kotlin/app/controller/BSTController.kt | 13 +++++---- .../kotlin/app/view/SetTreeNameFragment.kt | 23 ---------------- .../app/view/treeView/BinarySearchTreeView.kt | 24 ++++++++++++++--- trees/src/main/kotlin/bst/AbstractBST.kt | 6 ++--- .../bst/db/controllers/SQLController.kt | 27 ++++++++++++++----- 5 files changed, 53 insertions(+), 40 deletions(-) delete mode 100644 app/src/main/kotlin/app/view/SetTreeNameFragment.kt diff --git a/app/src/main/kotlin/app/controller/BSTController.kt b/app/src/main/kotlin/app/controller/BSTController.kt index 4f96741..41361ab 100644 --- a/app/src/main/kotlin/app/controller/BSTController.kt +++ b/app/src/main/kotlin/app/controller/BSTController.kt @@ -12,6 +12,7 @@ import javafx.scene.control.Label import bst.db.controllers.SQLController import javafx.collections.FXCollections.observableArrayList import javafx.collections.ObservableList +import kotlin.reflect.jvm.internal.impl.resolve.constants.KClassValue.Value class BSTController : Controller() { fun isNumeric(s: String): Boolean { @@ -90,13 +91,15 @@ class BSTController : Controller() { fun deleteTreeFromDB(name: String) { SQLController().run { - deleteTree(name) + removeTree(name) } } - fun saveTree(tree: BSTree) { + fun saveTree(tree: BSTree, treeName: String) { val controller = SQLController() - controller.saveTreeToDB(tree) + controller.saveTree(tree, treeName) + } + fun deleteNode(value: Int, tree: BSTree, treePane: Pane){ + tree.remove(value) + drawTree(tree, treePane) } } - - diff --git a/app/src/main/kotlin/app/view/SetTreeNameFragment.kt b/app/src/main/kotlin/app/view/SetTreeNameFragment.kt deleted file mode 100644 index ed2ea21..0000000 --- a/app/src/main/kotlin/app/view/SetTreeNameFragment.kt +++ /dev/null @@ -1,23 +0,0 @@ -package app.view - -import bst.BSTree -import javafx.beans.property.SimpleStringProperty -import tornadofx.* -import app.controller.BSTController - -class SetTreeNameFragment : Fragment() { - private val name = SimpleStringProperty() - private val controller = BSTController() - override val root = vbox { - field("Input tree name") { - textfield(name) - } - button("save") { - close() -// tree.setName(name.value) -// if (tree.getRoot() != null) { -// controller.saveTree(tree) -// } - } - } -} \ No newline at end of file diff --git a/app/src/main/kotlin/app/view/treeView/BinarySearchTreeView.kt b/app/src/main/kotlin/app/view/treeView/BinarySearchTreeView.kt index 514d2b7..e2904a8 100644 --- a/app/src/main/kotlin/app/view/treeView/BinarySearchTreeView.kt +++ b/app/src/main/kotlin/app/view/treeView/BinarySearchTreeView.kt @@ -17,6 +17,7 @@ class BinarySearchTreeView : View() { private var trees = controller.getTreesList() private var selectedItem: String? = "" private val treeName = SimpleStringProperty() + private val valueFotDeletion = SimpleStringProperty() override val root = vbox { hbox { val availableTrees = combobox { @@ -72,20 +73,37 @@ class BinarySearchTreeView : View() { key.value = "" value.value = "" } - } + field("Value input"){ + textfield(valueFotDeletion) + } + button("Delete node"){ + action { + if (controller.isNumeric(valueFotDeletion.value)){ + controller.deleteNode(valueFotDeletion.value.toInt(), tree, treePane) + } + else{ + alert(type = Alert.AlertType.ERROR, header = "Deletion Error") + } + } + } + field("Input tree name") { textfield(treeName) } button("Save tree") { action { if (tree.getRoot() != null) { - tree.treeName = treeName.value - controller.saveTree(tree) +// tree.treeName = treeName.value + controller.saveTree(tree, treeName.value) if (!availableTrees.items.contains(treeName.value)) { availableTrees.items.add(treeName.value) } } + else{ + alert(type = Alert.AlertType.ERROR, header = "Can not save tree with empty root") + + } } } } diff --git a/trees/src/main/kotlin/bst/AbstractBST.kt b/trees/src/main/kotlin/bst/AbstractBST.kt index c1997d7..c33253f 100644 --- a/trees/src/main/kotlin/bst/AbstractBST.kt +++ b/trees/src/main/kotlin/bst/AbstractBST.kt @@ -7,9 +7,9 @@ abstract class AbstractBST, V, Self : BinaryNode> internal var rootNode: Self? = null - fun setName(treeName: String){ - this.treeName = treeName - } +// fun setName(treeName: String){ +// this.treeName = treeName +// } fun getRoot(): Self? = this.rootNode diff --git a/trees/src/main/kotlin/bst/db/controllers/SQLController.kt b/trees/src/main/kotlin/bst/db/controllers/SQLController.kt index ce0b714..eef946a 100644 --- a/trees/src/main/kotlin/bst/db/controllers/SQLController.kt +++ b/trees/src/main/kotlin/bst/db/controllers/SQLController.kt @@ -8,10 +8,8 @@ import bst.db.models.sql.Trees import bst.db.serializeClasses.SerializableNode import bst.db.serializeClasses.SerializableTree import bst.nodes.BSTNode -import org.jetbrains.exposed.sql.Database -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.StdOutSqlLogger -import org.jetbrains.exposed.sql.addLogger +import org.jetbrains.exposed.exceptions.ExposedSQLException +import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.transactions.transaction class SQLController : Controller, BSTree> { @@ -26,8 +24,13 @@ class SQLController : Controller, BSTree> { override fun removeTree(treeName: String) { transaction { - val treeEntity = Tree.find { (Trees.name eq treeName) }.firstOrNull() - treeEntity?.delete() + try{ + Tree.find { (Trees.name eq treeName) } + .firstOrNull()?.delete() + } + catch (e: ExposedSQLException){ + println("Tree does not exists") + } } } @@ -145,4 +148,16 @@ class SQLController : Controller, BSTree> { } return deserializeTree(deserializedTree) } + fun getAllTrees(): List { + val notes = mutableListOf() + connectDB() + transaction { + Trees.selectAll().forEach { + val name = it[Trees.name] + notes.add(name) + } + } + + return notes + } }