Add mutable & immutable transaction interfaces and implementations, replacing copy()

This commit is contained in:
Allink 2023-05-20 20:20:39 +01:00
parent 95df78da6f
commit 036ddf3e04
No known key found for this signature in database
9 changed files with 77 additions and 50 deletions

View File

@ -1,30 +1,47 @@
package me.totalfreedom.fossil.economy; package me.totalfreedom.fossil.economy;
import me.totalfreedom.economy.CompletedTransaction; import me.totalfreedom.economy.CompletedTransaction;
import me.totalfreedom.economy.EconomicEntity;
import me.totalfreedom.economy.Transaction; import me.totalfreedom.economy.Transaction;
import me.totalfreedom.economy.TransactionResult; import me.totalfreedom.economy.TransactionResult;
public class SimpleCompletedTransaction implements CompletedTransaction public class SimpleCompletedTransaction implements CompletedTransaction
{ {
private final Transaction transaction;
private final TransactionResult transactionResult; private final TransactionResult transactionResult;
private final EconomicEntity source;
private final EconomicEntity destination;
private final long balance;
public SimpleCompletedTransaction(Transaction transaction, TransactionResult transactionResult) public SimpleCompletedTransaction(Transaction transaction, TransactionResult transactionResult)
{ {
this.transaction = transaction.copy();
this.source = transaction.getSource();
this.destination = transaction.getDestination();
this.balance = transaction.getBalance();
this.transactionResult = transactionResult; this.transactionResult = transactionResult;
} }
@Override
public Transaction getTransaction()
{
return transaction.copy();
}
@Override @Override
public TransactionResult getResult() public TransactionResult getResult()
{ {
return transactionResult; return transactionResult;
} }
@Override
public EconomicEntity getSource()
{
return source;
}
@Override
public EconomicEntity getDestination()
{
return destination;
}
@Override
public long getBalance()
{
return balance;
}
} }

View File

@ -1,7 +1,7 @@
package me.totalfreedom.fossil.economy; package me.totalfreedom.fossil.economy;
import me.totalfreedom.economy.CompletedTransaction; import me.totalfreedom.economy.CompletedTransaction;
import me.totalfreedom.economy.Transaction; import me.totalfreedom.economy.MutableTransaction;
import me.totalfreedom.economy.TransactionLogger; import me.totalfreedom.economy.TransactionLogger;
import me.totalfreedom.economy.Transactor; import me.totalfreedom.economy.Transactor;
@ -22,7 +22,7 @@ public class SimpleLoggedTransactor implements Transactor
} }
@Override @Override
public CompletedTransaction handleTransaction(Transaction transaction) public CompletedTransaction handleTransaction(MutableTransaction transaction)
{ {
CompletedTransaction completedTransaction = transactor.handleTransaction(transaction); CompletedTransaction completedTransaction = transactor.handleTransaction(transaction);

View File

@ -0,0 +1,30 @@
package me.totalfreedom.fossil.economy;
import me.totalfreedom.economy.EconomicEntity;
import me.totalfreedom.economy.MutableTransaction;
public class SimpleMutableTransaction extends SimpleTransaction implements MutableTransaction
{
public SimpleMutableTransaction(EconomicEntity source, EconomicEntity destination, long balance)
{
super(source, destination, balance);
}
@Override
public long addToBalance(long amount)
{
return balance.addAndGet(amount);
}
@Override
public long removeFromBalance(long amount)
{
return this.addToBalance(-amount);
}
@Override
public void setBalance(long newBalance)
{
balance.set(newBalance);
}
}

View File

@ -9,7 +9,7 @@ public class SimpleTransaction implements Transaction
{ {
private final EconomicEntity source; private final EconomicEntity source;
private final EconomicEntity destination; private final EconomicEntity destination;
private final AtomicLong balance; protected final AtomicLong balance;
public SimpleTransaction(EconomicEntity source, EconomicEntity destination, long balance) public SimpleTransaction(EconomicEntity source, EconomicEntity destination, long balance)
{ {
@ -18,12 +18,6 @@ public class SimpleTransaction implements Transaction
this.balance = new AtomicLong(balance); this.balance = new AtomicLong(balance);
} }
@Override
public Transaction copy()
{
return new SimpleTransaction(source, destination, balance.get());
}
@Override @Override
public EconomicEntity getSource() public EconomicEntity getSource()
{ {
@ -41,22 +35,4 @@ public class SimpleTransaction implements Transaction
{ {
return balance.get(); return balance.get();
} }
@Override
public long addToBalance(long amount)
{
return balance.addAndGet(amount);
}
@Override
public long removeFromBalance(long amount)
{
return this.addToBalance(-amount);
}
@Override
public void setBalance(long newBalance)
{
balance.set(newBalance);
}
} }

View File

@ -5,9 +5,8 @@ import me.totalfreedom.economy.*;
public class SimpleTransactor implements Transactor public class SimpleTransactor implements Transactor
{ {
@Override @Override
public CompletedTransaction handleTransaction(Transaction transaction) public CompletedTransaction handleTransaction(MutableTransaction transaction)
{ {
Transaction transactionCopy = transaction.copy();
EconomicEntity source = transaction.getSource(); EconomicEntity source = transaction.getSource();
EconomicEntityData sourceData = source.getEconomicData(); EconomicEntityData sourceData = source.getEconomicData();
@ -28,7 +27,7 @@ public class SimpleTransactor implements Transactor
if (diff > 0) if (diff > 0)
{ {
return new SimpleCompletedTransaction(transactionCopy, SimpleTransactionResult.INSUFFICIENT_FUNDS); return new SimpleCompletedTransaction(transaction, SimpleTransactionResult.INSUFFICIENT_FUNDS);
} }
EconomicEntity destination = transaction.getDestination(); EconomicEntity destination = transaction.getDestination();
@ -42,6 +41,6 @@ public class SimpleTransactor implements Transactor
sourceData.removeFromBalance(transactionAmount); sourceData.removeFromBalance(transactionAmount);
destinationData.addToBalance(transactionAmount); destinationData.addToBalance(transactionAmount);
return new SimpleCompletedTransaction(transactionCopy, SimpleTransactionResult.SUCCESSFUL); return new SimpleCompletedTransaction(transaction, SimpleTransactionResult.SUCCESSFUL);
} }
} }

View File

@ -1,8 +1,7 @@
package me.totalfreedom.economy; package me.totalfreedom.economy;
public interface CompletedTransaction public interface CompletedTransaction extends Transaction
{ {
Transaction getTransaction();
TransactionResult getResult(); TransactionResult getResult();
} }

View File

@ -0,0 +1,13 @@
package me.totalfreedom.economy;
/**
* Please ensure that all modifications of {@link MutableTransaction} happen BEFORE it is passed to a {@link Transactor} implementation
*/
public interface MutableTransaction extends Transaction
{
long addToBalance(final long amount);
long removeFromBalance(final long amount);
void setBalance(final long newBalance);
}

View File

@ -2,17 +2,10 @@ package me.totalfreedom.economy;
public interface Transaction public interface Transaction
{ {
Transaction copy();
EconomicEntity getSource(); EconomicEntity getSource();
EconomicEntity getDestination(); EconomicEntity getDestination();
long getBalance(); long getBalance();
long addToBalance(final long amount);
long removeFromBalance(final long amount);
void setBalance(final long newBalance);
} }

View File

@ -2,5 +2,5 @@ package me.totalfreedom.economy;
public interface Transactor public interface Transactor
{ {
CompletedTransaction handleTransaction(Transaction transaction); CompletedTransaction handleTransaction(MutableTransaction transaction);
} }