Skip to content

Commit

Permalink
Criteria group and section is disabled flag. (#1008)
Browse files Browse the repository at this point in the history
* Criteria group and section isDisabled flag.

* Add tests.

* Add default value to disabled flag in OpenAPI.
  • Loading branch information
marikomedlock authored Sep 16, 2024
1 parent 9442c99 commit 05c952c
Show file tree
Hide file tree
Showing 15 changed files with 201 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ private static CohortRevision.CriteriaGroupSection fromApiObject(ApiCriteriaGrou
.joinOperator(joinOperator)
.joinOperatorValue(apiObj.getOperatorValue())
.setIsExcluded(apiObj.isExcluded())
.setIsDisabled(apiObj.isDisabled())
.build();
}

Expand All @@ -254,6 +255,7 @@ private static CohortRevision.CriteriaGroup fromApiObject(ApiCriteriaGroup apiOb
apiObj.getCriteria().stream()
.map(FromApiUtils::fromApiObject)
.collect(Collectors.toList()))
.isDisabled(apiObj.isDisabled())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@ public static ApiCriteriaGroupSection toApiObject(
toApiObject(criteriaGroupSection.getFirstConditionReducingOperator()))
.secondBlockReducingOperator(
toApiObject(criteriaGroupSection.getSecondConditionRedcuingOperator()))
.excluded(criteriaGroupSection.isExcluded());
.excluded(criteriaGroupSection.isExcluded())
.disabled(criteriaGroupSection.isDisabled());
}

private static ApiReducingOperator toApiObject(ReducingOperator reducingOperator) {
Expand All @@ -148,7 +149,8 @@ private static ApiCriteriaGroup toApiObject(CohortRevision.CriteriaGroup criteri
.criteria(
criteriaGroup.getCriteria().stream()
.map(ToApiUtils::toApiObject)
.collect(Collectors.toList()));
.collect(Collectors.toList()))
.disabled(criteriaGroup.isDisabled());
}

public static ApiCriteria toApiObject(Criteria criteria) {
Expand Down
20 changes: 12 additions & 8 deletions service/src/main/java/bio/terra/tanagra/db/CohortDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public class CohortDao {

// SQL query and row mapper for reading a criteria group section.
private static final String CRITERIA_GROUP_SECTION_SELECT_SQL =
"SELECT cohort_revision_id, id, display_name, operator, is_excluded, first_condition_reducing_operator, second_condition_reducing_operator, join_operator, join_operator_value FROM criteria_group_section";
"SELECT cohort_revision_id, id, display_name, operator, is_excluded, is_disabled, first_condition_reducing_operator, second_condition_reducing_operator, join_operator, join_operator_value FROM criteria_group_section";
private static final RowMapper<Pair<String, CohortRevision.CriteriaGroupSection.Builder>>
CRITERIA_GROUP_SECTION_ROW_MAPPER =
(rs, rowNum) ->
Expand All @@ -81,6 +81,7 @@ public class CohortDao {
.operator(
BooleanAndOrFilter.LogicalOperator.valueOf(rs.getString("operator")))
.setIsExcluded(rs.getBoolean("is_excluded"))
.setIsDisabled(rs.getBoolean("is_disabled"))
.firstConditionReducingOperator(
rs.getString("first_condition_reducing_operator") == null
? null
Expand All @@ -99,7 +100,7 @@ public class CohortDao {

// SQL query and row mapper for reading a criteria group.
private static final String CRITERIA_GROUP_SELECT_SQL =
"SELECT cohort_revision_id, criteria_group_section_id, id, display_name, condition_index FROM criteria_group";
"SELECT cohort_revision_id, criteria_group_section_id, id, display_name, condition_index, is_disabled FROM criteria_group";
private static final RowMapper<
Pair<Pair<List<String>, Integer>, CohortRevision.CriteriaGroup.Builder>>
CRITERIA_GROUP_ROW_MAPPER =
Expand All @@ -112,7 +113,8 @@ public class CohortDao {
rs.getObject("condition_index", Integer.class)),
CohortRevision.CriteriaGroup.builder()
.id(rs.getString("id"))
.displayName(rs.getString("display_name")));
.displayName(rs.getString("display_name"))
.isDisabled(rs.getBoolean("is_disabled")));

// SQL query and row mapper for reading a criteria.
private static final String CRITERIA_SELECT_SQL =
Expand Down Expand Up @@ -627,6 +629,7 @@ private void updateCriteriaHelper(
cgs.getJoinOperator() == null ? null : cgs.getJoinOperator().name())
.addValue("join_operator_value", cgs.getJoinOperatorValue())
.addValue("is_excluded", cgs.isExcluded())
.addValue("is_disabled", cgs.isDisabled())
.addValue("list_index", cgsListIndex));

buildParamsForUpdateCriteriaHelper(
Expand All @@ -648,8 +651,8 @@ private void updateCriteriaHelper(
}

sql =
"INSERT INTO criteria_group_section (cohort_revision_id, id, display_name, operator, is_excluded, first_condition_reducing_operator, second_condition_reducing_operator, join_operator, join_operator_value, list_index) "
+ "VALUES (:cohort_revision_id, :id, :display_name, :operator, :is_excluded, :first_condition_reducing_operator, :second_condition_reducing_operator, :join_operator, :join_operator_value, :list_index)";
"INSERT INTO criteria_group_section (cohort_revision_id, id, display_name, operator, is_excluded, is_disabled, first_condition_reducing_operator, second_condition_reducing_operator, join_operator, join_operator_value, list_index) "
+ "VALUES (:cohort_revision_id, :id, :display_name, :operator, :is_excluded, :is_disabled, :first_condition_reducing_operator, :second_condition_reducing_operator, :join_operator, :join_operator_value, :list_index)";
LOGGER.debug("CREATE criteria_group_section: {}", sql);
rowsAffected =
Arrays.stream(
Expand All @@ -659,8 +662,8 @@ private void updateCriteriaHelper(
LOGGER.debug("CREATE criteria_group_section rowsAffected = {}", rowsAffected);

sql =
"INSERT INTO criteria_group (cohort_revision_id, criteria_group_section_id, id, display_name, condition_index, list_index) "
+ "VALUES (:cohort_revision_id, :criteria_group_section_id, :id, :display_name, :condition_index, :list_index)";
"INSERT INTO criteria_group (cohort_revision_id, criteria_group_section_id, id, display_name, condition_index, list_index, is_disabled) "
+ "VALUES (:cohort_revision_id, :criteria_group_section_id, :id, :display_name, :condition_index, :list_index, :is_disabled)";
LOGGER.debug("CREATE criteria_group: {}", sql);
rowsAffected =
Arrays.stream(
Expand Down Expand Up @@ -707,7 +710,8 @@ private void buildParamsForUpdateCriteriaHelper(
.addValue("id", cg.getId())
.addValue("display_name", cg.getDisplayName())
.addValue("list_index", cgListIndex)
.addValue("condition_index", criteriaGroupConditionIndex));
.addValue("condition_index", criteriaGroupConditionIndex)
.addValue("is_disabled", cg.isDisabled()));

for (int cListIndex = 0; cListIndex < cg.getCriteria().size(); cListIndex++) {
Criteria c = cg.getCriteria().get(cListIndex);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ public static class CriteriaGroupSection {
private final JoinOperator joinOperator;
private final Integer joinOperatorValue;
private final boolean isExcluded;
private final boolean isDisabled;

@SuppressWarnings("checkstyle:ParameterNumber")
private CriteriaGroupSection(
Expand All @@ -246,7 +247,8 @@ private CriteriaGroupSection(
ReducingOperator secondConditionReducingOperator,
JoinOperator joinOperator,
Integer joinOperatorValue,
boolean isExcluded) {
boolean isExcluded,
boolean isDisabled) {
this.id = id;
this.displayName = displayName;
this.criteriaGroups = criteriaGroups;
Expand All @@ -257,6 +259,7 @@ private CriteriaGroupSection(
this.joinOperator = joinOperator;
this.joinOperatorValue = joinOperatorValue;
this.isExcluded = isExcluded;
this.isDisabled = isDisabled;
}

public static Builder builder() {
Expand Down Expand Up @@ -310,6 +313,10 @@ public boolean isExcluded() {
return isExcluded;
}

public boolean isDisabled() {
return isDisabled;
}

public static class Builder {
private String id;
private String displayName;
Expand All @@ -321,6 +328,7 @@ public static class Builder {
private JoinOperator joinOperator;
private Integer joinOperatorValue;
private boolean isExcluded;
private boolean isDisabled;

public Builder id(String id) {
this.id = id;
Expand Down Expand Up @@ -375,6 +383,11 @@ public Builder setIsExcluded(boolean excluded) {
return this;
}

public Builder setIsDisabled(boolean isDisabled) {
this.isDisabled = isDisabled;
return this;
}

public CriteriaGroupSection build() {
if (id == null) {
id = ServiceUtils.newArtifactId();
Expand All @@ -389,7 +402,8 @@ public CriteriaGroupSection build() {
secondConditionReducingOperator,
joinOperator,
joinOperatorValue,
isExcluded);
isExcluded,
isDisabled);
}

public String getId() {
Expand All @@ -415,6 +429,7 @@ public boolean equals(Object o) {
}
CriteriaGroupSection that = (CriteriaGroupSection) o;
return isExcluded == that.isExcluded
&& isDisabled == that.isDisabled
&& id.equals(that.id)
&& Objects.equals(displayName, that.displayName)
&& criteriaGroups.equals(that.criteriaGroups)
Expand All @@ -438,19 +453,23 @@ public int hashCode() {
secondConditionRedcuingOperator,
joinOperator,
joinOperatorValue,
isExcluded);
isExcluded,
isDisabled);
}
}

public static class CriteriaGroup {
private final String id;
private final String displayName;
private final List<Criteria> criteria;
private final boolean isDisabled;

private CriteriaGroup(String id, String displayName, List<Criteria> criteria) {
private CriteriaGroup(
String id, String displayName, List<Criteria> criteria, boolean isDisabled) {
this.id = id;
this.displayName = displayName;
this.criteria = criteria;
this.isDisabled = isDisabled;
}

public static Builder builder() {
Expand All @@ -469,10 +488,15 @@ public List<Criteria> getCriteria() {
return Collections.unmodifiableList(criteria);
}

public boolean isDisabled() {
return isDisabled;
}

public static class Builder {
private String id;
private String displayName;
private List<Criteria> criteria = new ArrayList<>();
private boolean isDisabled;

public Builder id(String id) {
this.id = id;
Expand All @@ -489,11 +513,16 @@ public Builder criteria(List<Criteria> criteria) {
return this;
}

public Builder isDisabled(boolean isDisabled) {
this.isDisabled = isDisabled;
return this;
}

public CriteriaGroup build() {
if (id == null) {
id = ServiceUtils.newArtifactId();
}
return new CriteriaGroup(id, displayName, criteria);
return new CriteriaGroup(id, displayName, criteria, isDisabled);
}

public String getId() {
Expand All @@ -516,12 +545,13 @@ public boolean equals(Object o) {
CriteriaGroup that = (CriteriaGroup) o;
return id.equals(that.id)
&& displayName.equals(that.displayName)
&& criteria.equals(that.criteria);
&& criteria.equals(that.criteria)
&& isDisabled == that.isDisabled;
}

@Override
public int hashCode() {
return Objects.hash(id, displayName, criteria);
return Objects.hash(id, displayName, criteria, isDisabled);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public FilterBuilderService(UnderlayService underlayService) {

public EntityFilter buildCohortFilterForCriteriaGroup(
String underlayName, CohortRevision.CriteriaGroup criteriaGroup) {
if (criteriaGroup.getCriteria().isEmpty()) {
if (criteriaGroup.isDisabled() || criteriaGroup.getCriteria().isEmpty()) {
return null;
}

Expand Down Expand Up @@ -95,6 +95,9 @@ private List<EntityOutput> buildDataFeatureOutputForTemporalCriteriaGroup(

public EntityFilter buildFilterForCriteriaGroupSection(
String underlayName, CohortRevision.CriteriaGroupSection criteriaGroupSection) {
if (criteriaGroupSection.isDisabled()) {
return null;
}
EntityFilter includeFilter;
if (criteriaGroupSection.getJoinOperator() != null) {
// Temporal section.
Expand Down
8 changes: 8 additions & 0 deletions service/src/main/resources/api/service_openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2402,6 +2402,10 @@ components:
excluded:
type: boolean
description: True to exclude the section, false to include it
disabled:
type: boolean
description: True to disable the section
default: false
required:
- id
- displayName
Expand Down Expand Up @@ -2431,6 +2435,10 @@ components:
description: Set of criteria in the group
items:
$ref: "#/components/schemas/Criteria"
disabled:
type: boolean
description: True to disable the group
default: false
required:
- id
- displayName
Expand Down
1 change: 1 addition & 0 deletions service/src/main/resources/db/changelog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@
<include file="changesets/20240304_selector_column.yaml" relativeToChangelogFile="true"/>
<include file="changesets/20240326_remove_criteria_group_columns.yaml" relativeToChangelogFile="true"/>
<include file="changesets/20240709_temporal_criteria_group_sections.yaml" relativeToChangelogFile="true"/>
<include file="changesets/20240913_disable_criteria_group_section.yaml" relativeToChangelogFile="true"/>
</databaseChangeLog>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
databaseChangeLog:
- changeSet:
id: disable_criteria_group_section
author: marikomedlock
dbms: postgresql,mariadb,mysql
changes:
- addColumn:
tableName: criteria_group_section
columns:
- column:
name: is_disabled
type: ${boolean.type}
constraints:
nullable: true

- addColumn:
tableName: criteria_group
columns:
- column:
name: is_disabled
type: ${boolean.type}
constraints:
nullable: true
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package bio.terra.tanagra.service;

import static bio.terra.tanagra.service.criteriaconstants.cmssynpuf.CriteriaGroupSection.CRITERIA_GROUP_SECTION_CONDITION_AND_DISABLED_DEMOGRAPHICS;
import static bio.terra.tanagra.service.criteriaconstants.cmssynpuf.CriteriaGroupSection.CRITERIA_GROUP_SECTION_DEMOGRAPHICS_AND_CONDITION;
import static bio.terra.tanagra.service.criteriaconstants.cmssynpuf.CriteriaGroupSection.CRITERIA_GROUP_SECTION_PROCEDURE;
import static bio.terra.tanagra.service.criteriaconstants.cmssynpuf.CriteriaGroupSection.CRITERIA_GROUP_SECTION_TEMPORAL_DURING_SAME_ENCOUNTER;
import static bio.terra.tanagra.service.criteriaconstants.cmssynpuf.CriteriaGroupSection.CRITERIA_GROUP_SECTION_TEMPORAL_WITHIN_NUM_DAYS;
import static bio.terra.tanagra.service.criteriaconstants.cmssynpuf.CriteriaGroupSection.DISABLED_CRITERIA_GROUP_SECTION_DEMOGRAPHICS_AND_CONDITION;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
Expand Down Expand Up @@ -281,6 +283,27 @@ void withCriteria() throws InterruptedException {
CRITERIA_GROUP_SECTION_DEMOGRAPHICS_AND_CONDITION, CRITERIA_GROUP_SECTION_PROCEDURE),
updatedCohort1.getMostRecentRevision().getSections());

// Update cohort1 with disabled criteria group section and disabled criteria group.
updatedCohort1 =
cohortService.updateCohort(
study1.getId(),
cohort1.getId(),
USER_EMAIL_1,
null,
null,
List.of(
DISABLED_CRITERIA_GROUP_SECTION_DEMOGRAPHICS_AND_CONDITION,
CRITERIA_GROUP_SECTION_CONDITION_AND_DISABLED_DEMOGRAPHICS));
assertNotNull(updatedCohort1);
LOGGER.info(
"Updated cohort {} at {}", updatedCohort1.getId(), updatedCohort1.getLastModified());
assertEquals(2, updatedCohort1.getMostRecentRevision().getSections().size());
assertEquals(
List.of(
DISABLED_CRITERIA_GROUP_SECTION_DEMOGRAPHICS_AND_CONDITION,
CRITERIA_GROUP_SECTION_CONDITION_AND_DISABLED_DEMOGRAPHICS),
updatedCohort1.getMostRecentRevision().getSections());

// Create cohort2 with criteria.
Cohort cohort2 =
cohortService.createCohort(
Expand Down
Loading

0 comments on commit 05c952c

Please sign in to comment.