From 9c0acfb831f68b75e0a5e1d8f2c370ef58482bed Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 19 Dec 2024 17:02:23 +0530 Subject: [PATCH] Changes in application evaluation --- .../dao/ApplicationAmendmentRequestDao.java | 20 +- .../dao/ApplicationEvaluationDao.java | 316 ++++++++++-------- .../request/AmendmentDetailsRequest.java | 8 +- .../request/AmendmentFormFieldRequest.java | 4 + .../AmendmentDocumentResponseBean.java | 14 +- .../gepafin/tendermanagement/util/Utils.java | 22 ++ 6 files changed, 228 insertions(+), 156 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index f44a0257..9345b0da 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -349,7 +349,7 @@ public class ApplicationAmendmentRequestDao { amendmentDetails.setAmendmentNotes(amendmentNotes.trim()); } amendmentDetails.setValid(null); - String amendmentDetailsJson = Utils.convertListToJsonString(Collections.singletonList(amendmentDetails)); + String amendmentDetailsJson = Utils.convertObjectToString(amendmentDetails); applicationAmendmentRequestEntity.setAmendmentDocument(amendmentDetailsJson); } @@ -373,12 +373,13 @@ public class ApplicationAmendmentRequestDao { Map formFieldEntityMap = getApplicationFormFieldEntityMap(applicationAmendmentRequestEntity, amendmentFormFields); if (applicationAmendmentRequestEntity.getAmendmentDocument() != null) { - List amendmentDetailsList = - Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getAmendmentDocument(), - AmendmentDetailsResponseBean.class); - List documentResponseBeans = new ArrayList<>(); - for (AmendmentDetailsResponseBean amendmentDetails:amendmentDetailsList) { - if (amendmentDetails.getAmendmentDocuments()!=null) { +// List amendmentDetailsList = +// Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getAmendmentDocument(), +// AmendmentDetailsResponseBean.class); + AmendmentDetailsResponseBean amendmentDetails = Utils.convertStringToObject(applicationAmendmentRequestEntity.getAmendmentDocument() ,AmendmentDetailsResponseBean.class); + if(amendmentDetails!=null) { + List documentResponseBeans = new ArrayList<>(); + if (amendmentDetails.getAmendmentDocuments() != null) { // Extract the comma-separated document IDs as a string String documentIdsString = amendmentDetails.getAmendmentDocuments(); @@ -403,13 +404,12 @@ public class ApplicationAmendmentRequestDao { .collect(Collectors.toList()) ); response.setAmendmentNotes(amendmentDetails.getAmendmentNotes()); - response.setValid(amendmentDetails.getValid()!=null?amendmentDetails.getValid():null); + response.setValid(amendmentDetails.getValid()); } } - + response.setAmendmentDocuments(documentResponseBeans); } - response.setAmendmentDocuments(documentResponseBeans); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 244c30fa..0666930b 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -22,9 +22,11 @@ import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; @@ -157,9 +159,8 @@ public class ApplicationEvaluationDao { amendmentDocumentResponseBean.setAmendmentId(applicationAmendmentRequestEntity.getId()); String amendmentDocument=applicationAmendmentRequestEntity.getAmendmentDocument(); String formField=applicationAmendmentRequestEntity.getFormFields(); - List amendmentDetailsList = Utils.convertJsonStringToList(amendmentDocument, AmendmentDetailsResponseBean.class); - if (amendmentDetailsList != null && !amendmentDetailsList.isEmpty()) { - AmendmentDetailsResponseBean amendmentDetails = amendmentDetailsList.get(0); + AmendmentDetailsResponseBean amendmentDetails = Utils.convertStringToObject(amendmentDocument, AmendmentDetailsResponseBean.class); + if (amendmentDetails != null) { if (amendmentDetails.getAmendmentDocuments() != null) { List documentResponseBeans = Arrays.stream(amendmentDetails.getAmendmentDocuments().split(",")) .map(String::trim) @@ -168,33 +169,39 @@ public class ApplicationEvaluationDao { .filter(Objects::nonNull) .collect(Collectors.toList()); - amendmentDocumentResponseBean.setAmendmentDocuments(documentResponseBeans); + amendmentDocumentResponseBean.setFileDetail(documentResponseBeans); } - amendmentDocumentResponseBean.setAmendmentNotes(amendmentDetails.getAmendmentNotes()); + amendmentDocumentResponseBean.setLabel(amendmentDetails.getAmendmentNotes()); amendmentDocumentResponseBean.setValid(amendmentDetails.getValid()); } - List amendmentFormFields=Utils.convertJsonStringToList(formField,AmendmentFormField.class); - amendmentDocumentResponseBean.setFormFieldDocuments(setFormFieldDocuments(amendmentFormFields)); - amendmentDocumentResponseBeans.add(amendmentDocumentResponseBean); - } - response.setAmendmentDetails(amendmentDocumentResponseBeans); - } + List amendmentFormFields = Utils.convertJsonStringToList(formField, AmendmentFormField.class); + if (amendmentFormFields != null) { + for (AmendmentFormField amendmentFormField : amendmentFormFields) { + // Skip fields with null or empty fieldValue + if (StringUtils.isEmpty(amendmentFormField.getFieldValue())) { + continue; + } - private List setFormFieldDocuments(List amendmentFormFields) { - List fieldResponses=new ArrayList<>(); - for (AmendmentFormField amendmentFormField: amendmentFormFields){ - FieldResponse fieldResponse=new FieldResponse(); - fieldResponse.setId(amendmentFormField.getFieldId()); - fieldResponse.setLabel(amendmentFormField.getLabel()); - fieldResponse.setValid(amendmentFormField.getValid()); - List fileIds=applicationAmendmentRequestDao.extractIds(amendmentFormField.getFieldValue()); - List documentResponseBeans = fileIds.stream() - .map(fileId -> createDocumentResponseBean(documentService.validateDocument(fileId))) // Create DocumentResponseBean for each fileId - .collect(Collectors.toList()); // Collect all into a List - fieldResponse.setFileDetail(documentResponseBeans); - fieldResponses.add(fieldResponse); + AmendmentDocumentResponseBean formFieldResponseBean = new AmendmentDocumentResponseBean(); + formFieldResponseBean.setAmendmentId(applicationAmendmentRequestEntity.getId()); + formFieldResponseBean.setFieldId(amendmentFormField.getFieldId()); + formFieldResponseBean.setLabel(amendmentFormField.getLabel()); + formFieldResponseBean.setValid(amendmentFormField.getValid()); + + List fileIds = applicationAmendmentRequestDao.extractIds(amendmentFormField.getFieldValue()); + List documentResponseBeans = fileIds.stream() + .map(fileId -> createDocumentResponseBean(documentService.validateDocument(fileId))) + .collect(Collectors.toList()); + + formFieldResponseBean.setFileDetail(documentResponseBeans); + amendmentDocumentResponseBeans.add(formFieldResponseBean); + } + } + + amendmentDocumentResponseBeans.add(amendmentDocumentResponseBean); } - return fieldResponses; + + response.setAmendmentDetails(amendmentDocumentResponseBeans); } private void setEvaluationDocResponse(ApplicationEvaluationResponse response, List docRequest) { @@ -623,117 +630,162 @@ public class ApplicationEvaluationDao { private void updateAmendmentDocumentsAndFormFields(List applicationAmendmentRequestEntities, List amendmentFormFields) { // Iterate through amendment request entities - for (ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity : applicationAmendmentRequestEntities) { - // Process form fields if present - if (applicationAmendmentRequestEntity.getFormFields() != null) { - // Parse existing form fields from JSON - List existingFormFields = - Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getFormFields(), AmendmentFormFieldRequest.class); - // Prepare a new list to hold updated form fields - List updatedFormFields = new ArrayList<>(); +// + Map> amendmentFormFieldsMap = amendmentFormFields.stream().collect(Collectors.groupingBy(AmendmentDetailsRequest::getAmendmentId,HashMap::new,Collectors.toCollection(ArrayList::new))); +// amendmentFormFields.forEach(data->{ +// ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = applicationAmendmentRequestMap.get(data.getAmendmentId()); +// if (data.getFieldId().contains("amend_")){ +// updateAmendmentDocument(applicationAmendmentRequestEntity, data); +// } +// }); + applicationAmendmentRequestEntities.forEach(applicationAmendmentRequestEntity->{ + updateAmendment(applicationAmendmentRequestEntity, amendmentFormFieldsMap.get(applicationAmendmentRequestEntity.getId())); + }); + applicationAmendmentRequestRepository.saveAll(applicationAmendmentRequestEntities); - // Map amendment details for quick lookup by amendment ID - Map> amendmentDetailsMap = amendmentFormFields.stream() - .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) - .filter(details -> details.getFormFieldDocuments() != null) // Null check for getFormFieldDocuments - .collect(Collectors.toMap( - AmendmentDetailsRequest::getAmendmentId, - AmendmentDetailsRequest::getFormFieldDocuments - )); - // Get corresponding amendment documents for the current entity - List amendmentDocuments = amendmentDetailsMap.get(applicationAmendmentRequestEntity.getId()); - if (amendmentDocuments != null) { - // Update existing form fields with new values - for (AmendmentFormFieldRequest existingField : existingFormFields) { - for (AmendmentFormFieldRequest newField : amendmentDocuments) { - if (existingField.getFieldId().equals(newField.getFieldId())) { - // Update fields if there are changes - Utils.setIfUpdated(existingField::getValid, existingField::setValid, newField.getValid()); - Utils.setIfUpdated(existingField::getFieldValue, existingField::setFieldValue, newField.getFieldValue()); - updatedFormFields.add(existingField); - break; // Move to the next existing field - } - } - } - - // Convert updated form fields back to JSON and save to the database - applicationAmendmentRequestEntity.setFormFields(Utils.convertListToJsonString(updatedFormFields)); - applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); - } - } - - // Process amendment documents if present - if (applicationAmendmentRequestEntity.getAmendmentDocument() != null) { - String existingDocumentIds = applicationAmendmentRequestEntity.getAmendmentDocument(); - - // Split comma-separated document IDs into a list - List existingDocumentIdList = Arrays.stream(existingDocumentIds.split(",")) - .map(String::trim) - .filter(id -> !id.isEmpty()) - .collect(Collectors.toList()); - - List updatedDocumentIdList = new ArrayList<>(); - Map amendmentDetailsMap = amendmentFormFields.stream() - .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) - .collect(Collectors.toMap( - AmendmentDetailsRequest::getAmendmentId, - AmendmentDetailsRequest::getAmendmentDocuments - )); - - String amendmentDocumentIds = amendmentDetailsMap.get(applicationAmendmentRequestEntity.getId()); - if (amendmentDocumentIds != null) { - // Split and validate new document IDs - List newDocumentIdList = Arrays.stream(amendmentDocumentIds.split(",")) - .map(String::trim) - .filter(id -> !id.isEmpty()) - .collect(Collectors.toList()); - - for (String existingId : existingDocumentIdList) { - for (String newId : newDocumentIdList) { - if (existingId.equals(newId)) { - Optional documentEntity = documentRepository.findByIdAndNotDeleted(Long.valueOf(newId)); - if(documentEntity.isPresent()) { - updatedDocumentIdList.add(newId); - break; - } - } - } - } - - // Add any new IDs not in the existing list - for (String newId : newDocumentIdList) { - if (!existingDocumentIdList.contains(newId)) { - Optional documentEntity = documentRepository.findByIdAndNotDeleted(Long.valueOf(newId)); - if(documentEntity.isPresent()) { - updatedDocumentIdList.add(newId); - } - } - } - String updatedDocumentIds = String.join(",", updatedDocumentIdList); - - // Create the AmendmentDetailsResponseBean for structured data - AmendmentDetailsResponseBean amendmentDetails = new AmendmentDetailsResponseBean(); - amendmentDetails.setAmendmentDocuments(updatedDocumentIds); - AmendmentDetailsRequest amendmentDetailsRequest = amendmentFormFields.stream() - .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) - .findFirst() - .orElse(null); - - if (amendmentDetailsRequest != null) { - amendmentDetails.setValid(amendmentDetailsRequest.getValid()); - } else { - amendmentDetails.setValid(false); - } - String amendmentDetailsJson = Utils.convertListToJsonString(Collections.singletonList(amendmentDetails)); - applicationAmendmentRequestEntity.setAmendmentDocument(amendmentDetailsJson); - applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); - } - } - } +// for (ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity : applicationAmendmentRequestEntities) { +// // Process form fields if present +// if (applicationAmendmentRequestEntity.getFormFields() != null) { +// // Parse existing form fields from JSON +// List existingFormFields = +// Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getFormFields(), AmendmentFormFieldRequest.class); +// +// // Prepare a new list to hold updated form fields +// List updatedFormFields = new ArrayList<>(); +// +// // Map amendment details for quick lookup by amendment ID +// Map amendmentDetailsMap = amendmentFormFields.stream() +// .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) +// .filter(details -> details.getFieldValue() != null) // Null check for getFormFieldDocuments +// .collect(Collectors.toMap( +// AmendmentDetailsRequest::getAmendmentId, +// AmendmentDetailsRequest::getFieldValue +// )); +// // Get corresponding amendment documents for the current entity +// List amendmentDocuments = (List) amendmentDetailsMap.get(applicationAmendmentRequestEntity.getId()); +// if (amendmentDocuments != null) { +// // Update existing form fields with new values +// for (AmendmentFormFieldRequest existingField : existingFormFields) { +// for (AmendmentFormFieldRequest newField : amendmentDocuments) { +// if (existingField.getFieldId().equals(newField.getFieldId())) { +// // Update fields if there are changes +// Utils.setIfUpdated(existingField::getValid, existingField::setValid, newField.getValid()); +// Utils.setIfUpdated(existingField::getFieldValue, existingField::setFieldValue, newField.getFieldValue()); +// +// updatedFormFields.add(existingField); +// break; // Move to the next existing field +// } +// } +// } +// +// // Convert updated form fields back to JSON and save to the database +// applicationAmendmentRequestEntity.setFormFields(Utils.convertListToJsonString(updatedFormFields)); +// applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); +// } +// } +// +// // Process amendment documents if present +// if (applicationAmendmentRequestEntity.getAmendmentDocument() != null) { +// String existingDocumentIds = applicationAmendmentRequestEntity.getAmendmentDocument(); +// +// // Split comma-separated document IDs into a list +// List existingDocumentIdList = Arrays.stream(existingDocumentIds.split(",")) +// .map(String::trim) +// .filter(id -> !id.isEmpty()) +// .collect(Collectors.toList()); +// +// List updatedDocumentIdList = new ArrayList<>(); +// Map amendmentDetailsMap = amendmentFormFields.stream() +// .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) +// .collect(Collectors.toMap( +// AmendmentDetailsRequest::getAmendmentId, +// AmendmentDetailsRequest::getFieldValue +// )); +// +// String amendmentDocumentIds = (String) amendmentDetailsMap.get(applicationAmendmentRequestEntity.getId()); +// if (amendmentDocumentIds != null) { +// // Split and validate new document IDs +// List newDocumentIdList = Arrays.stream(amendmentDocumentIds.split(",")) +// .map(String::trim) +// .filter(id -> !id.isEmpty()) +// .collect(Collectors.toList()); +// +// for (String existingId : existingDocumentIdList) { +// for (String newId : newDocumentIdList) { +// if (existingId.equals(newId)) { +// Optional documentEntity = documentRepository.findByIdAndNotDeleted(Long.valueOf(newId)); +// if(documentEntity.isPresent()) { +// updatedDocumentIdList.add(newId); +// break; +// } +// } +// } +// } +// +// // Add any new IDs not in the existing list +// for (String newId : newDocumentIdList) { +// if (!existingDocumentIdList.contains(newId)) { +// Optional documentEntity = documentRepository.findByIdAndNotDeleted(Long.valueOf(newId)); +// if(documentEntity.isPresent()) { +// updatedDocumentIdList.add(newId); +// } +// } +// } +// String updatedDocumentIds = String.join(",", updatedDocumentIdList); +// +// // Create the AmendmentDetailsResponseBean for structured data +// AmendmentDetailsResponseBean amendmentDetails = new AmendmentDetailsResponseBean(); +// amendmentDetails.setAmendmentDocuments(updatedDocumentIds); +// AmendmentDetailsRequest amendmentDetailsRequest = amendmentFormFields.stream() +// .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) +// .findFirst() +// .orElse(null); +// +// if (amendmentDetailsRequest != null) { +// amendmentDetails.setValid(amendmentDetailsRequest.getValid()); +// } else { +// amendmentDetails.setValid(false); +// } +// String amendmentDetailsJson = Utils.convertListToJsonString(Collections.singletonList(amendmentDetails)); +// applicationAmendmentRequestEntity.setAmendmentDocument(amendmentDetailsJson); +// applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); +// } +// } +// } } + private void updateAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity, List amendmentDetailsRequestList) { + if (CollectionUtils.isEmpty(amendmentDetailsRequestList)) { + return; + } + Map formFieldsMap = null; + List formFieldList = Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getFormFields(), AmendmentFormField.class); + if(Boolean.FALSE.equals(CollectionUtils.isEmpty(formFieldList))){ + formFieldsMap = formFieldList.stream().collect(Collectors.toMap(AmendmentFormField::getFieldId, Function.identity())); + } + updateAmendmentData(applicationAmendmentRequestEntity, amendmentDetailsRequestList, formFieldsMap); + + } + + private static void updateAmendmentData(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity, List amendmentDetailsRequestList, Map formFieldsMap) { + amendmentDetailsRequestList.forEach(amendmentDetailsRequest -> { + if (amendmentDetailsRequest.getFieldId().contains("amend_")) { + AmendmentDetailsResponseBean amendmentDetails = Utils.convertStringToObject(applicationAmendmentRequestEntity.getAmendmentDocument(), AmendmentDetailsResponseBean.class); + if(amendmentDetails!=null) { + amendmentDetails.setValid(amendmentDetailsRequest.getValid()); + applicationAmendmentRequestEntity.setAmendmentDocument(Utils.convertObjectToString(amendmentDetails)); + } + } else if(Boolean.FALSE.equals(CollectionUtils.isEmpty(formFieldsMap))){ + AmendmentFormField amendmentFormField = formFieldsMap.get(amendmentDetailsRequest.getFieldId()); + amendmentFormField.setValid(amendmentDetailsRequest.getValid()); + } + }); + applicationAmendmentRequestEntity.setFormFields(Utils.convertListToJsonString(formFieldsMap.values().stream().toList())); + } + + // private void updateAmendmentDocuments(List applicationAmendmentRequestEntities, List amendmentFormFields) { // for (ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity : applicationAmendmentRequestEntities) { // // Skip if there are no amendment documents @@ -1066,7 +1118,7 @@ public class ApplicationEvaluationDao { if (!mappedFieldMap.containsKey(formFieldId)) { // CriteriaMappedField mappedField = new CriteriaMappedField(); CriteriaMappedField mappedField = populateMappedField(formFieldId, criteriaFormField, applicationForm, applicationId); - if(mappedField != null) { + if(mappedField != null) { mappedFieldMap.put(formFieldId, mappedField); } } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentDetailsRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentDetailsRequest.java index dd44d257..b0dc2adb 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentDetailsRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentDetailsRequest.java @@ -7,11 +7,9 @@ import java.util.List; @Data public class AmendmentDetailsRequest { - Long amendmentId; + private String fieldId; - String amendmentDocuments; + private Long amendmentId; - Boolean valid; - - List formFieldDocuments; + private Boolean valid; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormFieldRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormFieldRequest.java index d144b283..3376d76c 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormFieldRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormFieldRequest.java @@ -1,8 +1,12 @@ package net.gepafin.tendermanagement.model.request; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@AllArgsConstructor +@NoArgsConstructor public class AmendmentFormFieldRequest { private String fieldId; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponseBean.java index 96a88086..21fc1a09 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponseBean.java @@ -7,13 +7,9 @@ import java.util.List; @Data public class AmendmentDocumentResponseBean { - Long amendmentId; - - List amendmentDocuments; - - Boolean valid; - - String amendmentNotes; - - List formFieldDocuments; + private Long amendmentId; + private String fieldId; + private String label; + private Boolean valid; + private List fileDetail ; } diff --git a/src/main/java/net/gepafin/tendermanagement/util/Utils.java b/src/main/java/net/gepafin/tendermanagement/util/Utils.java index e93c8ed9..7d5b6344 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Utils.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Utils.java @@ -669,4 +669,26 @@ public class Utils { } return null; } + + // Method to convert a JSON string to an object of type T + public static T convertStringToObject(String jsonString, Class clazz) { + try { + return mapper.readValue(jsonString, clazz); + } catch (Exception e) { + e.printStackTrace(); + // Handle the exception appropriately (e.g., throw a custom exception) + return null; + } + } + + // Method to convert an object of type T to a JSON string + public static String convertObjectToString(T object) { + try { + return mapper.writeValueAsString(object); + } catch (Exception e) { + e.printStackTrace(); + // Handle the exception appropriately (e.g., throw a custom exception) + return null; + } + } } \ No newline at end of file