Skip to content

Commit

Permalink
Updates
Browse files Browse the repository at this point in the history
  • Loading branch information
dexamundsen committed Sep 12, 2024
1 parent f902196 commit ad8df05
Show file tree
Hide file tree
Showing 7 changed files with 266 additions and 181 deletions.
107 changes: 49 additions & 58 deletions service/src/main/java/bio/terra/tanagra/db/AnnotationDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@
import bio.terra.tanagra.api.shared.DataType;
import bio.terra.tanagra.api.shared.Literal;
import bio.terra.tanagra.exception.SystemException;
import bio.terra.tanagra.service.ServiceUtils;
import bio.terra.tanagra.service.artifact.model.AnnotationKey;
import bio.terra.tanagra.service.artifact.model.AnnotationValue;
import jakarta.annotation.Nullable;
import java.util.ArrayList;
import java.sql.Date;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -249,59 +247,20 @@ public void updateAnnotationValues(
LOGGER.debug("DELETE annotation values rowsAffected = {}", rowsAffected);

// Write the annotation values.
sql =
"INSERT INTO annotation_value (cohort_id, annotation_key_id, review_id, primary_entity_instance_id, bool_val, int64_val, string_val, date_val) "
+ "VALUES (:cohort_id, :annotation_key_id, :review_id, :primary_entity_instance_id, :bool_val, :int64_val, :string_val, :date_val)";
LOGGER.debug("CREATE annotation values: {}", sql);
MapSqlParameterSource[] valueParamSets =
insertValueRows(
annotationValues.stream()
.map(
av ->
new MapSqlParameterSource()
.addValue("cohort_id", cohortId)
.addValue("annotation_key_id", annotationKeyId)
.addValue("review_id", reviewId)
.addValue("primary_entity_instance_id", instanceId)
.addValue("bool_val", av.getBooleanVal())
.addValue("int64_val", av.getInt64Val())
.addValue("string_val", av.getStringVal())
.addValue("date_val", av.getDateVal()))
.toList()
.toArray(new MapSqlParameterSource[0]);
rowsAffected = Arrays.stream(jdbcTemplate.batchUpdate(sql, valueParamSets)).sum();
LOGGER.debug("CREATE annotation values rowsAffected = {}", rowsAffected);
}

public void cloneAnnotations(String cohortId, String clonedCohortId, String userEmail) {
List<AnnotationKey> originalKeys = getAllAnnotationKeys(cohortId, 0, Integer.MAX_VALUE);

Map<String, String> keyIdsMap = new HashMap<>(); // originalId -> clonedId
List<MapSqlParameterSource> keyParamSets = new ArrayList<>();

originalKeys.forEach(
key -> {
String clonedId = ServiceUtils.newArtifactId();
keyIdsMap.put(key.getId(), clonedId);
keyParamSets.add(
buildKeyParam(
clonedCohortId,
clonedId,
key.getDisplayName(),
key.getDescription(),
key.getDataType().name()));
});
insertKeyRows(keyParamSets);

List<Pair<String, String>> enumValues = getEnumValuesMatchingList(keyIdsMap.keySet());
insertEnumValueRows(
enumValues.stream()
.map(
enumVal ->
buildEnumValueParam(
clonedCohortId, keyIdsMap.get(enumVal.getKey()), enumVal.getValue()))
buildValueParam(
cohortId,
annotationKeyId,
reviewId,
instanceId,
av.getBooleanVal(),
av.getInt64Val(),
av.getStringVal(),
av.getDateVal()))
.toList());

// TODO-values
}

@ReadTransaction
Expand All @@ -312,7 +271,7 @@ public List<AnnotationValue.Builder> getAllAnnotationValues(String cohortId) {
return jdbcTemplate.query(sql, params, ANNOTATION_VALUE_ROW_MAPPER);
}

private void insertKeyRows(List<MapSqlParameterSource> keyParamSets) {
void insertKeyRows(List<MapSqlParameterSource> keyParamSets) {
String sql =
"INSERT INTO annotation_key (cohort_id, id, display_name, description, data_type) "
+ "VALUES (:cohort_id, :id, :display_name, :description, :data_type)";
Expand All @@ -324,20 +283,33 @@ private void insertKeyRows(List<MapSqlParameterSource> keyParamSets) {
LOGGER.debug("CREATE annotation key rowsAffected = {}", rowsAffected);
}

private void insertEnumValueRows(List<MapSqlParameterSource> keyEnumValueParamSets) {
void insertEnumValueRows(List<MapSqlParameterSource> enumValueParamSets) {
String sql =
"INSERT INTO annotation_key_enum_value (cohort_id, annotation_key_id, enum) "
+ "VALUES (:cohort_id, :annotation_key_id, :enum)";
LOGGER.debug("CREATE annotation key enum value: {}", sql);
int rowsAffected =
Arrays.stream(
jdbcTemplate.batchUpdate(
sql, keyEnumValueParamSets.toArray(new MapSqlParameterSource[0])))
sql, enumValueParamSets.toArray(new MapSqlParameterSource[0])))
.sum();
LOGGER.debug("CREATE annotation key enum value rowsAffected = {}", rowsAffected);
}

private MapSqlParameterSource buildKeyParam(
void insertValueRows(List<MapSqlParameterSource> valueParamSets) {
// Write the annotation values.
String sql =
"INSERT INTO annotation_value (cohort_id, annotation_key_id, review_id, primary_entity_instance_id, bool_val, int64_val, string_val, date_val) "
+ "VALUES (:cohort_id, :annotation_key_id, :review_id, :primary_entity_instance_id, :bool_val, :int64_val, :string_val, :date_val)";
LOGGER.debug("CREATE annotation values: {}", sql);
int rowsAffected =
Arrays.stream(
jdbcTemplate.batchUpdate(sql, valueParamSets.toArray(new MapSqlParameterSource[0])))
.sum();
LOGGER.debug("CREATE annotation values rowsAffected = {}", rowsAffected);
}

MapSqlParameterSource buildKeyParam(
String cohortId, String id, String displayName, String description, String dataTypeName) {
return new MapSqlParameterSource()
.addValue("cohort_id", cohortId)
Expand All @@ -347,11 +319,30 @@ private MapSqlParameterSource buildKeyParam(
.addValue("data_type", dataTypeName);
}

private MapSqlParameterSource buildEnumValueParam(
String cohortId, String keyId, String enumValue) {
MapSqlParameterSource buildEnumValueParam(String cohortId, String keyId, String enumValue) {
return new MapSqlParameterSource()
.addValue("cohort_id", cohortId)
.addValue("annotation_key_id", keyId)
.addValue("enum", enumValue);
}

MapSqlParameterSource buildValueParam(
String cohortId,
String keyId,
String reviewId,
String instanceId,
Boolean booelanVal,
Long int64Val,
String stringVal,
Date dateVal) {
return new MapSqlParameterSource()
.addValue("cohort_id", cohortId)
.addValue("annotation_key_id", keyId)
.addValue("review_id", reviewId)
.addValue("primary_entity_instance_id", instanceId)
.addValue("bool_val", booelanVal)
.addValue("int64_val", int64Val)
.addValue("string_val", stringVal)
.addValue("date_val", dateVal);
}
}
Loading

0 comments on commit ad8df05

Please sign in to comment.