FINERACT-2036: Fix code quality
diff --git a/buildSrc/src/main/groovy/org/apache/fineract/gradle/service/EmailService.groovy b/buildSrc/src/main/groovy/org/apache/fineract/gradle/service/EmailService.groovy
index 6b69154..ac93770 100644
--- a/buildSrc/src/main/groovy/org/apache/fineract/gradle/service/EmailService.groovy
+++ b/buildSrc/src/main/groovy/org/apache/fineract/gradle/service/EmailService.groovy
@@ -73,8 +73,8 @@
             if(params.bcc) {
                 msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(params.bcc))
             }
-            msg.setSubject(params.subject)
-            msg.setText(params.message);
+            msg.setSubject(params.subject, "UTF-8")
+            msg.setText(params.message, "UTF-8");
 
             Transport.send(msg);
 
diff --git a/buildSrc/src/main/groovy/org/apache/fineract/gradle/service/TemplateService.groovy b/buildSrc/src/main/groovy/org/apache/fineract/gradle/service/TemplateService.groovy
index 356c9bb..bcb8f72 100644
--- a/buildSrc/src/main/groovy/org/apache/fineract/gradle/service/TemplateService.groovy
+++ b/buildSrc/src/main/groovy/org/apache/fineract/gradle/service/TemplateService.groovy
@@ -27,6 +27,8 @@
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 
+import java.nio.charset.Charset
+
 class TemplateService {
     private static final Logger log = LoggerFactory.getLogger(TemplateService.class)
 
@@ -35,7 +37,7 @@
     TemplateService(FineractPluginExtension.FineractPluginConfigTemplate config) {
         def dir = new File(config.templateDir);
 
-        this.config = new Configuration(Configuration.VERSION_2_3_31);
+        this.config = new Configuration(Configuration.VERSION_2_3_32);
         this.config.setDirectoryForTemplateLoading(dir)
         this.config.setDefaultEncoding("UTF-8");
         this.config.setLogTemplateExceptions(false);
@@ -58,7 +60,7 @@
         Template template = null;
 
         if(params.templateFile) {
-            template = new Template("template", new FileReader(new File(params.templateFile)), this.config)
+            template = new Template("template", new FileReader(new File(params.templateFile), Charset.forName("UTF-8")), this.config)
         }
         if(params.template) {
             template = new Template("template", new StringReader(params.template), this.config)
@@ -69,7 +71,7 @@
                 def output = new File(params.outputFile)
                 output.createNewFile()
 
-                template.process(data, new FileWriter(output, false))
+                template.process(data, new FileWriter(output, Charset.forName("UTF-8"), false))
             } else {
                 def output = new StringWriter()
 
diff --git a/buildSrc/src/main/resources/email/release.step01.headsup.message.ftl b/buildSrc/src/main/resources/email/release.step01.headsup.message.ftl
index 4c10f08..83f804a 100644
--- a/buildSrc/src/main/resources/email/release.step01.headsup.message.ftl
+++ b/buildSrc/src/main/resources/email/release.step01.headsup.message.ftl
@@ -36,4 +36,4 @@
 
 
 
-πŸŽ‰ Powered by Fineract Release Plugin 🎊
\ No newline at end of file
+πŸŽ‰ Powered by Fineract Release Plugin 🎊
diff --git a/buildSrc/src/main/resources/email/release.step01.headsup.subject.ftl b/buildSrc/src/main/resources/email/release.step01.headsup.subject.ftl
index 3a1e475..71df28e 100644
--- a/buildSrc/src/main/resources/email/release.step01.headsup.subject.ftl
+++ b/buildSrc/src/main/resources/email/release.step01.headsup.subject.ftl
@@ -18,4 +18,4 @@
     under the License.
 
 -->
-[FINERACT] [PROPOSAL] πŸ“¦ New release ${project['fineract.release.version']}
\ No newline at end of file
+[FINERACT] [PROPOSAL] πŸ“¦ New release ${project['fineract.release.version']}
diff --git a/buildSrc/src/main/resources/email/release.step03.branch.subject.ftl b/buildSrc/src/main/resources/email/release.step03.branch.subject.ftl
index 0a7f333..85fea03 100644
--- a/buildSrc/src/main/resources/email/release.step03.branch.subject.ftl
+++ b/buildSrc/src/main/resources/email/release.step03.branch.subject.ftl
@@ -18,4 +18,4 @@
     under the License.
 
 -->
-[FINERACT] [ANNOUNCE] πŸ”€ ${project['fineract.release.version']} release branch
\ No newline at end of file
+[FINERACT] [ANNOUNCE] πŸ”€ ${project['fineract.release.version']} release branch
diff --git a/buildSrc/src/main/resources/email/release.step10.vote.subject.ftl b/buildSrc/src/main/resources/email/release.step10.vote.subject.ftl
index adb471f..9c8df50 100644
--- a/buildSrc/src/main/resources/email/release.step10.vote.subject.ftl
+++ b/buildSrc/src/main/resources/email/release.step10.vote.subject.ftl
@@ -18,4 +18,4 @@
     under the License.
 
 -->
-[FINERACT] [VOTE] πŸ—³οΈ ${project['fineract.release.version']} for release
\ No newline at end of file
+[FINERACT] [VOTE] πŸ—³οΈ ${project['fineract.release.version']} for release
diff --git a/buildSrc/src/main/resources/email/release.step11.vote.subject.ftl b/buildSrc/src/main/resources/email/release.step11.vote.subject.ftl
index 9dfa8ec..3809266 100644
--- a/buildSrc/src/main/resources/email/release.step11.vote.subject.ftl
+++ b/buildSrc/src/main/resources/email/release.step11.vote.subject.ftl
@@ -18,4 +18,4 @@
     under the License.
 
 -->
-[FINERACT] [VOTE] [RESULT] 🧾️ ${project['fineract.release.version']} for release
\ No newline at end of file
+[FINERACT] [VOTE] [RESULT] 🧾️ ${project['fineract.release.version']} for release
diff --git a/buildSrc/src/main/resources/email/release.step15.announce.message.ftl b/buildSrc/src/main/resources/email/release.step15.announce.message.ftl
index f6d4bfb..e08c44d 100644
--- a/buildSrc/src/main/resources/email/release.step15.announce.message.ftl
+++ b/buildSrc/src/main/resources/email/release.step15.announce.message.ftl
@@ -40,4 +40,4 @@
 For more information on Apache Fineract please visit
 project home page: https://fineract.apache.org
 
-The Apache Fineract Team
\ No newline at end of file
+The Apache Fineract Team
diff --git a/buildSrc/src/main/resources/email/release.step15.announce.subject.ftl b/buildSrc/src/main/resources/email/release.step15.announce.subject.ftl
index 2701e86..41d04d8 100644
--- a/buildSrc/src/main/resources/email/release.step15.announce.subject.ftl
+++ b/buildSrc/src/main/resources/email/release.step15.announce.subject.ftl
@@ -18,4 +18,4 @@
     under the License.
 
 -->
-[ANNOUNCE] Apache Fineract ${project['fineract.release.version']} Release
\ No newline at end of file
+[ANNOUNCE] Apache Fineract ${project['fineract.release.version']} Release
diff --git a/buildSrc/src/main/resources/git/release.step05.tag.message.ftl b/buildSrc/src/main/resources/git/release.step05.tag.message.ftl
index 6450903..8dbf0bd 100644
--- a/buildSrc/src/main/resources/git/release.step05.tag.message.ftl
+++ b/buildSrc/src/main/resources/git/release.step05.tag.message.ftl
@@ -18,4 +18,4 @@
     under the License.
 
 -->
-Fineract ${project['fineract.release.version']} release
\ No newline at end of file
+Fineract ${project['fineract.release.version']} release
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 b8d587e..fd1b77f 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
@@ -219,7 +219,7 @@
         Object columnValue = SearchUtil.parseJdbcColumnValue(column, columnValueString, null, null, null, false, sqlGenerator);
         String sql = sqlGenerator.buildSelect(selectColumns, null, false) + " " + sqlGenerator.buildFrom(datatable, null, false) + " WHERE "
                 + EQ.formatPlaceholder(sqlGenerator, column.getColumnName(), 1, null);
-        SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql, columnValue);
+        SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql, columnValue); // NOSONAR
 
         List<JsonObject> results = new ArrayList<>();
         while (rowSet.next()) {
@@ -279,7 +279,7 @@
 
         // Execute the count Query
         String countQuery = "SELECT COUNT(*)" + from + where;
-        Integer totalElements = jdbcTemplate.queryForObject(countQuery, Integer.class, args);
+        Integer totalElements = jdbcTemplate.queryForObject(countQuery, Integer.class, args); // NOSONAR
         if (totalElements == null || totalElements == 0) {
             return PageableExecutionUtils.getPage(results, pageable, () -> 0);
         }
@@ -1012,7 +1012,7 @@
         String findFKSql = "SELECT count(*) FROM information_schema.TABLE_CONSTRAINTS i" + " WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY' AND "
                 + schemaSql + " AND i.TABLE_NAME = '" + datatableName + "' AND i.CONSTRAINT_NAME = '" + fkName + "' ";
 
-        final Integer count = this.jdbcTemplate.queryForObject(findFKSql, Integer.class);
+        final Integer count = this.jdbcTemplate.queryForObject(findFKSql, Integer.class); // NOSONAR
         if (count != null && count > 0) {
             codeMappings.add(datatableAlias + "_" + name);
             constrainBuilder.append(", DROP FOREIGN KEY ").append(sqlGenerator.escape(fkName)).append(" ");
@@ -1076,7 +1076,7 @@
         if (type != null && mandatory && type.isStringType()) {
             String sql = "UPDATE " + sqlGenerator.escape(datatableName) + " SET " + sqlGenerator.escape(name) + " = '' WHERE "
                     + sqlGenerator.escape(name) + " IS NULL";
-            this.jdbcTemplate.update(sql);
+            this.jdbcTemplate.update(sql); // NOSONAR
         }
     }
 
@@ -1141,12 +1141,12 @@
     private void createUniqueConstraint(String datatableName, String columnName, String uniqueKeyName) {
         String sql = "ALTER TABLE " + sqlGenerator.escape(datatableName) + " ADD CONSTRAINT " + sqlGenerator.escape(uniqueKeyName)
                 + " UNIQUE (" + sqlGenerator.escape(columnName) + ");";
-        this.jdbcTemplate.execute(sql);
+        this.jdbcTemplate.execute(sql); // NOSONAR
     }
 
     private void dropUniqueConstraint(String datatableName, String uniqueKeyName) {
         String sql = "ALTER TABLE " + sqlGenerator.escape(datatableName) + " DROP CONSTRAINT " + sqlGenerator.escape(uniqueKeyName) + ";";
-        this.jdbcTemplate.execute(sql);
+        this.jdbcTemplate.execute(sql); // NOSONAR
     }
 
     private void updateIndexesForTable(String datatableName, JsonArray changeColumns,
@@ -1430,7 +1430,7 @@
             params.add(primaryKey);
             final String sql = sqlGenerator.buildUpdate(dataTableName, updateColumns, headersByName) + " WHERE " + pkColumn.getColumnName()
                     + " = ?";
-            int updated = jdbcTemplate.update(sql, params.toArray(Object[]::new));
+            int updated = jdbcTemplate.update(sql, params.toArray(Object[]::new)); // NOSONAR
             if (updated != 1) {
                 throw new PlatformDataIntegrityException("error.msg.invalid.update", "Expected one updated row.");
             }
@@ -1486,7 +1486,7 @@
         String sql = "DELETE FROM " + sqlGenerator.escape(dataTableName) + " WHERE " + sqlGenerator.escape(whereColumn) + " = "
                 + whereValue;
 
-        this.jdbcTemplate.update(sql);
+        this.jdbcTemplate.update(sql); // NOSONAR
         return new CommandProcessingResultBuilder() //
                 .withCommandId(command.commandId()) //
                 .withEntityId(whereValue) //
@@ -1643,7 +1643,7 @@
         String sql = "SELECT COUNT(edc.x_registered_table_name) FROM x_registered_table xrt"
                 + " JOIN m_entity_datatable_check edc ON edc.x_registered_table_name = xrt.registered_table_name"
                 + " WHERE edc.x_registered_table_name = '" + datatableName + "'";
-        final Long count = this.jdbcTemplate.queryForObject(sql, Long.class);
+        final Long count = this.jdbcTemplate.queryForObject(sql, Long.class); // NOSONAR
         return count != null && count > 0;
     }
 
@@ -1682,7 +1682,7 @@
     private void validateDataTableExists(final String datatableName) {
         final String sql = "select (CASE WHEN exists (select 1 from information_schema.tables where table_schema = "
                 + sqlGenerator.currentSchema() + " and table_name = ?) THEN 'true' ELSE 'false' END)";
-        final boolean dataTableExists = Boolean.parseBoolean(this.jdbcTemplate.queryForObject(sql, String.class, datatableName));
+        final boolean dataTableExists = Boolean.parseBoolean(this.jdbcTemplate.queryForObject(sql, String.class, datatableName)); // NOSONAR
         if (!dataTableExists) {
             throw new PlatformDataIntegrityException("error.msg.invalid.datatable", "Invalid Data Table: " + datatableName, API_FIELD_NAME,
                     datatableName);
@@ -1716,7 +1716,7 @@
 
     private int getDatatableRowCount(final String datatableName) {
         final String sql = "select count(*) from " + sqlGenerator.escape(datatableName);
-        Integer count = this.jdbcTemplate.queryForObject(sql, Integer.class);
+        Integer count = this.jdbcTemplate.queryForObject(sql, Integer.class); // NOSONAR
         return count == null ? 0 : count;
     }
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/search/SavingsAccountTransactionsSearchServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/search/SavingsAccountTransactionsSearchServiceImpl.java
index 8b17c96..f870375 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/search/SavingsAccountTransactionsSearchServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/search/SavingsAccountTransactionsSearchServiceImpl.java
@@ -114,7 +114,7 @@
         Object[] args = params.toArray();
 
         String countQuery = "SELECT COUNT(*) " + tm.from() + where;
-        Integer totalElements = jdbcTemplate.queryForObject(countQuery, Integer.class, args);
+        Integer totalElements = jdbcTemplate.queryForObject(countQuery, Integer.class, args); // NOSONAR
         if (totalElements == null || totalElements == 0) {
             return emptyResult;
         }
@@ -266,7 +266,7 @@
 
         // Execute the count Query
         String countQuery = "SELECT COUNT(*)" + from + where;
-        Integer totalElements = jdbcTemplate.queryForObject(countQuery, Integer.class, args);
+        Integer totalElements = jdbcTemplate.queryForObject(countQuery, Integer.class, args); // NOSONAR
         if (totalElements == null || totalElements == 0) {
             return PageableExecutionUtils.getPage(results, pageable, () -> 0);
         }