Skip to content

Commit

Permalink
HLM-5934 adding active field to plan configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
Priyanka-eGov committed May 22, 2024
1 parent 9989ed9 commit d8c39f6
Show file tree
Hide file tree
Showing 11 changed files with 108 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ public class ServiceConstants {
public static final String TEMPLATE_IDENTIFIER_NOT_FOUND_IN_MDMS_CODE = "TEMPLATE_IDENTIFIER_NOT_FOUND_IN_MDMS";
public static final String TEMPLATE_IDENTIFIER_NOT_FOUND_IN_MDMS_MESSAGE = "Template Identifier is not present in MDMS";

public static final String REQUIRED_TEMPLATE_IDENTIFIER_NOT_FOUND_CODE = "REQUIRED_TEMPLATE_IDENTIFIER_NOT_FOUND";
public static final String REQUIRED_TEMPLATE_IDENTIFIER_NOT_FOUND_MESSAGE = "Required Template Identifier is not present in Files";

public static final String ONLY_ONE_FILE_OF_REQUIRED_TEMPLATE_IDENTIFIER_CODE = "ONLY_ONE_FILE_OF_REQUIRED_TEMPLATE_IDENTIFIER";
public static final String ONLY_ONE_FILE_OF_REQUIRED_TEMPLATE_IDENTIFIER_MESSAGE = "Only one file of the required template identifier should be present.";

public static final String INPUT_KEY_NOT_FOUND_CODE = "INPUT_KEY_NOT_FOUND";
public static final String INPUT_KEY_NOT_FOUND_MESSAGE = "Operation's Input key not present in MDMS";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ public PlanConfigQueryBuilder(Configuration config) {
private static final String PLAN_CONFIG_SEARCH_BASE_QUERY = "SELECT id FROM plan_configuration pc ";

private static final String PLAN_CONFIG_QUERY = "SELECT pc.id as plan_configuration_id, pc.tenant_id as plan_configuration_tenant_id, pc.name as plan_configuration_name, pc.execution_plan_id as plan_configuration_execution_plan_id, pc.status as plan_configuration_status, pc.created_by as plan_configuration_created_by, pc.created_time as plan_configuration_created_time, pc.last_modified_by as plan_configuration_last_modified_by, pc.last_modified_time as plan_configuration_last_modified_time, \n" +
"\t pcf.id as plan_configuration_files_id, pcf.plan_configuration_id as plan_configuration_files_plan_configuration_id, pcf.filestore_id as plan_configuration_files_filestore_id, pcf.input_file_type as plan_configuration_files_input_file_type, pcf.template_identifier as plan_configuration_files_template_identifier, pcf.created_by as plan_configuration_files_created_by, pcf.created_time as plan_configuration_files_created_time, pcf.last_modified_by as plan_configuration_files_last_modified_by, pcf.last_modified_time as plan_configuration_files_last_modified_time,\n" +
"\t pca.id as plan_configuration_assumptions_id, pca.key as plan_configuration_assumptions_key, pca.value as plan_configuration_assumptions_value, pca.plan_configuration_id as plan_configuration_assumptions_plan_configuration_id, pca.created_by as plan_configuration_assumptions_created_by, pca.created_time as plan_configuration_assumptions_created_time, pca.last_modified_by as plan_configuration_assumptions_last_modified_by, pca.last_modified_time as plan_configuration_assumptions_last_modified_time,\n" +
"\t pco.id as plan_configuration_operations_id, pco.input as plan_configuration_operations_input, pco.operator as plan_configuration_operations_operator, pco.assumption_value as plan_configuration_operations_assumption_value, pco.output as plan_configuration_operations_output, pco.plan_configuration_id as plan_configuration_operations_plan_configuration_id, pco.created_by as plan_configuration_operations_created_by, pco.created_time as plan_configuration_operations_created_time, pco.last_modified_by as plan_configuration_operations_last_modified_by, pco.last_modified_time as plan_configuration_operations_last_modified_time,\n" +
"\t pcm.id as plan_configuration_mapping_id, pcm.filestore_id as plan_configuration_mapping_filestore_id, pcm.mapped_from as plan_configuration_mapping_mapped_from, pcm.mapped_to as plan_configuration_mapping_mapped_to, pcm.plan_configuration_id as plan_configuration_mapping_plan_configuration_id, pcm.created_by as plan_configuration_mapping_created_by, pcm.created_time as plan_configuration_mapping_created_time, pcm.last_modified_by as plan_configuration_mapping_last_modified_by, pcm.last_modified_time as plan_configuration_mapping_last_modified_time\n" +
"\t pcf.id as plan_configuration_files_id, pcf.plan_configuration_id as plan_configuration_files_plan_configuration_id, pcf.filestore_id as plan_configuration_files_filestore_id, pcf.input_file_type as plan_configuration_files_input_file_type, pcf.template_identifier as plan_configuration_files_template_identifier, pcf.active as plan_configuration_files_active, pcf.created_by as plan_configuration_files_created_by, pcf.created_time as plan_configuration_files_created_time, pcf.last_modified_by as plan_configuration_files_last_modified_by, pcf.last_modified_time as plan_configuration_files_last_modified_time,\n" +
"\t pca.id as plan_configuration_assumptions_id, pca.key as plan_configuration_assumptions_key, pca.value as plan_configuration_assumptions_value, pca.active as plan_configuration_assumptions_active, pca.plan_configuration_id as plan_configuration_assumptions_plan_configuration_id, pca.created_by as plan_configuration_assumptions_created_by, pca.created_time as plan_configuration_assumptions_created_time, pca.last_modified_by as plan_configuration_assumptions_last_modified_by, pca.last_modified_time as plan_configuration_assumptions_last_modified_time,\n" +
"\t pco.id as plan_configuration_operations_id, pco.input as plan_configuration_operations_input, pco.operator as plan_configuration_operations_operator, pco.assumption_value as plan_configuration_operations_assumption_value, pco.output as plan_configuration_operations_output, pco.active as plan_configuration_operations_active, pco.plan_configuration_id as plan_configuration_operations_plan_configuration_id, pco.created_by as plan_configuration_operations_created_by, pco.created_time as plan_configuration_operations_created_time, pco.last_modified_by as plan_configuration_operations_last_modified_by, pco.last_modified_time as plan_configuration_operations_last_modified_time,\n" +
"\t pcm.id as plan_configuration_mapping_id, pcm.filestore_id as plan_configuration_mapping_filestore_id, pcm.mapped_from as plan_configuration_mapping_mapped_from, pcm.mapped_to as plan_configuration_mapping_mapped_to, pcm.active as plan_configuration_mapping_active, pcm.plan_configuration_id as plan_configuration_mapping_plan_configuration_id, pcm.created_by as plan_configuration_mapping_created_by, pcm.created_time as plan_configuration_mapping_created_time, pcm.last_modified_by as plan_configuration_mapping_last_modified_by, pcm.last_modified_time as plan_configuration_mapping_last_modified_time\n" +
"\t FROM plan_configuration pc\n" +
"\t LEFT JOIN plan_configuration_files pcf ON pc.id = pcf.plan_configuration_id\n" +
"\t LEFT JOIN plan_configuration_assumptions pca ON pc.id = pca.plan_configuration_id\n" +
Expand All @@ -49,6 +49,8 @@ private String buildPlanConfigQuery(List<String> ids, List<Object> preparedStmtL
QueryUtil.addToPreparedStatement(preparedStmtList, new LinkedHashSet<>(ids));
}

addActiveWhereClause(builder, preparedStmtList);

return builder.toString();
}

Expand Down Expand Up @@ -162,5 +164,25 @@ private String getPaginatedQuery(String query, PlanConfigurationSearchCriteria p
return paginatedQuery.toString();
}

public void addActiveWhereClause(StringBuilder builder, List<Object> preparedStmtList)
{
addClauseIfRequired(preparedStmtList, builder);
builder.append(" pcf.active = ?");
preparedStmtList.add(Boolean.TRUE);

addClauseIfRequired(preparedStmtList, builder);
builder.append(" pca.active = ?");
preparedStmtList.add(Boolean.TRUE);

addClauseIfRequired(preparedStmtList, builder);
builder.append(" pco.active = ?");
preparedStmtList.add(Boolean.TRUE);

addClauseIfRequired(preparedStmtList, builder);
builder.append(" pcm.active = ?");
preparedStmtList.add(Boolean.TRUE);
}


}

Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ private void addFiles(ResultSet rs, PlanConfiguration planConfigEntry, Map<Strin
file.setFilestoreId(rs.getString("plan_configuration_files_filestore_id"));
file.setInputFileType(File.InputFileTypeEnum.valueOf(rs.getString("plan_configuration_files_input_file_type").toUpperCase()));
file.setTemplateIdentifier(rs.getString("plan_configuration_files_template_identifier"));
file.setActive(rs.getBoolean("plan_configuration_files_active"));
if (CollectionUtils.isEmpty(planConfigEntry.getFiles())) {
List<File> fileList = new ArrayList<>();
fileList.add(file);
Expand Down Expand Up @@ -111,6 +112,7 @@ private void addAssumptions(ResultSet rs, PlanConfiguration planConfigEntry, Map
assumption.setId(assumptionId);
assumption.setKey(rs.getString("plan_configuration_assumptions_key"));
assumption.setValue(rs.getBigDecimal("plan_configuration_assumptions_value"));
assumption.setActive(rs.getBoolean("plan_configuration_assumptions_active"));

if (CollectionUtils.isEmpty(planConfigEntry.getAssumptions())) {
List<Assumption> assumptionList = new ArrayList<>();
Expand Down Expand Up @@ -144,6 +146,7 @@ private void addOperations(ResultSet rs, PlanConfiguration planConfigEntry, Map<
operation.setOperator(Operation.OperatorEnum.fromValue(rs.getString("plan_configuration_operations_operator")));
operation.setAssumptionValue(rs.getString("plan_configuration_operations_assumption_value"));
operation.setOutput(rs.getString("plan_configuration_operations_output"));
operation.setActive(rs.getBoolean("plan_configuration_operations_active"));

if (CollectionUtils.isEmpty(planConfigEntry.getOperations())) {
List<Operation> operationList = new ArrayList<>();
Expand Down Expand Up @@ -176,6 +179,7 @@ private void addResourceMappings(ResultSet rs, PlanConfiguration planConfigEntry
mapping.setFilestoreId(rs.getString("plan_configuration_mapping_filestore_id"));
mapping.setMappedFrom(rs.getString("plan_configuration_mapping_mapped_from"));
mapping.setMappedTo(rs.getString("plan_configuration_mapping_mapped_to"));
mapping.setActive(rs.getBoolean("plan_configuration_mapping_active"));

if (CollectionUtils.isEmpty(planConfigEntry.getResourceMapping())) {
List<ResourceMapping> mappingList = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package digit.service.enrichment;

import digit.config.Configuration;
import digit.web.models.File;
import digit.web.models.PlanConfiguration;
import digit.web.models.PlanConfigurationRequest;
import digit.web.models.ResourceMapping;
import lombok.extern.slf4j.Slf4j;
import org.egov.common.utils.AuditDetailsEnrichmentUtil;
import org.egov.common.utils.UUIDEnrichmentUtil;
import org.egov.tracer.model.CustomException;
import org.springframework.stereotype.Component;

import java.util.List;
import static digit.config.ServiceConstants.USERINFO_MISSING_CODE;
import static digit.config.ServiceConstants.USERINFO_MISSING_MESSAGE;
import org.springframework.util.ObjectUtils;
Expand Down Expand Up @@ -96,6 +99,7 @@ public void enrichPlanConfigurationForUpdate(PlanConfigurationRequest request) {
if (ObjectUtils.isEmpty(file.getId())) {
UUIDEnrichmentUtil.enrichRandomUuid(file, "id");
}
enrichActiveForResourceMapping(file, request.getPlanConfiguration().getResourceMapping());
});

// For Assumptions
Expand All @@ -118,6 +122,18 @@ public void enrichPlanConfigurationForUpdate(PlanConfigurationRequest request) {
UUIDEnrichmentUtil.enrichRandomUuid(resourceMapping, "id");
}
});

}

public void enrichActiveForResourceMapping(File file, List<ResourceMapping> resourceMappings) {
if (!file.getActive()) {
// Set all corresponding resource mappings to inactive
for (ResourceMapping mapping : resourceMappings) {
if (mapping.getFilestoreId().equals(file.getFilestoreId())) {
mapping.setActive(false);
}
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public void validateCreate(PlanConfigurationRequest request) {
*/
public void validateAssumptionValue(PlanConfiguration planConfiguration) {
Set<String> assumptionValues = planConfiguration.getAssumptions().stream()
.filter(Assumption::getActive)
.map(Assumption::getKey)
.collect(Collectors.toSet());

Expand Down Expand Up @@ -126,12 +127,17 @@ public void validateFilestoreId(PlanConfiguration planConfiguration) {
*/
public void validateTemplateIdentifierAgainstMDMS(PlanConfigurationRequest request, Object mdmsData) {
PlanConfiguration planConfiguration = request.getPlanConfiguration();
final String jsonPathForTemplateIdentifier = "$." + MDMS_PLAN_MODULE_NAME + "." + MDMS_MASTER_UPLOAD_CONFIGURATION + ".*";
final String jsonPathForTemplateIdentifier = "$." + MDMS_PLAN_MODULE_NAME + "." + MDMS_MASTER_UPLOAD_CONFIGURATION + ".*.id";
final String jsonPathForTemplateIdentifierIsRequired = "$." + MDMS_PLAN_MODULE_NAME + "." + MDMS_MASTER_UPLOAD_CONFIGURATION + "[?(@.required == true)].id";

List<Object> templateIdentifierListFromMDMS = null;
List<Object> requiredTemplateIdentifierFromMDMS = null;
Set<String> activeRequiredTemplates = new HashSet<>();

try {
log.info(jsonPathForTemplateIdentifier);
templateIdentifierListFromMDMS = JsonPath.read(mdmsData, jsonPathForTemplateIdentifier);
requiredTemplateIdentifierFromMDMS = JsonPath.read(mdmsData, jsonPathForTemplateIdentifierIsRequired);
} catch (Exception e) {
log.error(e.getMessage());
throw new CustomException(JSONPATH_ERROR_CODE, JSONPATH_ERROR_MESSAGE);
Expand All @@ -144,9 +150,29 @@ public void validateTemplateIdentifierAgainstMDMS(PlanConfigurationRequest reque
log.error("Template Identifier " + file.getTemplateIdentifier() + " is not present in MDMS");
throw new CustomException(TEMPLATE_IDENTIFIER_NOT_FOUND_IN_MDMS_CODE, TEMPLATE_IDENTIFIER_NOT_FOUND_IN_MDMS_MESSAGE);
}

if (file.getActive()) { // Check if the file is active
String templateIdentifier = file.getTemplateIdentifier();
if (requiredTemplateIdentifierFromMDMS.contains(templateIdentifier)) { // Check if the template identifier is required
if (!activeRequiredTemplates.add(templateIdentifier)) { // Ensure only one active file per required template identifier
log.error("Only one file with the required Template Identifier should be present " + file.getTemplateIdentifier());
throw new CustomException(ONLY_ONE_FILE_OF_REQUIRED_TEMPLATE_IDENTIFIER_CODE, ONLY_ONE_FILE_OF_REQUIRED_TEMPLATE_IDENTIFIER_MESSAGE);
}
}
}
}

// Ensure at least one active file for each required template identifier
for (Object requiredTemplate : requiredTemplateIdentifierFromMDMS) {
if (!activeRequiredTemplates.contains(requiredTemplate)) {
log.error("Required Template Identifier " + requiredTemplate + " does not have any active file.");
throw new CustomException(REQUIRED_TEMPLATE_IDENTIFIER_NOT_FOUND_CODE, REQUIRED_TEMPLATE_IDENTIFIER_NOT_FOUND_MESSAGE);
}
}

}


/**
* Validates the operations input against the Master Data Management System (MDMS) data.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ private ModuleDetail getPlanModuleDetail() {
List<MasterDetail> assumptionMasterDetails = new ArrayList<>();

MasterDetail assumptionMasterDetail = MasterDetail.builder().name(MDMS_MASTER_ASSUMPTION).build();
MasterDetail uploadConfigMasterDetail = MasterDetail.builder().name(MDMS_MASTER_UPLOAD_CONFIGURATION).filter(FILTER_ID).build();
MasterDetail uploadConfigMasterDetail = MasterDetail.builder().name(MDMS_MASTER_UPLOAD_CONFIGURATION).build();
MasterDetail ruleConfigureInputsMasterDetail = MasterDetail.builder().name(MDMS_MASTER_RULE_CONFIGURE_INPUTS).filter(FILTER_DATA).build();
MasterDetail schemaDetails = MasterDetail.builder().name(MDMS_MASTER_SCHEMAS).build();
MasterDetail metricDetails = MasterDetail.builder().name(MDMS_MASTER_METRIC).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,8 @@ public class Assumption {
@Digits(integer = 3, fraction = 2, message = "Assumption value must have up to 3 digits and up to 2 decimal points")
private BigDecimal value = null;

@JsonProperty("active")
@NotNull
private Boolean active = true;

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import org.apache.kafka.common.protocol.types.Field;
import org.springframework.validation.annotation.Validated;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
Expand Down Expand Up @@ -43,6 +44,10 @@ public class File {
@Pattern(regexp = "^(?!\\p{Punct}+$).*$", message = "Name must not contain only special characters")
private String templateIdentifier = null;

@JsonProperty("active")
@NotNull
private Boolean active = true;

/**
* The original file type of the Input
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ public class Operation {
@Size(min = 1, max = 64)
private String output = null;

@JsonProperty("active")
@NotNull
private Boolean active = true;

/**
* The operator used in the operation
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,8 @@ public class ResourceMapping {
@Size(min = 2, max = 256)
private String mappedTo = null;

@JsonProperty("active")
@NotNull
private Boolean active = true;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
ALTER TABLE plan_configuration_files ADD active boolean;
UPDATE plan_configuration_files SET active = true WHERE active IS NULL;

ALTER TABLE plan_configuration_assumptions ADD active boolean;
UPDATE plan_configuration_assumptions SET active = true WHERE active IS NULL;

ALTER TABLE plan_configuration_operations ADD active boolean;
UPDATE plan_configuration_operations SET active = true WHERE active IS NULL;

ALTER TABLE plan_configuration_mapping ADD active boolean;
UPDATE plan_configuration_mapping SET active = true WHERE active IS NULL;

0 comments on commit d8c39f6

Please sign in to comment.