Optimized Exception handling for De-/Serialization in PrivateBank.java

This commit is contained in:
2024-12-09 17:11:48 +01:00
parent 39bc86e798
commit dbb7c99ae3
2 changed files with 41 additions and 13 deletions

View File

@@ -367,7 +367,7 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
*
* @throws IOException if an error occurs while deserializing
*/
public void readAccounts() throws IOException, java.io.IOException, AccountAlreadyExistsException, TransactionAlreadyExistException, TransactionAttributeException {
public void readAccounts() throws IOException, AccountAlreadyExistsException, TransactionAlreadyExistException, TransactionAttributeException {
/*
1. JSONs einlesen
2. for each Transaction
@@ -375,23 +375,30 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
2. Objekte in einer Liste zusammenführen
3. Konto mit einer Liste von Transaktionen erzeugen
*/
List<Transaction> transactions = new ArrayList<>();
File directory = new File(directoryName);
File[] files = directory.listFiles();
if (files != null) {
// jedes file ist ein Konto
for (File file : files) {
List<Transaction> transactions;
String accountName = file.getName().substring(0, file.getName().lastIndexOf("."));
String jsonContent;
try {
jsonContent = Files.readString(Paths.get(directoryName + "/" + file.getName()));
} catch (java.io.IOException e) {
System.out.println("Zum Account: " + accountName + " konnte die Datei nicht geöffnet werden");
continue;
}
String jsonContent = Files.readString(Paths.get(directoryName + "/" + file.getName()));
JsonElement accountData = JsonParser.parseString(jsonContent);
for (JsonElement account : accountData.getAsJsonArray()) {
JsonObject accountObject = account.getAsJsonObject();
Transaction t = deserialize(accountObject, null, null);
transactions.add(t);
try{
transactions = readAccountHelper(accountData, accountName);
} catch (IOException e){
System.out.println(e);
continue;
}
createAccount(accountName, transactions);
@@ -399,6 +406,21 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
}
}
private List<Transaction> readAccountHelper(JsonElement accountData, String accountName) throws IOException {
List<Transaction> transactions = new ArrayList<>();
for (JsonElement account : accountData.getAsJsonArray()) {
JsonObject accountObject = account.getAsJsonObject();
Transaction t;
try{
t = deserialize(accountObject, null, null);
} catch (JsonParseException e){
throw new IOException("Fehler beim Laden des Accounts: " + accountName);
}
transactions.add(t);
}
return transactions;
}
/**
* Export Account to JSON
*
@@ -415,7 +437,11 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
List<Transaction> transactions = this.accountsToTransactions.get(account);
for (Transaction transaction : transactions)
accountData.add(serialize(transaction, null, null));
try{
accountData.add(serialize(transaction, null, null));
} catch (JsonParseException e){
throw new IOException("Fehler beim Speichern des Accounts: " + account);
}
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String filename = directoryName + "/" + account + ".json";
@@ -458,8 +484,9 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
case "Payment":
return new Payment(date, amount, description, transactionInstance.get("incomingInterest").getAsDouble(), transactionInstance.get("outgoingInterest").getAsDouble());
default:
throw new JsonParseException("Unknown transaction type: " + transactionType);
}
return null;
}
/**
@@ -482,7 +509,8 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
else if (transaction instanceof Payment)
rootObject.addProperty("CLASSNAME", "Payment");
else
throw new JsonParseException("Unknown transaction type: " + transaction.getClass().getName());
JsonObject jsonObject = new JsonObject();

View File

@@ -1,7 +1,7 @@
package bank.exceptions;
public class IOException extends Exception {
public IOException() {
super("Fehler in der De-/ Serialisierung der Daten");
public IOException(String message) {
super("Fehler in der De-/ Serialisierung der Daten. " + message);
}
}