This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 1b9459b7b4 FINERACT-2169: Refactor field configuration api controller;
1b9459b7b4 is described below

commit 1b9459b7b48b98ff55732122925394f78f2b1c1b
Author: viktorpavlenko <[email protected]>
AuthorDate: Wed Mar 26 10:53:39 2025 +0200

    FINERACT-2169: Refactor field configuration api controller;
---
 .../api/EntityFieldConfigurationApiResource.java   | 32 ++---------
 ...ntityFieldConfigurationApiResourcesSwagger.java | 51 ------------------
 .../address/data/FieldConfigurationData.java       | 63 +++-------------------
 .../AddressCommandFromApiJsonDeserializer.java     | 16 +++---
 .../FieldConfigurationReadPlatformService.java     |  3 +-
 .../FieldConfigurationReadPlatformServiceImpl.java |  6 +--
 6 files changed, 19 insertions(+), 152 deletions(-)

diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java
index fda49f47d2..0b80c81382 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java
@@ -20,28 +20,15 @@ package org.apache.fineract.portfolio.address.api;
 
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.media.ArraySchema;
-import io.swagger.v3.oas.annotations.media.Content;
-import io.swagger.v3.oas.annotations.media.Schema;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.Path;
 import jakarta.ws.rs.PathParam;
 import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.Context;
 import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.UriInfo;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.List;
 import lombok.RequiredArgsConstructor;
-import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper;
-import 
org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
-import 
org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
 import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.apache.fineract.portfolio.address.data.FieldConfigurationData;
 import 
org.apache.fineract.portfolio.address.service.FieldConfigurationReadPlatformService;
@@ -55,30 +42,17 @@ import org.springframework.stereotype.Component;
 @RequiredArgsConstructor
 public class EntityFieldConfigurationApiResource {
 
-    private static final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<>(
-            Arrays.asList("clientAddressId", "client_id", "address_id", 
"address_type_id", "isActive", "fieldConfigurationId", "entity",
-                    "table", "field", "is_enabled", "is_mandatory", 
"validation_regex"));
     private static final String RESOURCE_NAME_FOR_PERMISSIONS = "Address";
     private final PlatformSecurityContext context;
     private final FieldConfigurationReadPlatformService readPlatformServicefld;
-    private final DefaultToApiJsonSerializer<FieldConfigurationData> 
toApiJsonSerializerfld;
-    private final ApiRequestParameterHelper apiRequestParameterHelper;
 
     @GET
     @Consumes({ MediaType.APPLICATION_JSON })
     @Produces({ MediaType.APPLICATION_JSON })
     @Operation(summary = "Retrieves the Entity Field Configuration", 
description = "It retrieves all the Entity Field Configuration")
-    @ApiResponses({
-            @ApiResponse(responseCode = "200", description = "OK", content = 
@Content(array = @ArraySchema(schema = @Schema(implementation = 
EntityFieldConfigurationApiResourcesSwagger.GetFieldConfigurationEntityResponse.class))))
 })
-    public String getAddresses(@PathParam("entity") @Parameter(description = 
"entity") final String entityname,
-            @Context final UriInfo uriInfo) {
+    public List<FieldConfigurationData> getAddresses(@PathParam("entity") 
@Parameter(description = "entity") final String entityname) {
         
this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS);
-
-        final Collection<FieldConfigurationData> fldconfig = 
this.readPlatformServicefld.retrieveFieldConfiguration(entityname);
-
-        final ApiRequestJsonSerializationSettings settings = 
this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
-        return this.toApiJsonSerializerfld.serialize(settings, fldconfig, 
RESPONSE_DATA_PARAMETERS);
-
+        return 
this.readPlatformServicefld.retrieveFieldConfiguration(entityname);
     }
 
 }
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResourcesSwagger.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResourcesSwagger.java
deleted file mode 100644
index 73556ee52d..0000000000
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResourcesSwagger.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 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.portfolio.address.api;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-
-/**
- * Created by Chirag Gupta on 12/01/17.
- */
-@SuppressWarnings({ "MemberName" })
-final class EntityFieldConfigurationApiResourcesSwagger {
-
-    private EntityFieldConfigurationApiResourcesSwagger() {}
-
-    @Schema(description = "GetFieldConfigurationEntityResponse")
-    public static final class GetFieldConfigurationEntityResponse {
-
-        private GetFieldConfigurationEntityResponse() {}
-
-        @Schema(example = "1")
-        public Long fieldConfigurationId;
-        @Schema(example = "ADDRESS")
-        public String entity;
-        @Schema(example = "CLIENT")
-        public String subentity;
-        @Schema(example = "addressType")
-        public String field;
-        @Schema(example = "true")
-        public String is_enabled;
-        @Schema(example = "false")
-        public String is_mandatory;
-        @Schema(example = " ")
-        public String validation_regex;
-    }
-}
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/FieldConfigurationData.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/FieldConfigurationData.java
index da5d4fe178..0d8b4dc3e1 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/FieldConfigurationData.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/FieldConfigurationData.java
@@ -18,64 +18,13 @@
  */
 package org.apache.fineract.portfolio.address.data;
 
-public final class FieldConfigurationData {
+import java.io.Serial;
+import java.io.Serializable;
 
-    private final long fieldConfigurationId;
+public record FieldConfigurationData(Long fieldConfigurationId, String entity, 
String subentity, String field, boolean isEnabled,
+        boolean isMandatory, String validationRegex) implements Serializable {
 
-    private final String entity;
-
-    private final String subentity;
-
-    private final String field;
-
-    private final boolean isEnabled;
-
-    private final boolean isMandatory;
-
-    private final String validationRegex;
-
-    private FieldConfigurationData(final long fieldConfigurationId, final 
String entity, final String subentity, final String field,
-            final boolean isEnabled, final boolean isMandatory, final String 
validationRegex) {
-        this.fieldConfigurationId = fieldConfigurationId;
-        this.entity = entity;
-        this.subentity = subentity;
-        this.field = field;
-        this.isEnabled = isEnabled;
-        this.isMandatory = isMandatory;
-        this.validationRegex = validationRegex;
-    }
-
-    public static FieldConfigurationData instance(final long 
fieldConfigurationId, final String entity, final String subentity,
-            final String field, final boolean isEnabled, final boolean 
isMandatory, final String validationRegex) {
-        return new FieldConfigurationData(fieldConfigurationId, entity, 
subentity, field, isEnabled, isMandatory, validationRegex);
-    }
-
-    public long getFieldConfigurationId() {
-        return this.fieldConfigurationId;
-    }
-
-    public String getEntity() {
-        return this.entity;
-    }
-
-    public String getSubEntity() {
-        return this.subentity;
-    }
-
-    public String getField() {
-        return this.field;
-    }
-
-    public boolean isEnabled() {
-        return this.isEnabled;
-    }
-
-    public boolean isIs_mandatory() {
-        return this.isMandatory;
-    }
-
-    public String getValidation_regex() {
-        return this.validationRegex;
-    }
+    @Serial
+    private static final long serialVersionUID = 1L;
 
 }
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/serialization/AddressCommandFromApiJsonDeserializer.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/serialization/AddressCommandFromApiJsonDeserializer.java
index 8ed7301b09..0a00c7cae5 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/serialization/AddressCommandFromApiJsonDeserializer.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/serialization/AddressCommandFromApiJsonDeserializer.java
@@ -65,10 +65,9 @@ public class AddressCommandFromApiJsonDeserializer {
         final JsonElement element = this.fromApiJsonHelper.parse(json);
         final List<FieldConfigurationData> configurationData = new 
ArrayList<>(this.readservice.retrieveFieldConfigurationList("ADDRESS"));
         // validate the json fields from the configuration data fields
-        final List<FieldConfigurationData> configData = 
configurationData.stream().filter(FieldConfigurationData::isEnabled)
-                .collect(Collectors.toList());
+        final List<FieldConfigurationData> configData = 
configurationData.stream().filter(FieldConfigurationData::isEnabled).toList();
 
-        final Set<String> supportedParameters = 
configData.stream().map(FieldConfigurationData::getField).collect(Collectors.toSet());
+        final Set<String> supportedParameters = 
configData.stream().map(FieldConfigurationData::field).collect(Collectors.toSet());
 
         supportedParameters.add("locale");
         supportedParameters.add("dateFormat");
@@ -77,20 +76,19 @@ public class AddressCommandFromApiJsonDeserializer {
         this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, 
supportedParameters);
 
         configData.forEach(fieldConfiguration -> {
-            final String field = 
fieldConfiguration.getField().equals("addressType") ? "addressTypeId" : 
fieldConfiguration.getField();
+            final String field = 
fieldConfiguration.field().equals("addressType") ? "addressTypeId" : 
fieldConfiguration.field();
             final String fieldValue = 
this.fromApiJsonHelper.extractStringNamed(field, element);
 
-            if (fieldConfiguration.getField().equals("addressType") && 
fromNewClient) {
+            if (fieldConfiguration.field().equals("addressType") && 
fromNewClient) {
                 
baseDataValidator.reset().parameter(field).value(fieldValue).notBlank();
             } else {
-                if (fieldConfiguration.isIs_mandatory() && fromNewClient) {
+                if (fieldConfiguration.isMandatory() && fromNewClient) {
                     
baseDataValidator.reset().parameter(field).value(fieldValue).notBlank();
                 }
             }
 
-            if (!fieldConfiguration.getValidation_regex().isEmpty()) {
-                baseDataValidator.reset().parameter(field).value(fieldValue)
-                        
.matchesRegularExpression(fieldConfiguration.getValidation_regex());
+            if (!fieldConfiguration.validationRegex().isEmpty()) {
+                
baseDataValidator.reset().parameter(field).value(fieldValue).matchesRegularExpression(fieldConfiguration.validationRegex());
             }
         });
 
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformService.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformService.java
index 89823386f5..33b96e7bb8 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformService.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformService.java
@@ -18,13 +18,12 @@
  */
 package org.apache.fineract.portfolio.address.service;
 
-import java.util.Collection;
 import java.util.List;
 import org.apache.fineract.portfolio.address.data.FieldConfigurationData;
 
 public interface FieldConfigurationReadPlatformService {
 
-    Collection<FieldConfigurationData> retrieveFieldConfiguration(String 
entity);
+    List<FieldConfigurationData> retrieveFieldConfiguration(String entity);
 
     List<FieldConfigurationData> retrieveFieldConfigurationList(String entity);
 }
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformServiceImpl.java
index b2c2b9da1a..521f647da7 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformServiceImpl.java
@@ -20,7 +20,6 @@ package org.apache.fineract.portfolio.address.service;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.Collection;
 import java.util.List;
 import 
org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
 import org.apache.fineract.portfolio.address.data.FieldConfigurationData;
@@ -58,14 +57,13 @@ public class FieldConfigurationReadPlatformServiceImpl 
implements FieldConfigura
             final boolean is_mandatory = rs.getBoolean("is_mandatory");
             final String validation_regex = rs.getString("validation_regex");
 
-            return FieldConfigurationData.instance(fieldConfigurationId, 
entity, subentity, field, is_enabled, is_mandatory,
-                    validation_regex);
+            return new FieldConfigurationData(fieldConfigurationId, entity, 
subentity, field, is_enabled, is_mandatory, validation_regex);
 
         }
     }
 
     @Override
-    public Collection<FieldConfigurationData> retrieveFieldConfiguration(final 
String entity) {
+    public List<FieldConfigurationData> retrieveFieldConfiguration(final 
String entity) {
         this.context.authenticatedUser();
 
         final FieldMapper rm = new FieldMapper();

Reply via email to