diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java index e1e295ab4..698fd8123 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java @@ -49,6 +49,7 @@ import java.util.Set; import java.util.stream.Stream; import javax.persistence.PersistenceException; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -84,8 +85,6 @@ import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.infrastructure.security.utils.SQLInjectionValidator; import org.apache.fineract.useradministration.domain.AppUser; import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.EmptyResultDataAccessException; @@ -96,10 +95,9 @@ import org.springframework.jdbc.support.KeyHolder; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; import org.springframework.orm.jpa.JpaSystemException; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -@Service +@Slf4j @RequiredArgsConstructor public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataService { @@ -107,8 +105,6 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ private static final String CODE_VALUES_TABLE = "m_code_value"; - private static final Logger LOG = LoggerFactory.getLogger(ReadWriteNonCoreDataServiceImpl.class); - // TODO: Extract these types out of here private static final ImmutableMap apiTypeToMySQL = ImmutableMap.builder().put("string", "VARCHAR") .put("number", "INT").put("boolean", "BIT").put("decimal", "DECIMAL").put("date", "DATE").put("datetime", "DATETIME") @@ -367,7 +363,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ } private void logAsErrorUnexpectedDataIntegrityException(final Exception dve) { - LOG.error("Error occurred.", dve); + log.error("Error occurred.", dve); } @Transactional @@ -847,7 +843,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ if (databaseTypeResolver.isMySQL()) { sqlBuilder.append(" ENGINE=InnoDB DEFAULT CHARSET=UTF8MB4;"); } - LOG.debug("SQL:: {}", sqlBuilder.toString()); + log.debug("SQL:: {}", sqlBuilder.toString()); this.jdbcTemplate.execute(sqlBuilder.toString()); @@ -989,7 +985,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ try { codeId = this.jdbcTemplate.queryForObject(checkColumnCodeMapping.toString(), Integer.class); } catch (final EmptyResultDataAccessException e) { - LOG.warn("Error occurred.", e); + log.warn("Error occurred.", e); } return ObjectUtils.defaultIfNull(codeId, 0); } @@ -1411,11 +1407,11 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ pkValue = datatableId; } final String sql = getUpdateSql(grs.getColumnHeaders(), dataTableName, pkName, pkValue, changes); - LOG.debug("Update sql: {}", sql); + log.debug("Update sql: {}", sql); if (StringUtils.isNotBlank(sql)) { this.jdbcTemplate.update(sql); } else { - LOG.debug("No Changes"); + log.debug("No Changes"); } } @@ -1520,7 +1516,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ private CommandProcessingResult checkMainResourceExistsWithinScope(final String appTable, final Long appTableId) { final String sql = dataScopedSQL(appTable, appTableId); - LOG.debug("data scoped sql: {}", sql); + log.debug("data scoped sql: {}", sql); final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sql); if (!rs.next()) { @@ -1757,7 +1753,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ addSql = "insert into " + sqlGenerator.escape(datatable) + " (" + sqlGenerator.escape(fkName) + " " + insertColumns + ")" + " select " + appTableId + " as id" + selectColumns; - LOG.debug("{}", addSql); + log.debug("{}", addSql); return addSql; } @@ -1807,7 +1803,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ + ", score )" + " select " + appTableId + " as id" + selectColumns + " , ( SELECT SUM( code_score ) FROM m_code_value WHERE m_code_value.id IN (" + scoresId + " ) ) as score"; - LOG.debug("{}", vaddSql); + log.debug("{}", vaddSql); return vaddSql; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/starter/DataQueriesAutoConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/starter/DataQueriesAutoConfiguration.java new file mode 100644 index 000000000..7bc5b954f --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/starter/DataQueriesAutoConfiguration.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.infrastructure.dataqueries.starter; + +import org.apache.fineract.infrastructure.codes.service.CodeReadPlatformService; +import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; +import org.apache.fineract.infrastructure.core.serialization.DatatableCommandFromApiJsonDeserializer; +import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; +import org.apache.fineract.infrastructure.core.service.database.DatabaseSpecificSQLGenerator; +import org.apache.fineract.infrastructure.core.service.database.DatabaseTypeResolver; +import org.apache.fineract.infrastructure.dataqueries.data.DataTableValidator; +import org.apache.fineract.infrastructure.dataqueries.service.GenericDataService; +import org.apache.fineract.infrastructure.dataqueries.service.ReadWriteNonCoreDataService; +import org.apache.fineract.infrastructure.dataqueries.service.ReadWriteNonCoreDataServiceImpl; +import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.infrastructure.security.service.SqlInjectionPreventerService; +import org.apache.fineract.infrastructure.security.utils.ColumnValidator; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +@Configuration +public class DataQueriesAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public ReadWriteNonCoreDataService readWriteNonCoreDataService(final JdbcTemplate jdbcTemplate, + final DatabaseTypeResolver databaseTypeResolver, final DatabaseSpecificSQLGenerator sqlGenerator, + final PlatformSecurityContext context, final FromJsonHelper fromJsonHelper, final GenericDataService genericDataService, + final DatatableCommandFromApiJsonDeserializer fromApiJsonDeserializer, + final ConfigurationDomainService configurationDomainService, final CodeReadPlatformService codeReadPlatformService, + final DataTableValidator dataTableValidator, final ColumnValidator columnValidator, + final NamedParameterJdbcTemplate namedParameterJdbcTemplate, final SqlInjectionPreventerService preventSqlInjectionService) { + return new ReadWriteNonCoreDataServiceImpl(jdbcTemplate, databaseTypeResolver, sqlGenerator, context, fromJsonHelper, + genericDataService, fromApiJsonDeserializer, configurationDomainService, codeReadPlatformService, dataTableValidator, + columnValidator, namedParameterJdbcTemplate, preventSqlInjectionService); + } +}