From bd64df4a318a6806ced29209eca5fd72241c1c32 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 22 May 2021 11:56:34 +0200
Subject: [PATCH] #598 - added backup model classes for all v5 entities

---
 .../database/model/v5/BackupAccount_v5.java   | 131 ++++++++++++++
 .../database/model/v5/BackupCategory_v5.java  | 104 +++++++++++
 .../database/model/v5/BackupChart_v5.java     | 104 +++++++++++
 .../database/model/v5/BackupDatabase_v5.java  | 122 +++++++++++++
 .../database/model/v5/BackupImage_v5.java     |  90 ++++++++++
 .../database/model/v5/BackupTemplate_v5.java  | 168 +++++++++++++++++
 .../model/v5/BackupTransaction_v5.java        | 170 ++++++++++++++++++
 7 files changed, 889 insertions(+)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupAccount_v5.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupCategory_v5.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupChart_v5.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupDatabase_v5.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupImage_v5.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupTemplate_v5.java
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupTransaction_v5.java

diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupAccount_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupAccount_v5.java
new file mode 100644
index 000000000..5883cb495
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupAccount_v5.java
@@ -0,0 +1,131 @@
+package de.deadlocker8.budgetmaster.database.model.v5;
+
+import de.deadlocker8.budgetmaster.accounts.AccountState;
+import de.deadlocker8.budgetmaster.accounts.AccountType;
+
+import java.util.Objects;
+
+public class BackupAccount_v5
+{
+	private Integer ID;
+	private String name;
+	private Boolean isSelected;
+	private Boolean isDefault;
+	private AccountState accountState;
+	private AccountType type;
+	private BackupImage_v5 icon;
+
+	public BackupAccount_v5()
+	{
+	}
+
+	public BackupAccount_v5(Integer ID, String name, AccountState accountState, AccountType type, BackupImage_v5 icon)
+	{
+		this.ID = ID;
+		this.name = name;
+		this.isSelected = false;
+		this.isDefault = false;
+		this.accountState = accountState;
+		this.type = type;
+		this.icon = icon;
+	}
+
+	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 Boolean getSelected()
+	{
+		return isSelected;
+	}
+
+	public void setSelected(Boolean selected)
+	{
+		isSelected = selected;
+	}
+
+	public Boolean getDefault()
+	{
+		return isDefault;
+	}
+
+	public void setDefault(Boolean aDefault)
+	{
+		isDefault = aDefault;
+	}
+
+	public AccountState getAccountState()
+	{
+		return accountState;
+	}
+
+	public void setAccountState(AccountState accountState)
+	{
+		this.accountState = accountState;
+	}
+
+	public AccountType getType()
+	{
+		return type;
+	}
+
+	public void setType(AccountType type)
+	{
+		this.type = type;
+	}
+
+	public BackupImage_v5 getIcon()
+	{
+		return icon;
+	}
+
+	public void setIcon(BackupImage_v5 icon)
+	{
+		this.icon = icon;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupAccount_v5 that = (BackupAccount_v5) o;
+		return Objects.equals(ID, that.ID) && Objects.equals(name, that.name) && Objects.equals(isSelected, that.isSelected) && Objects.equals(isDefault, that.isDefault) && accountState == that.accountState && type == that.type && Objects.equals(icon, that.icon);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(ID, name, isSelected, isDefault, accountState, type, icon);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupAccount_v5{" +
+				"ID=" + ID +
+				", name='" + name + '\'' +
+				", isSelected=" + isSelected +
+				", isDefault=" + isDefault +
+				", accountState=" + accountState +
+				", type=" + type +
+				", icon=" + icon +
+				'}';
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupCategory_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupCategory_v5.java
new file mode 100644
index 000000000..0d3d9edd9
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupCategory_v5.java
@@ -0,0 +1,104 @@
+package de.deadlocker8.budgetmaster.database.model.v5;
+
+import de.deadlocker8.budgetmaster.categories.CategoryType;
+
+import java.util.Objects;
+
+public class BackupCategory_v5
+{
+	private Integer ID;
+	private String name;
+	private String color;
+	private CategoryType type;
+	private String icon;
+
+	public BackupCategory_v5()
+	{
+	}
+
+	public BackupCategory_v5(Integer ID, String name, String color, CategoryType type, String icon)
+	{
+		this.ID = ID;
+		this.name = name;
+		this.color = color;
+		this.type = type;
+		this.icon = icon;
+	}
+
+	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;
+	}
+
+	public String getIcon()
+	{
+		return icon;
+	}
+
+	public void setIcon(String icon)
+	{
+		this.icon = icon;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupCategory_v5 that = (BackupCategory_v5) o;
+		return Objects.equals(ID, that.ID) && Objects.equals(name, that.name) && Objects.equals(color, that.color) && type == that.type && Objects.equals(icon, that.icon);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(ID, name, color, type, icon);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupCategory_v5{" +
+				"ID=" + ID +
+				", name='" + name + '\'' +
+				", color='" + color + '\'' +
+				", type=" + type +
+				", icon='" + icon + '\'' +
+				'}';
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupChart_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupChart_v5.java
new file mode 100644
index 000000000..7f336ea84
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupChart_v5.java
@@ -0,0 +1,104 @@
+package de.deadlocker8.budgetmaster.database.model.v5;
+
+import de.deadlocker8.budgetmaster.charts.ChartType;
+
+import java.util.Objects;
+
+public class BackupChart_v5
+{
+	private Integer ID;
+	private String name;
+	private String script;
+	private ChartType type;
+	private int version;
+
+	public BackupChart_v5()
+	{
+	}
+
+	public BackupChart_v5(Integer ID, String name, String script, ChartType type, int version)
+	{
+		this.ID = ID;
+		this.name = name;
+		this.script = script;
+		this.type = type;
+		this.version = version;
+	}
+
+	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 getScript()
+	{
+		return script;
+	}
+
+	public void setScript(String script)
+	{
+		this.script = script;
+	}
+
+	public ChartType getType()
+	{
+		return type;
+	}
+
+	public void setType(ChartType type)
+	{
+		this.type = type;
+	}
+
+	public int getVersion()
+	{
+		return version;
+	}
+
+	public void setVersion(int version)
+	{
+		this.version = version;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupChart_v5 that = (BackupChart_v5) o;
+		return version == that.version && Objects.equals(ID, that.ID) && Objects.equals(name, that.name) && Objects.equals(script, that.script) && type == that.type;
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(ID, name, script, type, version);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupChart_v5{" +
+				"ID=" + ID +
+				", name='" + name + '\'' +
+				", script='" + script + '\'' +
+				", type=" + type +
+				", version=" + version +
+				'}';
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupDatabase_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupDatabase_v5.java
new file mode 100644
index 000000000..052bb4a37
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupDatabase_v5.java
@@ -0,0 +1,122 @@
+package de.deadlocker8.budgetmaster.database.model.v5;
+
+import de.deadlocker8.budgetmaster.accounts.Account;
+import de.deadlocker8.budgetmaster.categories.Category;
+import de.deadlocker8.budgetmaster.charts.Chart;
+import de.deadlocker8.budgetmaster.database.Database;
+import de.deadlocker8.budgetmaster.database.model.v5.converter.*;
+import de.deadlocker8.budgetmaster.images.Image;
+import de.deadlocker8.budgetmaster.templates.Template;
+import de.deadlocker8.budgetmaster.transactions.Transaction;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BackupDatabase_v5
+{
+	private final String TYPE = "BUDGETMASTER_DATABASE";
+	private final int VERSION = 5;
+
+	private List<BackupCategory_v5> categories;
+	private List<BackupAccount_v5> accounts;
+	private List<BackupTransaction_v5> transactions;
+	private List<BackupTemplate_v5> templates;
+	private List<BackupChart_v5> charts;
+	private List<BackupImage_v5> images;
+
+	public BackupDatabase_v5()
+	{
+	}
+
+	public BackupDatabase_v5(List<BackupCategory_v5> categories, List<BackupAccount_v5> accounts, List<BackupTransaction_v5> transactions, List<BackupTemplate_v5> templates, List<BackupChart_v5> charts, List<BackupImage_v5> images)
+	{
+		this.categories = categories;
+		this.accounts = accounts;
+		this.transactions = transactions;
+		this.templates = templates;
+		this.charts = charts;
+		this.images = images;
+	}
+
+	public List<BackupCategory_v5> getCategories()
+	{
+		return categories;
+	}
+
+	public void setCategories(List<BackupCategory_v5> categories)
+	{
+		this.categories = categories;
+	}
+
+	public List<BackupAccount_v5> getAccounts()
+	{
+		return accounts;
+	}
+
+	public void setAccounts(List<BackupAccount_v5> accounts)
+	{
+		this.accounts = accounts;
+	}
+
+	public List<BackupTransaction_v5> getTransactions()
+	{
+		return transactions;
+	}
+
+	public void setTransactions(List<BackupTransaction_v5> transactions)
+	{
+		this.transactions = transactions;
+	}
+
+	public List<BackupTemplate_v5> getTemplates()
+	{
+		return templates;
+	}
+
+	public void setTemplates(List<BackupTemplate_v5> templates)
+	{
+		this.templates = templates;
+	}
+
+	public List<BackupChart_v5> getCharts()
+	{
+		return charts;
+	}
+
+	public void setCharts(List<BackupChart_v5> charts)
+	{
+		this.charts = charts;
+	}
+
+	public List<BackupImage_v5> getImages()
+	{
+		return images;
+	}
+
+	public void setImages(List<BackupImage_v5> images)
+	{
+		this.images = images;
+	}
+
+	public Database convert()
+	{
+		final List<Category> convertedCategories = convertItems(categories, new CategoryConverter_v5());
+		final List<Account> convertedAccounts = convertItems(accounts, new AccountConverter_v5());
+		final List<Transaction> convertedTransactions = convertItems(this.transactions, new TransactionConverter_v5());
+		final List<Template> convertedTemplates = convertItems(this.templates, new TemplateConverter_v5());
+		final List<Chart> convertedCharts = convertItems(this.charts, new ChartConverter_v5());
+		final List<Image> convertedImages = convertItems(this.images, new ImageConverter_v5());
+
+		return new Database(convertedCategories, convertedAccounts, convertedTransactions, convertedTemplates, convertedCharts, convertedImages);
+	}
+
+	private <T, S> List<T> convertItems(List<S> backupItems, Converter<T, S> converter)
+	{
+		List<T> convertedItems = new ArrayList<>();
+		for(S backupItem : backupItems)
+		{
+			convertedItems.add(converter.convert(backupItem));
+		}
+		return convertedItems;
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupImage_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupImage_v5.java
new file mode 100644
index 000000000..288cbba8d
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupImage_v5.java
@@ -0,0 +1,90 @@
+package de.deadlocker8.budgetmaster.database.model.v5;
+
+import de.deadlocker8.budgetmaster.images.ImageFileExtension;
+
+import java.util.Objects;
+
+public class BackupImage_v5
+{
+	private Integer ID;
+	private Byte[] image;
+	private String fileName;
+	private ImageFileExtension fileExtension;
+
+	public BackupImage_v5()
+	{
+	}
+
+	public BackupImage_v5(Integer ID, Byte[] image, String fileName, ImageFileExtension fileExtension)
+	{
+		this.ID = ID;
+		this.image = image;
+		this.fileName = fileName;
+		this.fileExtension = fileExtension;
+	}
+
+	public Integer getID()
+	{
+		return ID;
+	}
+
+	public void setID(Integer ID)
+	{
+		this.ID = ID;
+	}
+
+	public Byte[] getImage()
+	{
+		return image;
+	}
+
+	public void setImage(Byte[] image)
+	{
+		this.image = image;
+	}
+
+	public String getFileName()
+	{
+		return fileName;
+	}
+
+	public void setFileName(String fileName)
+	{
+		this.fileName = fileName;
+	}
+
+	public ImageFileExtension getFileExtension()
+	{
+		return fileExtension;
+	}
+
+	public void setFileExtension(ImageFileExtension fileExtension)
+	{
+		this.fileExtension = fileExtension;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupImage_v5 that = (BackupImage_v5) o;
+		return Objects.equals(ID, that.ID) && Objects.equals(fileName, that.fileName) && fileExtension == that.fileExtension;
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(ID, fileName, fileExtension);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupImage_v5{" +
+				"ID=" + ID +
+				", fileName='" + fileName + '\'' +
+				", fileExtension=" + fileExtension +
+				'}';
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupTemplate_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupTemplate_v5.java
new file mode 100644
index 000000000..99c2fc19b
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupTemplate_v5.java
@@ -0,0 +1,168 @@
+package de.deadlocker8.budgetmaster.database.model.v5;
+
+import de.deadlocker8.budgetmaster.tags.Tag;
+
+import java.util.List;
+import java.util.Objects;
+
+public class BackupTemplate_v5
+{
+	private Integer ID;
+	private String templateName;
+	private Integer amount;
+	private Boolean isExpenditure;
+	private BackupAccount_v5 account;
+	private BackupCategory_v5 category;
+	private String name;
+	private String description;
+	private BackupImage_v5 icon;
+	private List<Tag> tags;
+	private BackupAccount_v5 transferAccount;
+
+	public BackupTemplate_v5()
+	{
+	}
+
+	public Integer getID()
+	{
+		return ID;
+	}
+
+	public void setID(Integer ID)
+	{
+		this.ID = ID;
+	}
+
+	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_v5 getAccount()
+	{
+		return account;
+	}
+
+	public void setAccount(BackupAccount_v5 account)
+	{
+		this.account = account;
+	}
+
+	public BackupCategory_v5 getCategory()
+	{
+		return category;
+	}
+
+	public void setCategory(BackupCategory_v5 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 BackupImage_v5 getIcon()
+	{
+		return icon;
+	}
+
+	public void setIcon(BackupImage_v5 icon)
+	{
+		this.icon = icon;
+	}
+
+	public List<Tag> getTags()
+	{
+		return tags;
+	}
+
+	public void setTags(List<Tag> tags)
+	{
+		this.tags = tags;
+	}
+
+	public BackupAccount_v5 getTransferAccount()
+	{
+		return transferAccount;
+	}
+
+	public void setTransferAccount(BackupAccount_v5 transferAccount)
+	{
+		this.transferAccount = transferAccount;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupTemplate_v5 that = (BackupTemplate_v5) o;
+		return Objects.equals(ID, that.ID) && 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(icon, that.icon) && Objects.equals(tags, that.tags) && Objects.equals(transferAccount, that.transferAccount);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(ID, templateName, amount, isExpenditure, account, category, name, description, icon, tags, transferAccount);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupTemplate_v5{" +
+				"ID=" + ID +
+				", templateName='" + templateName + '\'' +
+				", amount=" + amount +
+				", isExpenditure=" + isExpenditure +
+				", account=" + account +
+				", category=" + category +
+				", name='" + name + '\'' +
+				", description='" + description + '\'' +
+				", icon=" + icon +
+				", tags=" + tags +
+				", transferAccount=" + transferAccount +
+				'}';
+	}
+}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupTransaction_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupTransaction_v5.java
new file mode 100644
index 000000000..dcbbebed6
--- /dev/null
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/BackupTransaction_v5.java
@@ -0,0 +1,170 @@
+package de.deadlocker8.budgetmaster.database.model.v5;
+
+import de.deadlocker8.budgetmaster.repeating.RepeatingOption;
+import de.deadlocker8.budgetmaster.tags.Tag;
+import org.joda.time.DateTime;
+
+import java.util.List;
+import java.util.Objects;
+
+public class BackupTransaction_v5
+{
+	private Integer ID;
+	private Integer amount;
+	private Boolean isExpenditure;
+	private DateTime date;
+	private BackupAccount_v5 account;
+	private BackupCategory_v5 category;
+	private String name;
+	private String description;
+	private List<Tag> tags;
+	private RepeatingOption repeatingOption;
+	private BackupAccount_v5 transferAccount;
+
+	public BackupTransaction_v5()
+	{
+	}
+
+	public Integer getID()
+	{
+		return ID;
+	}
+
+	public void setID(Integer ID)
+	{
+		this.ID = ID;
+	}
+
+	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 DateTime getDate()
+	{
+		return date;
+	}
+
+	public void setDate(DateTime date)
+	{
+		this.date = date;
+	}
+
+	public BackupAccount_v5 getAccount()
+	{
+		return account;
+	}
+
+	public void setAccount(BackupAccount_v5 account)
+	{
+		this.account = account;
+	}
+
+	public BackupCategory_v5 getCategory()
+	{
+		return category;
+	}
+
+	public void setCategory(BackupCategory_v5 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 RepeatingOption getRepeatingOption()
+	{
+		return repeatingOption;
+	}
+
+	public void setRepeatingOption(RepeatingOption repeatingOption)
+	{
+		this.repeatingOption = repeatingOption;
+	}
+
+	public BackupAccount_v5 getTransferAccount()
+	{
+		return transferAccount;
+	}
+
+	public void setTransferAccount(BackupAccount_v5 transferAccount)
+	{
+		this.transferAccount = transferAccount;
+	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if(this == o) return true;
+		if(o == null || getClass() != o.getClass()) return false;
+		BackupTransaction_v5 that = (BackupTransaction_v5) o;
+		return Objects.equals(ID, that.ID) && 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(ID, amount, isExpenditure, date, account, category, name, description, tags, repeatingOption, transferAccount);
+	}
+
+	@Override
+	public String toString()
+	{
+		return "BackupTransaction_v5{" +
+				"ID=" + ID +
+				", amount=" + amount +
+				", isExpenditure=" + isExpenditure +
+				", date=" + date +
+				", account=" + account +
+				", category=" + category +
+				", name='" + name + '\'' +
+				", description='" + description + '\'' +
+				", tags=" + tags +
+				", repeatingOption=" + repeatingOption +
+				", transferAccount=" + transferAccount +
+				'}';
+	}
+}
-- 
GitLab