From 1971d419bd0889a68218c7bfc5618d5f30bb77fe Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 22 May 2021 22:21:37 +0200
Subject: [PATCH] #598 - added backup models for v4 including upgrade methods

---
 .../database/model/v4/BackupAccount_v4.java   |  87 +++++++++
 .../database/model/v4/BackupCategory_v4.java  |  98 ++++++++++
 .../database/model/v4/BackupDatabase_v4.java  | 109 +++++++++++
 .../database/model/v4/BackupTemplate_v4.java  | 170 +++++++++++++++++
 .../model/v4/BackupTransactionBase_v4.java    |  10 +
 .../model/v4/BackupTransaction_v4.java        | 173 ++++++++++++++++++
 6 files changed, 647 insertions(+)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupAccount_v4.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupCategory_v4.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupDatabase_v4.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTemplate_v4.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTransactionBase_v4.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTransaction_v4.java

diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupAccount_v4.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupAccount_v4.java
new file mode 100644
index 000000000..1bb6d4aa6
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupAccount_v4.java
@@ -0,0 +1,87 @@
+package de.deadlocker8.budgetmaster.database.model.v4;
+
+import de.deadlocker8.budgetmaster.accounts.AccountState;
+import de.deadlocker8.budgetmaster.accounts.AccountType;
+import de.deadlocker8.budgetmaster.database.model.Upgradeable;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupAccount_v5;
+
+import java.util.Objects;
+
+public class BackupAccount_v4 implements Upgradeable<BackupAccount_v5>
+{
+	private Integer ID;
+	private String name;
+	private AccountType type;
+
+	public BackupAccount_v4()
+	{
+	}
+
+	public BackupAccount_v4(Integer ID, String name, AccountType type)
+	{
+		this.ID = ID;
+		this.name = name;
+		this.type = type;
+	}
+
+	public Integer getID()
+	{
+		return ID;
+	}
+
+	public void setID(Integer ID)
+	{
+		this.ID = ID;
+	}
+
+	public String getName()
+	{
+		return name;
+	}
+
+	public void setName(String name)
+	{
+		this.name = name;
+	}
+
+
+	public AccountType getType()
+	{
+		return type;
+	}
+
+	public void setType(AccountType type)
+	{
+		this.type = type;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupAccount_v4 that = (BackupAccount_v4) o;
+		return Objects.equals(ID, that.ID) && Objects.equals(name, that.name) && type == that.type;
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(ID, name, type);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupAccount_v4{" +
+				"ID=" + ID +
+				", name='" + name + '\'' +
+				", type=" + type +
+				'}';
+	}
+
+	public BackupAccount_v5 upgrade()
+	{
+		return new BackupAccount_v5(ID, name, AccountState.FULL_ACCESS, type, null);
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupCategory_v4.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupCategory_v4.java
new file mode 100644
index 000000000..d54af3e74
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupCategory_v4.java
@@ -0,0 +1,98 @@
+package de.deadlocker8.budgetmaster.database.model.v4;
+
+import de.deadlocker8.budgetmaster.categories.CategoryType;
+import de.deadlocker8.budgetmaster.database.model.Upgradeable;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupCategory_v5;
+
+import java.util.Objects;
+
+public class BackupCategory_v4 implements Upgradeable<BackupCategory_v5>
+{
+	private Integer ID;
+	private String name;
+	private String color;
+	private CategoryType type;
+
+	public BackupCategory_v4()
+	{
+	}
+
+	public BackupCategory_v4(Integer ID, String name, String color, CategoryType type)
+	{
+		this.ID = ID;
+		this.name = name;
+		this.color = color;
+		this.type = type;
+	}
+
+	public Integer getID()
+	{
+		return ID;
+	}
+
+	public void setID(Integer ID)
+	{
+		this.ID = ID;
+	}
+
+	public String getName()
+	{
+		return name;
+	}
+
+	public void setName(String name)
+	{
+		this.name = name;
+	}
+
+	public String getColor()
+	{
+		return color;
+	}
+
+	public void setColor(String color)
+	{
+		this.color = color;
+	}
+
+	public CategoryType getType()
+	{
+		return type;
+	}
+
+	public void setType(CategoryType type)
+	{
+		this.type = type;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupCategory_v4 that = (BackupCategory_v4) o;
+		return Objects.equals(ID, that.ID) && Objects.equals(name, that.name) && Objects.equals(color, that.color) && type == that.type;
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(ID, name, color, type);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupCategory_v4{" +
+				"ID=" + ID +
+				", name='" + name + '\'' +
+				", color='" + color + '\'' +
+				", type=" + type +
+				'}';
+	}
+
+	public BackupCategory_v5 upgrade()
+	{
+		return new BackupCategory_v5(ID, name, color, type, null);
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupDatabase_v4.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupDatabase_v4.java
new file mode 100644
index 000000000..7d23f29c3
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupDatabase_v4.java
@@ -0,0 +1,109 @@
+package de.deadlocker8.budgetmaster.database.model.v4;
+
+import de.deadlocker8.budgetmaster.database.Database;
+import de.deadlocker8.budgetmaster.database.model.BackupDatabase;
+import de.deadlocker8.budgetmaster.database.model.Upgradeable;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupAccount_v5;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupCategory_v5;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupDatabase_v5;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BackupDatabase_v4 implements BackupDatabase
+{
+	private final int VERSION = 4;
+
+	private List<BackupCategory_v4> categories;
+	private List<BackupAccount_v4> accounts;
+	private List<BackupTransaction_v4> transactions;
+	private List<BackupTemplate_v4> templates;
+
+	public BackupDatabase_v4()
+	{
+	}
+
+	public BackupDatabase_v4(List<BackupCategory_v4> categories, List<BackupAccount_v4> accounts, List<BackupTransaction_v4> transactions, List<BackupTemplate_v4> templates)
+	{
+		this.categories = categories;
+		this.accounts = accounts;
+		this.transactions = transactions;
+		this.templates = templates;
+	}
+
+	public List<BackupCategory_v4> getCategories()
+	{
+		return categories;
+	}
+
+	public void setCategories(List<BackupCategory_v4> categories)
+	{
+		this.categories = categories;
+	}
+
+	public List<BackupAccount_v4> getAccounts()
+	{
+		return accounts;
+	}
+
+	public void setAccounts(List<BackupAccount_v4> accounts)
+	{
+		this.accounts = accounts;
+	}
+
+	public List<BackupTransaction_v4> getTransactions()
+	{
+		return transactions;
+	}
+
+	public void setTransactions(List<BackupTransaction_v4> transactions)
+	{
+		this.transactions = transactions;
+	}
+
+	public List<BackupTemplate_v4> getTemplates()
+	{
+		return templates;
+	}
+
+	public void setTemplates(List<BackupTemplate_v4> templates)
+	{
+		this.templates = templates;
+	}
+
+	@Override
+	public int getVersion()
+	{
+		return this.VERSION;
+	}
+
+	public BackupDatabase upgrade()
+	{
+		final BackupDatabase_v5 upgradedDatabase = new BackupDatabase_v5();
+
+		upgradedDatabase.setCategories(upgradeItems(categories));
+		upgradedDatabase.setAccounts(upgradeItems(accounts));
+		upgradedDatabase.setTransactions(upgradeItems(transactions));
+		upgradedDatabase.setTemplates(upgradeItems(templates));
+		upgradedDatabase.setCharts(new ArrayList<>());
+		upgradedDatabase.setImages(new ArrayList<>());
+
+		return upgradedDatabase;
+	}
+
+	private <T> List<T> upgradeItems(List<? extends Upgradeable<T>> items)
+	{
+		List<T> upgradedItems = new ArrayList<>();
+		for(Upgradeable<T> item : items)
+		{
+			upgradedItems.add(item.upgrade());
+		}
+		return upgradedItems;
+	}
+
+	@Override
+	public Database convert()
+	{
+		return null;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTemplate_v4.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTemplate_v4.java
new file mode 100644
index 000000000..e7d351cfc
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTemplate_v4.java
@@ -0,0 +1,170 @@
+package de.deadlocker8.budgetmaster.database.model.v4;
+
+import de.deadlocker8.budgetmaster.database.model.Upgradeable;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupAccount_v5;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupCategory_v5;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupTemplate_v5;
+import de.deadlocker8.budgetmaster.tags.Tag;
+
+import java.util.List;
+import java.util.Objects;
+
+public class BackupTemplate_v4 implements BackupTransactionBase_v4, Upgradeable<BackupTemplate_v5>
+{
+	private String templateName;
+	private Integer amount;
+	private Boolean isExpenditure;
+	private BackupAccount_v4 account;
+	private BackupCategory_v4 category;
+	private String name;
+	private String description;
+	private List<Tag> tags;
+	private BackupAccount_v4 transferAccount;
+
+	public BackupTemplate_v4()
+	{
+	}
+
+	public String getTemplateName()
+	{
+		return templateName;
+	}
+
+	public void setTemplateName(String templateName)
+	{
+		this.templateName = templateName;
+	}
+
+	public Integer getAmount()
+	{
+		return amount;
+	}
+
+	public void setAmount(Integer amount)
+	{
+		this.amount = amount;
+	}
+
+	public Boolean getExpenditure()
+	{
+		return isExpenditure;
+	}
+
+	public void setExpenditure(Boolean expenditure)
+	{
+		isExpenditure = expenditure;
+	}
+
+	public BackupAccount_v4 getAccount()
+	{
+		return account;
+	}
+
+	public void setAccount(BackupAccount_v4 account)
+	{
+		this.account = account;
+	}
+
+	public BackupCategory_v4 getCategory()
+	{
+		return category;
+	}
+
+	public void setCategory(BackupCategory_v4 category)
+	{
+		this.category = category;
+	}
+
+	public String getName()
+	{
+		return name;
+	}
+
+	public void setName(String name)
+	{
+		this.name = name;
+	}
+
+	public String getDescription()
+	{
+		return description;
+	}
+
+	public void setDescription(String description)
+	{
+		this.description = description;
+	}
+
+	public List<Tag> getTags()
+	{
+		return tags;
+	}
+
+	public void setTags(List<Tag> tags)
+	{
+		this.tags = tags;
+	}
+
+	public BackupAccount_v4 getTransferAccount()
+	{
+		return transferAccount;
+	}
+
+	public void setTransferAccount(BackupAccount_v4 transferAccount)
+	{
+		this.transferAccount = transferAccount;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupTemplate_v4 that = (BackupTemplate_v4) o;
+		return Objects.equals(templateName, that.templateName) && Objects.equals(amount, that.amount) && Objects.equals(isExpenditure, that.isExpenditure) && Objects.equals(account, that.account) && Objects.equals(category, that.category) && Objects.equals(name, that.name) && Objects.equals(description, that.description) && Objects.equals(tags, that.tags) && Objects.equals(transferAccount, that.transferAccount);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(templateName, amount, isExpenditure, account, category, name, description, tags, transferAccount);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupTemplate_v4{templateName='" + templateName + '\'' +
+				", amount=" + amount +
+				", isExpenditure=" + isExpenditure +
+				", account=" + account +
+				", category=" + category +
+				", name='" + name + '\'' +
+				", description='" + description + '\'' +
+				", tags=" + tags +
+				", transferAccount=" + transferAccount +
+				'}';
+	}
+
+	public BackupTemplate_v5 upgrade()
+	{
+		BackupAccount_v5 upgradedAccount = null;
+		if(account != null)
+		{
+			upgradedAccount = account.upgrade();
+		}
+
+		BackupCategory_v5 upgradedCategory = null;
+		if(category != null)
+		{
+			upgradedCategory = category.upgrade();
+		}
+
+		BackupAccount_v5 upgradedTransferAccount = null;
+		if(transferAccount != null)
+		{
+			upgradedTransferAccount = transferAccount.upgrade();
+		}
+
+		return new BackupTemplate_v5(templateName, amount, isExpenditure, upgradedAccount, upgradedCategory, name, description, null, tags, upgradedTransferAccount);
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTransactionBase_v4.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTransactionBase_v4.java
new file mode 100644
index 000000000..58274b0f4
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTransactionBase_v4.java
@@ -0,0 +1,10 @@
+package de.deadlocker8.budgetmaster.database.model.v4;
+
+public interface BackupTransactionBase_v4
+{
+	Integer getAmount();
+
+	Boolean getExpenditure();
+
+	void setExpenditure(Boolean isExpenditure);
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTransaction_v4.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTransaction_v4.java
new file mode 100644
index 000000000..efbca7711
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v4/BackupTransaction_v4.java
@@ -0,0 +1,173 @@
+package de.deadlocker8.budgetmaster.database.model.v4;
+
+import de.deadlocker8.budgetmaster.database.model.Upgradeable;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupAccount_v5;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupCategory_v5;
+import de.deadlocker8.budgetmaster.database.model.v5.BackupTransaction_v5;
+import de.deadlocker8.budgetmaster.tags.Tag;
+
+import java.util.List;
+import java.util.Objects;
+
+public class BackupTransaction_v4 implements BackupTransactionBase_v4, Upgradeable<BackupTransaction_v5>
+{
+	private Integer amount;
+	private Boolean isExpenditure;
+	private String date;
+	private BackupAccount_v4 account;
+	private BackupCategory_v4 category;
+	private String name;
+	private String description;
+	private List<Tag> tags;
+	private BackupRepeatingOption_v4 repeatingOption;
+	private BackupAccount_v4 transferAccount;
+
+	public BackupTransaction_v4()
+	{
+	}
+
+	public Integer getAmount()
+	{
+		return amount;
+	}
+
+	public void setAmount(Integer amount)
+	{
+		this.amount = amount;
+	}
+
+	public Boolean getExpenditure()
+	{
+		return isExpenditure;
+	}
+
+	public void setExpenditure(Boolean expenditure)
+	{
+		isExpenditure = expenditure;
+	}
+
+	public String getDate()
+	{
+		return date;
+	}
+
+	public void setDate(String date)
+	{
+		this.date = date;
+	}
+
+	public BackupAccount_v4 getAccount()
+	{
+		return account;
+	}
+
+	public void setAccount(BackupAccount_v4 account)
+	{
+		this.account = account;
+	}
+
+	public BackupCategory_v4 getCategory()
+	{
+		return category;
+	}
+
+	public void setCategory(BackupCategory_v4 category)
+	{
+		this.category = category;
+	}
+
+	public String getName()
+	{
+		return name;
+	}
+
+	public void setName(String name)
+	{
+		this.name = name;
+	}
+
+	public String getDescription()
+	{
+		return description;
+	}
+
+	public void setDescription(String description)
+	{
+		this.description = description;
+	}
+
+	public List<Tag> getTags()
+	{
+		return tags;
+	}
+
+	public void setTags(List<Tag> tags)
+	{
+		this.tags = tags;
+	}
+
+	public BackupRepeatingOption_v4 getRepeatingOption()
+	{
+		return repeatingOption;
+	}
+
+	public void setRepeatingOption(BackupRepeatingOption_v4 repeatingOption)
+	{
+		this.repeatingOption = repeatingOption;
+	}
+
+	public BackupAccount_v4 getTransferAccount()
+	{
+		return transferAccount;
+	}
+
+	public void setTransferAccount(BackupAccount_v4 transferAccount)
+	{
+		this.transferAccount = transferAccount;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupTransaction_v4 that = (BackupTransaction_v4) o;
+		return Objects.equals(amount, that.amount) && Objects.equals(isExpenditure, that.isExpenditure) && Objects.equals(date, that.date) && Objects.equals(account, that.account) && Objects.equals(category, that.category) && Objects.equals(name, that.name) && Objects.equals(description, that.description) && Objects.equals(tags, that.tags) && Objects.equals(repeatingOption, that.repeatingOption) && Objects.equals(transferAccount, that.transferAccount);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(amount, isExpenditure, date, account, category, name, description, tags, repeatingOption, transferAccount);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupTransaction_v4{amount=" + amount +
+				", isExpenditure=" + isExpenditure +
+				", date=" + date +
+				", account=" + account +
+				", category=" + category +
+				", name='" + name + '\'' +
+				", description='" + description + '\'' +
+				", tags=" + tags +
+				", repeatingOption=" + repeatingOption +
+				", transferAccount=" + transferAccount +
+				'}';
+	}
+
+	public BackupTransaction_v5 upgrade()
+	{
+		BackupAccount_v5 upgradedAccount = account.upgrade();
+		BackupCategory_v5 upgradedCategory = category.upgrade();
+
+		BackupAccount_v5 upgradedTransferAccount = null;
+		if(transferAccount != null)
+		{
+			upgradedTransferAccount = transferAccount.upgrade();
+		}
+
+		return new BackupTransaction_v5(amount, isExpenditure, date, upgradedAccount, upgradedCategory, name, description, tags, repeatingOption, upgradedTransferAccount);
+	}
+}
-- 
GitLab