package pt.ist.expenditureTrackingSystem.domain.statistics;
import java.io.Serializable;
import java.util.Map;
import java.util.TreeMap;
import pt.ist.expenditureTrackingSystem.domain.ExpenditureTrackingSystem;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.PaymentProcess;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.PaymentProcessYear;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.RefundProcessStateType;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.refund.RefundProcess;
public class RefundProcessStatistics implements Serializable {
private int numberOfProcesses = 0;
private int[] numberOfProcessesByRefundProcessStateType = new int[RefundProcessStateType.values().length];
public RefundProcessStatistics(final PaymentProcessYear acquisitionProcessYear) {
for (int i = 0; i < RefundProcessStateType.values().length; i++) {
numberOfProcessesByRefundProcessStateType[i] = 0;
}
for (final PaymentProcess paymentProcess : acquisitionProcessYear.getPaymentProcessSet()) {
if (paymentProcess.isRefundProcess()) {
final RefundProcess refundProcess = (RefundProcess) paymentProcess;
accountFor(refundProcess);
}
}
}
private void accountFor(final RefundProcess refundProcess) {
numberOfProcesses++;
final RefundProcessStateType refundProcessStateType = refundProcess.getProcessState().getRefundProcessStateType();
numberOfProcessesByRefundProcessStateType[refundProcessStateType.ordinal()]++;
}
public static RefundProcessStatistics create(final Integer year) {
if (year != null) {
final int y = year.intValue();
for (final PaymentProcessYear paymentProcessYear : ExpenditureTrackingSystem.getInstance()
.getPaymentProcessYearsSet()) {
if (paymentProcessYear.getYear().intValue() == y) {
return create(paymentProcessYear);
}
}
}
return null;
}
private static RefundProcessStatistics create(final PaymentProcessYear paymentProcessYear) {
return new RefundProcessStatistics(paymentProcessYear);
}
public int getNumberOfProcesses() {
return numberOfProcesses;
}
public Map<RefundProcessStateType, Integer> getNumberOfProcessesByRefundProcessStateType() {
final Map<RefundProcessStateType, Integer> map = new TreeMap<RefundProcessStateType, Integer>();
for (final RefundProcessStateType refundProcessStateType : RefundProcessStateType.values()) {
map.put(refundProcessStateType,
Integer.valueOf(numberOfProcessesByRefundProcessStateType[refundProcessStateType.ordinal()]));
}
return map;
}
}