From c3ecb72d09f163b933dfa9ab7db067beeee4b766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz> Date: Mon, 9 Nov 2020 15:33:59 +0100 Subject: [PATCH] Refactoring, fix of Person visibility --- src/main/java/table_view/Person.java | 2 +- src/main/java/table_view/PersonDAO.java | 12 +++- src/main/java/table_view/TableViewSample.java | 66 ++++++++----------- 3 files changed, 37 insertions(+), 43 deletions(-) diff --git a/src/main/java/table_view/Person.java b/src/main/java/table_view/Person.java index 01f9f48..3f360d0 100644 --- a/src/main/java/table_view/Person.java +++ b/src/main/java/table_view/Person.java @@ -2,7 +2,7 @@ package table_view; import javafx.beans.property.SimpleStringProperty; -class Person { +public class Person { private final Long id; private final SimpleStringProperty firstName; diff --git a/src/main/java/table_view/PersonDAO.java b/src/main/java/table_view/PersonDAO.java index 64b7167..6dda4ec 100644 --- a/src/main/java/table_view/PersonDAO.java +++ b/src/main/java/table_view/PersonDAO.java @@ -12,6 +12,12 @@ import java.util.LinkedList; class PersonDAO implements AutoCloseable{ private static final String INSERT_SQL = "INSERT INTO person(first_name, last_name, email) values (?,?,?)"; + + private static final String SELECT_SQL = "SELECT id, first_name, last_name, email FROM person"; + + private static final String UPDATE_SQL = "UPDATE person set first_name = ?, last_name = ?, email = ? WHERE id = ?"; + + private static final String DELETE_SQL = "DELETE FROM person WHERE id = ?"; private Connection conn; @@ -61,7 +67,7 @@ class PersonDAO implements AutoCloseable{ checkConnection(); Collection<Person> result = new LinkedList<>(); try (Statement stm = conn.createStatement()){ - stm.execute("SELECT id, first_name, last_name, email FROM person"); + stm.execute(SELECT_SQL); ResultSet resultSet = stm.getResultSet(); while(resultSet.next()) { result.add(new Person(resultSet.getLong(1), resultSet.getString(2), resultSet.getString(3),resultSet.getString(4))); @@ -75,7 +81,7 @@ class PersonDAO implements AutoCloseable{ public boolean updatePerson(Person p) { checkConnection(); - try (PreparedStatement ps = conn.prepareStatement("UPDATE person set first_name = ?, last_name = ?, email = ? WHERE id = ?")){ + try (PreparedStatement ps = conn.prepareStatement(UPDATE_SQL)){ ps.setString(1, p.getFirstName()); ps.setString(2, p.getLastName()); ps.setString(3, p.getEmail()); @@ -90,7 +96,7 @@ class PersonDAO implements AutoCloseable{ public boolean deletePerson(Person p) { checkConnection(); - try (PreparedStatement ps = conn.prepareStatement("DELETE FROM person WHERE id = ?")){ + try (PreparedStatement ps = conn.prepareStatement(DELETE_SQL)){ ps.setLong(1, p.getId()); ps.executeUpdate(); return true; diff --git a/src/main/java/table_view/TableViewSample.java b/src/main/java/table_view/TableViewSample.java index e6a8068..8950e2f 100644 --- a/src/main/java/table_view/TableViewSample.java +++ b/src/main/java/table_view/TableViewSample.java @@ -4,6 +4,7 @@ import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; +import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; @@ -23,9 +24,9 @@ import javafx.stage.WindowEvent; public class TableViewSample extends Application { - private TableView<Person> table = new TableView<Person>(); - - private final PersonDAO dao; + private final PersonDAO dao; + + private TableView<Person> table = new TableView<>(); private final ObservableList<Person> data; @@ -55,42 +56,17 @@ public class TableViewSample extends Application { label.setFont(new Font("Arial", 20)); table.setEditable(true); - - TableColumn<Person,String> firstNameCol = new TableColumn<>("First Name"); - firstNameCol.setMinWidth(100); - firstNameCol.setCellValueFactory( - new PropertyValueFactory<Person, String>("firstName")); - firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn()); - firstNameCol.setOnEditCommit(this::handleOnEditCommitFirstName); - - TableColumn<Person,String> lastNameCol = new TableColumn<>("Last Name"); - lastNameCol.setMinWidth(100); - lastNameCol.setCellValueFactory( - new PropertyValueFactory<Person, String>("lastName")); - lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn()); - lastNameCol.setOnEditCommit(this::handleOnEditCommitLastName); - - TableColumn<Person,String> emailCol = new TableColumn<>("Email"); - emailCol.setMinWidth(200); - emailCol.setCellValueFactory( - new PropertyValueFactory<Person, String>("email")); - emailCol.setCellFactory(TextFieldTableCell.forTableColumn()); - emailCol.setOnEditCommit(this::handleOnEditCommitEmail); - table.setItems(data); + TableColumn<Person, String> firstNameCol = constructColumn("First Name","firstName", this::handleOnEditCommitFirstName); + TableColumn<Person,String> lastNameCol = constructColumn("Last Name","lastName", this::handleOnEditCommitLastName); + TableColumn<Person,String> emailCol = constructColumn("Email","email",this::handleOnEditCommitEmail); table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); - addFirstName = new TextField(); - addFirstName.setPromptText("First Name"); - addFirstName.setMaxWidth(firstNameCol.getPrefWidth()); - addLastName = new TextField(); - addLastName.setMaxWidth(lastNameCol.getPrefWidth()); - addLastName.setPromptText("Last Name"); - addEmail = new TextField(); - addEmail.setMaxWidth(emailCol.getPrefWidth()); - addEmail.setPromptText("Email"); - + + addFirstName = constructTextField(firstNameCol,"First Name"); + addLastName = constructTextField(lastNameCol,"Last Name"); + addEmail = constructTextField(emailCol,"Email"); final Button addButton = new Button("Add"); addButton.setOnAction(this::handleOnAdd); @@ -105,13 +81,25 @@ public class TableViewSample extends Application { ((Group) scene.getRoot()).getChildren().addAll(vbox); stage.setScene(scene); - fillTable(); stage.show(); stage.setOnCloseRequest(this::exitProgram); } - - private void fillTable() { - + + private TextField constructTextField(TableColumn<Person, String> column, String string) { + TextField result = new TextField(); + result.setPromptText("First Name"); + result.setMaxWidth(column.getPrefWidth()); + return result; + } + + private TableColumn<Person, String> constructColumn(String name, String propertyName, + EventHandler<CellEditEvent<Person, String>> callback) { + TableColumn<Person, String> col = new TableColumn<>(name); + col.setMinWidth(100); + col.setCellValueFactory(new PropertyValueFactory<>(propertyName)); + col.setCellFactory(TextFieldTableCell.forTableColumn()); + col.setOnEditCommit(callback); + return col; } private void handleOnAdd(ActionEvent e) { -- GitLab