diff --git a/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java b/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java index bda5b7ff175dac16a7559927aa7b25c923e5a4c2..ef980022c8277fc556ac07fa3c62b46e25227e04 100644 --- a/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java +++ b/src/de/deadlocker8/budgetmasterserver/main/DatabaseHandler.java @@ -87,7 +87,7 @@ public class DatabaseHandler return dateTime; } - + public DateTime getFirstRepeatingPaymentDate() { Statement stmt = null; @@ -133,11 +133,11 @@ public class DatabaseHandler } public int getRestForAllPreviousMonths(int year, int month) - { + { DateTimeFormatter formatter = DateTimeFormat.forPattern("MM.yyyy"); String dateString = String.valueOf(month) + "." + year; - DateTime currentDate = formatter.parseDateTime(dateString); - + DateTime currentDate = formatter.parseDateTime(dateString); + DateTime firstNormalPaymentDate = getFirstNormalPaymentDate(); if(firstNormalPaymentDate == null) { @@ -148,13 +148,13 @@ public class DatabaseHandler { firstRepeatingPaymentDate = currentDate; } - + DateTime firstDate = firstNormalPaymentDate; if(firstRepeatingPaymentDate.isBefore(firstNormalPaymentDate)) { firstDate = firstRepeatingPaymentDate; - } - + } + if(firstDate.isAfter(currentDate)) { return 0; @@ -163,10 +163,10 @@ public class DatabaseHandler int startYear = firstDate.getYear(); int startMonth = firstDate.getMonthOfYear(); int totalRest = 0; - + while(startYear < year || startMonth < month) { - totalRest += getRest(startYear, startMonth); + totalRest += getRest(startYear, startMonth); startMonth++; if(startMonth > 12) @@ -183,13 +183,13 @@ public class DatabaseHandler ArrayList<Payment> payments = new ArrayList<>(); payments.addAll(getPayments(year, month)); payments.addAll(getRepeatingPayments(year, month)); - + int rest = 0; for(Payment currentPayment : payments) { rest += currentPayment.getAmount(); } - + return rest; } @@ -231,16 +231,16 @@ public class DatabaseHandler return results; } - + public Category getCategory(int ID) { Statement stmt = null; - String query = "SELECT * FROM category WHERE category.ID = " + ID; + String query = "SELECT * FROM category WHERE category.ID = " + ID; Category result = null; try { stmt = connection.createStatement(); - ResultSet rs = stmt.executeQuery(query); + ResultSet rs = stmt.executeQuery(query); while(rs.next()) { int id = rs.getInt("ID"); @@ -270,7 +270,7 @@ public class DatabaseHandler return result; } - + public NormalPayment getPayment(int ID) { Statement stmt = null; @@ -326,13 +326,13 @@ public class DatabaseHandler while(rs.next()) { - int resultID = rs.getInt("ID"); + int resultID = rs.getInt("ID"); String name = rs.getString("Name"); int amount = rs.getInt("amount"); - String date = rs.getString("Date"); + String date = rs.getString("Date"); int categoryID = rs.getInt("CategoryID"); String description = rs.getString("Description"); - + results.add(new NormalPayment(resultID, amount, date, categoryID, name, description)); } } @@ -360,7 +360,8 @@ public class DatabaseHandler public ArrayList<RepeatingPaymentEntry> getRepeatingPayments(int year, int month) { Statement stmt = null; - String query = "SELECT repeating_entry.ID, repeating_entry.RepeatingPaymentID, repeating_entry.Date, repeating_payment.Name, repeating_payment.CategoryID, repeating_payment.Amount, repeating_payment.RepeatInterval, repeating_payment.RepeatEndDate, repeating_payment.RepeatMonthDay, repeating_payment.Description FROM repeating_entry, repeating_payment WHERE repeating_entry.RepeatingPaymentID = repeating_payment.ID AND YEAR(repeating_entry.Date) = " + year + " AND MONTH(repeating_entry.Date) = " + month; + String query = "SELECT repeating_entry.ID, repeating_entry.RepeatingPaymentID, repeating_entry.Date, repeating_payment.Name, repeating_payment.CategoryID, repeating_payment.Amount, repeating_payment.RepeatInterval, repeating_payment.RepeatEndDate, repeating_payment.RepeatMonthDay, repeating_payment.Description FROM repeating_entry, repeating_payment WHERE repeating_entry.RepeatingPaymentID = repeating_payment.ID AND YEAR(repeating_entry.Date) = " + + year + " AND MONTH(repeating_entry.Date) = " + month; ArrayList<RepeatingPaymentEntry> results = new ArrayList<>(); try @@ -371,17 +372,17 @@ public class DatabaseHandler while(rs.next()) { int resultID = rs.getInt("ID"); - int repeatingPaymentID = rs.getInt("repeatingPaymentID"); + int repeatingPaymentID = rs.getInt("repeatingPaymentID"); String name = rs.getString("Name"); String description = rs.getString("Description"); int amount = rs.getInt("amount"); - String date = rs.getString("Date"); + String date = rs.getString("Date"); int categoryID = rs.getInt("CategoryID"); int repeatInterval = rs.getInt("RepeatInterval"); String repeatEndDate = rs.getString("RepeatEndDate"); - int repeatMonthDay = rs.getInt("RepeatMonthDay"); - - results.add(new RepeatingPaymentEntry(resultID, repeatingPaymentID, date, amount, categoryID, name, description,repeatInterval, repeatEndDate, repeatMonthDay)); + int repeatMonthDay = rs.getInt("RepeatMonthDay"); + + results.add(new RepeatingPaymentEntry(resultID, repeatingPaymentID, date, amount, categoryID, name, description, repeatInterval, repeatEndDate, repeatMonthDay)); } } catch(SQLException e) @@ -404,9 +405,9 @@ public class DatabaseHandler return results; } - + public ArrayList<RepeatingPayment> getAllRepeatingPayments() - { + { Statement stmt = null; String query = "SELECT * FROM repeating_payment;"; @@ -418,15 +419,15 @@ public class DatabaseHandler while(rs.next()) { - int resultID = rs.getInt("ID"); + int resultID = rs.getInt("ID"); String name = rs.getString("Name"); int amount = rs.getInt("amount"); - String date = rs.getString("Date"); + String date = rs.getString("Date"); String description = rs.getString("Description"); int categoryID = rs.getInt("CategoryID"); int repeatInterval = rs.getInt("RepeatInterval"); String repeatEndDate = rs.getString("RepeatEndDate"); - int repeatMonthDay = rs.getInt("RepeatMonthDay"); + int repeatMonthDay = rs.getInt("RepeatMonthDay"); results.add(new RepeatingPayment(resultID, amount, date, categoryID, name, description, repeatInterval, repeatEndDate, repeatMonthDay)); } @@ -451,7 +452,7 @@ public class DatabaseHandler return results; } - + public ArrayList<LatestRepeatingPayment> getLatestRepeatingPaymentEntries() { Statement stmt = null; @@ -466,9 +467,9 @@ public class DatabaseHandler while(rs.next()) { int resultID = rs.getInt("ID"); - int repeatingPaymentID = rs.getInt("repeatingPaymentID"); + int repeatingPaymentID = rs.getInt("repeatingPaymentID"); String date = rs.getString("LastDate"); - + results.add(new LatestRepeatingPayment(resultID, repeatingPaymentID, date)); } } @@ -492,19 +493,19 @@ public class DatabaseHandler return results; } - + public RepeatingPayment getRepeatingPayment(int ID) { Statement stmt = null; - String query = "SELECT * FROM repeating_payment WHERE ID = " + ID; + String query = "SELECT * FROM repeating_payment WHERE ID = " + ID; RepeatingPayment result = null; try { stmt = connection.createStatement(); - ResultSet rs = stmt.executeQuery(query); + ResultSet rs = stmt.executeQuery(query); while(rs.next()) { - int id = rs.getInt("ID"); + int id = rs.getInt("ID"); int amount = rs.getInt("amount"); String date = rs.getString("Date"); int categoryID = rs.getInt("CategoryID"); @@ -568,7 +569,7 @@ public class DatabaseHandler } } } - + public void deletePayment(int ID) { Statement stmt = null; @@ -596,7 +597,7 @@ public class DatabaseHandler } } } - + public void deleteRepeatingPayment(int ID) { Statement stmt = null; @@ -624,14 +625,14 @@ public class DatabaseHandler } } } - + public void deleteDatabase() { Statement stmt = null; String tableCategory = "DROP TABLE IF EXISTS category;"; String tablePayment = "DROP TABLE IF EXISTS payment;"; String tableRepeatingPayment = "DROP TABLE IF EXISTS repeating_payment;"; - String tableRepeatingEntry= "DROP TABLE IF EXISTS repeating_entry;"; + String tableRepeatingEntry = "DROP TABLE IF EXISTS repeating_entry;"; try { stmt = connection.createStatement(); @@ -696,6 +697,35 @@ public class DatabaseHandler } } + public void importCategory(Category category) + { + Statement stmt = null; + String query = "INSERT INTO category (ID, Name, Color) VALUES('" + category.getID() + "', '" + category.getName() + "' , '" + ConvertTo.toRGBHexWithoutOpacity(category.getColor()) + "') ON DUPLICATE KEY UPDATE Name='" + category.getName() + "', Color='" + + ConvertTo.toRGBHexWithoutOpacity(category.getColor()) + "';"; + try + { + stmt = connection.createStatement(); + stmt.execute(query); + } + catch(SQLException e) + { + Logger.error(e); + } + finally + { + if(stmt != null) + { + try + { + stmt.close(); + } + catch(SQLException e) + { + } + } + } + } + public void addNormalPayment(int amount, String date, int categoryID, String name, String description) { Statement stmt = null; @@ -723,21 +753,58 @@ public class DatabaseHandler } } } - + + public void importNormalPayment(NormalPayment payment) + { + if(payment.getDescription() == null) + { + payment.setDescription(""); + } + + Statement stmt = null; + String query = "INSERT INTO payment (ID, Amount, Date, CategoryID, Name, Description) VALUES('" + payment.getID() + "', '" + payment.getAmount() + "' , '" + payment.getDate() + "' , '" + payment.getCategoryID() + "' , '" + payment.getName() + "' , '" + payment.getDescription() + "')" + + "ON DUPLICATE KEY UPDATE Amount='" + payment.getAmount() + "', Date='" + payment.getDate() + "', CategoryID='" + payment.getCategoryID() + "', Name='" + payment.getName() + "', Description='" + payment.getDescription() + "';"; + try + { + stmt = connection.createStatement(); + stmt.execute(query); + } + catch(SQLException e) + { + Logger.error(e); + } + finally + { + if(stmt != null) + { + try + { + stmt.close(); + } + catch(SQLException e) + { + } + } + } + } + public void addRepeatingPayment(int amount, String date, int categoryID, String name, String description, int repeatInterval, String repeatEndDate, int repeatMonthDay) { Statement stmt = null; - String query; - //A is placeholder for empty repeatEndDate - if(repeatEndDate.equals("A") || repeatEndDate == null) - { - query = "INSERT INTO repeating_payment (Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES('" + amount + "' , '" + date + "' , '" + categoryID + "' , '" + name + "' , '" + repeatInterval + "' , NULL , '" + repeatMonthDay + "' , '" + description + "');"; + String query; + String correctRepeatEndDate = repeatEndDate; + if(correctRepeatEndDate == null || correctRepeatEndDate.equals("A")) + { + correctRepeatEndDate = "NULL"; } else { - query = "INSERT INTO repeating_payment (Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES('" + amount + "' , '" + date + "' , '" + categoryID + "' , '" + name + "' , '" + repeatInterval + "' , '" + repeatEndDate + "' , '" + repeatMonthDay + "' , '" + description + "');"; + correctRepeatEndDate = "'" + correctRepeatEndDate + "'"; } - + + query = "INSERT INTO repeating_payment (Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES('" + amount + "' , '" + date + "' , '" + categoryID + "' , '" + name + "' , '" + repeatInterval + "' , " + correctRepeatEndDate + " , '" + repeatMonthDay + + "' , '" + description + "');"; + try { stmt = connection.createStatement(); @@ -761,12 +828,59 @@ public class DatabaseHandler } } } - + + public void importRepeatingPayment(RepeatingPayment payment) + { + Statement stmt = null; + String query; + // A is placeholder for empty repeatEndDate + String repeatEndDate = payment.getRepeatEndDate(); + if(repeatEndDate == null || repeatEndDate.equals("A")) + { + repeatEndDate = "NULL"; + } + else + { + repeatEndDate = "'" + repeatEndDate + "'"; + } + + if(payment.getDescription() == null) + { + payment.setDescription(""); + } + + query = "INSERT INTO repeating_payment (ID, Amount, Date, CategoryID, Name, RepeatInterval, RepeatEndDate, RepeatMonthDay, Description) VALUES('" + payment.getID() + "', '" + payment.getAmount() + "' , '" + payment.getDate() + "' , '" + payment.getCategoryID() + "' , '" + payment.getName() + + "' , '" + payment.getRepeatInterval() + "' ," + repeatEndDate + ", '" + payment.getRepeatMonthDay() + "' , '" + payment.getDescription() + "')" + " ON DUPLICATE KEY UPDATE " + "Amount='" + payment.getAmount() + "', Date='" + payment.getDate() + "', CategoryID='" + + payment.getCategoryID() + "', Name='" + payment.getName() + "', RepeatInterval='" + payment.getRepeatInterval() + "', RepeatEndDate=" + repeatEndDate + ", RepeatMonthDay='" + payment.getRepeatMonthDay() + "', Description='" + payment.getDescription() + "';"; + try + { + stmt = connection.createStatement(); + stmt.execute(query); + } + catch(SQLException e) + { + Logger.error(e); + } + finally + { + if(stmt != null) + { + try + { + stmt.close(); + } + catch(SQLException e) + { + } + } + } + } + public void addRepeatingPaymentEntry(int repeatingPaymentID, String date) { Statement stmt = null; - String query; - query = "INSERT INTO repeating_entry (RepeatingPaymentID, Date) VALUES('" + repeatingPaymentID + "' , '" + date + "');"; + String query; + query = "INSERT INTO repeating_entry (RepeatingPaymentID, Date) VALUES('" + repeatingPaymentID + "' , '" + date + "');"; try { stmt = connection.createStatement(); @@ -820,8 +934,8 @@ public class DatabaseHandler } } } - } - + } + public void updateNormalPayment(int ID, int amount, String date, int categoryID, String name, String description) { Statement stmt = null; diff --git a/src/de/deadlocker8/budgetmasterserver/main/DatabaseImporter.java b/src/de/deadlocker8/budgetmasterserver/main/DatabaseImporter.java index 9cc06ac18c1ba34b18de4c04089534e6e6193623..d76aaa646bc879bd0965e175fe2baa311cb5d82b 100644 --- a/src/de/deadlocker8/budgetmasterserver/main/DatabaseImporter.java +++ b/src/de/deadlocker8/budgetmasterserver/main/DatabaseImporter.java @@ -1,44 +1,48 @@ package de.deadlocker8.budgetmasterserver.main; -import java.sql.Connection; -import java.sql.DriverManager; +import java.util.ArrayList; -import logger.Logger; +import de.deadlocker8.budgetmaster.logic.Category; +import de.deadlocker8.budgetmaster.logic.NormalPayment; +import de.deadlocker8.budgetmaster.logic.RepeatingPayment; public class DatabaseImporter { - private Connection connection; + private DatabaseHandler handler; - public DatabaseImporter(Settings settings) throws IllegalStateException + public DatabaseImporter(DatabaseHandler handler) throws IllegalStateException { - try - { - this.connection = DriverManager.getConnection(settings.getDatabaseUrl() + settings.getDatabaseName() + "?useLegacyDatetimeCode=false&serverTimezone=Europe/Berlin", settings.getDatabaseUsername(), settings.getDatabasePassword()); - } - catch(Exception e) - { - Logger.error(e); - throw new IllegalStateException("Cannot connect the database!", e); - } + this.handler = handler; } public void importDatabase(Database database) - { - + { + importCategories(database.getCategories()); + importNormalPayments(database.getNormalPayments()); + importRepeatingPayments(database.getRepeatingPayments()); } - private void importCategories() + private void importCategories(ArrayList<Category> categories) { - //TODO + for(Category currentCategory : categories) + { + handler.importCategory(currentCategory); + } } - private void importNormalPayments() + private void importNormalPayments(ArrayList<NormalPayment> normalPayments) { - //TODO + for(NormalPayment currentPayment : normalPayments) + { + handler.importNormalPayment(currentPayment); + } } - private void importRepeatingPayments() + private void importRepeatingPayments(ArrayList<RepeatingPayment> repeatingPayments) { - //TODO + for(RepeatingPayment currentPayment : repeatingPayments) + { + handler.importRepeatingPayment(currentPayment); + } } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java index 21a9a66b34be6438dcc1d998b638af8380d2d4ad..93e6a78c3d1684f9eb5e3214f9a43d5e052f5a41 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java +++ b/src/de/deadlocker8/budgetmasterserver/server/SparkServer.java @@ -118,7 +118,7 @@ public class SparkServer // Database get("/database", new DatabaseExport(settings, gson)); - put("/database", new DatabaseImport(handler, settings)); + put("/database", new DatabaseImport(handler, settings, gson)); delete("/database", new DatabaseDelete(handler, settings)); after((request, response) -> { diff --git a/src/de/deadlocker8/budgetmasterserver/server/database/DatabaseImport.java b/src/de/deadlocker8/budgetmasterserver/server/database/DatabaseImport.java index 9d6939017fd00132fbcad613629c9939ae0ee7bd..0ed9793002491e39c6fd0d6f35d7e6236eb98bf0 100644 --- a/src/de/deadlocker8/budgetmasterserver/server/database/DatabaseImport.java +++ b/src/de/deadlocker8/budgetmasterserver/server/database/DatabaseImport.java @@ -9,6 +9,7 @@ import org.joda.time.DateTime; import com.google.gson.Gson; import de.deadlocker8.budgetmaster.logic.NormalPayment; +import de.deadlocker8.budgetmasterserver.main.Database; import de.deadlocker8.budgetmasterserver.main.DatabaseHandler; import de.deadlocker8.budgetmasterserver.main.DatabaseImporter; import de.deadlocker8.budgetmasterserver.main.Settings; @@ -22,11 +23,13 @@ public class DatabaseImport implements Route { private DatabaseHandler handler; private Settings settings; + private Gson gson; - public DatabaseImport(DatabaseHandler handler, Settings settings) + public DatabaseImport(DatabaseHandler handler, Settings settings, Gson gson) { this.handler = handler; this.settings = settings; + this.gson = gson; } @Override @@ -37,21 +40,27 @@ public class DatabaseImport implements Route halt(400, "Bad Request"); } //TODO json input? + String databaseJSON = ""; + try { boolean delete = Boolean.parseBoolean(req.queryMap("delete").value()); + + //TODO // try -// { +// { +// Database database = gson.fromJson(databaseJSON, Database.class); + // if(delete) -// { +// { // handler.deleteDatabase(); // handler = new DatabaseHandler(settings); -// } +// } // -// DatabaseImporter importer = new DatabaseImporter(settings); -// importer.importDatabase(); +// DatabaseImporter importer = new DatabaseImporter(handler); +// importer.importDatabase(database); // return ""; // } // catch(Exception e)