From e75ebc93371ef40c364f6557646772fd9bfee097 Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Thu, 20 Apr 2017 16:15:52 +0200 Subject: [PATCH 1/9] Constructor for subclasses Added constructors to House, Apartment, TenancyContract and PurchaseContract to make a special instance from an instance of its superclass. Updatet cli.bat. Added Contract to Orm.getAll(Type) --- 02/cli.bat | 2 +- 02/src/de/dis2017/Main.java | 8 ++++---- 02/src/de/dis2017/data/Apartment.java | 14 ++++++++++++++ 02/src/de/dis2017/data/House.java | 14 ++++++++++++++ 02/src/de/dis2017/data/PurchaseContract.java | 10 ++++++++++ 02/src/de/dis2017/data/TenancyContract.java | 10 ++++++++++ 02/src/de/dis2017/data/db/ORM.java | 3 +++ 7 files changed, 56 insertions(+), 5 deletions(-) diff --git a/02/cli.bat b/02/cli.bat index 3d84bce..c46a00d 100644 --- a/02/cli.bat +++ b/02/cli.bat @@ -1 +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 +java -cp "bin/;lib/*" de.dis2017.Main \ No newline at end of file diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index d35fa9c..cdaea5a 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -154,7 +154,7 @@ public class Main { contract.setPlace(FormUtil.readString("Place")); contract.setDate(FormUtil.readString("Date")); if(estate instanceof Apartment){ - TenancyContract tenContract = (TenancyContract) contract; + TenancyContract tenContract = new TenancyContract(contract); tenContract.setStartDate(FormUtil.readString("Start Date")); tenContract.setDuration(FormUtil.readInt("Duration")); tenContract.setAdditionalCost(FormUtil.readInt("Additional Costs")); @@ -162,7 +162,7 @@ public class Main { //_orm.persist(tenContract); } else{ - PurchaseContract purContract = (PurchaseContract) contract; + PurchaseContract purContract = new PurchaseContract(contract); purContract.setNoOfInstallments(FormUtil.readInt("No of Installments")); purContract.setInterestRate(FormUtil.readInt("Interest Rate")); @@ -251,7 +251,7 @@ public class Main { estate.setSquareArea(FormUtil.readInt("Square Area")); estate.setAgent(FormUtil.readInt("EstateAgent ID")); if(isApartment){ - Apartment apartment = (Apartment) estate; + Apartment apartment = new Apartment(estate); apartment.setFloor(FormUtil.readInt("Floor")); apartment.setRooms(FormUtil.readInt("Rooms")); apartment.setRent(FormUtil.readInt("Rent")); @@ -261,7 +261,7 @@ public class Main { apartment.setBuiltinKitchen(input.equals("Y") || input.equals("y")); } else{ - House house = (House) estate; + House house = new House(estate); house.setPrice(FormUtil.readInt("Price")); house.setFloors(FormUtil.readInt("Floors")); input = FormUtil.readString("Garden(Y/N)"); diff --git a/02/src/de/dis2017/data/Apartment.java b/02/src/de/dis2017/data/Apartment.java index 1d6da7b..a2ca3f1 100644 --- a/02/src/de/dis2017/data/Apartment.java +++ b/02/src/de/dis2017/data/Apartment.java @@ -7,6 +7,20 @@ public class Apartment extends Estate{ private boolean balcony; private boolean builtinKitchen; + public Apartment(){ + super(); + } + + public Apartment(Estate estate){ + this.setId(estate.getId()); + this.setCity(estate.getCity()); + this.setPostalCode(estate.getPostalCode()); + this.setStreet(estate.getStreet()); + this.setStreetNumber(estate.getStreetNumber()); + this.setSquareArea(estate.getSquareArea()); + this.setAgent(estate.getAgent()); + } + public int getFloor() { return floor; } diff --git a/02/src/de/dis2017/data/House.java b/02/src/de/dis2017/data/House.java index 59265ea..44e3e00 100644 --- a/02/src/de/dis2017/data/House.java +++ b/02/src/de/dis2017/data/House.java @@ -5,6 +5,20 @@ public class House extends Estate { private int price; private boolean garden; + public House(){ + super(); + } + + public House(Estate estate){ + this.setId(estate.getId()); + this.setCity(estate.getCity()); + this.setPostalCode(estate.getPostalCode()); + this.setStreet(estate.getStreet()); + this.setStreetNumber(estate.getStreetNumber()); + this.setSquareArea(estate.getSquareArea()); + this.setAgent(estate.getAgent()); + } + public int getFloors() { return floors; } diff --git a/02/src/de/dis2017/data/PurchaseContract.java b/02/src/de/dis2017/data/PurchaseContract.java index d71b723..534dbb5 100644 --- a/02/src/de/dis2017/data/PurchaseContract.java +++ b/02/src/de/dis2017/data/PurchaseContract.java @@ -6,6 +6,16 @@ public class PurchaseContract extends Contract { private int house; + public PurchaseContract(){ + super(); + } + public PurchaseContract(Contract contract){ + this.setContractNo(contract.getContractNo()); + this.setDate(contract.getDate()); + this.setPlace(contract.getPlace()); + this.setPerson(contract.getPerson()); + } + public int getNoOfInstallments() { return noOfInstallments; } diff --git a/02/src/de/dis2017/data/TenancyContract.java b/02/src/de/dis2017/data/TenancyContract.java index 5e1d22a..f1eda43 100644 --- a/02/src/de/dis2017/data/TenancyContract.java +++ b/02/src/de/dis2017/data/TenancyContract.java @@ -9,6 +9,16 @@ public class TenancyContract extends Contract { private int apartment; + public TenancyContract(){ + super(); + } + public TenancyContract(Contract contract){ + this.setContractNo(contract.getContractNo()); + this.setDate(contract.getDate()); + this.setPlace(contract.getPlace()); + this.setPerson(contract.getPerson()); + } + public String getStartDate() { return startDate; } diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index b9348c2..f054785 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -55,6 +55,9 @@ public class ORM { case ESTATE: objects = processEstates(rs); break; + case CONTRACT: + objects = processEstates(rs); + break; } rs.close(); pstmt.close(); From 797742c0dc5fffb0adc7e5644ccf2bcfaf8cfa5a Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Thu, 20 Apr 2017 16:46:38 +0200 Subject: [PATCH 2/9] Improved Interace for creating Contracts Improved Interace for creating Contracts Added Person to Type and getAll function. Added functions to print a List of Estates and Persons. --- 02/src/de/dis2017/Main.java | 52 ++++++++++++------ 02/src/de/dis2017/data/Contract.java | 8 +++ 02/src/de/dis2017/data/Person.java | 8 +++ 02/src/de/dis2017/data/PurchaseContract.java | 6 +- 02/src/de/dis2017/data/TenancyContract.java | 6 +- 02/src/de/dis2017/data/db/ORM.java | 58 +++++++++++++++++++- 02/src/de/dis2017/data/db/Type.java | 3 +- 7 files changed, 115 insertions(+), 26 deletions(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index cdaea5a..723ce06 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -116,20 +116,8 @@ public class Main { for (Object o : contracts) { Contract contract = (Contract) o; - if(contract instanceof TenancyContract){ - TenancyContract tenContract = (TenancyContract) contract; - listContracts.addEntry("Contract No: " + tenContract.getContractNo() + " Place: "+tenContract.getPlace() - + "Date: "+tenContract.getDate()+" Start Date: "+tenContract.getStartDate() - +" Duration: "+tenContract.getDuration()+" Additional Costs: "+tenContract.getAdditionalCost() - ,tenContract.getContractNo()); - } - else{ - PurchaseContract purContract = (PurchaseContract) contract; - listContracts.addEntry("Contract No: " + purContract.getContractNo() + " Place: "+purContract.getPlace() - + "Date: "+purContract.getDate()+" No of Installments: "+purContract.getNoOfInstallments() - +" Interest Rate: "+purContract.getInterestRate() - ,purContract.getContractNo()); - } + listContracts.addEntry("Contract No: " + contract.getContractNo() + " Place: "+contract.getPlace() + + "Date: "+contract.getDate(),contract.getContractNo()); } listContracts.addEntry("Back to the Contract management menu", BACK); @@ -149,11 +137,14 @@ public class Main { private static void newContract() { Contract contract = new Contract(); //choose Estate from List - Estate estate = new Estate(); + printListOfEstates(); + contract.setEstate(FormUtil.readInt("Estate")); //choose Person from List + printListOfPersons(); + contract.setPerson(FormUtil.readInt("Person")); contract.setPlace(FormUtil.readString("Place")); contract.setDate(FormUtil.readString("Date")); - if(estate instanceof Apartment){ + if(_orm.isApartment(contract.getEstate())){ TenancyContract tenContract = new TenancyContract(contract); tenContract.setStartDate(FormUtil.readString("Start Date")); tenContract.setDuration(FormUtil.readInt("Duration")); @@ -372,6 +363,35 @@ public class Main { System.out.println("------------------"); } + /** + * Print a list of persons. + */ + private static void printListOfPersons() { + List agents = _orm.getAll(Type.PERSON); + System.out.println("List of Persons"); + System.out.println("------------------"); + + for (Object o : agents) { + Person person = (Person) o; + System.out.println("Name: " + person.getFirstName()+" "+person.getName() +", Address: " + person.getAddress()); + } + System.out.println("------------------"); + } + /** + * Print a list of estates. + */ + private static void printListOfEstates() { + List agents = _orm.getAll(Type.ESTATE); + System.out.println("List of Estates"); + System.out.println("------------------"); + + for (Object o : agents) { + Estate estate = (Estate) o; + System.out.println("ID: " + estate.getId() + ", Address: " + estate.getStreet()+" "+estate.getStreetNumber()+", "+estate.getCity()); + } + System.out.println("------------------"); + } + /** * Print a list of agents. */ diff --git a/02/src/de/dis2017/data/Contract.java b/02/src/de/dis2017/data/Contract.java index 2667afe..d98389f 100644 --- a/02/src/de/dis2017/data/Contract.java +++ b/02/src/de/dis2017/data/Contract.java @@ -9,7 +9,15 @@ public class Contract { private String date; private String place; private int person; + private int estate; + + public int getEstate() { + return estate; + } + public void setEstate(int estate) { + this.estate = estate; + } public int getContractNo() { return contractNo; } diff --git a/02/src/de/dis2017/data/Person.java b/02/src/de/dis2017/data/Person.java index f0f14c6..cbd4783 100644 --- a/02/src/de/dis2017/data/Person.java +++ b/02/src/de/dis2017/data/Person.java @@ -4,7 +4,15 @@ public class Person { private String firstName; private String name; private String address; + private int id; + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } public String getFirstName() { return firstName; } diff --git a/02/src/de/dis2017/data/PurchaseContract.java b/02/src/de/dis2017/data/PurchaseContract.java index 534dbb5..88df887 100644 --- a/02/src/de/dis2017/data/PurchaseContract.java +++ b/02/src/de/dis2017/data/PurchaseContract.java @@ -3,8 +3,6 @@ package de.dis2017.data; public class PurchaseContract extends Contract { private int noOfInstallments; private int interestRate; - - private int house; public PurchaseContract(){ super(); @@ -33,11 +31,11 @@ public class PurchaseContract extends Contract { } public int getHouse() { - return house; + return super.getEstate(); } public void setHouse(int house) { - this.house = house; + super.setEstate(house); } diff --git a/02/src/de/dis2017/data/TenancyContract.java b/02/src/de/dis2017/data/TenancyContract.java index f1eda43..b0566fa 100644 --- a/02/src/de/dis2017/data/TenancyContract.java +++ b/02/src/de/dis2017/data/TenancyContract.java @@ -6,8 +6,6 @@ public class TenancyContract extends Contract { private String startDate; private int duration; private int additionalCost; - - private int apartment; public TenancyContract(){ super(); @@ -44,11 +42,11 @@ public class TenancyContract extends Contract { } public int getApartment() { - return apartment; + return super.getEstate(); } public void setApartment(int apartment) { - this.apartment = apartment; + super.setEstate(apartment); } diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index f054785..2c742f7 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -1,9 +1,12 @@ package de.dis2017.data.db; import de.dis2017.data.Apartment; +import de.dis2017.data.Contract; import de.dis2017.data.Estate; import de.dis2017.data.EstateAgent; import de.dis2017.data.House; +import de.dis2017.data.Person; + import org.jetbrains.annotations.Nullable; import java.sql.*; @@ -56,7 +59,10 @@ public class ORM { objects = processEstates(rs); break; case CONTRACT: - objects = processEstates(rs); + objects = processContracts(rs); + break; + case PERSON: + objects = processPersons(rs); break; } rs.close(); @@ -68,6 +74,51 @@ public class ORM { return objects; } + /** + * Process a select all query for contracts. + * + * @param rs the result set of such a query + * @return a list of estates + * @throws SQLException when an error occurs during the rs.next call + */ + private List processContracts(ResultSet rs) throws SQLException { + List contracts = new ArrayList<>(); + + while (rs.next()) { + Contract contract = new Contract(); + contract.setContractNo(rs.getInt("CONTRACTNUMBER")); + contract.setDate(rs.getDate("DATE").toString()); + contract.setPlace(rs.getString("PLACE")); + + contracts.add(contract); + } + + return contracts; + } + + /** + * Process a select all query for persons. + * + * @param rs the result set of such a query + * @return a list of estates + * @throws SQLException when an error occurs during the rs.next call + */ + private List processPersons(ResultSet rs) throws SQLException { + List persons = new ArrayList<>(); + + while (rs.next()) { + Person person = new Person(); + person.setId(rs.getInt("ID")); + person.setFirstName(rs.getString("FirstName")); + person.setFirstName(rs.getString("Name")); + person.setName(rs.getString("Address")); + + persons.add(person); + } + + return persons; + } + /** * Process a select all query for estates. * @@ -537,4 +588,9 @@ public class ORM { e.printStackTrace(); } } + + public boolean isApartment(int estateID){ + //TODO check in the DB if the Estate with the ID is an Apartment then return true. If it is a house return false. + return true; + } } diff --git a/02/src/de/dis2017/data/db/Type.java b/02/src/de/dis2017/data/db/Type.java index e748570..8bd893c 100644 --- a/02/src/de/dis2017/data/db/Type.java +++ b/02/src/de/dis2017/data/db/Type.java @@ -7,5 +7,6 @@ package de.dis2017.data.db; public enum Type { ESTATEAGENT, ESTATE, - CONTRACT; + CONTRACT, + PERSON; } From 799d2ab0febdf05c07bcad5ece435d9e254e0f67 Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Thu, 20 Apr 2017 16:48:23 +0200 Subject: [PATCH 3/9] Added ID to output from printListOfPersons() Added ID to output from printListOfPersons() --- 02/src/de/dis2017/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index 723ce06..5025438 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -373,7 +373,7 @@ public class Main { for (Object o : agents) { Person person = (Person) o; - System.out.println("Name: " + person.getFirstName()+" "+person.getName() +", Address: " + person.getAddress()); + System.out.println("ID: "+person.getId()+" Name: " + person.getFirstName()+" "+person.getName() +", Address: " + person.getAddress()); } System.out.println("------------------"); } From d2d02b859e117c38b8986cbb8c0bd3bc4f049e20 Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Thu, 20 Apr 2017 16:53:46 +0200 Subject: [PATCH 4/9] Added missing functions (TODO) Added missing functions without functionalities which need to be implemented: persist(Person) persist(Contract) isApartment(EstateID) --- 02/src/de/dis2017/data/db/ORM.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index 2c742f7..22600db 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -589,6 +589,30 @@ public class ORM { } } + /** + * Persists the given person. + * + * @param person the person that should be persisted + */ + public void persist(Person person) + { + //TODO + } + /** + * Persists the given contract. + * + * @param contract the contract that should be persisted + */ + public void persist(Contract contract) + { + //TODO + } + + /** + * Checks is the Estate is an Apartment or House + * @param estateID ID from the estate that should be checked + * @return true if apartment, false if house + */ public boolean isApartment(int estateID){ //TODO check in the DB if the Estate with the ID is an Apartment then return true. If it is a house return false. return true; From 5de082b7f5155644ced77385ca50554ed9621f8f Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Sat, 22 Apr 2017 12:11:22 +0200 Subject: [PATCH 5/9] Implementation of persist(Person) Implementation of persist(Person) --- 02/src/de/dis2017/data/db/ORM.java | 48 +++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index 22600db..e67847d 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -24,6 +24,7 @@ public class ORM { private Map _agents; private Map _agentsUsername; private Map _estates; + private Map _persons; /** * Initializes the ORM. @@ -596,7 +597,52 @@ public class ORM { */ public void persist(Person person) { - //TODO + boolean changeFinished = false; + try { + _connection.setAutoCommit(false); + if (person.getId() == -1) { + String insertSQL = "INSERT INTO PERSON (firstname, name, address) " + + "VALUES (?, ?, ?)"; + PreparedStatement pstmt = _connection.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS); + pstmt.setString(1, person.getFirstName()); + pstmt.setString(2, person.getName()); + pstmt.setString(3, person.getAddress()); + pstmt.executeUpdate(); + + ResultSet rs = pstmt.getGeneratedKeys(); + if (rs.next()) { + person.setId(rs.getInt(1)); + } + rs.close(); + pstmt.close(); + changeFinished = true; + } else { + // create query + String updateSQL = "UPDATE PERSON SET firstname = ?, name = ?, address = ? WHERE ID = ?"; + PreparedStatement pstmt = _connection.prepareStatement(updateSQL); + pstmt.setString(1, person.getFirstName()); + pstmt.setString(2, person.getName()); + pstmt.setString(3, person.getAddress()); + pstmt.setInt(4, person.getId()); + pstmt.executeUpdate(); + pstmt.close(); + changeFinished = true; + } + if (changeFinished) { + _connection.commit(); + if (!_persons.containsKey(person.getId())) { + _persons.put(person.getId(), person); + } + } + _connection.setAutoCommit(true); + } catch (SQLException e) { + try { + _connection.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } } /** * Persists the given contract. From 51515673860585fd47519bb160b914b8778af78d Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Sat, 22 Apr 2017 12:43:24 +0200 Subject: [PATCH 6/9] Bugfixes for persist(Person) and isApartment() Bugfixes for persist(Person) and isApartment() --- 02/src/de/dis2017/Main.java | 2 +- 02/src/de/dis2017/data/Person.java | 2 +- 02/src/de/dis2017/data/db/ORM.java | 30 ++++++++++++++++++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index 5025438..c040c6f 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -167,7 +167,7 @@ public class Main { person.setName(FormUtil.readString("Name")); person.setAddress(FormUtil.readString("Address")); - //_orm.persist(person); + _orm.persist(person); System.out.println("Person with the Name " + person.getFirstName() +" "+person.getName() + " was created."); } diff --git a/02/src/de/dis2017/data/Person.java b/02/src/de/dis2017/data/Person.java index cbd4783..560e142 100644 --- a/02/src/de/dis2017/data/Person.java +++ b/02/src/de/dis2017/data/Person.java @@ -4,7 +4,7 @@ public class Person { private String firstName; private String name; private String address; - private int id; + private int id=-1; public int getId() { diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index e67847d..1d0bf85 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -25,6 +25,7 @@ public class ORM { private Map _agentsUsername; private Map _estates; private Map _persons; + private Map _contracts; /** * Initializes the ORM. @@ -35,6 +36,8 @@ public class ORM { _agents = new HashMap<>(); _agentsUsername = new HashMap<>(); _estates = new HashMap<>(); + _persons = new HashMap<>(); + _contracts = new HashMap<>(); } /** @@ -597,6 +600,7 @@ public class ORM { */ public void persist(Person person) { + System.out.println(person.getId()); boolean changeFinished = false; try { _connection.setAutoCommit(false); @@ -660,7 +664,29 @@ public class ORM { * @return true if apartment, false if house */ public boolean isApartment(int estateID){ - //TODO check in the DB if the Estate with the ID is an Apartment then return true. If it is a house return false. - return true; + if(_estates.containsKey(estateID) && _estates.get(estateID) instanceof Apartment) + return true; + + boolean isApartment = false; + try { + _connection.setAutoCommit(false); + String insertSQL = "SELECT ID FROM INTO APARTMENT WHERE ID=?"; + PreparedStatement pstmt = _connection.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS); + pstmt.setInt(1, estateID); + ResultSet result = pstmt.executeQuery(); + if(result.first())isApartment=true; + result.close(); + pstmt.close(); + + _connection.setAutoCommit(true); + } catch (SQLException e) { + try { + _connection.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } + return isApartment; } } From 82c8df3e5cc6ad6939cdf76baffe6d2cd3aa4584 Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Sat, 22 Apr 2017 13:13:04 +0200 Subject: [PATCH 7/9] Implementation of persist(Contract) Added the implementaion of persist(Contract) Changed 2 types of variables of TenancyContract to Timestamp Updated Interface for Timestamp input --- 02/src/de/dis2017/Main.java | 13 ++- 02/src/de/dis2017/data/TenancyContract.java | 13 +-- 02/src/de/dis2017/data/db/ORM.java | 100 +++++++++++++++++++- 3 files changed, 115 insertions(+), 11 deletions(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index c040c6f..19dd5c9 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -11,6 +11,7 @@ import de.dis2017.data.TenancyContract; import de.dis2017.data.db.ORM; import de.dis2017.data.db.Type; +import java.sql.Timestamp; import java.util.List; /** @@ -146,18 +147,22 @@ public class Main { contract.setDate(FormUtil.readString("Date")); if(_orm.isApartment(contract.getEstate())){ TenancyContract tenContract = new TenancyContract(contract); - tenContract.setStartDate(FormUtil.readString("Start Date")); - tenContract.setDuration(FormUtil.readInt("Duration")); + System.out.println("Start Date:"); + Timestamp startDate = Timestamp.valueOf(FormUtil.readInt("Year")+"-"+FormUtil.readInt("Month")+"-"+FormUtil.readInt("Day")); + tenContract.setStartDate(startDate); + System.out.println("Duration:"); + Timestamp duration = Timestamp.valueOf(FormUtil.readInt("Year")+"-"+FormUtil.readInt("Month")+"-"+FormUtil.readInt("Day")); + tenContract.setDuration(duration); tenContract.setAdditionalCost(FormUtil.readInt("Additional Costs")); - //_orm.persist(tenContract); + _orm.persist(tenContract); } else{ PurchaseContract purContract = new PurchaseContract(contract); purContract.setNoOfInstallments(FormUtil.readInt("No of Installments")); purContract.setInterestRate(FormUtil.readInt("Interest Rate")); - //_orm.persist(purContract); + _orm.persist(purContract); } } diff --git a/02/src/de/dis2017/data/TenancyContract.java b/02/src/de/dis2017/data/TenancyContract.java index b0566fa..550d0b2 100644 --- a/02/src/de/dis2017/data/TenancyContract.java +++ b/02/src/de/dis2017/data/TenancyContract.java @@ -1,10 +1,11 @@ package de.dis2017.data; +import java.sql.Timestamp; import java.util.Date; public class TenancyContract extends Contract { - private String startDate; - private int duration; + private Timestamp startDate; + private Timestamp duration; private int additionalCost; public TenancyContract(){ @@ -17,19 +18,19 @@ public class TenancyContract extends Contract { this.setPerson(contract.getPerson()); } - public String getStartDate() { + public Timestamp getStartDate() { return startDate; } - public void setStartDate(String startDate) { + public void setStartDate(Timestamp startDate) { this.startDate = startDate; } - public int getDuration() { + public Timestamp getDuration() { return duration; } - public void setDuration(int duration) { + public void setDuration(Timestamp duration) { this.duration = duration; } diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index 1d0bf85..c211d09 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -6,6 +6,8 @@ import de.dis2017.data.Estate; import de.dis2017.data.EstateAgent; import de.dis2017.data.House; import de.dis2017.data.Person; +import de.dis2017.data.PurchaseContract; +import de.dis2017.data.TenancyContract; import org.jetbrains.annotations.Nullable; @@ -655,7 +657,103 @@ public class ORM { */ public void persist(Contract contract) { - //TODO + boolean changeFinished = false; + try { + _connection.setAutoCommit(false); + if (contract.getContractNo() == -1) { + String insertSQL = "INSERT INTO CONTRACT (date, place) " + + "VALUES (?, ?)"; + PreparedStatement pstmt = _connection.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS); + pstmt.setString(1, contract.getDate()); + pstmt.setString(2, contract.getPlace()); + pstmt.executeUpdate(); + + ResultSet rs = pstmt.getGeneratedKeys(); + if (rs.next()) { + contract.setContractNo(rs.getInt(1)); + } + rs.close(); + pstmt.close(); + + if (contract instanceof TenancyContract) { + TenancyContract tenContract = (TenancyContract) contract; + String insertSQLHouse = "INSERT INTO TENANCYCONTRACT (ContractNumber, StartDate, Duration, AdditionalCosts) VALUES (?, ?, ?, ?)"; + PreparedStatement pstmtHouse = _connection.prepareStatement(insertSQLHouse); + pstmtHouse.setInt(1, tenContract.getContractNo()); + pstmtHouse.setTimestamp(2, tenContract.getStartDate()); + pstmtHouse.setTimestamp(3, tenContract.getDuration()); + pstmtHouse.setInt(4, tenContract.getAdditionalCost()); + pstmt.executeUpdate(); + pstmtHouse.executeUpdate(); + pstmt.close(); + pstmtHouse.close(); + changeFinished = true; + } + else if (contract instanceof PurchaseContract) { + PurchaseContract purContract = (PurchaseContract) contract; + String insertSQLApartment = "INSERT INTO PURCHASECONTRACT (ContractNumber, NumberOfInstallments, InterestRate) " + + "VALUES (?, ?, ?)"; + PreparedStatement pstmtApartment = _connection.prepareStatement(insertSQLApartment); + pstmtApartment.setInt(1, purContract.getContractNo()); + pstmtApartment.setInt(2, purContract.getNoOfInstallments()); + pstmtApartment.setInt(3, purContract.getInterestRate()); + pstmt.executeUpdate(); + pstmtApartment.executeUpdate(); + pstmt.close(); + pstmtApartment.close(); + changeFinished = true; + } + } else { + // create query + String updateSQL = "UPDATE CONTRACT SET date = ?, place = ? WHERE ContractNumber = ?"; + PreparedStatement pstmt = _connection.prepareStatement(updateSQL); + pstmt.setString(1, contract.getDate()); + pstmt.setString(2, contract.getPlace()); + pstmt.setInt(3, contract.getContractNo()); + + if (contract instanceof TenancyContract) { + TenancyContract tenContract = (TenancyContract) contract; + String updateSQLHouse = "UPDATE TenancyContract SET startDate = ?, duration = ?, additionalcosts = ? WHERE contractNumber = ?"; + PreparedStatement pstmtHouse = _connection.prepareStatement(updateSQLHouse); + pstmtHouse.setTimestamp(1, tenContract.getStartDate()); + pstmtHouse.setTimestamp(2, tenContract.getDuration()); + pstmtHouse.setInt(3, tenContract.getAdditionalCost()); + pstmtHouse.setInt(4, tenContract.getContractNo()); + pstmt.executeUpdate(); + pstmtHouse.executeUpdate(); + pstmt.close(); + pstmtHouse.close(); + changeFinished = true; + } + else if (contract instanceof PurchaseContract) { + PurchaseContract purContract = (PurchaseContract) contract; + String updateSQLApartment = "UPDATE PurchaseContract SET numberofinstallments = ?, interestrate = ? WHERE contractNumber = ?"; + PreparedStatement pstmtApartment = _connection.prepareStatement(updateSQLApartment); + pstmtApartment.setInt(1, purContract.getNoOfInstallments()); + pstmtApartment.setInt(2, purContract.getInterestRate()); + pstmtApartment.setInt(3, purContract.getContractNo()); + pstmt.executeUpdate(); + pstmtApartment.executeUpdate(); + pstmt.close(); + pstmtApartment.close(); + changeFinished = true; + } + } + if (changeFinished) { + _connection.commit(); + if (!_contracts.containsKey(contract.getContractNo())) { + _contracts.put(contract.getContractNo(), contract); + } + } + _connection.setAutoCommit(true); + } catch (SQLException e) { + try { + _connection.rollback(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } } /** From 85010e6025d123d6351a823967a605e25382b19b Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Sat, 22 Apr 2017 13:16:57 +0200 Subject: [PATCH 8/9] Changed Contract.date from String to Date Changed Contract.date from String to Date --- 02/src/de/dis2017/Main.java | 3 ++- 02/src/de/dis2017/data/Contract.java | 8 ++++---- 02/src/de/dis2017/data/db/ORM.java | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index 19dd5c9..c69e264 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -11,6 +11,7 @@ import de.dis2017.data.TenancyContract; import de.dis2017.data.db.ORM; import de.dis2017.data.db.Type; +import java.sql.Date; import java.sql.Timestamp; import java.util.List; @@ -144,7 +145,7 @@ public class Main { printListOfPersons(); contract.setPerson(FormUtil.readInt("Person")); contract.setPlace(FormUtil.readString("Place")); - contract.setDate(FormUtil.readString("Date")); + contract.setDate(Date.valueOf(FormUtil.readString("Date"))); if(_orm.isApartment(contract.getEstate())){ TenancyContract tenContract = new TenancyContract(contract); System.out.println("Start Date:"); diff --git a/02/src/de/dis2017/data/Contract.java b/02/src/de/dis2017/data/Contract.java index d98389f..e91f981 100644 --- a/02/src/de/dis2017/data/Contract.java +++ b/02/src/de/dis2017/data/Contract.java @@ -2,11 +2,11 @@ package de.dis2017.data; /** * Contract data class */ -import java.util.Date; +import java.sql.Date; public class Contract { private int contractNo = -1; - private String date; + private Date date; private String place; private int person; private int estate; @@ -24,10 +24,10 @@ public class Contract { public void setContractNo(int contractNo) { this.contractNo = contractNo; } - public String getDate() { + public Date getDate() { return date; } - public void setDate(String date) { + public void setDate(Date date) { this.date = date; } public String getPlace() { diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index c211d09..4d2878b 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -664,7 +664,7 @@ public class ORM { String insertSQL = "INSERT INTO CONTRACT (date, place) " + "VALUES (?, ?)"; PreparedStatement pstmt = _connection.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS); - pstmt.setString(1, contract.getDate()); + pstmt.setDate(1, contract.getDate()); pstmt.setString(2, contract.getPlace()); pstmt.executeUpdate(); @@ -707,7 +707,7 @@ public class ORM { // create query String updateSQL = "UPDATE CONTRACT SET date = ?, place = ? WHERE ContractNumber = ?"; PreparedStatement pstmt = _connection.prepareStatement(updateSQL); - pstmt.setString(1, contract.getDate()); + pstmt.setDate(1, contract.getDate()); pstmt.setString(2, contract.getPlace()); pstmt.setInt(3, contract.getContractNo()); From fe37fc0dcedc61fb18ab7ca4bfae4732e0c8e0e0 Mon Sep 17 00:00:00 2001 From: Togepy95 Date: Sat, 22 Apr 2017 13:34:56 +0200 Subject: [PATCH 9/9] Bugfixes and small Interace changes Improved Interface removed Bugs from ORM.persist(Contract) and ORM.isApartment() --- 02/src/de/dis2017/Main.java | 7 +-- 02/src/de/dis2017/data/db/ORM.java | 73 ++++++++++++++---------------- 2 files changed, 39 insertions(+), 41 deletions(-) diff --git a/02/src/de/dis2017/Main.java b/02/src/de/dis2017/Main.java index c69e264..dd04a58 100644 --- a/02/src/de/dis2017/Main.java +++ b/02/src/de/dis2017/Main.java @@ -145,13 +145,14 @@ public class Main { printListOfPersons(); contract.setPerson(FormUtil.readInt("Person")); contract.setPlace(FormUtil.readString("Place")); - contract.setDate(Date.valueOf(FormUtil.readString("Date"))); + System.out.println("Please enter the date of the contract."); + contract.setDate(Date.valueOf(FormUtil.readInt("Year")+"-"+FormUtil.readInt("Month")+"-"+FormUtil.readInt("Day"))); if(_orm.isApartment(contract.getEstate())){ TenancyContract tenContract = new TenancyContract(contract); - System.out.println("Start Date:"); + System.out.println("Please enter the start date of the tenancy."); Timestamp startDate = Timestamp.valueOf(FormUtil.readInt("Year")+"-"+FormUtil.readInt("Month")+"-"+FormUtil.readInt("Day")); tenContract.setStartDate(startDate); - System.out.println("Duration:"); + System.out.println("Please enter the duration of the tenancy."); Timestamp duration = Timestamp.valueOf(FormUtil.readInt("Year")+"-"+FormUtil.readInt("Month")+"-"+FormUtil.readInt("Day")); tenContract.setDuration(duration); tenContract.setAdditionalCost(FormUtil.readInt("Additional Costs")); diff --git a/02/src/de/dis2017/data/db/ORM.java b/02/src/de/dis2017/data/db/ORM.java index 4d2878b..84ce45b 100644 --- a/02/src/de/dis2017/data/db/ORM.java +++ b/02/src/de/dis2017/data/db/ORM.java @@ -93,7 +93,7 @@ public class ORM { while (rs.next()) { Contract contract = new Contract(); contract.setContractNo(rs.getInt("CONTRACTNUMBER")); - contract.setDate(rs.getDate("DATE").toString()); + contract.setDate(rs.getDate("DATE")); contract.setPlace(rs.getString("PLACE")); contracts.add(contract); @@ -677,30 +677,26 @@ public class ORM { if (contract instanceof TenancyContract) { TenancyContract tenContract = (TenancyContract) contract; - String insertSQLHouse = "INSERT INTO TENANCYCONTRACT (ContractNumber, StartDate, Duration, AdditionalCosts) VALUES (?, ?, ?, ?)"; - PreparedStatement pstmtHouse = _connection.prepareStatement(insertSQLHouse); - pstmtHouse.setInt(1, tenContract.getContractNo()); - pstmtHouse.setTimestamp(2, tenContract.getStartDate()); - pstmtHouse.setTimestamp(3, tenContract.getDuration()); - pstmtHouse.setInt(4, tenContract.getAdditionalCost()); - pstmt.executeUpdate(); - pstmtHouse.executeUpdate(); - pstmt.close(); - pstmtHouse.close(); + String insertSQLTenancy = "INSERT INTO TENANCYCONTRACT (ContractNumber, StartDate, Duration, AdditionalCosts) VALUES (?, ?, ?, ?)"; + PreparedStatement pstmtTenancy = _connection.prepareStatement(insertSQLTenancy); + pstmtTenancy.setInt(1, tenContract.getContractNo()); + pstmtTenancy.setTimestamp(2, tenContract.getStartDate()); + pstmtTenancy.setTimestamp(3, tenContract.getDuration()); + pstmtTenancy.setInt(4, tenContract.getAdditionalCost()); + pstmtTenancy.executeUpdate(); + pstmtTenancy.close(); changeFinished = true; } else if (contract instanceof PurchaseContract) { PurchaseContract purContract = (PurchaseContract) contract; - String insertSQLApartment = "INSERT INTO PURCHASECONTRACT (ContractNumber, NumberOfInstallments, InterestRate) " + + String insertSQLPurchase = "INSERT INTO PURCHASECONTRACT (ContractNumber, NumberOfInstallments, InterestRate) " + "VALUES (?, ?, ?)"; - PreparedStatement pstmtApartment = _connection.prepareStatement(insertSQLApartment); - pstmtApartment.setInt(1, purContract.getContractNo()); - pstmtApartment.setInt(2, purContract.getNoOfInstallments()); - pstmtApartment.setInt(3, purContract.getInterestRate()); - pstmt.executeUpdate(); - pstmtApartment.executeUpdate(); - pstmt.close(); - pstmtApartment.close(); + PreparedStatement pstmtPurchase = _connection.prepareStatement(insertSQLPurchase); + pstmtPurchase.setInt(1, purContract.getContractNo()); + pstmtPurchase.setInt(2, purContract.getNoOfInstallments()); + pstmtPurchase.setInt(3, purContract.getInterestRate()); + pstmtPurchase.executeUpdate(); + pstmtPurchase.close(); changeFinished = true; } } else { @@ -713,29 +709,29 @@ public class ORM { if (contract instanceof TenancyContract) { TenancyContract tenContract = (TenancyContract) contract; - String updateSQLHouse = "UPDATE TenancyContract SET startDate = ?, duration = ?, additionalcosts = ? WHERE contractNumber = ?"; - PreparedStatement pstmtHouse = _connection.prepareStatement(updateSQLHouse); - pstmtHouse.setTimestamp(1, tenContract.getStartDate()); - pstmtHouse.setTimestamp(2, tenContract.getDuration()); - pstmtHouse.setInt(3, tenContract.getAdditionalCost()); - pstmtHouse.setInt(4, tenContract.getContractNo()); + String updateSQLTenancy = "UPDATE TenancyContract SET startDate = ?, duration = ?, additionalcosts = ? WHERE contractNumber = ?"; + PreparedStatement pstmtTenancy = _connection.prepareStatement(updateSQLTenancy); + pstmtTenancy.setTimestamp(1, tenContract.getStartDate()); + pstmtTenancy.setTimestamp(2, tenContract.getDuration()); + pstmtTenancy.setInt(3, tenContract.getAdditionalCost()); + pstmtTenancy.setInt(4, tenContract.getContractNo()); pstmt.executeUpdate(); - pstmtHouse.executeUpdate(); + pstmtTenancy.executeUpdate(); pstmt.close(); - pstmtHouse.close(); + pstmtTenancy.close(); changeFinished = true; } else if (contract instanceof PurchaseContract) { PurchaseContract purContract = (PurchaseContract) contract; - String updateSQLApartment = "UPDATE PurchaseContract SET numberofinstallments = ?, interestrate = ? WHERE contractNumber = ?"; - PreparedStatement pstmtApartment = _connection.prepareStatement(updateSQLApartment); - pstmtApartment.setInt(1, purContract.getNoOfInstallments()); - pstmtApartment.setInt(2, purContract.getInterestRate()); - pstmtApartment.setInt(3, purContract.getContractNo()); + String updateSQLPurchase = "UPDATE PurchaseContract SET numberofinstallments = ?, interestrate = ? WHERE contractNumber = ?"; + PreparedStatement pstmtPurchase = _connection.prepareStatement(updateSQLPurchase); + pstmtPurchase.setInt(1, purContract.getNoOfInstallments()); + pstmtPurchase.setInt(2, purContract.getInterestRate()); + pstmtPurchase.setInt(3, purContract.getContractNo()); pstmt.executeUpdate(); - pstmtApartment.executeUpdate(); + pstmtPurchase.executeUpdate(); pstmt.close(); - pstmtApartment.close(); + pstmtPurchase.close(); changeFinished = true; } } @@ -768,11 +764,12 @@ public class ORM { boolean isApartment = false; try { _connection.setAutoCommit(false); - String insertSQL = "SELECT ID FROM INTO APARTMENT WHERE ID=?"; + String insertSQL = "SELECT ID FROM APARTMENT WHERE ID=?"; PreparedStatement pstmt = _connection.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS); pstmt.setInt(1, estateID); - ResultSet result = pstmt.executeQuery(); - if(result.first())isApartment=true; + pstmt.executeQuery(); + ResultSet result = pstmt.getResultSet(); + if(result.next())isApartment=true; result.close(); pstmt.close();