package org.openbankdata.core.service;
import org.openbankdata.core.Account;
import org.openbankdata.core.Transaction;
import org.joda.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
* Abstract class with default implementation and helpers to classes that implements the
* {@link TransactionService} interface.
*/
public abstract class AbstractTransactionService implements
TransactionService {
@Override
public List<Transaction> getTransactions(Account pAccount, LocalDate pFromDateTime) {
return getTransactions(pAccount, pFromDateTime, null);
}
@Override
public List<Transaction> getTransactions(Account pAccount) {
return getTransactions(pAccount, null, null);
}
protected List<Transaction> filterTransactions(List<Transaction> pTransactions,
LocalDate pFromDateTime, LocalDate pToDateTime) {
List<Transaction> transactions = new ArrayList<Transaction>();
if (pTransactions == null || pTransactions.isEmpty()) {
return transactions;
}
for (Transaction transaction : pTransactions) {
if (isTransactionWithinRange(transaction, pFromDateTime, pToDateTime)) {
transactions.add(transaction);
}
}
return transactions;
}
private boolean isTransactionWithinRange(Transaction pTransaction, LocalDate pFromDate,
LocalDate pToDate) {
LocalDate transactionDate = pTransaction.getTransactionDate();
return (pFromDate == null || pFromDate.equals(transactionDate) || pFromDate
.isBefore(transactionDate))
&& (pToDate == null || pToDate.equals(transactionDate) || pToDate.isAfter(transactionDate));
}
}