/*
* Copyright (c) 2005-2011 Grameen Foundation USA
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
* See also http://www.apache.org/licenses/LICENSE-2.0.html for an
* explanation of the license and how it is applied.
*/
package org.mifos.reports.branchreport.helper;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.mifos.reports.branchreport.BranchReportClientSummaryBO;
public class BranchReportClientSummaryBatchBOExtractor {
private List<BranchReportClientSummaryBO> clientSummaries;
public BranchReportClientSummaryBatchBOExtractor(List<BranchReportClientSummaryBO> clientSummaries) {
this.clientSummaries = clientSummaries;
}
public BranchReportClientSummaryBatchBOExtractor() {
this(new ArrayList<BranchReportClientSummaryBO>());
}
private BranchReportClientSummaryBO getClientSummary(Predicate predicate) {
return (BranchReportClientSummaryBO) CollectionUtils.find(clientSummaries, predicate);
}
public BranchReportClientSummaryBO getCenterSummary() {
return getClientSummary(ClientSummaryPredicates.CENTER_COUNT_MATCHER);
}
public BranchReportClientSummaryBO getGroupSummary() {
return getClientSummary(ClientSummaryPredicates.GROUP_COUNT_MATCHER);
}
public BranchReportClientSummaryBO getActiveMembersSummary() {
return getClientSummary(ClientSummaryPredicates.ACTIVE_MEMBER_MATCHER);
}
public BranchReportClientSummaryBO getActiveBorrowersSummary() {
return getClientSummary(ClientSummaryPredicates.ACTIVE_BORROWERS_MATCHER);
}
public BranchReportClientSummaryBO getReplacementsSummary() {
return getClientSummary(ClientSummaryPredicates.REPLACEMENTS_MATCHER);
}
public BranchReportClientSummaryBO getLoanAccountDormantsSummary() {
return getClientSummary(ClientSummaryPredicates.LOAN_ACCOUNT_DORMANT_COUNT_MATCHER);
}
public BranchReportClientSummaryBO getSavingAccountDormantsSummary() {
return getClientSummary(ClientSummaryPredicates.SAVING_ACCOUNT_DORMANT_COUNT_MATCHER);
}
public BranchReportClientSummaryBO getDropOutsSummary() {
return getClientSummary(ClientSummaryPredicates.DROP_OUT_MATCHER);
}
public BranchReportClientSummaryBO getDropOutRateSummary() {
return getClientSummary(ClientSummaryPredicates.DROP_OUT_RATE_MATCHER);
}
public BranchReportClientSummaryBO getOnHoldSummary() {
return getClientSummary(ClientSummaryPredicates.ON_HOLD_MATCHER);
}
public BranchReportClientSummaryBO getActiveSaversSummary() {
return getClientSummary(ClientSummaryPredicates.ACTIVE_SAVER_MATCHER);
}
public BranchReportClientSummaryBO getPortfolioAtRiskSummary() {
return getClientSummary(ClientSummaryPredicates.PORTFLIO_AT_RISK_MATCHER);
}
public Predicate matchAllPredicates(Set<BranchReportClientSummaryBO> branchReportClientSummaries) {
for (Predicate predicate : ClientSummaryPredicates.values()) {
if (!CollectionUtils.exists(branchReportClientSummaries, predicate)) {
return predicate;
}
}
return null;
}
private static enum ClientSummaryPredicates implements Predicate {
DROP_OUT_RATE_MATCHER("DROP_OUT_RATE_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object object) {
return ((BranchReportClientSummaryBO) object).isOfTypeDropoutRate();
}
}),
PORTFLIO_AT_RISK_MATCHER("PORTFLIO_AT_RISK_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object object) {
return ((BranchReportClientSummaryBO) object).isOfTypePortfolioAtRisk();
}
}),
CENTER_COUNT_MATCHER("CENTER_COUNT_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeCenterCount();
}
}),
GROUP_COUNT_MATCHER("GROUP_COUNT_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeGroupCount();
}
}),
ACTIVE_MEMBER_MATCHER("ACTIVE_MEMBER_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeActiveMembers();
}
}),
ACTIVE_BORROWERS_MATCHER("ACTIVE_BORROWERS_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeActiveBorrowers();
}
}),
REPLACEMENTS_MATCHER("REPLACEMENTS_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeReplacements();
}
}),
SAVING_ACCOUNT_DORMANT_COUNT_MATCHER("SAVING_ACCOUNT_DORMANT_COUNT_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeSavingAccountDormantCount();
}
}),
LOAN_ACCOUNT_DORMANT_COUNT_MATCHER("LOAN_ACCOUNT_DORMANT_COUNT_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeLoanAccountDormantCount();
}
}),
DROP_OUT_MATCHER("DROP_OUT_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeDropOuts();
}
}),
ON_HOLD_MATCHER("ON_HOLD_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeOnHolds();
}
}),
ACTIVE_SAVER_MATCHER("ACTIVE_SAVER_MATCHER", new Predicate() {
@Override
public boolean evaluate(Object arg0) {
return ((BranchReportClientSummaryBO) arg0).isOfTypeActiveSavers();
}
});
private final String predicateName;
private final Predicate predicate;
private ClientSummaryPredicates(String predicateName, Predicate predicate) {
this.predicateName = predicateName;
this.predicate = predicate;
}
@Override
public String toString() {
return predicateName;
}
@Override
public boolean evaluate(Object arg0) {
return predicate.evaluate(arg0);
}
}
}