From f963f09d80885f40e714c7a1239da4e5463a3f05 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Mon, 18 Sep 2017 18:12:43 +0200
Subject: [PATCH] #96 - implemented database export

---
 .../budgetmaster/logic/tag/TagMatch.java      | 59 ++++++++++++++++
 .../logic/DatabaseImportExport.java           |  7 ++
 .../logic/database/Database.java              | 47 +++++++++++++
 .../logic/database/DatabaseExporter.java      | 67 ++++++++++++++++++-
 4 files changed, 178 insertions(+), 2 deletions(-)
 create mode 100644 src/de/deadlocker8/budgetmaster/logic/tag/TagMatch.java
 create mode 100644 src/de/deadlocker8/budgetmasterserver/logic/DatabaseImportExport.java

diff --git a/src/de/deadlocker8/budgetmaster/logic/tag/TagMatch.java b/src/de/deadlocker8/budgetmaster/logic/tag/TagMatch.java
new file mode 100644
index 000000000..c09722461
--- /dev/null
+++ b/src/de/deadlocker8/budgetmaster/logic/tag/TagMatch.java
@@ -0,0 +1,59 @@
+package de.deadlocker8.budgetmaster.logic.tag;
+
+import de.deadlocker8.budgetmasterserver.logic.DatabaseImportExport;
+
+@DatabaseImportExport
+public class TagMatch
+{
+	private int tagID;
+	private int paymentID;
+	private int repeatingPaymentID;
+	
+	public TagMatch(int tagID, int paymentID, int repeatingPaymentID)
+	{		
+		this.tagID = tagID;
+		this.paymentID = paymentID;
+		this.repeatingPaymentID = repeatingPaymentID;
+	}
+
+	public TagMatch()
+	{
+		
+	}
+	
+	public int getTagID()	
+	{
+		return tagID;
+	}
+	
+	public void setTagID(int tagID)
+	{
+		this.tagID = tagID;
+	}
+	
+	public int getPaymentID()
+	{
+		return paymentID;
+	}
+	
+	public void setPaymentID(int paymentID)
+	{
+		this.paymentID = paymentID;
+	}
+	
+	public int getRepeatingPaymentID()
+	{
+		return repeatingPaymentID;
+	}
+	
+	public void setRepeatingPaymentID(int repeatingPaymentID)
+	{
+		this.repeatingPaymentID = repeatingPaymentID;
+	}
+
+	@Override
+	public String toString()
+	{
+		return "TagMatch [tagID=" + tagID + ", paymentID=" + paymentID + ", repeatingPaymentID=" + repeatingPaymentID + "]";
+	}
+}
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmasterserver/logic/DatabaseImportExport.java b/src/de/deadlocker8/budgetmasterserver/logic/DatabaseImportExport.java
new file mode 100644
index 000000000..9ea98c3f7
--- /dev/null
+++ b/src/de/deadlocker8/budgetmasterserver/logic/DatabaseImportExport.java
@@ -0,0 +1,7 @@
+package de.deadlocker8.budgetmasterserver.logic;
+
+/**
+ * Used to mark model classes that only exists in order to allow gson to import and export the database  
+ *
+ */
+public @interface DatabaseImportExport {}
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java b/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java
index 196f8f6c5..849d5991b 100644
--- a/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java
+++ b/src/de/deadlocker8/budgetmasterserver/logic/database/Database.java
@@ -5,12 +5,27 @@ import java.util.ArrayList;
 import de.deadlocker8.budgetmaster.logic.category.Category;
 import de.deadlocker8.budgetmaster.logic.payment.NormalPayment;
 import de.deadlocker8.budgetmaster.logic.payment.RepeatingPayment;
+import de.deadlocker8.budgetmaster.logic.tag.Tag;
+import de.deadlocker8.budgetmaster.logic.tag.TagMatch;
 
 public class Database
 {
+	/*
+	 * VERSIONS 
+	 * 
+	 * --> 1
+	 * initial
+	 * 
+	 * --> 2
+	 * added tags and tag matches (additional tables)
+	 */	
+	
+	private final int VERSION = 2;
 	private ArrayList<Category> categories;
 	private ArrayList<NormalPayment> normalPayments;
 	private ArrayList<RepeatingPayment> repeatingPayments;
+	private ArrayList<Tag> tags;
+	private ArrayList<TagMatch> tagMatches;
 	
 	public Database()
 	{
@@ -22,8 +37,19 @@ public class Database
 	    this.categories = categories;
 	    this.normalPayments = normalPayments;
 	    this.repeatingPayments = repeatingPayments;
+	    this.tags = new ArrayList<>();
+	    this.tagMatches = new ArrayList<>();
 	}
 	
+	public Database(ArrayList<Category> categories, ArrayList<NormalPayment> normalPayments, ArrayList<RepeatingPayment> repeatingPayments, ArrayList<Tag> tags, ArrayList<TagMatch> tagMatches)
+	{	
+		this.categories = categories;
+		this.normalPayments = normalPayments;
+		this.repeatingPayments = repeatingPayments;
+		this.tags = tags;
+		this.tagMatches = tagMatches;
+	}
+
 	public ArrayList<Category> getCategories()
 	{
 	    return categories;
@@ -38,4 +64,25 @@ public class Database
     {
         return repeatingPayments;
     }
+
+	public int getVERSION()
+	{
+		return VERSION;
+	}
+
+	public ArrayList<Tag> getTags()
+	{
+		return tags;
+	}
+
+	public ArrayList<TagMatch> getTagMatches()
+	{
+		return tagMatches;
+	}
+
+	@Override
+	public String toString()
+	{
+		return "Database [VERSION=" + VERSION + ", categories=" + categories + ", normalPayments=" + normalPayments + ", repeatingPayments=" + repeatingPayments + ", tags=" + tags + ", tagMatches=" + tagMatches + "]";
+	}
 }
\ No newline at end of file
diff --git a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseExporter.java b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseExporter.java
index 1953a6ef7..423eedc27 100644
--- a/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseExporter.java
+++ b/src/de/deadlocker8/budgetmasterserver/logic/database/DatabaseExporter.java
@@ -11,6 +11,8 @@ import java.util.ArrayList;
 import de.deadlocker8.budgetmaster.logic.category.Category;
 import de.deadlocker8.budgetmaster.logic.payment.NormalPayment;
 import de.deadlocker8.budgetmaster.logic.payment.RepeatingPayment;
+import de.deadlocker8.budgetmaster.logic.tag.Tag;
+import de.deadlocker8.budgetmaster.logic.tag.TagMatch;
 import de.deadlocker8.budgetmasterserver.logic.Settings;
 import logger.Logger;
 
@@ -36,8 +38,10 @@ public class DatabaseExporter
 	    ArrayList<Category> categories = getAllCategories();
 	    ArrayList<NormalPayment> normalPayments = getAllNormalPayments();
 	    ArrayList<RepeatingPayment> repeatingPayments = getAllRepeatingPayments();
+	    ArrayList<Tag> tags = getAllTags();
+	    ArrayList<TagMatch> tagMatches = getAllTagMatches();
 	    
-	    return new Database(categories, normalPayments, repeatingPayments);
+	    return new Database(categories, normalPayments, repeatingPayments, tags, tagMatches);
 	}
 	
 	private void closeConnection(Statement statement)
@@ -150,5 +154,64 @@ public class DatabaseExporter
         }
 
         return results;
-    }	
+    }
+	
+	private ArrayList<Tag> getAllTags()
+    {
+	    PreparedStatement stmt = null;
+        ArrayList<Tag> results = new ArrayList<>();
+        try
+        {
+        	stmt = connection.prepareStatement("SELECT * FROM tag;");
+            ResultSet rs = stmt.executeQuery();
+
+            while(rs.next())
+            {
+                int resultID = rs.getInt("ID");                               
+                String name = rs.getString("Name");               
+            
+                results.add(new Tag(resultID, name));
+            }
+        }
+        catch(SQLException e)
+        {
+            Logger.error(e);
+        }
+        finally
+        {
+            closeConnection(stmt);
+        }
+
+        return results;
+    }
+	
+	private ArrayList<TagMatch> getAllTagMatches()
+    {
+	    PreparedStatement stmt = null;
+        ArrayList<TagMatch> results = new ArrayList<>();
+        try
+        {
+        	stmt = connection.prepareStatement("SELECT * FROM tag_match;");
+            ResultSet rs = stmt.executeQuery();
+
+            while(rs.next())
+            {
+                int tagID = rs.getInt("Tag_ID");
+                int paymentID = rs.getInt("Payment_ID");
+                int repeatingPaymentID = rs.getInt("RepeatingPayment_ID");                             
+            
+                results.add(new TagMatch(tagID, paymentID, repeatingPaymentID));
+            }
+        }
+        catch(SQLException e)
+        {
+            Logger.error(e);
+        }
+        finally
+        {
+            closeConnection(stmt);
+        }
+
+        return results;
+    }
 }
\ No newline at end of file
-- 
GitLab