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.AcquisitionProcessStateType;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.PaymentProcess;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.PaymentProcessYear;
import pt.ist.expenditureTrackingSystem.domain.acquisitions.simplified.SimplifiedProcedureProcess;
public class SimplifiedProcessStatistics implements Serializable {
private int numberOfProcesses = 0;
private int[] numberOfProcessesByAcquisitionProcessStateType = new int[AcquisitionProcessStateType.values().length];
public SimplifiedProcessStatistics(final PaymentProcessYear acquisitionProcessYear) {
for (int i = 0; i < AcquisitionProcessStateType.values().length; i++) {
numberOfProcessesByAcquisitionProcessStateType[i] = 0;
}
for (final PaymentProcess paymentProcess : acquisitionProcessYear.getPaymentProcessSet()) {
if (paymentProcess.isSimplifiedProcedureProcess()) {
final SimplifiedProcedureProcess simplifiedProcedureProcess = (SimplifiedProcedureProcess) paymentProcess;
accountFor(simplifiedProcedureProcess);
}
}
}
private void accountFor(final SimplifiedProcedureProcess simplifiedProcedureProcess) {
numberOfProcesses++;
final AcquisitionProcessStateType acquisitionProcessStateType =
simplifiedProcedureProcess.getAcquisitionProcessStateType();
numberOfProcessesByAcquisitionProcessStateType[acquisitionProcessStateType.ordinal()]++;
}
public static SimplifiedProcessStatistics 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 SimplifiedProcessStatistics create(final PaymentProcessYear paymentProcessYear) {
return new SimplifiedProcessStatistics(paymentProcessYear);
}
public int getNumberOfProcesses() {
return numberOfProcesses;
}
public Map<AcquisitionProcessStateType, Integer> getNumberOfProcessesByAcquisitionProcessStateType() {
final Map<AcquisitionProcessStateType, Integer> map = new TreeMap<AcquisitionProcessStateType, Integer>();
for (final AcquisitionProcessStateType acquisitionProcessStateType : SimplifiedProcedureProcess
.getAvailableStatesForSimplifiedProcedureProcess()) {
map.put(acquisitionProcessStateType,
Integer.valueOf(numberOfProcessesByAcquisitionProcessStateType[acquisitionProcessStateType.ordinal()]));
}
return map;
}
}