diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java index 5917e691f135bd98edc40f25a16696fe17abe694..79626cec8058d374c9f335e5b14c311695bccc54 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser.java @@ -2,7 +2,6 @@ package de.deadlocker8.budgetmaster.database; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.database.model.BackupDatabase; import de.deadlocker8.budgetmaster.database.model.v4.BackupDatabase_v4; import de.deadlocker8.budgetmaster.database.model.v5.BackupDatabase_v5; @@ -91,6 +90,6 @@ public class DatabaseParser } LOGGER.debug(MessageFormat.format("Converting database with version {0} to internal entities", upgradedDatabase.getVersion())); - return upgradedDatabase.convert(); + return upgradedDatabase.convertToInternal(); } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/Converter.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/Converter.java index 7f3f95f5a800db5409be610105aa862cc1cf287d..b6d6f738579579890338f9214c36d32dfbbed883 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/Converter.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/Converter.java @@ -2,5 +2,7 @@ package de.deadlocker8.budgetmaster.database.model; public interface Converter<T, S> { - T convert(S backupItem); + T convertToInternalForm(S backupItem); + + S convertToExternalForm(T internalItem); } 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 index 7990eecc2a8175c32078dff7244551653a06930c..cc08da5c7acbc281ac899c2f2ddeb79979c51a9b 100644 --- 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 @@ -99,24 +99,24 @@ public class BackupDatabase_v5 implements BackupDatabase this.images = images; } - public Database convert() + public Database convertToInternal() { - 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()); + final List<Category> convertedCategories = convertItemsToInternal(categories, new CategoryConverter_v5()); + final List<Account> convertedAccounts = convertItemsToInternal(accounts, new AccountConverter_v5()); + final List<Transaction> convertedTransactions = convertItemsToInternal(this.transactions, new TransactionConverter_v5()); + final List<Template> convertedTemplates = convertItemsToInternal(this.templates, new TemplateConverter_v5()); + final List<Chart> convertedCharts = convertItemsToInternal(this.charts, new ChartConverter_v5()); + final List<Image> convertedImages = convertItemsToInternal(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) + private <T, S> List<T> convertItemsToInternal(List<S> backupItems, Converter<T, S> converter) { List<T> convertedItems = new ArrayList<>(); for(S backupItem : backupItems) { - convertedItems.add(converter.convert(backupItem)); + convertedItems.add(converter.convertToInternalForm(backupItem)); } return convertedItems; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/AccountConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/AccountConverter_v5.java index c6d186fb13379c9283b19bbdb053511b18b6114f..dcd0f41aa3de438994635e267719d132a878b5f4 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/AccountConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/AccountConverter_v5.java @@ -6,7 +6,7 @@ import de.deadlocker8.budgetmaster.database.model.v5.BackupAccount_v5; public class AccountConverter_v5 implements Converter<Account, BackupAccount_v5> { - public Account convert(BackupAccount_v5 backupAccount) + public Account convertToInternalForm(BackupAccount_v5 backupAccount) { if(backupAccount == null) { @@ -20,7 +20,24 @@ public class AccountConverter_v5 implements Converter<Account, BackupAccount_v5> account.setSelected(false); account.setAccountState(backupAccount.getAccountState()); account.setType(backupAccount.getType()); - account.setIcon(new ImageConverter_v5().convert(backupAccount.getIcon())); + account.setIcon(new ImageConverter_v5().convertToInternalForm(backupAccount.getIcon())); + return account; + } + + @Override + public BackupAccount_v5 convertToExternalForm(Account internalAccount) + { + if(internalAccount == null) + { + return null; + } + + final BackupAccount_v5 account = new BackupAccount_v5(); + account.setID(internalAccount.getID()); + account.setName(internalAccount.getName()); + account.setAccountState(internalAccount.getAccountState()); + account.setType(internalAccount.getType()); + account.setIcon(new ImageConverter_v5().convertToExternalForm(internalAccount.getIcon())); return account; } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/CategoryConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/CategoryConverter_v5.java index 9bafb1a99dd9ba43b33bfb99e06727da9fd7c580..0c99b91ace4c0a4b5e111ccfd6baa7fcbd984c36 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/CategoryConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/CategoryConverter_v5.java @@ -6,7 +6,7 @@ import de.deadlocker8.budgetmaster.database.model.v5.BackupCategory_v5; public class CategoryConverter_v5 implements Converter<Category, BackupCategory_v5> { - public Category convert(BackupCategory_v5 backupCategory) + public Category convertToInternalForm(BackupCategory_v5 backupCategory) { if(backupCategory == null) { @@ -21,4 +21,21 @@ public class CategoryConverter_v5 implements Converter<Category, BackupCategory_ category.setIcon(backupCategory.getIcon()); return category; } + + @Override + public BackupCategory_v5 convertToExternalForm(Category internalItem) + { + if(internalItem == null) + { + return null; + } + + final BackupCategory_v5 category = new BackupCategory_v5(); + category.setID(internalItem.getID()); + category.setName(internalItem.getName()); + category.setColor(internalItem.getColor()); + category.setType(internalItem.getType()); + category.setIcon(internalItem.getIcon()); + return category; + } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/ChartConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/ChartConverter_v5.java index ace95af05a8de2ff9a66e0f71f2d50b5d1b825a0..72b253e639e1602ab25e3520832c62fd8bd32b08 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/ChartConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/ChartConverter_v5.java @@ -6,7 +6,7 @@ import de.deadlocker8.budgetmaster.database.model.v5.BackupChart_v5; public class ChartConverter_v5 implements Converter<Chart, BackupChart_v5> { - public Chart convert(BackupChart_v5 backupChart) + public Chart convertToInternalForm(BackupChart_v5 backupChart) { if(backupChart == null) { @@ -21,4 +21,21 @@ public class ChartConverter_v5 implements Converter<Chart, BackupChart_v5> chart.setScript(backupChart.getScript()); return chart; } + + @Override + public BackupChart_v5 convertToExternalForm(Chart internalItem) + { + if(internalItem == null) + { + return null; + } + + final BackupChart_v5 chart = new BackupChart_v5(); + chart.setID(internalItem.getID()); + chart.setName(internalItem.getName()); + chart.setType(internalItem.getType()); + chart.setVersion(internalItem.getVersion()); + chart.setScript(internalItem.getScript()); + return chart; + } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/ImageConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/ImageConverter_v5.java index 3c12b486c8d268039348aa4091d63c65d9010b47..fcec9bd24a1028a0c092831ae57902adf93d3294 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/ImageConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/ImageConverter_v5.java @@ -6,7 +6,7 @@ import de.deadlocker8.budgetmaster.images.Image; public class ImageConverter_v5 implements Converter<Image, BackupImage_v5> { - public Image convert(BackupImage_v5 backupImage) + public Image convertToInternalForm(BackupImage_v5 backupImage) { if(backupImage == null) { @@ -20,4 +20,20 @@ public class ImageConverter_v5 implements Converter<Image, BackupImage_v5> image.setImage(backupImage.getImage()); return image; } + + @Override + public BackupImage_v5 convertToExternalForm(Image internalItem) + { + if(internalItem == null) + { + return null; + } + + final BackupImage_v5 image = new BackupImage_v5(); + image.setID(internalItem.getID()); + image.setFileName(internalItem.getFileName()); + image.setFileExtension(internalItem.getFileExtension()); + image.setImage(internalItem.getImage()); + return image; + } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingEndOptionConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingEndOptionConverter_v5.java index d9aa740a4a39c7193cfbd1b917b760be2668f1f4..bdf074cc68ea4f3e732db77aeb31345f45494a82 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingEndOptionConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingEndOptionConverter_v5.java @@ -10,7 +10,7 @@ import org.joda.time.format.DateTimeFormat; public class RepeatingEndOptionConverter_v5 implements Converter<RepeatingEnd, BackupRepeatingEndOption_v4> { @Override - public RepeatingEnd convert(BackupRepeatingEndOption_v4 backupItem) + public RepeatingEnd convertToInternalForm(BackupRepeatingEndOption_v4 backupItem) { if(backupItem == null) { @@ -35,4 +35,31 @@ public class RepeatingEndOptionConverter_v5 implements Converter<RepeatingEnd, B return endOption; } + + @Override + public BackupRepeatingEndOption_v4 convertToExternalForm(RepeatingEnd internalItem) + { + if(internalItem == null) + { + return null; + } + + final BackupRepeatingEndOption_v4 repeatingEndOption = new BackupRepeatingEndOption_v4(); + repeatingEndOption.setLocalizationKey(internalItem.getLocalizationKey()); + + if(internalItem instanceof RepeatingEndDate) + { + RepeatingEndDate repeatingEndDate = (RepeatingEndDate) internalItem; + final DateTime endDate = (DateTime) repeatingEndDate.getValue(); + repeatingEndOption.setEndDate(endDate.toString(DateTimeFormat.forPattern("yyyy-MM-dd"))); + } + + if(internalItem instanceof RepeatingEndAfterXTimes) + { + RepeatingEndAfterXTimes repeatingEndAfterXTimes = (RepeatingEndAfterXTimes) internalItem; + repeatingEndOption.setTimes((int) repeatingEndAfterXTimes.getValue()); + } + + return repeatingEndOption; + } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingModifierConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingModifierConverter_v5.java index df92e20d68735a450cd12141049506d8c881e537..a52a186442655136739945c6ca294791693bb959 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingModifierConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingModifierConverter_v5.java @@ -9,7 +9,7 @@ import de.thecodelabs.utils.util.Localization; public class RepeatingModifierConverter_v5 implements Converter<RepeatingModifier, BackupRepeatingModifier_v4> { @Override - public RepeatingModifier convert(BackupRepeatingModifier_v4 backupItem) + public RepeatingModifier convertToInternalForm(BackupRepeatingModifier_v4 backupItem) { if(backupItem == null) { @@ -19,4 +19,15 @@ public class RepeatingModifierConverter_v5 implements Converter<RepeatingModifie RepeatingModifierType type = RepeatingModifierType.getByLocalization(Localization.getString(backupItem.getLocalizationKey())); return RepeatingModifier.fromModifierType(type, backupItem.getQuantity()); } + + @Override + public BackupRepeatingModifier_v4 convertToExternalForm(RepeatingModifier internalItem) + { + if(internalItem == null) + { + return null; + } + + return new BackupRepeatingModifier_v4(internalItem.getQuantity(), internalItem.getLocalizationKey()); + } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingOptionConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingOptionConverter_v5.java index 54574286ee3128c739a8100c4c82be96c77e636a..acb18100cf4efa036390953f555250c72064782b 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingOptionConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/RepeatingOptionConverter_v5.java @@ -9,7 +9,7 @@ import org.joda.time.format.DateTimeFormat; public class RepeatingOptionConverter_v5 implements Converter<RepeatingOption, BackupRepeatingOption_v4> { @Override - public RepeatingOption convert(BackupRepeatingOption_v4 backupItem) + public RepeatingOption convertToInternalForm(BackupRepeatingOption_v4 backupItem) { if(backupItem == null) { @@ -18,8 +18,23 @@ public class RepeatingOptionConverter_v5 implements Converter<RepeatingOption, B final RepeatingOption repeatingOption = new RepeatingOption(); repeatingOption.setStartDate(DateTime.parse(backupItem.getStartDate(), DateTimeFormat.forPattern("yyyy-MM-dd"))); - repeatingOption.setModifier(new RepeatingModifierConverter_v5().convert(backupItem.getModifier())); - repeatingOption.setEndOption(new RepeatingEndOptionConverter_v5().convert(backupItem.getEndOption())); + repeatingOption.setModifier(new RepeatingModifierConverter_v5().convertToInternalForm(backupItem.getModifier())); + repeatingOption.setEndOption(new RepeatingEndOptionConverter_v5().convertToInternalForm(backupItem.getEndOption())); + return repeatingOption; + } + + @Override + public BackupRepeatingOption_v4 convertToExternalForm(RepeatingOption internalItem) + { + if(internalItem == null) + { + return null; + } + + final BackupRepeatingOption_v4 repeatingOption = new BackupRepeatingOption_v4(); + repeatingOption.setStartDate(internalItem.getStartDate().toString(DateTimeFormat.forPattern("yyyy-MM-dd"))); + repeatingOption.setModifier(new RepeatingModifierConverter_v5().convertToExternalForm(internalItem.getModifier())); + repeatingOption.setEndOption(new RepeatingEndOptionConverter_v5().convertToExternalForm(internalItem.getEndOption())); return repeatingOption; } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/TemplateConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/TemplateConverter_v5.java index 59cb66e7641a35ea287e663dfd26c175f0a34714..b1b4302ef267553898a47e81d82c78baa8143959 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/TemplateConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/TemplateConverter_v5.java @@ -6,7 +6,7 @@ import de.deadlocker8.budgetmaster.templates.Template; public class TemplateConverter_v5 implements Converter<Template, BackupTemplate_v5> { - public Template convert(BackupTemplate_v5 backupTemplate) + public Template convertToInternalForm(BackupTemplate_v5 backupTemplate) { if(backupTemplate == null) { @@ -16,7 +16,7 @@ public class TemplateConverter_v5 implements Converter<Template, BackupTemplate_ final Template template = new Template(); template.setAmount(backupTemplate.getAmount()); template.setName(backupTemplate.getName()); - template.setCategory(new CategoryConverter_v5().convert(backupTemplate.getCategory())); + template.setCategory(new CategoryConverter_v5().convertToInternalForm(backupTemplate.getCategory())); template.setDescription(backupTemplate.getDescription()); if(backupTemplate.getExpenditure() == null) @@ -28,11 +28,33 @@ public class TemplateConverter_v5 implements Converter<Template, BackupTemplate_ template.setIsExpenditure(backupTemplate.getExpenditure()); } - template.setAccount(new AccountConverter_v5().convert(backupTemplate.getAccount())); - template.setTransferAccount(new AccountConverter_v5().convert(backupTemplate.getTransferAccount())); + template.setAccount(new AccountConverter_v5().convertToInternalForm(backupTemplate.getAccount())); + template.setTransferAccount(new AccountConverter_v5().convertToInternalForm(backupTemplate.getTransferAccount())); template.setTags(backupTemplate.getTags()); template.setTemplateName(backupTemplate.getTemplateName()); - template.setIcon(new ImageConverter_v5().convert(backupTemplate.getIcon())); + template.setIcon(new ImageConverter_v5().convertToInternalForm(backupTemplate.getIcon())); + return template; + } + + @Override + public BackupTemplate_v5 convertToExternalForm(Template internalItem) + { + if(internalItem == null) + { + return null; + } + + final BackupTemplate_v5 template = new BackupTemplate_v5(); + template.setAmount(internalItem.getAmount()); + template.setName(internalItem.getName()); + template.setCategory(new CategoryConverter_v5().convertToExternalForm(internalItem.getCategory())); + template.setDescription(internalItem.getDescription()); + template.setExpenditure(internalItem.getExpenditure()); + template.setAccount(new AccountConverter_v5().convertToExternalForm(internalItem.getAccount())); + template.setTransferAccount(new AccountConverter_v5().convertToExternalForm(internalItem.getTransferAccount())); + template.setTags(internalItem.getTags()); + template.setTemplateName(internalItem.getTemplateName()); + template.setIcon(new ImageConverter_v5().convertToExternalForm(internalItem.getIcon())); return template; } } diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/TransactionConverter_v5.java b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/TransactionConverter_v5.java index fc65eeea9cd42916f00ecf677d52b7f75ac043f7..704ab69be0f7e761446eab0a8acffb37a56063dc 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/TransactionConverter_v5.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/model/v5/converter/TransactionConverter_v5.java @@ -8,7 +8,7 @@ import org.joda.time.format.DateTimeFormat; public class TransactionConverter_v5 implements Converter<Transaction, BackupTransaction_v5> { - public Transaction convert(BackupTransaction_v5 backupTransaction) + public Transaction convertToInternalForm(BackupTransaction_v5 backupTransaction) { if(backupTransaction == null) { @@ -18,14 +18,36 @@ public class TransactionConverter_v5 implements Converter<Transaction, BackupTra final Transaction transaction = new Transaction(); transaction.setAmount(backupTransaction.getAmount()); transaction.setName(backupTransaction.getName()); - transaction.setCategory(new CategoryConverter_v5().convert(backupTransaction.getCategory())); + transaction.setCategory(new CategoryConverter_v5().convertToInternalForm(backupTransaction.getCategory())); transaction.setDescription(backupTransaction.getDescription()); transaction.setIsExpenditure(backupTransaction.getExpenditure()); - transaction.setAccount(new AccountConverter_v5().convert(backupTransaction.getAccount())); - transaction.setTransferAccount(new AccountConverter_v5().convert(backupTransaction.getTransferAccount())); + transaction.setAccount(new AccountConverter_v5().convertToInternalForm(backupTransaction.getAccount())); + transaction.setTransferAccount(new AccountConverter_v5().convertToInternalForm(backupTransaction.getTransferAccount())); transaction.setDate(DateTime.parse(backupTransaction.getDate(), DateTimeFormat.forPattern("yyyy-MM-dd"))); transaction.setTags(backupTransaction.getTags()); - transaction.setRepeatingOption(new RepeatingOptionConverter_v5().convert(backupTransaction.getRepeatingOption())); + transaction.setRepeatingOption(new RepeatingOptionConverter_v5().convertToInternalForm(backupTransaction.getRepeatingOption())); + return transaction; + } + + @Override + public BackupTransaction_v5 convertToExternalForm(Transaction internalItem) + { + if(internalItem == null) + { + return null; + } + + final BackupTransaction_v5 transaction = new BackupTransaction_v5(); + transaction.setAmount(internalItem.getAmount()); + transaction.setName(internalItem.getName()); + transaction.setCategory(new CategoryConverter_v5().convertToExternalForm(internalItem.getCategory())); + transaction.setDescription(internalItem.getDescription()); + transaction.setExpenditure(internalItem.getExpenditure()); + transaction.setAccount(new AccountConverter_v5().convertToExternalForm(internalItem.getAccount())); + transaction.setTransferAccount(new AccountConverter_v5().convertToExternalForm(internalItem.getTransferAccount())); + transaction.setDate(internalItem.getDate().toString(DateTimeFormat.forPattern("yyyy-MM-dd"))); + transaction.setTags(internalItem.getTags()); + transaction.setRepeatingOption(new RepeatingOptionConverter_v5().convertToExternalForm(internalItem.getRepeatingOption())); return transaction; } }