From d97f3e76ddfa85d1faf79e41df65fcbdecf30c65 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 14:58:15 +0200 Subject: [PATCH 1/9] Added persist method for estates Signed-off-by: Jim Martens --- 02/src/de/dis2017/Main.java | 2 +- 02/src/de/dis2017/data/db/ORM.java | 121 +++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+), 1 deletion(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index 3b77599..be7993f 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -292,7 +292,7 @@ public class Main { house.setGarden(input.equals("Y") || input.equals("y")); } - //_orm.persist(estate); + _orm.persist(estate); System.out.println("------------------"); System.out.println("Estate with the ID " + estate.getId() + " was modified."); diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index d060e0f..ff6e0b0 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -413,4 +413,125 @@ public class ORM { _agentsUsername.put(agent.getLogin(), agent); } } + + /** + * Persists the given estate. + * + * @param estate the estate that should be persisted + */ + public void persist(Estate estate) + { + boolean changeFinished = false; + try { + _connection.setAutoCommit(false); + if (estate.getId() == -1) { + String insertSQL = "INSERT INTO ESTATE (city, postalCode, street, streetNumber, squareArea, agent) " + + "VALUES (?, ?, ?, ?, ?, ?)"; + PreparedStatement pstmt = _connection.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS); + pstmt.setString(1, estate.getCity()); + pstmt.setString(2, estate.getPostalCode()); + pstmt.setString(3, estate.getStreet()); + pstmt.setInt(4, estate.getStreetNumber()); + pstmt.setInt(5, estate.getSquareArea()); + pstmt.setInt(6, estate.getAgent()); + pstmt.executeUpdate(); + + ResultSet rs = pstmt.getGeneratedKeys(); + if (rs.next()) { + estate.setId(rs.getInt(1)); + } + rs.close(); + pstmt.close(); + + if (estate instanceof House) { + House house = (House) estate; + String insertSQLHouse = "INSERT INTO HOUSE (ID, price, garden, floors) VALUES (?, ?, ?, ?)"; + PreparedStatement pstmtHouse = _connection.prepareStatement(insertSQLHouse); + pstmtHouse.setInt(1, house.getId()); + pstmtHouse.setInt(2, house.getPrice()); + pstmtHouse.setInt(3, house.hasGarden() ? 1 : 0); + pstmtHouse.setInt(4, house.getFloors()); + pstmt.executeUpdate(); + pstmtHouse.executeUpdate(); + pstmt.close(); + pstmtHouse.close(); + changeFinished = true; + } + else if (estate instanceof Apartment) { + Apartment apartment = (Apartment) estate; + String insertSQLApartment = "INSERT INTO APARTMENT (ID, floor, rent, rooms, balcony, builtInKitchen) " + + "VALUES (?, ?, ?, ?, ?, ?)"; + PreparedStatement pstmtApartment = _connection.prepareStatement(insertSQLApartment); + pstmtApartment.setInt(1, apartment.getId()); + pstmtApartment.setInt(2, apartment.getFloor()); + pstmtApartment.setInt(3, apartment.getRent()); + pstmtApartment.setInt(4, apartment.getRooms()); + pstmtApartment.setInt(5, apartment.hasBalcony() ? 1 : 0); + pstmtApartment.setInt(6, apartment.hasBuiltinKitchen() ? 1 : 0); + pstmt.executeUpdate(); + pstmtApartment.executeUpdate(); + pstmt.close(); + pstmtApartment.close(); + changeFinished = true; + } + } else { + // create query + String updateSQL = "UPDATE ESTATE SET city = ?, postalCode = ?, street = ?, streetNumber = ?, " + + "squareArea = ?, agent = ? WHERE ID = ?"; + PreparedStatement pstmt = _connection.prepareStatement(updateSQL); + pstmt.setString(1, estate.getCity()); + pstmt.setString(2, estate.getPostalCode()); + pstmt.setString(3, estate.getStreet()); + pstmt.setInt(4, estate.getStreetNumber()); + pstmt.setInt(5, estate.getSquareArea()); + pstmt.setInt(6, estate.getAgent()); + + if (estate instanceof House) { + House house = (House) estate; + String updateSQLHouse = "UPDATE HOUSE SET floors = ?, garden = ?, price = ? WHERE ID = ?"; + PreparedStatement pstmtHouse = _connection.prepareStatement(updateSQLHouse); + pstmtHouse.setInt(1, house.getFloors()); + pstmtHouse.setInt(2, house.hasGarden() ? 1 : 0); + pstmtHouse.setInt(3, house.getPrice()); + pstmtHouse.setInt(4, house.getId()); + pstmt.executeUpdate(); + pstmtHouse.executeUpdate(); + pstmt.close(); + pstmtHouse.close(); + changeFinished = true; + } + else if (estate instanceof Apartment) { + Apartment apartment = (Apartment) estate; + String updateSQLApartment = "UPDATE APARTMENT SET floor = ?, rent = ?, rooms = ?, " + + "balcony = ?, builtInKitchen = ? WHERE ID = ?"; + PreparedStatement pstmtApartment = _connection.prepareStatement(updateSQLApartment); + pstmtApartment.setInt(1, apartment.getFloor()); + pstmtApartment.setInt(2, apartment.getRent()); + pstmtApartment.setInt(3, apartment.getRooms()); + pstmtApartment.setInt(4, apartment.hasBalcony() ? 1 : 0); + pstmtApartment.setInt(5, apartment.hasBuiltinKitchen() ? 1 : 0); + pstmtApartment.setInt(6, apartment.getId()); + pstmt.executeUpdate(); + pstmtApartment.executeUpdate(); + pstmt.close(); + pstmtApartment.close(); + changeFinished = true; + } + } + if (changeFinished) { + _connection.commit(); + if (!_estates.containsKey(estate.getId())) { + _estates.put(estate.getId(), estate); + } + } + _connection.setAutoCommit(true); + } catch (SQLException e) { + try { + _connection.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } + } } From f400ce9eb21070af230990366a50d567557f3b29 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 15:04:32 +0200 Subject: [PATCH 2/9] Added batch script to start application via true CLI on Windows Signed-off-by: Jim Martens --- 02/cli.bat | 1 + 1 file changed, 1 insertion(+) create mode 100644 02/cli.bat diff --git a/02/cli.bat b/02/cli.bat new file mode 100644 index 0000000..3d84bce --- /dev/null +++ b/02/cli.bat @@ -0,0 +1 @@ +java -cp "out\production\DIS sheet 2:lib\db2jcc.jar:lib\db2jcc_license_cu.jar" de.dis2017.Main \ No newline at end of file From 49879b57f5d9dd1eed1be8b86c891035debe17f4 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 15:07:54 +0200 Subject: [PATCH 3/9] Added protected cast Signed-off-by: Jim Martens --- 02/src/de/dis2017/Main.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index be7993f..b99ad18 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -267,7 +267,7 @@ public class Main { estate.setCity(FormUtil.readString("City")); estate.setSquareArea(FormUtil.readInt("Square Area")); - if(estate instanceof Apartment){ + if (estate instanceof Apartment) { Apartment apartment = (Apartment) estate; apartment.setFloor(FormUtil.readInt("Floor")); apartment.setRent(FormUtil.readInt("Rent")); @@ -277,8 +277,8 @@ public class Main { input = FormUtil.readString("Built-in Kitchen(Y/N)"); apartment.setBuiltinKitchen(input.equals("Y") || input.equals("y")); } - else{ - House house = (House)estate; + else if (estate instanceof House){ + House house = (House) estate; estate.setCity(FormUtil.readString("Name")); estate.setPostalCode(FormUtil.readString("Postal Code")); From a41ebd235f34a04bb14c94a9fbe874c4a9054f3e Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 15:12:49 +0200 Subject: [PATCH 4/9] Prevented casting problems Signed-off-by: Jim Martens --- 02/src/de/dis2017/data/db/ORM.java | 1 - 1 file changed, 1 deletion(-) diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index ff6e0b0..1ce5bd8 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -85,7 +85,6 @@ public class ORM { estate.setSquareArea(rs.getInt("squareArea")); estate.setAgent(rs.getInt("agent")); - _estates.put(estate.getId(), estate); estates.add(estate); } From b862fad10340b56b27ecc6a70af04b93c54b27d5 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 15:13:00 +0200 Subject: [PATCH 5/9] Removed obsolete code Signed-off-by: Jim Martens --- 02/src/de/dis2017/Main.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index b99ad18..07e4584 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -279,13 +279,6 @@ public class Main { } else if (estate instanceof House){ House house = (House) estate; - - estate.setCity(FormUtil.readString("Name")); - estate.setPostalCode(FormUtil.readString("Postal Code")); - estate.setStreet(FormUtil.readString("Street")); - estate.setStreetNumber(FormUtil.readInt("Street Number")); - estate.setSquareArea(FormUtil.readInt("Square Area")); - house.setFloors(FormUtil.readInt("Floors")); house.setPrice(FormUtil.readInt("Price")); String input = FormUtil.readString("Garden(Y/N)"); From a124303c7f5280392953e3de92f012bf75182861 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 15:14:20 +0200 Subject: [PATCH 6/9] Agent detail is now shown in estate details Signed-off-by: Jim Martens --- 02/src/de/dis2017/Main.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index 07e4584..f93daae 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -235,6 +235,8 @@ public class Main { System.out.println("PostalCode: " + estate.getPostalCode()); System.out.println("City: " + estate.getCity()); System.out.println("SquareArea: " + estate.getSquareArea()); + EstateAgent agent = _orm.getAgent(estate.getAgent()); + System.out.println("Agent: " + agent.getName()); if (estate instanceof House) { House house = (House) estate; System.out.println("Price: " + house.getPrice()); From 582df275b98cbc8402f2dfa4937bc550bcfe8c59 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 15:24:43 +0200 Subject: [PATCH 7/9] Added missing parameter Signed-off-by: Jim Martens --- 02/src/de/dis2017/data/db/ORM.java | 1 + 1 file changed, 1 insertion(+) diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index 1ce5bd8..b9348c2 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -484,6 +484,7 @@ public class ORM { pstmt.setInt(4, estate.getStreetNumber()); pstmt.setInt(5, estate.getSquareArea()); pstmt.setInt(6, estate.getAgent()); + pstmt.setInt(7, estate.getId()); if (estate instanceof House) { House house = (House) estate; From 2b92772f04b5bdbaf38fcb41595f1c1756ae9d9d Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 15:25:56 +0200 Subject: [PATCH 8/9] Added ability to modify the agent of an estate Signed-off-by: Jim Martens --- 02/src/de/dis2017/Main.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index f93daae..2c67875 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -124,6 +124,8 @@ public class Main { * Creates a new estate agent after the usesr has entered the necessary data. */ private static void newEstate() { + printListOfAgents(); + String input = FormUtil.readString("Apartment(A)/House(H)"); boolean isApartment = input.equals("A") || input.equals("a"); Estate estate = new Estate(); @@ -132,6 +134,7 @@ public class Main { estate.setPostalCode(FormUtil.readString("Postal Code")); estate.setCity(FormUtil.readString("City")); estate.setSquareArea(FormUtil.readInt("Square Area")); + estate.setAgent(FormUtil.readInt("EstateAgent ID")); if(isApartment){ Apartment apartment = (Apartment) estate; apartment.setFloor(FormUtil.readInt("Floor")); @@ -254,6 +257,21 @@ public class Main { System.out.println("------------------"); } + /** + * Print a list of agents. + */ + private static void printListOfAgents() { + List agents = _orm.getAll(Type.ESTATEAGENT); + System.out.println("List of EstateAgents"); + System.out.println("------------------"); + + for (Object o : agents) { + EstateAgent agent = (EstateAgent) o; + System.out.println("ID: " + agent.getId() + ", Name: " + agent.getName()); + } + System.out.println("------------------"); + } + /** * Modify estate. * @@ -262,12 +280,14 @@ public class Main { private static void modifyEstate(Estate estate) { System.out.println("Modify Estate"); printEstateDetails(estate); + printListOfAgents(); estate.setStreet(FormUtil.readString("Street")); estate.setStreetNumber(FormUtil.readInt("Street Number")); estate.setPostalCode(FormUtil.readString("Postal Code")); estate.setCity(FormUtil.readString("City")); estate.setSquareArea(FormUtil.readInt("Square Area")); + estate.setAgent(FormUtil.readInt("EstateAgent ID")); if (estate instanceof Apartment) { Apartment apartment = (Apartment) estate; From cc50f64d861f8727d34b8246fca5a73ca8b1dde0 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 19 Apr 2017 15:28:42 +0200 Subject: [PATCH 9/9] Unified order of form items Signed-off-by: Jim Martens --- 02/src/de/dis2017/Main.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index 2c67875..6464f81 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -138,8 +138,8 @@ public class Main { if(isApartment){ Apartment apartment = (Apartment) estate; apartment.setFloor(FormUtil.readInt("Floor")); - apartment.setRent(FormUtil.readInt("Rent")); apartment.setRooms(FormUtil.readInt("Rooms")); + apartment.setRent(FormUtil.readInt("Rent")); input = FormUtil.readString("Balcony(Y/N)"); apartment.setBalcony(input.equals("Y") || input.equals("y")); input = FormUtil.readString("Built-in Kitchen(Y/N)"); @@ -147,8 +147,8 @@ public class Main { } else{ House house = (House) estate; - house.setFloors(FormUtil.readInt("Floors")); house.setPrice(FormUtil.readInt("Price")); + house.setFloors(FormUtil.readInt("Floors")); input = FormUtil.readString("Garden(Y/N)"); house.setGarden(input.equals("Y") || input.equals("y")); } @@ -292,8 +292,8 @@ public class Main { if (estate instanceof Apartment) { Apartment apartment = (Apartment) estate; apartment.setFloor(FormUtil.readInt("Floor")); - apartment.setRent(FormUtil.readInt("Rent")); apartment.setRooms(FormUtil.readInt("Rooms")); + apartment.setRent(FormUtil.readInt("Rent")); String input = FormUtil.readString("Balcony(Y/N)"); apartment.setBalcony(input.equals("Y") || input.equals("y")); input = FormUtil.readString("Built-in Kitchen(Y/N)"); @@ -301,8 +301,8 @@ public class Main { } else if (estate instanceof House){ House house = (House) estate; - house.setFloors(FormUtil.readInt("Floors")); house.setPrice(FormUtil.readInt("Price")); + house.setFloors(FormUtil.readInt("Floors")); String input = FormUtil.readString("Garden(Y/N)"); house.setGarden(input.equals("Y") || input.equals("y")); }