From 795bd4932c09b6243cb275e72368a8e13a24104d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 24 Dec 2015 13:29:57 +0530 Subject: [PATCH] Provisioning Integration Tests --- .../common/ProvisioningIntegrationTest.java | 110 +++++++++++++++++- .../provisioning/ProvisioningHelper.java | 33 ++++-- .../ProvisioningTransactionHelper.java | 39 ++++++- ...sioningEntriesReadPlatformServiceImpl.java | 9 +- ...WritePlatformServiceJpaRepositoryImpl.java | 8 +- .../ProvisioningCriteriaConstants.java | 4 +- ...ioningCriteriaReadPlatformServiceImpl.java | 19 ++- 7 files changed, 195 insertions(+), 27 deletions(-) diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/ProvisioningIntegrationTest.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/ProvisioningIntegrationTest.java index b6238cce7..5d8193b55 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/ProvisioningIntegrationTest.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/ProvisioningIntegrationTest.java @@ -5,11 +5,17 @@ */ package org.mifosplatform.integrationtests.common; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Map; import org.junit.Assert; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.mifosplatform.integrationtests.common.accounting.Account; @@ -21,6 +27,7 @@ import org.mifosplatform.integrationtests.common.loans.LoanTransactionHelper; import org.mifosplatform.integrationtests.common.provisioning.ProvisioningHelper; import org.mifosplatform.integrationtests.common.provisioning.ProvisioningTransactionHelper; +import com.google.gson.Gson; import com.jayway.restassured.builder.RequestSpecBuilder; import com.jayway.restassured.builder.ResponseSpecBuilder; import com.jayway.restassured.http.ContentType; @@ -32,7 +39,6 @@ public class ProvisioningIntegrationTest { private static final String NONE = "1"; private final static int LOANPRODUCTS_SIZE = 10; - private final static int LOANS_SIZE = 5; private RequestSpecification requestSpec; private ResponseSpecification responseSpec; @@ -47,10 +53,11 @@ public class ProvisioningIntegrationTest { this.responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build(); this.loanTransactionHelper = new LoanTransactionHelper(this.requestSpec, this.responseSpec); this.accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); + Assume.assumeTrue(!isAlreadyProvisioningEntriesCreated()); } @Test - public void testCreateProvisioningCriteria() {/* + public void testCreateProvisioningCriteria() { ProvisioningTransactionHelper transactionHelper = new ProvisioningTransactionHelper(requestSpec, responseSpec); ArrayList loanProducts = new ArrayList<>(LOANPRODUCTS_SIZE); List loans = new ArrayList<>(); @@ -74,17 +81,84 @@ public class ProvisioningIntegrationTest { } ArrayList categories = transactionHelper.retrieveAllProvisioningCategories(); + Assert.assertTrue(categories.size() > 0) ; Account liability = accountHelper.createLiabilityAccount() ; Account expense = accountHelper.createExpenseAccount() ; - String json = ProvisioningHelper.createProvisioingCriteriaJson(loanProducts, categories, liability, expense); - Integer criteriaId = transactionHelper.createProvisioningCriteria(json); + Map requestCriteria = ProvisioningHelper.createProvisioingCriteriaJson(loanProducts, categories, liability, expense); + String provisioningCriteriaCreateJson = new Gson().toJson(requestCriteria); + Integer criteriaId = transactionHelper.createProvisioningCriteria(provisioningCriteriaCreateJson); + Assert.assertNotNull(criteriaId); + + Map newCriteria = transactionHelper.retrieveProvisioningCriteria(criteriaId) ; + validateProvisioningCriteria(requestCriteria, newCriteria) ; + + ArrayList definitions = (ArrayList)newCriteria.get("definitions") ; + for(int i = 0 ; i < definitions.size(); i++) { + Map criteriadefinition = (Map) definitions.get(i) ; + criteriadefinition.put("provisioningPercentage", new Float(20.0)) ; + } + newCriteria.put("locale", "en"); + String updateCriteriaString = new Gson().toJson(newCriteria) ; + Integer criteriaId1 = transactionHelper.updateProvisioningCriteria(criteriaId, updateCriteriaString) ; + Map updatedCriteria = transactionHelper.retrieveProvisioningCriteria(criteriaId1) ; + validateProvisioningCriteria(newCriteria, updatedCriteria) ; + + transactionHelper.deleteProvisioningCriteria(criteriaId1) ; + + categories = transactionHelper.retrieveAllProvisioningCategories(); + liability = accountHelper.createLiabilityAccount() ; + expense = accountHelper.createExpenseAccount() ; + requestCriteria = ProvisioningHelper.createProvisioingCriteriaJson(loanProducts, categories, liability, expense); + provisioningCriteriaCreateJson = new Gson().toJson(requestCriteria); + criteriaId = transactionHelper.createProvisioningCriteria(provisioningCriteriaCreateJson); Assert.assertNotNull(criteriaId); String provisioningEntryJson = ProvisioningHelper.createProvisioningEntryJson(); Integer provisioningEntryId = transactionHelper.createProvisioningEntries(provisioningEntryJson); Assert.assertNotNull(provisioningEntryId); - */} + + transactionHelper.updateProvisioningEntry("recreateprovisioningentry", provisioningEntryId, "") ; + transactionHelper.updateProvisioningEntry("createjournalentry", provisioningEntryId, "") ; + Map entry = transactionHelper.retrieveProvisioningEntry(provisioningEntryId) ; + Assert.assertTrue((Boolean)entry.get("journalEntry")) ; + Map provisioningEntry = transactionHelper.retrieveProvisioningEntries(provisioningEntryId) ; + Assert.assertTrue(((ArrayList)provisioningEntry.get("pageItems")).size() > 0) ; + } + private void validateProvisioningCriteria(Map requestCriteria, Map newCriteria) { + + //criteria name validation + String requestCriteriaName = (String)requestCriteria.get("criteriaName") ; + String criteriaName = (String)newCriteria.get("criteriaName") ; + Assert.assertEquals(criteriaName, requestCriteriaName) ; + + //loan products validation + ArrayList requestProducts = (ArrayList)requestCriteria.get("loanProducts") ; + ArrayList products = (ArrayList)newCriteria.get("loanProducts") ; + Assert.assertEquals(products.size(), requestProducts.size()) ; + + ArrayList requestedDefinitions = (ArrayList)requestCriteria.get("definitions") ; + ArrayList newdefintions = (ArrayList) newCriteria.get("definitions") ; + Assert.assertEquals(newdefintions.size(), requestedDefinitions.size()) ; + for(int i = 0 ; i < newdefintions.size() ; i++) { + Map requestedMap = (Map)requestedDefinitions.get(i) ; + Map newMap = (Map)newdefintions.get(i) ; + checkProperty("categoryId", requestedMap, newMap) ; + checkProperty("categoryName", requestedMap, newMap) ; + checkProperty("minAge", requestedMap, newMap) ; + checkProperty("maxAge", requestedMap, newMap) ; + checkProperty("provisioningPercentage", requestedMap, newMap) ; + checkProperty("liabilityAccount", requestedMap, newMap) ; + checkProperty("expenseAccount", requestedMap, newMap) ; + } + } + + private void checkProperty(String propertyName, Map requestMap, Map newMap) { + Object requested = requestMap.get(propertyName) ; + Object modified = newMap.get(propertyName) ; + Assert.assertEquals(requested, modified) ; + } + private Integer createLoanProduct(final boolean multiDisburseLoan, final String accountingRule, final Account... accounts) { System.out.println("------------------------------CREATING NEW LOAN PRODUCT ---------------------------------------"); final String loanProductJSON = new LoanProductTestBuilder() // @@ -120,4 +194,30 @@ public class ProvisioningIntegrationTest { .withCharges(charges).build(clientID.toString(), loanProductID.toString(), savingsId); return this.loanTransactionHelper.getLoanId(loanApplicationJSON); } + + private boolean isAlreadyProvisioningEntriesCreated() { + ProvisioningTransactionHelper transactionHelper = new ProvisioningTransactionHelper(requestSpec, responseSpec); + Map entries = transactionHelper.retrieveAllProvisioningEntries() ; + ArrayList pageItems = (ArrayList)entries.get("pageItems") ; + boolean provisioningetryAlreadyCreated = false ; + if(pageItems != null) { + for(Map item: pageItems) { + String date = (String)item.get("createdDate") ; + DateFormat formatter = new SimpleDateFormat("MMM dd, yyyy"); + try { + Date date1 = formatter.parse(date) ; + DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); + String formattedString = simple.format(Utils.getLocalDateOfTenant().toDate()); + Date currentDate = simple.parse(formattedString) ; + if(date1.getTime() == currentDate.getTime()) { + provisioningetryAlreadyCreated = true ; + break ; + } + } catch (ParseException e) { + e.printStackTrace(); + } + } + } + return provisioningetryAlreadyCreated ; + } } diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/provisioning/ProvisioningHelper.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/provisioning/ProvisioningHelper.java index 9ce55683f..ec3d7081b 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/provisioning/ProvisioningHelper.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/provisioning/ProvisioningHelper.java @@ -8,36 +8,49 @@ package org.mifosplatform.integrationtests.common.provisioning; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import org.mifosplatform.integrationtests.common.Utils; import org.mifosplatform.integrationtests.common.accounting.Account; import com.google.gson.Gson; public class ProvisioningHelper { - public final static String createProvisioingCriteriaJson(ArrayList loanProducts, ArrayList categories, Account liability, + public final static Map createProvisioingCriteriaJson(ArrayList loanProducts, ArrayList categories, Account liability, Account expense) { final HashMap map = new HashMap<>(); map.put("loanProducts", addLoanProducts(loanProducts)); - map.put("provisioningcriteria", addProvisioningCategories(categories, liability, expense)); + map.put("definitions", addProvisioningCategories(categories, liability, expense)); DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); - String formattedString = simple.format(new Date()); - String criteriaName = "General Provisioning Criteria" + formattedString; + String formattedString = simple.format(Utils.getLocalDateOfTenant().toDate()); + Random rand = new Random() ; + String criteriaName = "General Provisioning Criteria" + formattedString+rand.nextLong(); map.put("criteriaName", criteriaName); map.put("locale", "en"); - String provisioningCriteriaCreateJson = new Gson().toJson(map); - return provisioningCriteriaCreateJson; + return map ; } public final static String createProvisioningEntryJson() { + final HashMap map = new HashMap<>(); + map.put("createjournalentries", Boolean.FALSE); + map.put("locale", "en"); + map.put("dateFormat", "dd MMMM yyyy"); + DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); + map.put("date", simple.format(Utils.getLocalDateOfTenant().toDate())); + String provisioningEntryCreateJson = new Gson().toJson(map); + return provisioningEntryCreateJson; + } + + public final static String createProvisioningEntryJsonWithJournalsEnabled() { final HashMap map = new HashMap<>(); map.put("createjournalentries", Boolean.TRUE); map.put("locale", "en"); map.put("dateFormat", "dd MMMM yyyy"); DateFormat simple = new SimpleDateFormat("dd MMMM yyyy"); - map.put("date", simple.format(new Date())); + map.put("date", simple.format(Utils.getLocalDateOfTenant().toDate())); String provisioningEntryCreateJson = new Gson().toJson(map); return provisioningEntryCreateJson; } @@ -66,9 +79,9 @@ public class ProvisioningHelper { if (i == categories.size() - 1) { map.put("maxAge", 90000); } else { - map.put("maxAge", i * 60); + map.put("maxAge", (i+1) * 30); } - map.put("provisioningPercentage", (i + 1) * 5.5); + map.put("provisioningPercentage", new Float((i + 1) * 5.5)); map.put("liabilityAccount", liability.getAccountID()); map.put("expenseAccount", expense.getAccountID()); list.add(map); diff --git a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/provisioning/ProvisioningTransactionHelper.java b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/provisioning/ProvisioningTransactionHelper.java index 1054821a7..a541101dc 100644 --- a/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/provisioning/ProvisioningTransactionHelper.java +++ b/mifosng-provider/src/integrationTest/java/org/mifosplatform/integrationtests/common/provisioning/ProvisioningTransactionHelper.java @@ -6,6 +6,7 @@ package org.mifosplatform.integrationtests.common.provisioning; import java.util.ArrayList; +import java.util.Map; import org.mifosplatform.integrationtests.common.Utils; @@ -15,7 +16,7 @@ import com.jayway.restassured.specification.ResponseSpecification; public class ProvisioningTransactionHelper { - private static final String PROVISIONING_CATEGORY_URL = "/mifosng-provider/api/v1/provisioningcategory/template?" + Utils.TENANT_IDENTIFIER ; + private static final String PROVISIONING_CATEGORY_URL = "/mifosng-provider/api/v1/provisioningcategory?" + Utils.TENANT_IDENTIFIER ; private static final String CREATE_PROVISIONING_CRITERIA_URL = "/mifosng-provider/api/v1/provisioningcriteria?" + Utils.TENANT_IDENTIFIER; private static final String CREATE_PROVISIONING_ENTRY_URL = "/mifosng-provider/api/v1/provisioningentries?" + Utils.TENANT_IDENTIFIER; @@ -36,7 +37,43 @@ public class ProvisioningTransactionHelper { return Utils.performServerPost(this.requestSpec, this.responseSpec, CREATE_PROVISIONING_CRITERIA_URL, provsioningCriteriaJson, "resourceId"); } + public Map retrieveProvisioningCriteria(final Integer criteriaId) { + String url = "/mifosng-provider/api/v1/provisioningcriteria/"+criteriaId+"?"+Utils.TENANT_IDENTIFIER ; + return Utils.performServerGet(requestSpec, responseSpec, url, ""); + } + + public Integer updateProvisioningCriteria(final Integer criteriaId, final String provsioningCriteriaJson) { + String url = "/mifosng-provider/api/v1/provisioningcriteria/"+criteriaId+"?"+Utils.TENANT_IDENTIFIER ; + return Utils.performServerPut(this.requestSpec, this.responseSpec, url, provsioningCriteriaJson, "resourceId"); + } + + public Integer deleteProvisioningCriteria(final Integer criteriaId) { + String url = "/mifosng-provider/api/v1/provisioningcriteria/"+criteriaId+"?"+Utils.TENANT_IDENTIFIER; + return Utils.performServerDelete(this.requestSpec, this.responseSpec, url, "resourceId"); + } + public Integer createProvisioningEntries(final String provsioningCriteriaJson) { return Utils.performServerPost(this.requestSpec, this.responseSpec, CREATE_PROVISIONING_ENTRY_URL, provsioningCriteriaJson, "resourceId"); } + + public Integer updateProvisioningEntry(final String command, final Integer entryId, String jsonBody) { + String url = "/mifosng-provider/api/v1/provisioningentries/" + entryId + "?command=" + command + "&" + Utils.TENANT_IDENTIFIER; + return Utils.performServerPost(requestSpec, responseSpec, url, jsonBody, "resourceId") ; + } + + public Map retrieveProvisioningEntry(final Integer provisioningEntry) { + String url = "/mifosng-provider/api/v1/provisioningentries/"+provisioningEntry+"?"+Utils.TENANT_IDENTIFIER; ; + return Utils.performServerGet(requestSpec, responseSpec, url, "") ; + } + + public Map retrieveProvisioningEntries(final Integer provisioningEntry) { + String url = "/mifosng-provider/api/v1/provisioningentries/entries?entryId="+provisioningEntry+"&"+Utils.TENANT_IDENTIFIER; ; + return Utils.performServerGet(requestSpec, responseSpec, url, "") ; + } + + public Map retrieveAllProvisioningEntries() { + String url = "/mifosng-provider/api/v1/provisioningentries?dateFormat=dd MMMM yyyy"+"&"+"locale=en"+"&"+Utils.TENANT_IDENTIFIER; ; + return Utils.performServerGet(requestSpec, responseSpec, url, "") ; + } + } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/provisioning/service/ProvisioningEntriesReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/provisioning/service/ProvisioningEntriesReadPlatformServiceImpl.java index c235d56e9..af89f7a80 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/provisioning/service/ProvisioningEntriesReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/provisioning/service/ProvisioningEntriesReadPlatformServiceImpl.java @@ -213,8 +213,13 @@ public class ProvisioningEntriesReadPlatformServiceImpl implements ProvisioningE sqlBuilder.append("select SQL_CALC_FOUND_ROWS "); sqlBuilder.append(mapper.getSchema()); sqlBuilder.append(" order by entry.created_date"); - sqlBuilder.append(" limit ").append(limit); - sqlBuilder.append(" offset ").append(offset); + if(limit != null ) { + sqlBuilder.append(" limit ").append(limit); + } + if(offset != null) { + sqlBuilder.append(" offset ").append(offset); + } + final String sqlCountRows = "SELECT FOUND_ROWS()"; Object[] whereClauseItemsitems = new Object[] {}; return this.provisioningEntryDataPaginationHelper.fetchPage(this.jdbcTemplate, sqlCountRows, sqlBuilder.toString(), diff --git a/mifosng-provider/src/main/java/org/mifosplatform/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java index 0796f52e6..64ebd9969 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/accounting/provisioning/service/ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl.java @@ -29,6 +29,7 @@ import org.mifosplatform.infrastructure.core.api.JsonCommand; import org.mifosplatform.infrastructure.core.data.CommandProcessingResult; import org.mifosplatform.infrastructure.core.data.CommandProcessingResultBuilder; import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper; +import org.mifosplatform.infrastructure.core.service.DateUtils; import org.mifosplatform.infrastructure.jobs.annotation.CronTarget; import org.mifosplatform.infrastructure.jobs.service.JobName; import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext; @@ -142,9 +143,14 @@ public class ProvisioningEntriesWritePlatformServiceJpaRepositoryImpl implements @Override @CronTarget(jobName = JobName.GENERATE_LOANLOSS_PROVISIONING) public void generateLoanLossProvisioningAmount() { - Date currentDate = new Date(); + Date currentDate = DateUtils.getLocalDateOfTenant().toDate() ; boolean addJournalEntries = true; try { + Collection criteriaCollection = this.provisioningCriteriaReadPlatformService.retrieveAllProvisioningCriterias() ; + if(criteriaCollection == null || criteriaCollection.size() == 0){ + return ; + //FIXME: Do we need to throw NoProvisioningCriteriaDefinitionFound()? + } createProvsioningEntry(currentDate, addJournalEntries); } catch (ProvisioningEntryAlreadyCreatedException peace) {} catch (DataIntegrityViolationException dive) {} } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/provisioning/constants/ProvisioningCriteriaConstants.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/provisioning/constants/ProvisioningCriteriaConstants.java index a43bf19b1..36138497a 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/provisioning/constants/ProvisioningCriteriaConstants.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/provisioning/constants/ProvisioningCriteriaConstants.java @@ -25,7 +25,7 @@ public interface ProvisioningCriteriaConstants { public final static String JSON_LOAN_PRODUCT_BORROWERCYCLE_PARAM = "includeInBorrowerCycle" ; - public final static String JSON_PROVISIONING_DEFINITIONS_PARAM = "provisioningcriteria"; + public final static String JSON_PROVISIONING_DEFINITIONS_PARAM = "definitions"; public final static String JSON_CATEOGRYID_PARAM = "categoryId"; @@ -54,7 +54,7 @@ public interface ProvisioningCriteriaConstants { JSON_CATEOGRYNAME_PARAM, JSON_MINIMUM_AGE_PARAM, JSON_MAXIMUM_AGE_PARAM, JSON_MINIMUM_AGE_PARAM, JSON_PROVISIONING_PERCENTAGE_PARAM, JSON_EXPENSE_ACCOUNT_PARAM, JSON_LIABILITY_ACCOUNT_PARAM)) ; - Set PROVISIONING_CRITERIA_TEMPLATE_PARAMETER = new HashSet<>(Arrays.asList("provisioninCriteria", "loanProducts", + Set PROVISIONING_CRITERIA_TEMPLATE_PARAMETER = new HashSet<>(Arrays.asList("definitions", "loanProducts", "glAccounts")); Set PROVISIONING_CRITERIA_PARAMETERS = new HashSet<>(Arrays.asList("criteriaName", "loanProducts", diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/provisioning/service/ProvisioningCriteriaReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/provisioning/service/ProvisioningCriteriaReadPlatformServiceImpl.java index 703b7c8f6..4838c1344 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/provisioning/service/ProvisioningCriteriaReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/provisioning/service/ProvisioningCriteriaReadPlatformServiceImpl.java @@ -18,9 +18,11 @@ import org.mifosplatform.infrastructure.core.service.RoutingDataSource; import org.mifosplatform.organisation.provisioning.data.ProvisioningCategoryData; import org.mifosplatform.organisation.provisioning.data.ProvisioningCriteriaData; import org.mifosplatform.organisation.provisioning.data.ProvisioningCriteriaDefinitionData; +import org.mifosplatform.organisation.provisioning.exception.ProvisioningCriteriaNotFoundException; import org.mifosplatform.portfolio.loanproduct.data.LoanProductData; import org.mifosplatform.portfolio.loanproduct.service.LoanProductReadPlatformService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; @@ -99,12 +101,17 @@ public class ProvisioningCriteriaReadPlatformServiceImpl implements Provisioning @Override public ProvisioningCriteriaData retrieveProvisioningCriteria(Long criteriaId) { - String criteriaName = retrieveCriteriaName(criteriaId); - Collection loanProducts = loanProductReaPlatformService - .retrieveAllLoanProductsForLookup("select product_id from m_loanproduct_provisioning_mapping where m_loanproduct_provisioning_mapping.criteria_id=" - + criteriaId); - List definitions = retrieveProvisioningDefinitions(criteriaId); - return ProvisioningCriteriaData.toLookup(criteriaId, criteriaName, loanProducts, definitions); + try { + String criteriaName = retrieveCriteriaName(criteriaId); + Collection loanProducts = loanProductReaPlatformService + .retrieveAllLoanProductsForLookup("select product_id from m_loanproduct_provisioning_mapping where m_loanproduct_provisioning_mapping.criteria_id=" + + criteriaId); + List definitions = retrieveProvisioningDefinitions(criteriaId); + return ProvisioningCriteriaData.toLookup(criteriaId, criteriaName, loanProducts, definitions); + }catch(EmptyResultDataAccessException e) { + throw new ProvisioningCriteriaNotFoundException(criteriaId) ; + } + } private List retrieveProvisioningDefinitions(Long criteriaId) {