From 7ad92a03309f8a2bf9401d4ea475aa2942c90c5a Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Fri, 8 Mar 2013 14:11:48 +0000 Subject: [PATCH] MIFOSX-232: align loan account api data with loan product data. --- .../loanaccount/api/LoansApiResource.java | 74 +++++++----- .../loanaccount/data/LoanAccountData.java | 105 ++++++++++++------ .../service/LoanReadPlatformService.java | 4 +- .../service/LoanReadPlatformServiceImpl.java | 4 +- .../loanproduct/data/LoanProductData.java | 3 - .../search/api/SearchApiResource.java | 16 +-- .../service/SearchReadPlatformService.java | 2 +- 7 files changed, 126 insertions(+), 82 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoansApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoansApiResource.java index f1c9bf05e..58181e9af 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoansApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/api/LoansApiResource.java @@ -153,27 +153,6 @@ public class LoansApiResource { // template final Collection productOptions = this.loanProductReadPlatformService.retrieveAllLoanProductsForLookup(); - final Collection loanTermFrequencyTypeOptions = dropdownReadPlatformService.retrieveLoanTermFrequencyTypeOptions(); - final Collection repaymentFrequencyTypeOptions = dropdownReadPlatformService - .retrieveRepaymentFrequencyTypeOptions(); - final Collection interestRateFrequencyTypeOptions = dropdownReadPlatformService - .retrieveInterestRateFrequencyTypeOptions(); - - final Collection amortizationTypeOptions = dropdownReadPlatformService.retrieveLoanAmortizationTypeOptions(); - final Collection interestTypeOptions = dropdownReadPlatformService.retrieveLoanInterestTypeOptions(); - final Collection interestCalculationPeriodTypeOptions = dropdownReadPlatformService - .retrieveLoanInterestRateCalculatedInPeriodOptions(); - - final Collection fundOptions = this.fundReadPlatformService.retrieveAllFunds(); - final Collection repaymentStrategyOptions = this.dropdownReadPlatformService - .retreiveTransactionProcessingStrategies(); - final Collection loanPurposeOptions = this.codeValueReadPlatformService.retrieveCodeValuesByCode("LoanPurpose"); - final Collection loanCollateralOptions = this.codeValueReadPlatformService - .retrieveCodeValuesByCode("LoanCollateral"); - - final boolean feeChargesOnly = false; - final Collection chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(feeChargesOnly); - final ChargeData chargeTemplate = this.loanChargeReadPlatformService.retrieveLoanChargeTemplate(); // associations final LoanScheduleData repaymentSchedule = null; @@ -181,12 +160,50 @@ public class LoansApiResource { final Collection collateral = null; final Collection guarantors = null; + // options + Collection loanTermFrequencyTypeOptions = null; + Collection repaymentFrequencyTypeOptions = null; + Collection interestRateFrequencyTypeOptions = null; + Collection amortizationTypeOptions = null; + Collection interestTypeOptions = null; + Collection interestCalculationPeriodTypeOptions = null; + Collection fundOptions = null; + Collection repaymentStrategyOptions = null; + Collection allowedLoanOfficers = null; + Collection loanPurposeOptions = null; + Collection loanCollateralOptions = null; + Collection chargeOptions = null; + ChargeData chargeTemplate = null; + + if (productId != null) { + loanTermFrequencyTypeOptions = dropdownReadPlatformService.retrieveLoanTermFrequencyTypeOptions(); + repaymentFrequencyTypeOptions = dropdownReadPlatformService.retrieveRepaymentFrequencyTypeOptions(); + interestRateFrequencyTypeOptions = dropdownReadPlatformService.retrieveInterestRateFrequencyTypeOptions(); + + amortizationTypeOptions = dropdownReadPlatformService.retrieveLoanAmortizationTypeOptions(); + interestTypeOptions = dropdownReadPlatformService.retrieveLoanInterestTypeOptions(); + interestCalculationPeriodTypeOptions = dropdownReadPlatformService.retrieveLoanInterestRateCalculatedInPeriodOptions(); + + fundOptions = this.fundReadPlatformService.retrieveAllFunds(); + repaymentStrategyOptions = this.dropdownReadPlatformService.retreiveTransactionProcessingStrategies(); + loanPurposeOptions = this.codeValueReadPlatformService.retrieveCodeValuesByCode("LoanPurpose"); + loanCollateralOptions = this.codeValueReadPlatformService.retrieveCodeValuesByCode("LoanCollateral"); + + final boolean feeChargesOnly = false; + chargeOptions = this.chargeReadPlatformService.retrieveLoanApplicableCharges(feeChargesOnly); + // chargeTemplate = + // this.loanChargeReadPlatformService.retrieveLoanChargeTemplate(); + } + LoanAccountData newLoanAccount = null; if (clientId != null) { - final LoanAccountData loanBasicDetails = this.loanReadPlatformService.retrieveClientAndProductDetails(clientId, productId); + final LoanAccountData loanBasicDetails = this.loanReadPlatformService.retrieveTemplateWithClientAndProductDetails(clientId, + productId); final Collection charges = loanBasicDetails.charges(); - final Long officeId = loanBasicDetails.officeId(); - final Collection allowedLoanOfficers = this.staffReadPlatformService.retrieveAllLoanOfficersByOffice(officeId); + if (productId != null) { + final Long officeId = loanBasicDetails.officeId(); + allowedLoanOfficers = this.staffReadPlatformService.retrieveAllLoanOfficersByOffice(officeId); + } newLoanAccount = LoanAccountData.associationsAndTemplate(loanBasicDetails, repaymentSchedule, loanRepayments, charges, collateral, guarantors, productOptions, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions, @@ -195,10 +212,13 @@ public class LoansApiResource { loanPurposeOptions, loanCollateralOptions); } else if (groupId != null) { - final LoanAccountData loanBasicDetails = this.loanReadPlatformService.retrieveGroupAndProductDetails(groupId, productId); + final LoanAccountData loanBasicDetails = this.loanReadPlatformService.retrieveTemplateWithGroupAndProductDetails(groupId, + productId); final Collection charges = loanBasicDetails.charges(); - final Long officeId = loanBasicDetails.officeId(); - final Collection allowedLoanOfficers = this.staffReadPlatformService.retrieveAllLoanOfficersByOffice(officeId); + if (productId != null) { + final Long officeId = loanBasicDetails.officeId(); + allowedLoanOfficers = this.staffReadPlatformService.retrieveAllLoanOfficersByOffice(officeId); + } newLoanAccount = LoanAccountData.associationsAndTemplate(loanBasicDetails, repaymentSchedule, loanRepayments, charges, collateral, guarantors, productOptions, loanTermFrequencyTypeOptions, repaymentFrequencyTypeOptions, diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanAccountData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanAccountData.java index ad5318c1d..d6b547fab 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanAccountData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/data/LoanAccountData.java @@ -22,6 +22,7 @@ import org.mifosplatform.portfolio.loanaccount.guarantor.data.GuarantorData; import org.mifosplatform.portfolio.loanaccount.loanschedule.data.LoanScheduleData; import org.mifosplatform.portfolio.loanproduct.data.LoanProductData; import org.mifosplatform.portfolio.loanproduct.data.TransactionProcessingStrategyData; +import org.springframework.util.CollectionUtils; /** * Immutable data object representing loan account data. @@ -30,10 +31,16 @@ import org.mifosplatform.portfolio.loanproduct.data.TransactionProcessingStrateg public class LoanAccountData { // basic loan details + + // identity private final Long id; private final String accountNo; - private final LoanStatusEnumData status; private final String externalId; + + // status + private final LoanStatusEnumData status; + + // related to private final Long clientId; private final String clientName; private final Long clientOfficeId; @@ -49,27 +56,31 @@ public class LoanAccountData { private final String loanPurposeName; private final Long loanOfficerId; private final String loanOfficerName; + + // terms private final CurrencyData currency; private final BigDecimal principal; - private final BigDecimal inArrearsTolerance; private final Integer termFrequency; private final EnumOptionData termPeriodFrequencyType; private final Integer numberOfRepayments; private final Integer repaymentEvery; private final EnumOptionData repaymentFrequencyType; - private final Long transactionProcessingStrategyId; - private final EnumOptionData amortizationType; private final BigDecimal interestRatePerPeriod; private final EnumOptionData interestRateFrequencyType; private final BigDecimal annualInterestRate; - private final EnumOptionData interestType; - private final EnumOptionData interestCalculationPeriodType; // settings + private final EnumOptionData amortizationType; + private final EnumOptionData interestType; + private final EnumOptionData interestCalculationPeriodType; + private final BigDecimal inArrearsTolerance; + private final Long transactionProcessingStrategyId; private final LocalDate expectedFirstRepaymentOnDate; private final LocalDate interestChargedFromDate; + // timeline private final LoanApplicationTimelineData timeline; + // totals private final LoanSummaryData summary; @@ -81,22 +92,20 @@ public class LoanAccountData { private final Collection guarantors; // template - private final Collection loanOfficerOptions; private final Collection productOptions; + private final Collection loanOfficerOptions; + private final Collection loanPurposeOptions; + private final Collection fundOptions; private final Collection termFrequencyTypeOptions; private final Collection repaymentFrequencyTypeOptions; - private final Collection repaymentStrategyOptions; private final Collection interestRateFrequencyTypeOptions; private final Collection amortizationTypeOptions; private final Collection interestTypeOptions; private final Collection interestCalculationPeriodTypeOptions; - private final Collection fundOptions; + private final Collection transactionProcessingStrategyOptions; private final Collection chargeOptions; - private final Collection loanPurposeOptions; private final Collection loanCollateralOptions; - private final ChargeData chargeTemplate; - @Transient private BigDecimal feeChargesAtDisbursementCharged; @@ -153,7 +162,7 @@ public class LoanAccountData { final Collection productOptions = null; final Collection termFrequencyTypeOptions = null; final Collection repaymentFrequencyTypeOptions = null; - final Collection repaymentStrategyOptions = null; + final Collection transactionProcessingStrategyOptions = null; final Collection interestRateFrequencyTypeOptions = null; final Collection amortizationTypeOptions = null; final Collection interestTypeOptions = null; @@ -171,9 +180,9 @@ public class LoanAccountData { interestRatePerPeriod, interestRateFrequencyType, annualInterestRate, interestType, interestCalculationPeriodType, expectedFirstRepaymentOnDate, interestChargedFromDate, timeline, summary, feeChargesDueAtDisbursementCharged, repaymentSchedule, transactions, charges, collateral, guarantors, productOptions, termFrequencyTypeOptions, - repaymentFrequencyTypeOptions, repaymentStrategyOptions, interestRateFrequencyTypeOptions, amortizationTypeOptions, - interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions, chargeTemplate, loanOfficerOptions, - loanPurposeOptions, loanCollateralOptions); + repaymentFrequencyTypeOptions, transactionProcessingStrategyOptions, interestRateFrequencyTypeOptions, + amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions, + chargeTemplate, loanOfficerOptions, loanPurposeOptions, loanCollateralOptions); } /** @@ -429,7 +438,7 @@ public class LoanAccountData { final Collection collateral, final Collection guarantors, final Collection productOptions, final Collection termFrequencyTypeOptions, final Collection repaymentFrequencyTypeOptions, - final Collection repaymentStrategyOptions, + final Collection transactionProcessingStrategyOptions, final Collection interestRateFrequencyTypeOptions, final Collection amortizationTypeOptions, final Collection interestTypeOptions, final Collection interestCalculationPeriodTypeOptions, final Collection fundOptions, final Collection chargeOptions, final ChargeData chargeTemplate, @@ -443,7 +452,7 @@ public class LoanAccountData { acc.interestRatePerPeriod, acc.interestRateFrequencyType, acc.annualInterestRate, acc.interestType, acc.interestCalculationPeriodType, acc.expectedFirstRepaymentOnDate, acc.interestChargedFromDate, acc.timeline, acc.summary, acc.feeChargesAtDisbursementCharged, repaymentSchedule, transactions, charges, collateral, guarantors, - productOptions, termFrequencyTypeOptions, repaymentFrequencyTypeOptions, repaymentStrategyOptions, + productOptions, termFrequencyTypeOptions, repaymentFrequencyTypeOptions, transactionProcessingStrategyOptions, interestRateFrequencyTypeOptions, amortizationTypeOptions, interestTypeOptions, interestCalculationPeriodTypeOptions, fundOptions, chargeOptions, chargeTemplate, loanOfficerOptions, loanPurposeOptions, loanCollateralOptions); } @@ -476,23 +485,16 @@ public class LoanAccountData { final Integer numberOfRepayments, final Integer repaymentEvery, final EnumOptionData repaymentFrequencyType, // - final Long transactionProcessingStrategyId, - final EnumOptionData amortizationType, - final BigDecimal interestRatePerPeriod, - final EnumOptionData interestRateFrequencyType, - final BigDecimal annualInterestRate, - final EnumOptionData interestType, - final EnumOptionData interestCalculationPeriodType, - final LocalDate expectedFirstRepaymentOnDate, - final LocalDate interestChargedFromDate, - final LoanApplicationTimelineData timeline, - final LoanSummaryData summary, // + final Long transactionProcessingStrategyId, final EnumOptionData amortizationType, final BigDecimal interestRatePerPeriod, + final EnumOptionData interestRateFrequencyType, final BigDecimal annualInterestRate, final EnumOptionData interestType, + final EnumOptionData interestCalculationPeriodType, final LocalDate expectedFirstRepaymentOnDate, + final LocalDate interestChargedFromDate, final LoanApplicationTimelineData timeline, final LoanSummaryData summary, final BigDecimal feeChargesDueAtDisbursementCharged, final LoanScheduleData repaymentSchedule, final Collection transactions, final Collection charges, final Collection collateral, final Collection guarantors, final Collection productOptions, final Collection termFrequencyTypeOptions, final Collection repaymentFrequencyTypeOptions, - final Collection repaymentStrategyOptions, + final Collection transactionProcessingStrategyOptions, final Collection interestRateFrequencyTypeOptions, final Collection amortizationTypeOptions, final Collection interestTypeOptions, final Collection interestCalculationPeriodTypeOptions, final Collection fundOptions, final Collection chargeOptions, final ChargeData chargeTemplate, @@ -550,17 +552,46 @@ public class LoanAccountData { this.productOptions = productOptions; this.termFrequencyTypeOptions = termFrequencyTypeOptions; this.repaymentFrequencyTypeOptions = repaymentFrequencyTypeOptions; - this.repaymentStrategyOptions = repaymentStrategyOptions; this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions; this.amortizationTypeOptions = amortizationTypeOptions; this.interestTypeOptions = interestTypeOptions; this.interestCalculationPeriodTypeOptions = interestCalculationPeriodTypeOptions; - this.fundOptions = fundOptions; - this.chargeOptions = chargeOptions; - this.chargeTemplate = chargeTemplate; - this.loanOfficerOptions = loanOfficerOptions; - this.loanPurposeOptions = loanPurposeOptions; - this.loanCollateralOptions = loanCollateralOptions; + + if (CollectionUtils.isEmpty(transactionProcessingStrategyOptions)) { + this.transactionProcessingStrategyOptions = null; + } else { + this.transactionProcessingStrategyOptions = transactionProcessingStrategyOptions; + } + + if (CollectionUtils.isEmpty(fundOptions)) { + this.fundOptions = null; + } else { + this.fundOptions = fundOptions; + } + + if (CollectionUtils.isEmpty(chargeOptions)) { + this.chargeOptions = null; + } else { + this.chargeOptions = chargeOptions; + } + + if (CollectionUtils.isEmpty(loanOfficerOptions)) { + this.loanOfficerOptions = null; + } else { + this.loanOfficerOptions = loanOfficerOptions; + } + + if (CollectionUtils.isEmpty(loanPurposeOptions)) { + this.loanPurposeOptions = null; + } else { + this.loanPurposeOptions = loanPurposeOptions; + } + + if (CollectionUtils.isEmpty(loanCollateralOptions)) { + this.loanCollateralOptions = null; + } else { + this.loanCollateralOptions = loanCollateralOptions; + } } public RepaymentScheduleRelatedLoanData repaymentScheduleRelatedData() { diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformService.java index 1b4c2f0cf..d4c3d54e5 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformService.java @@ -20,9 +20,9 @@ public interface LoanReadPlatformService { Collection retrieveLoanTransactions(Long loanId); - LoanAccountData retrieveClientAndProductDetails(Long clientId, Long productId); + LoanAccountData retrieveTemplateWithClientAndProductDetails(Long clientId, Long productId); - LoanAccountData retrieveGroupAndProductDetails(Long groupId, Long productId); + LoanAccountData retrieveTemplateWithGroupAndProductDetails(Long groupId, Long productId); LoanTransactionData retrieveLoanTransactionTemplate(Long loanId); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 5eb13dfa0..c76083f43 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -136,7 +136,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { } @Override - public LoanAccountData retrieveClientAndProductDetails(final Long clientId, final Long productId) { + public LoanAccountData retrieveTemplateWithClientAndProductDetails(final Long clientId, final Long productId) { context.authenticatedUser(); @@ -154,7 +154,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { } @Override - public LoanAccountData retrieveGroupAndProductDetails(final Long groupId, final Long productId) { + public LoanAccountData retrieveTemplateWithGroupAndProductDetails(final Long groupId, final Long productId) { context.authenticatedUser(); diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/data/LoanProductData.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/data/LoanProductData.java index 990f38113..a0f29b90a 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/data/LoanProductData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanproduct/data/LoanProductData.java @@ -156,11 +156,9 @@ public class LoanProductData { this.principal = principal; this.inArrearsTolerance = tolerance; this.numberOfRepayments = numberOfRepayments; - // this.loanTermFrequency = loanTermFrequency; this.repaymentEvery = repaymentEvery; this.interestRatePerPeriod = interestRatePerPeriod; this.annualInterestRate = annualInterestRate; - // this.loanTermFrequencyType = loanTermFrequencyType; this.repaymentFrequencyType = repaymentFrequencyType; this.interestRateFrequencyType = interestRateFrequencyType; this.amortizationType = amortizationType; @@ -180,7 +178,6 @@ public class LoanProductData { this.amortizationTypeOptions = null; this.interestTypeOptions = null; this.interestCalculationPeriodTypeOptions = null; - // this.loanTermFrequencyTypeOptions = null; this.repaymentFrequencyTypeOptions = null; this.interestRateFrequencyTypeOptions = null; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/search/api/SearchApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/search/api/SearchApiResource.java index 3ae4dd414..08624b9bc 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/search/api/SearchApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/search/api/SearchApiResource.java @@ -15,7 +15,6 @@ import javax.ws.rs.core.UriInfo; import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper; import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.mifosplatform.infrastructure.core.serialization.ToApiJsonSerializer; -import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; import org.mifosplatform.portfolio.search.SearchConstants.SEARCH_RESPONSE_PARAMETERS; import org.mifosplatform.portfolio.search.data.SearchConditions; import org.mifosplatform.portfolio.search.data.SearchData; @@ -31,15 +30,14 @@ public class SearchApiResource { private final Set searchResponseParameters = SEARCH_RESPONSE_PARAMETERS.getAllValues(); - private final PlatformSecurityContext context; private final SearchReadPlatformService searchReadPlatformService; private final ToApiJsonSerializer toApiJsonSerializer; private final ApiRequestParameterHelper apiRequestParameterHelper; @Autowired - public SearchApiResource(final PlatformSecurityContext context, final SearchReadPlatformService searchReadPlatformService, final ToApiJsonSerializer toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper) { + public SearchApiResource(final SearchReadPlatformService searchReadPlatformService, + final ToApiJsonSerializer toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper) { - this.context = context; this.searchReadPlatformService = searchReadPlatformService; this.toApiJsonSerializer = toApiJsonSerializer; this.apiRequestParameterHelper = apiRequestParameterHelper; @@ -49,16 +47,14 @@ public class SearchApiResource { @GET @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String searchData(@Context final UriInfo uriInfo, @QueryParam("query") final String query, @QueryParam("resource") final String resource) { + public String searchData(@Context final UriInfo uriInfo, @QueryParam("query") final String query, + @QueryParam("resource") final String resource) { - // FIXME - Do we need to validate for permissions - - SearchConditions searchConditions = new SearchConditions(query, resource); + final SearchConditions searchConditions = new SearchConditions(query, resource); final Collection searchResults = this.searchReadPlatformService.retriveMatchingData(searchConditions); final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); return this.toApiJsonSerializer.serialize(settings, searchResults, searchResponseParameters); } - -} +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/search/service/SearchReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/search/service/SearchReadPlatformService.java index fca16db90..2d29e98ef 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/search/service/SearchReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/search/service/SearchReadPlatformService.java @@ -5,7 +5,7 @@ import java.util.Collection; import org.mifosplatform.portfolio.search.data.SearchConditions; import org.mifosplatform.portfolio.search.data.SearchData; - public interface SearchReadPlatformService { + Collection retriveMatchingData(SearchConditions searchConditions); }