Skip to content
Snippets Groups Projects
Commit 61238c44 authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#259 - improved import error handling

parent 030c8d7c
No related branches found
No related tags found
No related merge requests found
Pipeline #175 passed
...@@ -5,6 +5,7 @@ import de.deadlocker8.budgetmaster.authentication.UserRepository; ...@@ -5,6 +5,7 @@ import de.deadlocker8.budgetmaster.authentication.UserRepository;
import de.deadlocker8.budgetmaster.database.Database; import de.deadlocker8.budgetmaster.database.Database;
import de.deadlocker8.budgetmaster.database.DatabaseParser; import de.deadlocker8.budgetmaster.database.DatabaseParser;
import de.deadlocker8.budgetmaster.entities.Settings; import de.deadlocker8.budgetmaster.entities.Settings;
import de.deadlocker8.budgetmaster.repositories.AccountRepository;
import de.deadlocker8.budgetmaster.repositories.SettingsRepository; import de.deadlocker8.budgetmaster.repositories.SettingsRepository;
import de.deadlocker8.budgetmaster.services.DatabaseService; import de.deadlocker8.budgetmaster.services.DatabaseService;
import de.deadlocker8.budgetmaster.services.HelpersService; import de.deadlocker8.budgetmaster.services.HelpersService;
...@@ -48,6 +49,9 @@ public class SettingsController extends BaseController ...@@ -48,6 +49,9 @@ public class SettingsController extends BaseController
@Autowired @Autowired
private DatabaseService databaseService; private DatabaseService databaseService;
@Autowired
private AccountRepository accountRepository;
@RequestMapping("/settings") @RequestMapping("/settings")
public String settings(Model model) public String settings(Model model)
{ {
...@@ -187,7 +191,7 @@ public class SettingsController extends BaseController ...@@ -187,7 +191,7 @@ public class SettingsController extends BaseController
} }
@RequestMapping("/settings/database/upload") @RequestMapping("/settings/database/upload")
public String upload(@RequestParam("file") MultipartFile file) public String upload(Model model, @RequestParam("file") MultipartFile file)
{ {
if(file.isEmpty()) if(file.isEmpty())
{ {
...@@ -199,12 +203,12 @@ public class SettingsController extends BaseController ...@@ -199,12 +203,12 @@ public class SettingsController extends BaseController
String jsonString = new String(file.getBytes()); String jsonString = new String(file.getBytes());
DatabaseParser importer = new DatabaseParser(jsonString); DatabaseParser importer = new DatabaseParser(jsonString);
Database database = importer.parseDatabaseFromJSON(); Database database = importer.parseDatabaseFromJSON();
} }
catch(Exception e) catch(Exception e)
{ {
//TODO
e.printStackTrace(); e.printStackTrace();
model.addAttribute("errorImportDatabase", e.getMessage());
return "settings";
} }
//TODO redirect to account combination page //TODO redirect to account combination page
......
...@@ -2,9 +2,11 @@ package de.deadlocker8.budgetmaster.database; ...@@ -2,9 +2,11 @@ package de.deadlocker8.budgetmaster.database;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import com.google.gson.stream.MalformedJsonException;
import de.deadlocker8.budgetmaster.database.legacy.LegacyParser; import de.deadlocker8.budgetmaster.database.legacy.LegacyParser;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import tools.Localization;
public class DatabaseParser public class DatabaseParser
{ {
...@@ -17,6 +19,8 @@ public class DatabaseParser ...@@ -17,6 +19,8 @@ public class DatabaseParser
} }
public Database parseDatabaseFromJSON() throws IllegalArgumentException public Database parseDatabaseFromJSON() throws IllegalArgumentException
{
try
{ {
JsonObject root = new JsonParser().parse(jsonString).getAsJsonObject(); JsonObject root = new JsonParser().parse(jsonString).getAsJsonObject();
String type = root.get("TYPE").getAsString(); String type = root.get("TYPE").getAsString();
...@@ -38,6 +42,11 @@ public class DatabaseParser ...@@ -38,6 +42,11 @@ public class DatabaseParser
return new DatabaseParser_v3(jsonString).parseDatabaseFromJSON(); return new DatabaseParser_v3(jsonString).parseDatabaseFromJSON();
} }
throw new IllegalArgumentException("unknown BUDGETMASTER_DATABASE version"); throw new IllegalArgumentException(Localization.getString("error.database.import.unknown.version"));
}
catch(Exception e)
{
throw new IllegalArgumentException(Localization.getString("error.database.import.invalid.json"));
}
} }
} }
\ No newline at end of file
...@@ -21,7 +21,6 @@ public class DatabaseParser_v3 ...@@ -21,7 +21,6 @@ public class DatabaseParser_v3
private List<Category> categories; private List<Category> categories;
private List<Account> accounts; private List<Account> accounts;
public DatabaseParser_v3(String json) public DatabaseParser_v3(String json)
{ {
this.jsonString = json; this.jsonString = json;
......
...@@ -17,6 +17,11 @@ errorpages.418=I'm a teapot. ...@@ -17,6 +17,11 @@ errorpages.418=I'm a teapot.
errorpages.418.credits=Teapot icon made by <a href="http://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a> errorpages.418.credits=Teapot icon made by <a href="http://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a>
errorpages.500=Ein interner Serverfehler ist aufgetreten. errorpages.500=Ein interner Serverfehler ist aufgetreten.
error.title.database.import=Importfehler
error.text.database.import=Beim Importieren der Datei ist ein Fehler aufgetreten.<br>Details:<br>{0}
error.database.import.invalid.json=Die hochgeladene JSON Datei ist ungltig.
error.database.import.unknown.version=Die hochgeladene JSON Datei enthlt keine gltige Definition einerBudgetMaster Datenbank.
# TITLE # TITLE
title.incomes=Einnahmen title.incomes=Einnahmen
title.income=Einnahme title.income=Einnahme
...@@ -81,6 +86,7 @@ info.text.payment.delete=M ...@@ -81,6 +86,7 @@ info.text.payment.delete=M
info.title.database.delete=Datenbank lschen info.title.database.delete=Datenbank lschen
info.header.text.database.delete=Soll die Datenbank wirklich unwiderruflich gelscht werden? info.header.text.database.delete=Soll die Datenbank wirklich unwiderruflich gelscht werden?
info.text.database.delete=Zur Besttigung gib folgenden Code ein:\t{0} info.text.database.delete=Zur Besttigung gib folgenden Code ein:\t{0}
info.title.database.import.dialog=Datenbank importieren
# WARNING # WARNING
warning.text.account.delete=Das Konto "{0}" kann nicht gelscht werden, da mindestens ein Konto existieren muss. Um dieses Konto zu lschen musst du zuerst ein neues anlegen. warning.text.account.delete=Das Konto "{0}" kann nicht gelscht werden, da mindestens ein Konto existieren muss. Um dieses Konto zu lschen musst du zuerst ein neues anlegen.
......
...@@ -17,6 +17,11 @@ errorpages.418=I''m a teapot. ...@@ -17,6 +17,11 @@ errorpages.418=I''m a teapot.
errorpages.418.credits=Teapot icon made by <a href="http://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a> errorpages.418.credits=Teapot icon made by <a href="http://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> is licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a>
errorpages.500=An internal server error occurred. errorpages.500=An internal server error occurred.
error.title.database.import=Import Error
error.text.database.import=An error occurred while importing the file.<br>Details:<br>{0}
error.database.import.invalid.json=The uploaded JSON File is invalid.
error.database.import.unknown.version=The uploaded JSON File does not contain a valid BudgetMaster database definition.
# TITLE # TITLE
title.incomes=Incomes title.incomes=Incomes
title.income=Income title.income=Income
...@@ -81,6 +86,7 @@ info.text.payment.delete=Do you really want to delete the entry "{0}"? This can' ...@@ -81,6 +86,7 @@ info.text.payment.delete=Do you really want to delete the entry "{0}"? This can'
info.title.database.delete=Delete Database info.title.database.delete=Delete Database
info.header.text.database.delete=Do you really want to delete the database? This can''t be undone. info.header.text.database.delete=Do you really want to delete the database? This can''t be undone.
info.text.database.delete=Please enter the following code for verification:\t{0} info.text.database.delete=Please enter the following code for verification:\t{0}
info.title.database.import.dialog=Import database
# WARNING # WARNING
warning.text.account.delete=The account "{0}" could not be deleted, because at least one account must exist at all time. You have to create a new account in order to delete this one. warning.text.account.delete=The account "{0}" could not be deleted, because at least one account must exist at all time. You have to create a new account in order to delete this one.
......
...@@ -229,6 +229,18 @@ ...@@ -229,6 +229,18 @@
</div> </div>
</#if> </#if>
<#if errorImportDatabase??>
<div id="modalErrorImportDatabase" class="modal background-color">
<div class="modal-content">
<h4>${locale.getString("error.title.database.import")}</h4>
<p>${locale.getString("error.text.database.import", errorImportDatabase)}</p>
</div>
<div class="modal-footer background-color">
<a href="/settings" class="modal-action modal-close waves-effect waves-red btn-flat ">${locale.getString("ok")}</a>
</div>
</div>
</#if>
<!-- Scripts--> <!-- Scripts-->
<#import "scripts.ftl" as scripts> <#import "scripts.ftl" as scripts>
<@scripts.scripts/> <@scripts.scripts/>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment