Compare commits

4 Commits
master ... P4

4 changed files with 55 additions and 330 deletions

View File

@@ -1,315 +1,7 @@
import bank.*;
import bank.exceptions.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
private static void testingTransactions(Payment p1, Payment p2, Transfer t1, Transfer t2) throws TransactionAttributeException {
System.out.println("Basic Testcases------------------");
Payment p1c = new Payment(p1);
Payment p2c = new Payment(p2);
System.out.print(p1);
System.out.print(p2);
System.out.print(p1c);
System.out.print(p2c);
Transfer t1c = new Transfer(t1);
Transfer t2c = new Transfer(t2);
System.out.print(t1);
System.out.print(t2);
System.out.print(t1c);
System.out.print(t2c);
System.out.println("\nTest Edgecases-----------------");
setInterestRateCatch(p2, -0.5);
setInterestRateCatch(p2, 1.5);
setAmountCatch(t1, -5);
System.out.println("\nCompare Payments--------------");
System.out.println(p1.equals(p1c));
System.out.println(p1.equals(p2));
System.out.println(p1.equals(new ArrayList<>()));
System.out.println(p1.equals(null));
System.out.println("\nCompare Transfers-------------");
System.out.println(t1.equals(t1c));
System.out.println(t1.equals(t2));
}
private static void testingBankWithTransactions(Transaction t1, Transaction t2, Transaction t3, Transaction t4, PrivateBank bank, String person) {
// ------------------------ Bank: Adding Payments
if(t1 instanceof Payment){
System.out.println("\n------------------------ Bank: Adding Payment");
System.out.println("p1 IncIntr. before adding : 0.0 = " + ((Payment) t1).getIncomingInterest());
System.out.println("p1 OutIntr. before adding : 0.0 = " + ((Payment) t1).getOutgoingInterest());
System.out.println("p2 IncIntr. before adding : 0.0 = " + ((Payment) t2).getIncomingInterest());
System.out.println("p2 OutIntr. before adding : 0.0 = " + ((Payment) t2).getOutgoingInterest());
System.out.println("p3 IncIntr. before adding : 0.5 = " + ((Payment) t3).getIncomingInterest());
System.out.println("p3 OutIntr. before adding : 0.0 = " + ((Payment) t3).getOutgoingInterest());
System.out.println("p4 IncIntr. before adding : 0.0 = " + ((Payment) t4).getIncomingInterest());
System.out.println("p4 OutIntr. before adding : 0.25= " + ((Payment) t4).getOutgoingInterest());
}
else if(t1 instanceof IncomingTransfer){
System.out.println("\n------------------------ Bank: Adding IncomingTransfer");
System.out.println("t1 Sender before adding : = " + ((IncomingTransfer) t1).getSender());
System.out.println("t1 Recipient before adding : = " + ((IncomingTransfer) t1).getRecipient());
System.out.println("t2 Sender before adding : Mustermann = " + ((IncomingTransfer) t2).getSender());
System.out.println("t2 Recipient before adding : Musterfrau = " + ((IncomingTransfer) t2).getRecipient());
System.out.println("t3 Sender before adding : Max Mustermann = " + ((IncomingTransfer) t3).getSender());
System.out.println("t3 Recipient before adding : Maria Musterfrau = " + ((IncomingTransfer) t3).getRecipient());
System.out.println("t4 Sender before adding : Maria Musterfrau = " + ((IncomingTransfer) t4).getSender());
System.out.println("t4 Recipient before adding : Max Musterman = " + ((IncomingTransfer) t4).getRecipient());
}
else if(t1 instanceof OutgoingTransfer){
System.out.println("\n------------------------ Bank: Adding OutgoingTransfer");
System.out.println("t1 Sender before adding : = " + ((OutgoingTransfer) t1).getSender());
System.out.println("t1 Recipient before adding : = " + ((OutgoingTransfer) t1).getRecipient());
System.out.println("t2 Sender before adding : Mustermann = " + ((OutgoingTransfer) t2).getSender());
System.out.println("t2 Recipient before adding : Musterfrau = " + ((OutgoingTransfer) t2).getRecipient());
System.out.println("t3 Sender before adding : Max Mustermann = " + ((OutgoingTransfer) t3).getSender());
System.out.println("t3 Recipient before adding : Maria Musterfrau = " + ((OutgoingTransfer) t3).getRecipient());
System.out.println("t4 Sender before adding : Maria Musterfrau = " + ((OutgoingTransfer) t4).getSender());
System.out.println("t4 Recipient before adding : Max Musterman = " + ((OutgoingTransfer) t4).getRecipient());
}
addingTransactionCatch(bank, person, t1);
addingTransactionCatch(bank, person, t1);
addingTransactionCatch(bank, person, t2);
addingTransactionCatch(bank, person, t3);
addingTransactionCatch(bank, person, t4);
System.out.println("\n------------------------ Bank: Printing Transactions");
List<Transaction> p = bank.getTransactions(person);
p.forEach(System.out::println);
System.out.println("\n------------------------ Bank: Printing Balance");
double balanceP1 = bank.getAccountBalance(person);
System.out.println("balance of Person1 " + person + " = " + balanceP1);
System.out.println("Payment = -15; Outgoing = -12.5; Incoming = 5");
System.out.println("\n------------------------ Bank: Removing Transaction");
removingTransactionCatch(bank, person, t1);
removingTransactionCatch(bank, person, t1);
removingTransactionCatch(bank, person, t2);
removingTransactionCatch(bank, person, t3);
removingTransactionCatch(bank, person, t4);
System.out.println("\n------------------------ Bank: Printing Transactions");
p = bank.getTransactions(person);
p.forEach(System.out::println);
System.out.println("\n------------------------ Bank: Printing Balance");
balanceP1 = bank.getAccountBalance(person);
System.out.println("balance of Person1 " + person + " 0 = " + balanceP1);
}
/*
private static void testingBankWithListOfTransactions(List transactions, PrivateBank bank, String person) {
// ------------------------ Bank: Adding Payments
if(transactions.getFirst() instanceof Payment){
System.out.println("\n------------------------ Bank: Adding Payment");
System.out.println("p1 IncIntr. before adding : 0.0 = " + ((Payment) transactions.get(0)).getIncomingInterest());
System.out.println("p1 OutIntr. before adding : 0.0 = " + ((Payment) transactions.get(0)).getOutgoingInterest());
System.out.println("p2 IncIntr. before adding : 0.0 = " + ((Payment) transactions.get(1)).getIncomingInterest());
System.out.println("p2 OutIntr. before adding : 0.0 = " + ((Payment) transactions.get(1)).getOutgoingInterest());
System.out.println("p3 IncIntr. before adding : 0.5 = " + ((Payment) transactions.get(2)).getIncomingInterest());
System.out.println("p3 OutIntr. before adding : 0.0 = " + ((Payment) transactions.get(2)).getOutgoingInterest());
System.out.println("p4 IncIntr. before adding : 0.0 = " + ((Payment) transactions.get(3)).getIncomingInterest());
System.out.println("p4 OutIntr. before adding : 0.25= " + ((Payment) transactions.get(3)).getOutgoingInterest());
}
else if(transactions.getFirst() instanceof IncomingTransfer){
System.out.println("\n------------------------ Bank: Adding IncomingTransfer");
System.out.println("t1 Sender before adding : = " + ((IncomingTransfer) transactions.get(0)).getSender());
System.out.println("t1 Recipient before adding : = " + ((IncomingTransfer) transactions.get(0)).getRecipient());
System.out.println("t2 Sender before adding : Mustermann = " + ((IncomingTransfer) transactions.get(1)).getSender());
System.out.println("t2 Recipient before adding : Musterfrau = " + ((IncomingTransfer) transactions.get(1)).getRecipient());
System.out.println("t3 Sender before adding : Max Mustermann = " + ((IncomingTransfer) transactions.get(2)).getSender());
System.out.println("t3 Recipient before adding : Maria Musterfrau = " + ((IncomingTransfer) transactions.get(2)).getRecipient());
System.out.println("t4 Sender before adding : Maria Musterfrau = " + ((IncomingTransfer) transactions.get(3)).getSender());
System.out.println("t4 Recipient before adding : Max Musterman = " + ((IncomingTransfer) transactions.get(3)).getRecipient());
}
else if(transactions.getFirst() instanceof OutgoingTransfer){
System.out.println("\n------------------------ Bank: Adding OutgoingTransfer");
System.out.println("t1 Sender before adding : = " + ((OutgoingTransfer) transactions.get(0)).getSender());
System.out.println("t1 Recipient before adding : = " + ((OutgoingTransfer) transactions.get(0)).getRecipient());
System.out.println("t2 Sender before adding : Mustermann = " + ((OutgoingTransfer) transactions.get(1)).getSender());
System.out.println("t2 Recipient before adding : Musterfrau = " + ((OutgoingTransfer) transactions.get(1)).getRecipient());
System.out.println("t3 Sender before adding : Max Mustermann = " + ((OutgoingTransfer) transactions.get(2)).getSender());
System.out.println("t3 Recipient before adding : Maria Musterfrau = " + ((OutgoingTransfer) transactions.get(2)).getRecipient());
System.out.println("t4 Sender before adding : Maria Musterfrau = " + ((OutgoingTransfer) transactions.get(3)).getSender());
System.out.println("t4 Recipient before adding : Max Musterman = " + ((OutgoingTransfer) transactions.get(3)).getRecipient());
}
addingTransactionCatch(bank, person, t1);
addingTransactionCatch(bank, person, t1);
addingTransactionCatch(bank, person, t2);
addingTransactionCatch(bank, person, t3);
addingTransactionCatch(bank, person, t4);
System.out.println("\n------------------------ Bank: Printing Transactions");
List<Transaction> p = bank.getTransactions(person);
p.forEach(System.out::println);
System.out.println("\n------------------------ Bank: Printing Balance");
double balanceP1 = bank.getAccountBalance(person);
System.out.println("balance of Person1 " + person + " = " + balanceP1);
System.out.println("Payment = -15; Outgoing = -12.5; Incoming = 5");
System.out.println("\n------------------------ Bank: Removing Transaction");
removingTransactionCatch(bank, person, t1);
removingTransactionCatch(bank, person, t1);
removingTransactionCatch(bank, person, t2);
removingTransactionCatch(bank, person, t3);
removingTransactionCatch(bank, person, t4);
System.out.println("\n------------------------ Bank: Printing Transactions");
p = bank.getTransactions(person);
p.forEach(System.out::println);
System.out.println("\n------------------------ Bank: Printing Balance");
balanceP1 = bank.getAccountBalance(person);
System.out.println("balance of Person1 " + person + " 0 = " + balanceP1);
}
*/
// ------------------------ Catch-Helper ------------------------
private static void accountCreationCatch(Bank bank, String account){
try {
bank.createAccount(account);
} catch (Exception e) {
System.out.println(e);
}
}
private static void accountCreationWihtListCatch(Bank bank, String account, List<Transaction> transactions){
try {
bank.createAccount(account, transactions);
} catch (Exception e) {
System.out.println(e);
}
}
private static void setInterestRateCatch(Payment p, double interestrate) {
try {
p.setIncomingInterest(interestrate);
} catch (Exception e) {
System.out.println(e);
}
try {
p.setOutgoingInterest(interestrate);
} catch (Exception e) {
System.out.println(e);
}
}
private static void setAmountCatch(Transaction t, double amount) {
try {
t.setAmount(amount);
} catch (Exception e) {
System.out.println(e);
}
}
private static void addingTransactionCatch(Bank bank, String person, Transaction transaction) {
try {
bank.addTransaction(person, transaction);
} catch (Exception e) {
System.out.println(e);
}
}
private static void removingTransactionCatch(Bank bank, String person, Transaction transaction) {
try {
bank.removeTransaction(person, transaction);
} catch (Exception e) {
System.out.println(e);
}
}
// ------------------------ MAIN ------------------------
public static void main(String[] args) throws TransactionAttributeException, IOException, java.io.IOException, TransactionAlreadyExistException, AccountAlreadyExistsException, AccountDoesNotExistException {
String person1 = "Max Mustermann";
String person2 = "Maria Musterfrau";
String person3 = "Tom Mustermann";
String person4 = "Hannah Musterfrau";
// ------------------------ Transactions ------------------------
Payment p1 = new Payment("01.01.24", 10, "Verwendungszweck P1");
/*
Payment p2 = new Payment("01.01.24", 10, "Verwendungszweck P2", 0, 0);
Payment p3 = new Payment("01.01.24", -10, "Verwendungszweck P3", 0.5, 0);
Payment p4 = new Payment("01.01.24", -10, "Verwendungszweck P4", 0, 0.25);
Transfer t1 = new Transfer("01.01.24", 10, "Verwendungszweck T1");
Transfer t2 = new Transfer("01.01.24", 10, "Verwendungszweck T2", "Mustermann", "Musterfrau");
Transfer t3 = new Transfer("01.01.24", 10, "Verwendungszweck T3", person1, person2);
Transfer t4 = new Transfer("01.01.24", 10, "Verwendungszweck T4", person2, person1);
Transfer t5 = new Transfer("01.01.24", 15, "Verwendungszweck T5", person2, person3);
Transfer t6 = new Transfer("01.01.24", 20, "Verwendungszweck T6", person2, person4);
IncomingTransfer it1 = new IncomingTransfer(t1.getDate(), t1.getAmount(), t1.getDescription());
IncomingTransfer it2 = new IncomingTransfer(t2.getDate(), t2.getAmount(), t2.getDescription(), person2, person1);
IncomingTransfer it3 = new IncomingTransfer(t3.getDate(), t3.getAmount(), t3.getDescription(), person3, person1);
IncomingTransfer it4 = new IncomingTransfer(t4.getDate(), t4.getAmount(), t4.getDescription(), person4, person1);
IncomingTransfer it5 = new IncomingTransfer(t5.getDate(), t5.getAmount(), t5.getDescription(), person4, person1);
IncomingTransfer it6 = new IncomingTransfer(t6.getDate(), t6.getAmount(), t6.getDescription(), person3, person1);
OutgoingTransfer ot1 = new OutgoingTransfer(t1.getDate(), t1.getAmount(), t1.getDescription());
OutgoingTransfer ot2 = new OutgoingTransfer(t2.getDate(), t2.getAmount(), t2.getDescription(), person2, person1);
OutgoingTransfer ot3 = new OutgoingTransfer(t3.getDate(), t3.getAmount(), t3.getDescription(), person2, person1);
OutgoingTransfer ot4 = new OutgoingTransfer(t4.getDate(), t4.getAmount(), t4.getDescription(), person2, person3);
OutgoingTransfer ot5 = new OutgoingTransfer(t5.getDate(), t5.getAmount(), t5.getDescription(), person2, person3);
OutgoingTransfer ot6 = new OutgoingTransfer(t6.getDate(), t6.getAmount(), t6.getDescription(), person2, person4);
List<Transaction> paymentsList = new ArrayList<>(Arrays.asList(p1, p2, p3, p4));
List<Transaction> incomingTransfersList = new ArrayList<>(Arrays.asList(it2, it3, it4, it5, it6));
List<Transaction> outgoingTransferList = new ArrayList<>(Arrays.asList(ot2, ot3, ot4, ot5, ot6));
List<Transaction> incomingTransfersListWrong = new ArrayList<>(Arrays.asList(it1, it2, it3, it4, it5, it6));
List<Transaction> outgoingTransferListWrong = new ArrayList<>(Arrays.asList(ot1, ot2, ot3, ot4, ot5, ot6));
testingTransactions(p1, p2, t1, t2);
*/
// ------------------------ Bank ------------------------
System.out.println("\n------------------------ Bank");
PrivateBank bank = new PrivateBank("Sparkasse", 0.5, 0.25,"accountdata");
PrivateBank bank1 = new PrivateBank("Commerzbank", 0.5, 0.25,"accountdata");
// ------------------------ Bank: Adding Accounts
bank.readAccounts();
bank.writeAccount("Max");
bank.addTransaction("Max",p1);
bank.writeAccount("Max");
}
}
}

View File

@@ -221,7 +221,7 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
// 2 setting as incoming transfer
else if (transaction instanceof IncomingTransfer) {
if (((IncomingTransfer) transaction).getSender().equals("") || ((IncomingTransfer) transaction).getRecipient().equals(""))
if (((IncomingTransfer) transaction).getSender().isEmpty() || ((IncomingTransfer) transaction).getRecipient().isEmpty())
throw new TransactionAttributeException("Transfer without sender or recipient");
else if (((IncomingTransfer) transaction).getRecipient().equals(account))
@@ -232,7 +232,7 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
// 3 setting as outgoing transfer
else if (transaction instanceof OutgoingTransfer) {
if (((OutgoingTransfer) transaction).getSender().equals("") || ((OutgoingTransfer) transaction).getRecipient().equals(""))
if (((OutgoingTransfer) transaction).getSender().isEmpty() || ((OutgoingTransfer) transaction).getRecipient().isEmpty())
throw new TransactionAttributeException("Transfer without sender or recipient");
else if (((OutgoingTransfer) transaction).getSender().equals(account))
@@ -332,8 +332,16 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
*/
@Override
public List<Transaction> getTransactionsSorted(String account, boolean asc) {
List<Transaction> transactions = this.accountsToTransactions.get(account);
List<Transaction> transactions = new ArrayList<>(this.accountsToTransactions.get(account));
if (transactions == null || transactions.isEmpty())
return new ArrayList<>();
if (asc)
transactions.sort(Comparator.comparingDouble(Transaction::calculate));
else
transactions.sort(Comparator.comparingDouble(Transaction::calculate).reversed());
return transactions;
}
@@ -346,7 +354,7 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
*/
@Override
public List<Transaction> getTransactionsByType(String account, boolean positive) {
List<Transaction> transactions = this.accountsToTransactions.get(account);
List<Transaction> transactions = new ArrayList<>(this.accountsToTransactions.get(account));
if (positive)
transactions.removeIf(transaction -> transaction.calculate() >= 0);
else
@@ -359,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, AccountDoesNotExistException, TransactionAttributeException {
public void readAccounts() throws IOException, AccountAlreadyExistsException, TransactionAlreadyExistException, TransactionAttributeException {
/*
1. JSONs einlesen
2. for each Transaction
@@ -367,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);
@@ -391,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
*
@@ -407,7 +437,11 @@ public class PrivateBank implements Bank, JsonSerializer<Transaction>, JsonDeser
List<Transaction> transactions = this.accountsToTransactions.get(account);
for (Transaction transaction : transactions)
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";
@@ -450,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;
}
/**
@@ -474,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);
}
}

View File

@@ -6,9 +6,6 @@ import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@@ -23,7 +20,7 @@ public class PrivateBankTest {
@DisplayName("Set up a PrivateBank")
@BeforeAll
public static void init() throws AccountAlreadyExistsException, IOException, TransactionAlreadyExistException,
public static void init() throws AccountAlreadyExistsException, TransactionAlreadyExistException,
AccountDoesNotExistException, TransactionAttributeException {
String path = "accountdata";