You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ra...@apache.org on 2016/10/17 08:19:27 UTC
[7/7] incubator-fineract git commit: OpenJPA Integration Changes
OpenJPA Integration Changes
Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/9d7f1c21
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/9d7f1c21
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/9d7f1c21
Branch: refs/heads/develop
Commit: 9d7f1c2197dff20b4a977b77670b04e26cfcc2e1
Parents: 8d3f7af
Author: Nazeer Hussain Shaik <na...@confluxtechnologies.com>
Authored: Mon Oct 17 11:46:52 2016 +0530
Committer: Nazeer Hussain Shaik <na...@confluxtechnologies.com>
Committed: Mon Oct 17 11:46:52 2016 +0530
----------------------------------------------------------------------
fineract-provider/build.gradle | 22 +++---
fineract-provider/dependencies.gradle | 4 +-
fineract-provider/dev-dependencies.gradle | 4 +-
.../common/ProvisioningIntegrationTest.java | 26 ++++---
.../closure/domain/GLClosureRepository.java | 2 +-
.../domain/FinancialActivityAccount.java | 4 +-
.../FinancialActivityAccountRepository.java | 2 +-
...ActivityAccountWritePlatformServiceImpl.java | 18 +++--
.../accounting/glaccount/domain/GLAccount.java | 6 +-
.../domain/JournalEntryRepository.java | 12 ++--
.../domain/ProductToGLAccountMapping.java | 17 +++--
.../ProductToGLAccountMappingRepository.java | 8 +--
.../domain/LoanProductProvisioningEntry.java | 4 +-
.../provisioning/domain/ProvisioningEntry.java | 6 +-
.../domain/ProvisioningEntryRepository.java | 5 +-
.../accounting/rule/domain/AccountingRule.java | 6 +-
.../rule/domain/AccountingRuleRepository.java | 2 +-
.../rule/domain/AccountingTagRule.java | 4 +-
.../fineract/batch/exception/ErrorHandler.java | 3 +
.../batch/service/BatchApiServiceImpl.java | 18 ++++-
.../fineract/commands/domain/CommandSource.java | 4 +-
.../domain/AccountNumberFormat.java | 6 +-
.../domain/AccountNumberFormatRepository.java | 2 +-
...atWritePlatformServiceJpaRepositoryImpl.java | 22 ++++--
.../cache/domain/PlatformCache.java | 4 +-
.../infrastructure/codes/domain/Code.java | 6 +-
.../infrastructure/codes/domain/CodeValue.java | 4 +-
...deWritePlatformServiceJpaRepositoryImpl.java | 20 ++++--
.../configuration/domain/ExternalService.java | 4 +-
.../domain/ExternalServicePropertiesPK.java | 28 ++++++++
.../domain/ExternalServicesProperties.java | 2 -
.../ExternalServicesPropertiesRepository.java | 5 +-
...rnalServicesPropertiesRepositoryWrapper.java | 2 +-
.../domain/GlobalConfigurationProperty.java | 8 +--
.../core/data/ApiParameterError.java | 11 ++-
.../core/domain/AbstractAuditableCustom.java | 21 +++---
.../core/domain/AbstractPersistableCustom.java | 70 ++++++++++++++++++
.../core/domain/MySQLDictionaryCustom.java | 46 ++++++++++++
.../TomcatJdbcDataSourcePerTenantService.java | 3 +-
.../dataqueries/domain/Report.java | 6 +-
.../dataqueries/domain/ReportParameter.java | 4 +-
.../domain/ReportParameterUsage.java | 10 ++-
.../ReadWriteNonCoreDataServiceImpl.java | 72 ++++++++++++++++++-
.../service/ReportWritePlatformServiceImpl.java | 20 ++++--
.../documentmanagement/domain/Document.java | 4 +-
.../documentmanagement/domain/Image.java | 4 +-
.../domain/FineractEntityAccess.java | 4 +-
.../domain/FineractEntityRelation.java | 4 +-
.../FineractEntityRelationRepository.java | 2 +-
.../domain/FineractEntityToEntityMapping.java | 8 +--
...FineractEntityToEntityMappingRepository.java | 2 +-
.../FineractEntityAccessWriteServiceImpl.java | 20 ++++--
.../hooks/domain/HookConfiguration.java | 4 +-
.../hooks/domain/HookRepository.java | 4 +-
.../hooks/domain/HookResource.java | 4 +-
.../hooks/domain/HookTemplate.java | 6 +-
.../hooks/domain/HookTemplateRepository.java | 2 +-
.../infrastructure/hooks/domain/Schema.java | 6 +-
...okWritePlatformServiceJpaRepositoryImpl.java | 58 ++++++++++-----
.../jobs/domain/ScheduledJobDetail.java | 4 +-
.../domain/ScheduledJobDetailRepository.java | 6 +-
.../jobs/domain/ScheduledJobRunHistory.java | 4 +-
.../jobs/domain/SchedulerDetail.java | 4 +-
.../domain/ReportMailingJobConfiguration.java | 4 +-
.../domain/ReportMailingJobRunHistory.java | 4 +-
.../infrastructure/sms/domain/SmsMessage.java | 4 +-
.../survey/domain/Likelihood.java | 4 +-
.../survey/domain/LikelihoodRepository.java | 2 +-
.../fineract/mix/domain/MixTaxonomyMapping.java | 4 +-
.../organisation/holiday/domain/Holiday.java | 4 +-
.../holiday/domain/HolidayRepository.java | 2 +-
...ayWritePlatformServiceJpaRepositoryImpl.java | 18 +++--
.../monetary/domain/ApplicationCurrency.java | 16 ++---
.../monetary/domain/MonetaryCurrency.java | 6 +-
.../organisation/monetary/domain/Money.java | 8 +--
.../organisation/office/domain/Office.java | 6 +-
.../office/domain/OfficeTransaction.java | 4 +-
.../office/domain/OrganisationCurrency.java | 16 ++---
...ceWritePlatformServiceJpaRepositoryImpl.java | 18 +++--
.../domain/LoanProductProvisionCriteria.java | 4 +-
.../domain/ProvisioningCategory.java | 4 +-
.../domain/ProvisioningCriteria.java | 2 +-
.../domain/ProvisioningCriteriaDefinition.java | 5 +-
...ryWritePlatformServiceJpaRepositoryImpl.java | 18 +++--
...iaWritePlatformServiceJpaRepositoryImpl.java | 21 ++++--
.../organisation/staff/domain/Staff.java | 18 +++--
...ffWritePlatformServiceJpaRepositoryImpl.java | 18 +++--
.../organisation/teller/domain/Cashier.java | 4 +-
.../teller/domain/CashierTransaction.java | 8 +--
.../organisation/teller/domain/Teller.java | 30 ++++----
.../teller/domain/TellerRepositoryWrapper.java | 15 ++++
.../teller/domain/TellerTransaction.java | 4 +-
.../TellerWritePlatformServiceJpaImpl.java | 68 +++++++++++-------
.../workingdays/domain/WorkingDays.java | 4 +-
.../account/domain/AccountAssociations.java | 4 +-
.../domain/AccountAssociationsRepository.java | 4 +-
.../account/domain/AccountTransferDetails.java | 8 +--
.../domain/AccountTransferRepository.java | 8 +--
.../AccountTransferStandingInstruction.java | 4 +-
.../domain/AccountTransferTransaction.java | 4 +-
.../portfolio/address/domain/Address.java | 4 +-
.../address/domain/FieldConfiguration.java | 4 +-
.../calendar/domain/CalendarHistory.java | 4 +-
.../calendar/domain/CalendarInstance.java | 4 +-
.../domain/CalendarInstanceRepository.java | 4 +-
.../portfolio/charge/domain/Charge.java | 4 +-
.../service/ChargeReadPlatformServiceImpl.java | 33 ++++-----
...geWritePlatformServiceJpaRepositoryImpl.java | 20 ++++--
.../portfolio/client/domain/Client.java | 18 ++---
.../portfolio/client/domain/ClientAddress.java | 4 +-
.../portfolio/client/domain/ClientCharge.java | 4 +-
.../client/domain/ClientChargePaidBy.java | 4 +-
.../client/domain/ClientNonPerson.java | 4 +-
.../domain/ClientNonPersonRepository.java | 2 +-
.../client/domain/ClientTransaction.java | 4 +-
.../ClientTransactionRepositoryWrapper.java | 2 +-
...geWritePlatformServiceJpaRepositoryImpl.java | 3 +-
...erWritePlatformServiceJpaRepositoryImpl.java | 25 ++++---
...ntWritePlatformServiceJpaRepositoryImpl.java | 24 +++++--
.../collateral/domain/LoanCollateral.java | 10 ++-
.../floatingrates/domain/FloatingRate.java | 45 ++++--------
.../domain/FloatingRatePeriod.java | 9 +--
.../domain/FloatingRateRepository.java | 10 +--
.../FloatingRateWritePlatformServiceImpl.java | 22 ++++--
.../fineract/portfolio/fund/domain/Fund.java | 4 +-
...ndWritePlatformServiceJpaRepositoryImpl.java | 19 +++--
.../fineract/portfolio/group/domain/Group.java | 8 +--
.../portfolio/group/domain/GroupLevel.java | 10 +--
.../portfolio/group/domain/GroupRole.java | 4 +-
...esWritePlatformServiceJpaRepositoryImpl.java | 28 ++++++--
.../domain/InterestIncentives.java | 4 +-
.../domain/InterestRateChart.java | 6 +-
.../domain/InterestRateChartFields.java | 2 +-
.../domain/InterestRateChartSlab.java | 6 +-
.../domain/InterestRateChartSlabFields.java | 2 +-
.../portfolio/loanaccount/domain/Loan.java | 75 ++++++++++++++++----
.../loanaccount/domain/LoanCharge.java | 21 +++---
.../loanaccount/domain/LoanChargePaidBy.java | 4 +-
.../domain/LoanDisbursementDetails.java | 4 +-
.../domain/LoanInstallmentCharge.java | 4 +-
...nInterestRecalcualtionAdditionalDetails.java | 4 +-
.../LoanInterestRecalculationDetails.java | 4 +-
.../domain/LoanOverdueInstallmentCharge.java | 4 +-
.../LoanRepaymentScheduleInstallment.java | 3 +-
.../loanaccount/domain/LoanRepository.java | 34 ++++-----
.../domain/LoanRepositoryWrapper.java | 1 +
...RescheduleRequestToTermVariationMapping.java | 5 +-
.../loanaccount/domain/LoanTermVariations.java | 5 +-
.../loanaccount/domain/LoanTopupDetails.java | 15 ++--
.../loanaccount/domain/LoanTrancheCharge.java | 4 +-
.../domain/LoanTrancheDisbursementCharge.java | 5 +-
.../loanaccount/domain/LoanTransaction.java | 18 ++---
...anTransactionToRepaymentScheduleMapping.java | 4 +-
.../loanaccount/guarantor/domain/Guarantor.java | 6 +-
.../domain/GuarantorFundingDetails.java | 6 +-
.../domain/GuarantorFundingTransaction.java | 4 +-
.../GuarantorFundingTransactionRepository.java | 2 +-
.../domain/AbstractLoanScheduleGenerator.java | 50 ++++++-------
.../domain/LoanRepaymentScheduleHistory.java | 4 +-
.../domain/LoanRescheduleRequest.java | 4 +-
...onWritePlatformServiceJpaRepositoryImpl.java | 28 +++++---
.../service/LoanArrearsAgingServiceImpl.java | 1 -
.../service/LoanChargeAssembler.java | 11 ++-
.../loanproduct/domain/LoanProduct.java | 6 +-
.../LoanProductBorrowerCycleVariations.java | 4 +-
.../LoanProductConfigurableAttributes.java | 6 +-
.../domain/LoanProductFloatingRates.java | 4 +-
.../domain/LoanProductGuaranteeDetails.java | 8 +--
...LoanProductInterestRecalculationDetails.java | 4 +-
.../domain/LoanProductTrancheDetails.java | 4 +-
.../LoanProductVariableInstallmentConfig.java | 4 +-
.../LoanTransactionProcessingStrategy.java | 4 +-
.../productmix/domain/ProductMix.java | 4 +-
.../productmix/domain/ProductMixRepository.java | 4 +-
...ctWritePlatformServiceJpaRepositoryImpl.java | 27 ++++---
.../attendance/domain/ClientAttendance.java | 4 +-
.../portfolio/meeting/domain/Meeting.java | 4 +-
.../fineract/portfolio/note/domain/Note.java | 4 +-
.../paymentdetail/domain/PaymentDetail.java | 4 +-
.../paymenttype/domain/PaymentType.java | 4 +-
.../domain/DepositAccountInterestIncentive.java | 4 +-
.../DepositAccountInterestIncentives.java | 4 +-
.../domain/DepositAccountInterestRateChart.java | 4 +-
.../DepositAccountInterestRateChartSlabs.java | 4 +-
.../domain/DepositAccountOnHoldTransaction.java | 4 +-
.../domain/DepositAccountRecurringDetail.java | 8 +--
.../domain/DepositAccountTermAndPreClosure.java | 6 +-
.../domain/DepositProductRecurringDetail.java | 4 +-
.../domain/DepositProductTermAndPreClosure.java | 4 +-
.../savings/domain/FixedDepositAccount.java | 6 ++
.../savings/domain/RecurringDepositAccount.java | 1 +
.../RecurringDepositScheduleInstallment.java | 6 +-
.../savings/domain/SavingsAccount.java | 10 +--
.../savings/domain/SavingsAccountCharge.java | 13 +---
.../domain/SavingsAccountChargePaidBy.java | 4 +-
.../domain/SavingsAccountChargeRepository.java | 2 +-
.../domain/SavingsAccountRepository.java | 14 ++--
.../domain/SavingsAccountTransaction.java | 24 +++----
.../SavingsAccountTransactionTaxDetails.java | 4 +-
.../savings/domain/SavingsProduct.java | 14 ++--
...ntWritePlatformServiceJpaRepositoryImpl.java | 20 +++---
...ssWritePlatformServiceJpaRepositoryImpl.java | 33 ++++++---
...ctWritePlatformServiceJpaRepositoryImpl.java | 20 ++++--
...ctWritePlatformServiceJpaRepositoryImpl.java | 21 ++++--
...ntWritePlatformServiceJpaRepositoryImpl.java | 22 +++---
...ssWritePlatformServiceJpaRepositoryImpl.java | 18 +++--
...ctWritePlatformServiceJpaRepositoryImpl.java | 21 ++++--
.../account/domain/SelfBeneficiariesTPT.java | 4 +-
.../shareaccounts/domain/ShareAccount.java | 4 +-
.../domain/ShareAccountCharge.java | 14 +---
.../domain/ShareAccountChargePaidBy.java | 4 +-
.../domain/ShareAccountDividendDetails.java | 4 +-
.../domain/ShareAccountTransaction.java | 6 +-
.../ShareAccountDataSerializer.java | 1 +
...ntWritePlatformServiceJpaRepositoryImpl.java | 39 ++++++----
.../shareproducts/domain/ShareProduct.java | 2 +-
.../domain/ShareProductMarketPrice.java | 4 +-
...ctWritePlatformServiceJpaRepositoryImpl.java | 43 +++++++----
.../apache/fineract/spm/domain/Component.java | 4 +-
.../apache/fineract/spm/domain/LookupTable.java | 4 +-
.../apache/fineract/spm/domain/Question.java | 6 +-
.../apache/fineract/spm/domain/Response.java | 4 +-
.../apache/fineract/spm/domain/Scorecard.java | 4 +-
.../org/apache/fineract/spm/domain/Survey.java | 8 +--
.../fineract/template/domain/Template.java | 18 ++---
.../template/domain/TemplateMapper.java | 4 +-
.../useradministration/domain/AppUser.java | 8 +--
.../domain/AppUserClientMapping.java | 4 +-
.../domain/AppUserPreviousPassword.java | 4 +-
.../domain/PasswordValidationPolicy.java | 7 +-
.../PasswordValidationPolicyRepository.java | 2 +-
.../useradministration/domain/Permission.java | 12 ++--
.../useradministration/domain/Role.java | 6 +-
.../domain/RoleRepository.java | 2 +-
...erWritePlatformServiceJpaRepositoryImpl.java | 30 +++++---
...leWritePlatformServiceJpaRepositoryImpl.java | 24 +++++--
.../src/main/resources/META-INF/persistence.xml | 14 ++--
.../META-INF/spring/infrastructure.xml | 7 +-
238 files changed, 1545 insertions(+), 914 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/build.gradle
----------------------------------------------------------------------
diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle
index 50e7e7a..b521d6c 100644
--- a/fineract-provider/build.gradle
+++ b/fineract-provider/build.gradle
@@ -23,6 +23,7 @@ gradle clean tomcatrunwar
buildscript {
repositories {
jcenter()
+ mavenCentral()
}
dependencies {
@@ -30,6 +31,8 @@ buildscript {
'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0',
'org.zeroturnaround:gradle-jrebel-plugin:1.1.2',
'org.springframework.boot:spring-boot-gradle-plugin:1.1.6.RELEASE' // also change springDataJpaVersion below
+ classpath 'org.apache.openjpa:openjpa-all:2.4.1'
+ classpath 'at.schmutterer.oss.gradle:gradle-openjpa:0.2.0'
}
}
@@ -42,6 +45,7 @@ apply plugin: 'idea'
apply plugin: 'tomcat'
apply plugin: 'project-report'
apply plugin: 'java'
+apply plugin: 'openjpa'
/* define the valid syntax level for source files */
sourceCompatibility = JavaVersion.VERSION_1_8
@@ -64,9 +68,16 @@ repositories {
jcenter()
// mavenLocal() // useful for local dev using MariaDB4j SNAPSHOTs (not needed for real-world non-SNAPHOT builds)
}
+openjpa {
+ files = fileTree(sourceSets.main.output.classesDir).matching {
+ include '**/AbstractPersistableCustom.class'
+ include '**/domain/*.class'
+
+ }
+ enforcePropertyRestrictions = true
+}
configurations {
- hibernateDependencies
providedRuntime // needed for Spring Boot executable WAR
providedCompile
compile() {
@@ -136,11 +147,6 @@ task dist(type:Zip){
war {
war.finalizedBy(bootRepackage)
- if (project.hasProperty('buildType') && project.getProperty('buildType') == 'TEST') {
- from(configurations.hibernateDependencies) { // notice the parens
- into "WEB-INF/lib/" // no leading slash
- }
- }
}
license {
@@ -200,7 +206,6 @@ sourceSets {
integrationTest {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
- runtimeClasspath += configurations.hibernateDependencies
}
}
@@ -231,9 +236,6 @@ configurations {
}
dependencies {
driver 'org.drizzle.jdbc:drizzle-jdbc:1.3'
- hibernateDependencies(
- [group:'org.springframework.boot', name:'spring-boot-starter-data-jpa', version:'1.1.6.RELEASE'],
- )
}
test {
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/dependencies.gradle
----------------------------------------------------------------------
diff --git a/fineract-provider/dependencies.gradle b/fineract-provider/dependencies.gradle
index dcb27fe..1623db7 100644
--- a/fineract-provider/dependencies.gradle
+++ b/fineract-provider/dependencies.gradle
@@ -37,11 +37,13 @@ dependencies {
[group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion],
[group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: springBootVersion],
[group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: springBootVersion],
- [group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.0.0'],
+ //[group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.0.0'],
[group: 'org.springframework', name: 'spring-context-support', version: springVersion],
[group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: springOauthVersion],
+ [group: 'org.apache.openjpa', name:'openjpa-all', version:'2.4.1'],
+ [group: 'org.apache.openjpa', name:'openjpa-maven-plugin', version:'2.4.1'],
[group: 'javax.ws.rs', name: 'jsr311-api', version: '1.1.1'],
[group: 'com.sun.jersey', name: 'jersey-core', version: jerseyVersion],
[group: 'com.sun.jersey', name: 'jersey-servlet', version: jerseyVersion],
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/dev-dependencies.gradle
----------------------------------------------------------------------
diff --git a/fineract-provider/dev-dependencies.gradle b/fineract-provider/dev-dependencies.gradle
index 82e4031..56fcb77 100644
--- a/fineract-provider/dev-dependencies.gradle
+++ b/fineract-provider/dev-dependencies.gradle
@@ -37,10 +37,12 @@ dependencies {
[group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion],
[group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: springBootVersion],
[group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: springBootVersion],
- [group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.0.0'],
+ //[group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.0.0'],
[group: 'org.springframework', name: 'spring-context-support', version: springVersion],
[group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: springOauthVersion],
+ [group: 'org.apache.openjpa', name:'openjpa-all', version:'2.4.1'],
+ [group: 'org.apache.openjpa', name:'openjpa-maven-plugin', version:'2.4.1'],
[group: 'javax.ws.rs', name: 'jsr311-api', version: '1.1.1'],
[group: 'com.sun.jersey', name: 'jersey-core', version: jerseyVersion],
[group: 'com.sun.jersey', name: 'jersey-servlet', version: jerseyVersion],
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java
index 107bece..f07fdee 100644
--- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java
+++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java
@@ -155,14 +155,24 @@ public class ProvisioningIntegrationTest {
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) ;
+ Object requestedCategoryId = requestedMap.get("categoryId") ;
+ boolean found = false ;
+ for(int j = 0 ; j < newdefintions.size(); j++) {
+ Map newMap = (Map)newdefintions.get(j) ;
+ Object newCategoryId = newMap.get("categoryId") ;
+ if(requestedCategoryId.equals(newCategoryId)) {
+ found = true ;
+ 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) ;
+ break ; //internal loop
+ }
+ }
+ if(!found) Assert.fail("No Category found with Id:"+requestedCategoryId);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/domain/GLClosureRepository.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/domain/GLClosureRepository.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/domain/GLClosureRepository.java
index cc43547..75bfe7a 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/domain/GLClosureRepository.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/closure/domain/GLClosureRepository.java
@@ -25,6 +25,6 @@ import org.springframework.data.repository.query.Param;
public interface GLClosureRepository extends JpaRepository<GLClosure, Long>, JpaSpecificationExecutor<GLClosure> {
- @Query("from GLClosure closure where closure.closingDate = (select max(closure1.closingDate) from GLClosure closure1 where closure1.office.id=:officeId) and closure.office.id= :officeId")
+ @Query("select closure from GLClosure closure where closure.closingDate = (select max(closure1.closingDate) from GLClosure closure1 where closure1.office.id=:officeId) and closure.office.id= :officeId")
GLClosure getLatestGLClosureByBranch(@Param("officeId") Long officeId);
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java
index 93f8e79..3f87468 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java
@@ -26,11 +26,11 @@ import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.apache.fineract.accounting.glaccount.domain.GLAccount;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "acc_gl_financial_activity_account")
-public class FinancialActivityAccount extends AbstractPersistable<Long> {
+public class FinancialActivityAccount extends AbstractPersistableCustom<Long> {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "gl_account_id")
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccountRepository.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccountRepository.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccountRepository.java
index 7414133..940b57b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccountRepository.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccountRepository.java
@@ -26,7 +26,7 @@ import org.springframework.data.repository.query.Param;
public interface FinancialActivityAccountRepository extends JpaRepository<FinancialActivityAccount, Long>,
JpaSpecificationExecutor<FinancialActivityAccount> {
- @Query("from FinancialActivityAccount faa where faa.financialActivityType = :financialActivityType")
+ @Query("select faa from FinancialActivityAccount faa where faa.financialActivityType = :financialActivityType")
FinancialActivityAccount findByFinancialActivityType(@Param("financialActivityType") int financialAccountType);
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/service/FinancialActivityAccountWritePlatformServiceImpl.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/service/FinancialActivityAccountWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/service/FinancialActivityAccountWritePlatformServiceImpl.java
index 558cc41..c5e2e22 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/service/FinancialActivityAccountWritePlatformServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/financialactivityaccount/service/FinancialActivityAccountWritePlatformServiceImpl.java
@@ -21,6 +21,9 @@ package org.apache.fineract.accounting.financialactivityaccount.service;
import java.util.HashMap;
import java.util.Map;
+import javax.persistence.PersistenceException;
+
+import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.fineract.accounting.common.AccountingConstants.FINANCIAL_ACTIVITY;
import org.apache.fineract.accounting.financialactivityaccount.api.FinancialActivityAccountsJsonInputParams;
import org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount;
@@ -76,7 +79,11 @@ public class FinancialActivityAccountWritePlatformServiceImpl implements Financi
.withEntityId(financialActivityAccount.getId()) //
.build();
} catch (DataIntegrityViolationException dataIntegrityViolationException) {
- handleFinancialActivityAccountDataIntegrityIssues(command, dataIntegrityViolationException);
+ handleFinancialActivityAccountDataIntegrityIssues(command, dataIntegrityViolationException.getMostSpecificCause(), dataIntegrityViolationException);
+ return CommandProcessingResult.empty();
+ }catch(final PersistenceException ee) {
+ Throwable throwable = ExceptionUtils.getRootCause(ee.getCause()) ;
+ handleFinancialActivityAccountDataIntegrityIssues(command, throwable, ee);
return CommandProcessingResult.empty();
}
}
@@ -122,8 +129,12 @@ public class FinancialActivityAccountWritePlatformServiceImpl implements Financi
.with(changes) //
.build();
} catch (DataIntegrityViolationException dataIntegrityViolationException) {
- handleFinancialActivityAccountDataIntegrityIssues(command, dataIntegrityViolationException);
+ handleFinancialActivityAccountDataIntegrityIssues(command, dataIntegrityViolationException.getMostSpecificCause(), dataIntegrityViolationException);
return CommandProcessingResult.empty();
+ }catch(final PersistenceException ee) {
+ Throwable throwable = ExceptionUtils.getRootCause(ee.getCause()) ;
+ handleFinancialActivityAccountDataIntegrityIssues(command, throwable, ee);
+ return CommandProcessingResult.empty();
}
}
@@ -138,8 +149,7 @@ public class FinancialActivityAccountWritePlatformServiceImpl implements Financi
.build();
}
- private void handleFinancialActivityAccountDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) {
- final Throwable realCause = dve.getMostSpecificCause();
+ private void handleFinancialActivityAccountDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) {
if (realCause.getMessage().contains("financial_activity_type")) {
final Integer financialActivityId = command
.integerValueSansLocaleOfParameterNamed(FinancialActivityAccountsJsonInputParams.FINANCIAL_ACTIVITY_ID.getValue());
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java
index 5ed1ab9..b68cd4a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java
@@ -37,11 +37,11 @@ import org.apache.commons.lang.StringUtils;
import org.apache.fineract.accounting.glaccount.api.GLAccountJsonInputParams;
import org.apache.fineract.infrastructure.codes.domain.CodeValue;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "acc_gl_account", uniqueConstraints = { @UniqueConstraint(columnNames = { "gl_code" }, name = "acc_gl_code") })
-public class GLAccount extends AbstractPersistable<Long> {
+public class GLAccount extends AbstractPersistableCustom<Long> {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
@@ -52,7 +52,7 @@ public class GLAccount extends AbstractPersistable<Long> {
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
- private final List<GLAccount> children = new LinkedList<>();
+ private List<GLAccount> children = new LinkedList<>();
@Column(name = "name", nullable = false, length = 45)
private String name;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntryRepository.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntryRepository.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntryRepository.java
index 120b03e..c280f89 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntryRepository.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntryRepository.java
@@ -29,24 +29,24 @@ import org.springframework.data.repository.query.Param;
public interface JournalEntryRepository extends JpaRepository<JournalEntry, Long>, JpaSpecificationExecutor<JournalEntry>,
JournalEntryRepositoryCustom {
- @Query("from JournalEntry journalEntry where journalEntry.transactionId= :transactionId and journalEntry.reversed is false and journalEntry.manualEntry is true")
+ @Query("select journalEntry from JournalEntry journalEntry where journalEntry.transactionId= :transactionId and journalEntry.reversed=false and journalEntry.manualEntry=true")
List<JournalEntry> findUnReversedManualJournalEntriesByTransactionId(@Param("transactionId") String transactionId);
@Query("select DISTINCT j.transactionId from JournalEntry j where j.transactionId not in (select DISTINCT je.transactionId from JournalEntry je where je.glAccount.id = :contraId)")
List<String> findNonContraTansactionIds(@Param("contraId") Long contraId);
- @Query("select DISTINCT j.transactionId from JournalEntry j where j.office.id = :officeId and j.glAccount.id = :contraId and j.reversed is false and j.transactionId not in (select DISTINCT je.reversalJournalEntry.transactionId from JournalEntry je where je.reversed is true)")
+ @Query("select DISTINCT j.transactionId from JournalEntry j where j.office.id = :officeId and j.glAccount.id = :contraId and j.reversed=false and j.transactionId not in (select DISTINCT je.reversalJournalEntry.transactionId from JournalEntry je where je.reversed=true)")
List<String> findNonReversedContraTansactionIds(@Param("contraId") Long contraId, @Param("officeId") Long officeId);
- @Query("from JournalEntry journalEntry where journalEntry.entityId= :entityId and journalEntry.entityType = :entityType")
+ @Query("select journalEntry from JournalEntry journalEntry where journalEntry.entityId= :entityId and journalEntry.entityType = :entityType")
List<JournalEntry> findProvisioningJournalEntriesByEntityId(@Param("entityId") Long entityId, @Param("entityType") Integer entityType) ;
- @Query("from JournalEntry journalEntry where journalEntry.transactionId= :transactionId and journalEntry.reversed is false and journalEntry.entityType = :entityType")
+ @Query("select journalEntry from JournalEntry journalEntry where journalEntry.transactionId= :transactionId and journalEntry.reversed=false and journalEntry.entityType = :entityType")
List<JournalEntry> findJournalEntries(@Param("transactionId") String transactionId, @Param("entityType") Integer entityType);
- @Query("from JournalEntry journalEntry where glAccount.id= :accountId and transactionId= :transactionId and transactionDate= :transactionDate"
+ /*@Query("select journalEntry from JournalEntry journalEntry where glAccount.id= :accountId and transactionId= :transactionId and transactionDate= :transactionDate"
+ " and type= :journalEntryType and entityType=1 and entityId= :loanId and loanTransaction.id= :loanTransactionId")
JournalEntry findLOANJournalEntryWith(@Param("accountId") Long accountId, @Param("transactionId") String transactionId,
@Param("transactionDate") Date transactionDate, @Param("journalEntryType") Integer journalEntryType,
- @Param("loanId") Long loanId, @Param("loanTransactionId") Long loanTransactionId);
+ @Param("loanId") Long loanId, @Param("loanTransactionId") Long loanTransactionId);*/
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java
index 4c9bbaf..78a5b4d 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java
@@ -20,41 +20,40 @@ package org.apache.fineract.accounting.producttoaccountmapping.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
-import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.apache.fineract.accounting.glaccount.domain.GLAccount;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.portfolio.charge.domain.Charge;
import org.apache.fineract.portfolio.paymenttype.domain.PaymentType;
-import org.springframework.data.jpa.domain.AbstractPersistable;
@Entity
@Table(name = "acc_product_mapping", uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id", "product_type",
"financial_account_type", "payment_type" }, name = "financial_action") })
-public class ProductToGLAccountMapping extends AbstractPersistable<Long> {
+public class ProductToGLAccountMapping extends AbstractPersistableCustom<Long> {
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne(optional=true)
@JoinColumn(name = "gl_account_id")
private GLAccount glAccount;
- @Column(name = "product_id", nullable = false)
+ @Column(name = "product_id", nullable = true)
private Long productId;
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne
@JoinColumn(name = "payment_type", nullable = true)
private PaymentType paymentType;
- @ManyToOne(fetch = FetchType.LAZY)
+ @ManyToOne
@JoinColumn(name = "charge_id", nullable = true)
private Charge charge;
- @Column(name = "product_type", nullable = false)
+ @Column(name = "product_type", nullable = true)
private int productType;
- @Column(name = "financial_account_type", nullable = false)
+ @Column(name = "financial_account_type", nullable = true)
private int financialAccountType;
public static ProductToGLAccountMapping createNew(final GLAccount glAccount, final Long productId, final int productType,
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMappingRepository.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMappingRepository.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMappingRepository.java
index 230de00..0882c7b 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMappingRepository.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMappingRepository.java
@@ -34,22 +34,22 @@ public interface ProductToGLAccountMappingRepository extends JpaRepository<Produ
ProductToGLAccountMapping findByProductIdAndProductTypeAndFinancialAccountTypeAndChargeId(Long productId, int productType,
int financialAccountType, Long chargeId);
- @Query("from ProductToGLAccountMapping mapping where mapping.productId =:productId and mapping.productType =:productType and mapping.financialAccountType=:financialAccountType and mapping.paymentType is NULL and mapping.charge is NULL")
+ @Query("select mapping from ProductToGLAccountMapping mapping where mapping.productId =:productId and mapping.productType =:productType and mapping.financialAccountType=:financialAccountType and mapping.paymentType is NULL and mapping.charge is NULL")
ProductToGLAccountMapping findCoreProductToFinAccountMapping(@Param("productId") Long productId, @Param("productType") int productType,
@Param("financialAccountType") int financialAccountType);
/*** The financial Account Type for a fund source will always be an asset (1) ***/
- @Query("from ProductToGLAccountMapping mapping where mapping.productId =:productId and mapping.productType =:productType and mapping.financialAccountType=1 and mapping.paymentType is not NULL")
+ @Query("select mapping from ProductToGLAccountMapping mapping where mapping.productId =:productId and mapping.productType =:productType and mapping.financialAccountType=1 and mapping.paymentType is not NULL")
List<ProductToGLAccountMapping> findAllPaymentTypeToFundSourceMappings(@Param("productId") Long productId,
@Param("productType") int productType);
/*** The financial Account Type for income from interest will always be 4 ***/
- @Query("from ProductToGLAccountMapping mapping where mapping.productId =:productId and mapping.productType =:productType and mapping.financialAccountType=4 and mapping.charge is not NULL")
+ @Query("select mapping from ProductToGLAccountMapping mapping where mapping.productId =:productId and mapping.productType =:productType and mapping.financialAccountType=4 and mapping.charge is not NULL")
List<ProductToGLAccountMapping> findAllFeeToIncomeAccountMappings(@Param("productId") Long productId,
@Param("productType") int productType);
/*** The financial Account Type for income from interest will always be 5 ***/
- @Query("from ProductToGLAccountMapping mapping where mapping.productId =:productId and mapping.productType =:productType and mapping.financialAccountType=5 and mapping.charge is not NULL")
+ @Query("select mapping from ProductToGLAccountMapping mapping where mapping.productId =:productId and mapping.productType =:productType and mapping.financialAccountType=5 and mapping.charge is not NULL")
List<ProductToGLAccountMapping> findAllPenaltyToIncomeAccountMappings(@Param("productId") Long productId,
@Param("productType") int productType);
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java
index 49ea228..42db8d8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java
@@ -27,14 +27,14 @@ import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.apache.fineract.accounting.glaccount.domain.GLAccount;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.organisation.office.domain.Office;
import org.apache.fineract.organisation.provisioning.domain.ProvisioningCategory;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
-import org.springframework.data.jpa.domain.AbstractPersistable;
@Entity
@Table(name = "m_loanproduct_provisioning_entry")
-public class LoanProductProvisioningEntry extends AbstractPersistable<Long> {
+public class LoanProductProvisioningEntry extends AbstractPersistableCustom<Long> {
@ManyToOne(optional = false)
@JoinColumn(name = "history_id", referencedColumnName = "id", nullable = false)
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java
index 5b56507..920c7c7 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java
@@ -35,17 +35,17 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.apache.fineract.useradministration.domain.AppUser;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_provisioning_history")
-public class ProvisioningEntry extends AbstractPersistable<Long> {
+public class ProvisioningEntry extends AbstractPersistableCustom<Long> {
@Column(name = "journal_entry_created")
private Boolean isJournalEntryCreated;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "entry", orphanRemoval = true, fetch=FetchType.EAGER)
- Set<LoanProductProvisioningEntry> provisioningEntries = new HashSet<>();
+ private Set<LoanProductProvisioningEntry> provisioningEntries = new HashSet<>();
@OneToOne
@JoinColumn(name = "createdby_id")
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntryRepository.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntryRepository.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntryRepository.java
index 5abed20..50c7ad2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntryRepository.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntryRepository.java
@@ -27,9 +27,10 @@ import org.springframework.data.repository.query.Param;
public interface ProvisioningEntryRepository extends JpaRepository<ProvisioningEntry, Long>, JpaSpecificationExecutor<ProvisioningEntry> {
- @Query("select entry from ProvisioningEntry entry where entry.createdDate = :createdDate")
+ //OPENJPA throws error if we use entry
+ @Query("select entry1 from ProvisioningEntry entry1 where entry1.createdDate = :createdDate")
ProvisioningEntry findByProvisioningEntryDate(@Param("createdDate") Date createdDate);
- @Query("select entry from ProvisioningEntry entry where entry.createdDate = (select max(entry1.createdDate) from ProvisioningEntry entry1 where entry1.isJournalEntryCreated='1')")
+ @Query("select entry1 from ProvisioningEntry entry1 where entry1.createdDate = (select max(entry2.createdDate) from ProvisioningEntry entry2 where entry2.isJournalEntryCreated=true)")
ProvisioningEntry findExistingProvisioningEntryWithJournalEntries() ;
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java
index a603722..0b09b10 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java
@@ -41,11 +41,11 @@ import org.apache.fineract.accounting.journalentry.domain.JournalEntryType;
import org.apache.fineract.accounting.rule.api.AccountingRuleJsonInputParams;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.organisation.office.domain.Office;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "acc_accounting_rule", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "accounting_rule_name_unique") })
-public class AccountingRule extends AbstractPersistable<Long> {
+public class AccountingRule extends AbstractPersistableCustom<Long> {
@Column(name = "name", nullable = false, length = 500)
private String name;
@@ -69,7 +69,7 @@ public class AccountingRule extends AbstractPersistable<Long> {
private Boolean systemDefined;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "accountingRule", orphanRemoval = true, fetch=FetchType.EAGER)
- private final List<AccountingTagRule> accountingTagRules = new ArrayList<>();
+ private List<AccountingTagRule> accountingTagRules = new ArrayList<>();
@Column(name = "allow_multiple_credits", nullable = false)
private boolean allowMultipleCreditEntries;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRuleRepository.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRuleRepository.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRuleRepository.java
index 89e67c2..17d807c 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRuleRepository.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRuleRepository.java
@@ -25,6 +25,6 @@ import org.springframework.data.repository.query.Param;
public interface AccountingRuleRepository extends JpaRepository<AccountingRule, Long>, JpaSpecificationExecutor<AccountingRule> {
- @Query("from AccountingRule accountingRule where accountingRule.office is null or accountingRule.office.id =:officeId")
+ @Query("select accountingRule from AccountingRule accountingRule where accountingRule.office is null or accountingRule.office.id =:officeId")
AccountingRule getAccountingRuleByOfficeId(@Param("officeId") Long officeId);
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java
index f47e977..16f138d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java
@@ -27,11 +27,11 @@ import javax.persistence.UniqueConstraint;
import org.apache.fineract.accounting.journalentry.domain.JournalEntryType;
import org.apache.fineract.infrastructure.codes.domain.CodeValue;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "acc_rule_tags", uniqueConstraints = { @UniqueConstraint(columnNames = { "acc_rule_id", "tag_id", "acc_type_enum" }, name = "UNIQUE_ACCOUNT_RULE_TAGS") })
-public class AccountingTagRule extends AbstractPersistable<Long> {
+public class AccountingTagRule extends AbstractPersistableCustom<Long> {
@ManyToOne
@JoinColumn(name = "acc_rule_id", nullable = false)
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/batch/exception/ErrorHandler.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/batch/exception/ErrorHandler.java b/fineract-provider/src/main/java/org/apache/fineract/batch/exception/ErrorHandler.java
index 65d166d..76b373c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/batch/exception/ErrorHandler.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/batch/exception/ErrorHandler.java
@@ -31,6 +31,7 @@ import org.apache.fineract.infrastructure.core.exceptionmapper.PlatformResourceN
import org.apache.fineract.infrastructure.core.exceptionmapper.UnsupportedParameterExceptionMapper;
import org.apache.fineract.portfolio.loanaccount.exception.MultiDisbursementDataRequiredException;
import org.apache.fineract.portfolio.loanproduct.exception.LinkedAccountRequiredException;
+import org.springframework.dao.NonTransientDataAccessException;
import org.springframework.transaction.TransactionException;
import com.google.gson.Gson;
@@ -120,6 +121,8 @@ public class ErrorHandler extends RuntimeException {
final String errorBody = jsonHelper.toJson(mapper.toResponse((PlatformInternalServerException) exception).getEntity());
return new ErrorInfo(500, 5001, errorBody);
+ }else if(exception instanceof NonTransientDataAccessException) {
+ return new ErrorInfo(400, 4001, "{\"Exception\": " + exception.getMessage()+"}");
}
return new ErrorInfo(500, 9999, "{\"Exception\": " + exception.toString() + "}");
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/batch/service/BatchApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/batch/service/BatchApiServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/batch/service/BatchApiServiceImpl.java
index d7aadd8..0eec7da 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/batch/service/BatchApiServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/batch/service/BatchApiServiceImpl.java
@@ -35,6 +35,7 @@ import org.apache.fineract.batch.exception.ErrorHandler;
import org.apache.fineract.batch.exception.ErrorInfo;
import org.apache.fineract.batch.service.ResolutionHelper.BatchRequestNode;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.NonTransientDataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.TransactionStatus;
@@ -216,7 +217,22 @@ public class BatchApiServiceImpl implements BatchApiService {
errResponseList.add(errResponse);
return errResponseList;
+ }catch (final NonTransientDataAccessException ex) {
+ ErrorInfo e = ErrorHandler.handler(ex);
+ BatchResponse errResponse = new BatchResponse();
+ errResponse.setStatusCode(e.getStatusCode());
+
+ for (BatchResponse res : checkList) {
+ if (!res.getStatusCode().equals(200)) {
+ errResponse.setBody("Transaction is being rolled back. First erroneous request: \n" + new Gson().toJson(res));
+ break;
+ }
+ }
+ checkList.clear();
+ List<BatchResponse> errResponseList = new ArrayList<>();
+ errResponseList.add(errResponse);
+
+ return errResponseList;
}
-
}
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java b/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java
index a859e8e..a19d22c 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/commands/domain/CommandSource.java
@@ -32,11 +32,11 @@ import org.apache.commons.lang.StringUtils;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.useradministration.domain.AppUser;
import org.joda.time.DateTime;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_portfolio_command_source")
-public class CommandSource extends AbstractPersistable<Long> {
+public class CommandSource extends AbstractPersistableCustom<Long> {
@Column(name = "action_name", nullable = true, length = 100)
private String actionName;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java
index 064c1a6..4ff34cc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java
@@ -25,16 +25,16 @@ import javax.persistence.UniqueConstraint;
import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormatEnumerations.AccountNumberPrefixType;
import org.apache.fineract.infrastructure.accountnumberformat.service.AccountNumberFormatConstants;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = AccountNumberFormatConstants.ACCOUNT_NUMBER_FORMAT_TABLE_NAME, uniqueConstraints = { @UniqueConstraint(columnNames = { AccountNumberFormatConstants.ACCOUNT_TYPE_ENUM_COLUMN_NAME }, name = AccountNumberFormatConstants.ACCOUNT_TYPE_UNIQUE_CONSTRAINT_NAME) })
-public class AccountNumberFormat extends AbstractPersistable<Long> {
+public class AccountNumberFormat extends AbstractPersistableCustom<Long> {
@Column(name = AccountNumberFormatConstants.ACCOUNT_TYPE_ENUM_COLUMN_NAME, nullable = false)
private Integer accountTypeEnum;
- @Column(name = AccountNumberFormatConstants.PREFIX_TYPE_ENUM_COLUMN_NAME, nullable = false)
+ @Column(name = AccountNumberFormatConstants.PREFIX_TYPE_ENUM_COLUMN_NAME, nullable = true)
private Integer prefixEnum;
protected AccountNumberFormat() {
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatRepository.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatRepository.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatRepository.java
index 3557bad..12396ab 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatRepository.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatRepository.java
@@ -26,7 +26,7 @@ import org.springframework.data.repository.query.Param;
public interface AccountNumberFormatRepository extends JpaRepository<AccountNumberFormat, Long>,
JpaSpecificationExecutor<AccountNumberFormat> {
- public static final String FIND_ACCOUNT_NUMBER_FORMAT_FOR_ENTITY = "from AccountNumberFormat anf where anf.accountTypeEnum = :accountTypeEnum";
+ public static final String FIND_ACCOUNT_NUMBER_FORMAT_FOR_ENTITY = "select anf from AccountNumberFormat anf where anf.accountTypeEnum = :accountTypeEnum";
@Query(FIND_ACCOUNT_NUMBER_FORMAT_FOR_ENTITY)
AccountNumberFormat findOneByAccountTypeEnum(@Param("accountTypeEnum") Integer accountTypeEnum);
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/service/AccountNumberFormatWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/service/AccountNumberFormatWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/service/AccountNumberFormatWritePlatformServiceJpaRepositoryImpl.java
index b4afef2..31fe1b2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/service/AccountNumberFormatWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/service/AccountNumberFormatWritePlatformServiceJpaRepositoryImpl.java
@@ -21,11 +21,14 @@ package org.apache.fineract.infrastructure.accountnumberformat.service;
import java.util.LinkedHashMap;
import java.util.Map;
+import javax.persistence.PersistenceException;
+
+import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.fineract.infrastructure.accountnumberformat.data.AccountNumberFormatDataValidator;
import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat;
+import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormatEnumerations.AccountNumberPrefixType;
import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormatRepositoryWrapper;
import org.apache.fineract.infrastructure.accountnumberformat.domain.EntityAccountType;
-import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormatEnumerations.AccountNumberPrefixType;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder;
@@ -74,8 +77,12 @@ public class AccountNumberFormatWritePlatformServiceJpaRepositoryImpl implements
.withEntityId(accountNumberFormat.getId()) //
.build();
} catch (final DataIntegrityViolationException dve) {
- handleDataIntegrityIssues(command, dve);
+ handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve);
return CommandProcessingResult.empty();
+ }catch (final PersistenceException ee) {
+ Throwable throwable = ExceptionUtils.getRootCause(ee.getCause()) ;
+ handleDataIntegrityIssues(command, throwable, ee);
+ return CommandProcessingResult.empty();
}
}
@@ -110,8 +117,12 @@ public class AccountNumberFormatWritePlatformServiceJpaRepositoryImpl implements
.with(actualChanges) //
.build();
} catch (final DataIntegrityViolationException dve) {
- handleDataIntegrityIssues(command, dve);
+ handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve);
return CommandProcessingResult.empty();
+ } catch (final PersistenceException ee) {
+ Throwable throwable = ExceptionUtils.getRootCause(ee.getCause()) ;
+ handleDataIntegrityIssues(command, throwable, ee);
+ return CommandProcessingResult.empty();
}
}
@@ -126,13 +137,12 @@ public class AccountNumberFormatWritePlatformServiceJpaRepositoryImpl implements
.build();
}
+
/*
* Guaranteed to throw an exception no matter what the data integrity issue
* is.
*/
- private void handleDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) {
-
- final Throwable realCause = dve.getMostSpecificCause();
+ private void handleDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) {
if (realCause.getMessage().contains(AccountNumberFormatConstants.ACCOUNT_TYPE_UNIQUE_CONSTRAINT_NAME)) {
final Integer accountTypeId = command.integerValueSansLocaleOfParameterNamed(AccountNumberFormatConstants.accountTypeParamName);
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java
index 9af367b..9ccfa2d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java
@@ -22,11 +22,11 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "c_cache")
-public class PlatformCache extends AbstractPersistable<Long> {
+public class PlatformCache extends AbstractPersistableCustom<Long> {
@Column(name = "cache_type_enum")
private Integer cacheType;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java
index 22042a3..82fafb2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java
@@ -33,17 +33,17 @@ import javax.persistence.UniqueConstraint;
import org.apache.commons.lang.StringUtils;
import org.apache.fineract.infrastructure.codes.exception.SystemDefinedCodeCannotBeChangedException;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_code", uniqueConstraints = { @UniqueConstraint(columnNames = { "code_name" }, name = "code_name") })
-public class Code extends AbstractPersistable<Long> {
+public class Code extends AbstractPersistableCustom<Long> {
@Column(name = "code_name", length = 100)
private String name;
@Column(name = "is_system_defined")
- private final boolean systemDefined;
+ private boolean systemDefined;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "code", orphanRemoval = true)
private Set<CodeValue> values;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java
index 5045c67..8ee1ac8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java
@@ -32,11 +32,11 @@ import org.apache.commons.lang.StringUtils;
import org.apache.fineract.infrastructure.codes.CodeConstants.CODEVALUE_JSON_INPUT_PARAMS;
import org.apache.fineract.infrastructure.codes.data.CodeValueData;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_code_value", uniqueConstraints = { @UniqueConstraint(columnNames = { "code_id", "code_value" }, name = "code_value_duplicate") })
-public class CodeValue extends AbstractPersistable<Long> {
+public class CodeValue extends AbstractPersistableCustom<Long> {
@Column(name = "code_value", length = 100)
private String label;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/service/CodeWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/service/CodeWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/service/CodeWritePlatformServiceJpaRepositoryImpl.java
index 3926d18..672fc5e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/service/CodeWritePlatformServiceJpaRepositoryImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/service/CodeWritePlatformServiceJpaRepositoryImpl.java
@@ -20,6 +20,9 @@ package org.apache.fineract.infrastructure.codes.service;
import java.util.Map;
+import javax.persistence.PersistenceException;
+
+import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.fineract.infrastructure.codes.domain.Code;
import org.apache.fineract.infrastructure.codes.domain.CodeRepository;
import org.apache.fineract.infrastructure.codes.exception.CodeNotFoundException;
@@ -70,8 +73,12 @@ public class CodeWritePlatformServiceJpaRepositoryImpl implements CodeWritePlatf
return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(code.getId()).build();
} catch (final DataIntegrityViolationException dve) {
- handleCodeDataIntegrityIssues(command, dve);
+ handleCodeDataIntegrityIssues(command, dve.getMostSpecificCause(), dve);
return CommandProcessingResult.empty();
+ }catch (final PersistenceException ee) {
+ Throwable throwable = ExceptionUtils.getRootCause(ee.getCause()) ;
+ handleCodeDataIntegrityIssues(command, throwable, ee);
+ return CommandProcessingResult.empty();
}
}
@@ -98,8 +105,12 @@ public class CodeWritePlatformServiceJpaRepositoryImpl implements CodeWritePlatf
.with(changes) //
.build();
} catch (final DataIntegrityViolationException dve) {
- handleCodeDataIntegrityIssues(command, dve);
- return null;
+ handleCodeDataIntegrityIssues(command, dve.getMostSpecificCause(), dve);
+ return CommandProcessingResult.empty();
+ }catch (final PersistenceException ee) {
+ Throwable throwable = ExceptionUtils.getRootCause(ee.getCause()) ;
+ handleCodeDataIntegrityIssues(command, throwable, ee);
+ return CommandProcessingResult.empty();
}
}
@@ -133,8 +144,7 @@ public class CodeWritePlatformServiceJpaRepositoryImpl implements CodeWritePlatf
* Guaranteed to throw an exception no matter what the data integrity issue
* is.
*/
- private void handleCodeDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) {
- final Throwable realCause = dve.getMostSpecificCause();
+ private void handleCodeDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) {
if (realCause.getMessage().contains("code_name")) {
final String name = command.stringValueOfParameterNamed("name");
throw new PlatformDataIntegrityException("error.msg.code.duplicate.name", "A code with name '" + name + "' already exists",
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java
index 5bbd0ed..23008be 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java
@@ -23,11 +23,11 @@ import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "c_external_service", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name_UNIQUE") })
-public class ExternalService extends AbstractPersistable<Long> {
+public class ExternalService extends AbstractPersistableCustom<Long> {
@Column(name = "name", length = 50)
private String name;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicePropertiesPK.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicePropertiesPK.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicePropertiesPK.java
index c9fc332..4e60bad 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicePropertiesPK.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicePropertiesPK.java
@@ -23,6 +23,9 @@ import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
@Embeddable
public class ExternalServicePropertiesPK implements Serializable {
@@ -48,5 +51,30 @@ public class ExternalServicePropertiesPK implements Serializable {
public Long getExternalService() {
return externalServiceId;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (obj == this) {
+ return true;
+ }
+ if (obj.getClass() != getClass()) {
+ return false;
+ }
+ final ExternalServicePropertiesPK rhs = (ExternalServicePropertiesPK) obj;
+ return new EqualsBuilder() //
+ .append(this.externalServiceId, rhs.externalServiceId) //
+ .append(this.name, rhs.name) //
+ .isEquals();
+ }
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder(17, 37) //
+ .append(this.externalServiceId) //
+ .append(this.name) //
+ .toHashCode();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesProperties.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesProperties.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesProperties.java
index 3504056..6e36b3d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesProperties.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesProperties.java
@@ -52,7 +52,6 @@ public class ExternalServicesProperties {
this.value = value;
}
-
public static ExternalServicesProperties fromJson(final ExternalService externalService, final JsonCommand command) {
final String name = command.stringValueOfParameterNamed(EXTERNALSERVICEPROPERTIES_JSON_INPUT_PARAMS.NAME.getValue());
final String value = command.stringValueOfParameterNamed(EXTERNALSERVICEPROPERTIES_JSON_INPUT_PARAMS.VALUE.getValue());
@@ -80,5 +79,4 @@ public class ExternalServicesProperties {
public ExternalServicesPropertiesData toData() {
return new ExternalServicesPropertiesData(this.externalServicePropertiesPK.getName(), this.value);
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepository.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepository.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepository.java
index 98a0e5c..6db62a3 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepository.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepository.java
@@ -20,9 +20,12 @@ package org.apache.fineract.infrastructure.configuration.domain;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
public interface ExternalServicesPropertiesRepository extends JpaRepository<ExternalServicesProperties, ExternalServicePropertiesPK>,
JpaSpecificationExecutor<ExternalServicesProperties> {
- ExternalServicesProperties findOneByExternalServicePropertiesPK(ExternalServicePropertiesPK externalServicesProptiesPK);
+ @Query("SELECT ep from ExternalServicesProperties ep where ep.externalServicePropertiesPK.name=:name and ep.externalServicePropertiesPK.externalServiceId=:externalServiceId")
+ ExternalServicesProperties findOneByExternalServicePropertiesPK(@Param("name") String name, @Param("externalServiceId") Long externalServiceId);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepositoryWrapper.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepositoryWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepositoryWrapper.java
index 92201f4..76b038e 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepositoryWrapper.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalServicesPropertiesRepositoryWrapper.java
@@ -34,7 +34,7 @@ public class ExternalServicesPropertiesRepositoryWrapper {
public ExternalServicesProperties findOneByIdAndName(Long id, String name, String externalServiceName) {
final ExternalServicesProperties externalServicesProperties = this.repository
- .findOneByExternalServicePropertiesPK(new ExternalServicePropertiesPK(id, name));
+ .findOneByExternalServicePropertiesPK(name,id);
if (externalServicesProperties == null) throw new ExternalServiceConfigurationNotFoundException(externalServiceName, name);
return externalServicesProperties;
}
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java
index 40d681b..10f4e85 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java
@@ -30,14 +30,14 @@ import org.apache.fineract.infrastructure.configuration.data.GlobalConfiguration
import org.apache.fineract.infrastructure.configuration.exception.GlobalConfigurationPropertyCannotBeModfied;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.security.exception.ForcePasswordResetException;
-import org.springframework.data.jpa.domain.AbstractPersistable;
+import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "c_configuration")
-public class GlobalConfigurationProperty extends AbstractPersistable<Long> {
+public class GlobalConfigurationProperty extends AbstractPersistableCustom<Long> {
@Column(name = "name", nullable = false)
- private final String name;
+ private String name;
@Column(name = "enabled", nullable = false)
private boolean enabled;
@@ -49,7 +49,7 @@ public class GlobalConfigurationProperty extends AbstractPersistable<Long> {
private Date dateValue;
@Column(name = "description", nullable = true)
- private final String description;
+ private String description;
@Column(name = "is_trap_door", nullable = false)
private boolean isTrapDoor;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/ApiParameterError.java
----------------------------------------------------------------------
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/ApiParameterError.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/ApiParameterError.java
index 9a669a0..75a7ae0 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/ApiParameterError.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/ApiParameterError.java
@@ -18,7 +18,9 @@
*/
package org.apache.fineract.infrastructure.core.data;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
public class ApiParameterError {
@@ -57,6 +59,8 @@ public class ApiParameterError {
*/
private List<ApiErrorMessageArg> args = new ArrayList<>();
+ private final transient SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
+
public static ApiParameterError generalError(final String globalisationMessageCode, final String defaultUserMessage,
final Object... defaultUserMessageArgs) {
return new ApiParameterError(globalisationMessageCode, defaultUserMessage, defaultUserMessageArgs);
@@ -86,7 +90,12 @@ public class ApiParameterError {
final List<ApiErrorMessageArg> messageArgs = new ArrayList<>();
if (defaultUserMessageArgs != null) {
for (final Object object : defaultUserMessageArgs) {
- messageArgs.add(ApiErrorMessageArg.from(object));
+ if(object instanceof Date){
+ final String formattedDate = dateFormatter.format(object);
+ messageArgs.add(ApiErrorMessageArg.from(formattedDate));
+ } else {
+ messageArgs.add(ApiErrorMessageArg.from(object));
+ }
}
}
this.args = messageArgs;