Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 106 additions & 23 deletions src/main/java/org/broadinstitute/dsm/db/OncHistoryDetail.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,27 +36,29 @@ public class OncHistoryDetail {

private static final Logger logger = LoggerFactory.getLogger(OncHistoryDetail.class);

public static final String SQL_SELECT_ONC_HISTORY_DETAIL = "SELECT p.ddp_participant_id, oD.onc_history_detail_id, oD.request, oD.deleted, oD.fax_sent, oD.tissue_received, oD.medical_record_id, oD.date_px, oD.type_px, " +
public static final String SQL_SELECT_ONC_HISTORY_DETAIL = "SELECT p.ddp_participant_id, p.participant_id, oD.onc_history_detail_id, oD.request, oD.deleted, oD.fax_sent, oD.tissue_received, oD.medical_record_id, oD.date_px, oD.type_px, " +
"oD.location_px, oD.histology, oD.accession_number, oD.facility, oD.phone, oD.fax, oD.notes, oD.additional_values_json, " +
"oD.request, oD.fax_sent, oD.fax_sent_by, oD.fax_confirmed, oD.fax_sent_2, oD.fax_sent_2_by, oD.fax_confirmed_2, oD.fax_sent_3, " +
"oD.fax_sent_3_by, oD.fax_confirmed_3, oD.tissue_received, oD.tissue_problem_option, oD.gender, oD.destruction_policy, oD.unable_obtain_tissue, " +
"tissue_id, t.notes, count_received, tissue_type, tissue_site, tumor_type, h_e, pathology_report, collaborator_sample_id, block_sent, scrolls_received, sk_id, sm_id, " +
"t.tissue_id, t.notes, count_received, tissue_type, tissue_site, tumor_type, h_e, pathology_report, collaborator_sample_id, block_sent, scrolls_received, sk_id, sm_id, " +
"sent_gp, first_sm_id, additional_tissue_value_json, expected_return, return_date, return_fedex_id, shl_work_number, tumor_percentage, tissue_sequence, " +
" scrolls_count, uss_count, h_e_count, blocks_count " +
" scrolls_count, uss_count, h_e_count, blocks_count, p.ddp_participant_id, sm.sm_id_value, sm.sm_id_type_id, sm.sm_id_pk, sm.deleted, sm.tissue_id, smt.sm_id_type " +
"FROM ddp_onc_history_detail oD " +
"LEFT JOIN ddp_medical_record m on (oD.medical_record_id = m.medical_record_id AND NOT oD.deleted <=> 1 AND NOT m.deleted <=> 1) " +
"LEFT JOIN ddp_institution inst on (inst.institution_id = m.institution_id) " +
"LEFT JOIN ddp_participant p on (p.participant_id = inst.participant_id) " +
"LEFT JOIN ddp_instance realm on (p.ddp_instance_id = realm.ddp_instance_id) " +
"LEFT JOIN ddp_tissue t on (oD.onc_history_detail_id = t.onc_history_detail_id AND NOT t.deleted <=> 1) " +
"LEFT JOIN sm_id sm on (sm.tissue_id = t.tissue_id AND NOT sm.deleted <=> 1 ) " +
"LEFT JOIN sm_id_type smt on (smt.sm_id_type_id = sm.sm_id_type_id ) " +
"WHERE realm.instance_name = ? ";
private static final String SQL_CREATE_ONC_HISTORY = "INSERT INTO ddp_onc_history_detail SET medical_record_id = ?, request = ?, last_changed = ?, changed_by = ?";
private static final String SQL_SELECT_ONC_HISTORY = "SELECT onc_history_detail_id, medical_record_id, date_px, type_px, location_px, histology, accession_number, facility," +
" phone, fax, notes, additional_values_json, request, fax_sent, fax_sent_by, fax_confirmed, fax_sent_2, fax_sent_2_by, fax_confirmed_2, fax_sent_3, fax_sent_3_by, fax_confirmed_3," +
" tissue_received, gender, tissue_problem_option, destruction_policy FROM ddp_onc_history_detail WHERE NOT (deleted <=> 1)";
private static final String SQL_SELECT_TISSUE_RECEIVED = "SELECT tissue_received FROM ddp_onc_history_detail WHERE onc_history_detail_id = ?";
private static final String SQL_INSERT_ONC_HISTORY_DETAIL = "INSERT INTO ddp_onc_history_detail SET medical_record_id = ?, request = ?, last_changed = ?, changed_by = ?";
public static final String SQL_ORDER_BY = " ORDER BY p.ddp_participant_id, inst.ddp_institution_id, oD.onc_history_detail_id ASC";
public static final String SQL_ORDER_BY = " ORDER BY p.ddp_participant_id, inst.ddp_institution_id, oD.onc_history_detail_id, t.tissue_id ASC";
public static final String SQL_SELECT_ONC_HISTORY_LAST_CHANGED = "SELECT oD.last_changed FROM ddp_institution inst " +
"LEFT JOIN ddp_participant as p on (p.participant_id = inst.participant_id) LEFT JOIN ddp_instance as ddp on (ddp.ddp_instance_id = p.ddp_instance_id) " +
"LEFT JOIN ddp_medical_record as m on (m.institution_id = inst.institution_id AND NOT m.deleted <=> 1) LEFT JOIN ddp_onc_history_detail as oD on (m.medical_record_id = oD.medical_record_id) " +
Expand Down Expand Up @@ -170,6 +172,7 @@ public class OncHistoryDetail {
private boolean unableToObtain;

private String participantId;
private String ddpParticipantId;


private List<Tissue> tissues;
Expand Down Expand Up @@ -219,7 +222,7 @@ public OncHistoryDetail(String oncHistoryDetailId, String medicalRecordId, Strin
String tFaxSent2, String tFaxSent2By, String tFaxConfirmed2,
String tFaxSent3, String tFaxSent3By, String tFaxConfirmed3,
String tissueReceived, String gender, String additionalValues, List<Tissue> tissues,
String tissueProblemOption, String destructionPolicy, boolean unableToObtain) {
String tissueProblemOption, String destructionPolicy, boolean unableToObtain, String participantId, String ddpParticipantId) {
this.oncHistoryDetailId = oncHistoryDetailId;
this.medicalRecordId = medicalRecordId;
this.datePX = datePX;
Expand Down Expand Up @@ -248,6 +251,8 @@ public OncHistoryDetail(String oncHistoryDetailId, String medicalRecordId, Strin
this.tissueProblemOption = tissueProblemOption;
this.destructionPolicy = destructionPolicy;
this.unableToObtain = unableToObtain;
this.participantId = participantId;
this.ddpParticipantId = ddpParticipantId;
}

public static OncHistoryDetail getOncHistoryDetail(@NonNull ResultSet rs) throws SQLException {
Expand Down Expand Up @@ -279,7 +284,9 @@ public static OncHistoryDetail getOncHistoryDetail(@NonNull ResultSet rs) throws
rs.getString(DBConstants.DDP_ONC_HISTORY_DETAIL_ALIAS + DBConstants.ALIAS_DELIMITER + DBConstants.ADDITIONAL_VALUES), tissues,
rs.getString(DBConstants.TISSUE_PROBLEM_OPTION),
rs.getString(DBConstants.DESTRUCTION_POLICY),
rs.getBoolean(DBConstants.UNABLE_OBTAIN_TISSUE)
rs.getBoolean(DBConstants.UNABLE_OBTAIN_TISSUE),
rs.getString(DBConstants.PARTICIPANT_ID),
rs.getString(DBConstants.DDP_PARTICIPANT_ID)
);

return oncHistoryDetail;
Expand All @@ -298,40 +305,116 @@ public static Map<String, List<OncHistoryDetail>> getOncHistoryDetails(@NonNull
public static Map<String, List<OncHistoryDetail>> getOncHistoryDetails(@NonNull String realm, String queryAddition) {
logger.info("Collection oncHistoryDetail information");
Map<String, List<OncHistoryDetail>> oncHistory = new HashMap<>();
HashMap<String, Tissue> tissues = new HashMap<>();
SimpleResult results = inTransaction((conn) -> {
SimpleResult dbVals = new SimpleResult();
try (PreparedStatement stmt = conn.prepareStatement(DBUtil.getFinalQuery(SQL_SELECT_ONC_HISTORY_DETAIL, queryAddition) + SQL_ORDER_BY)) {
stmt.setString(1, realm);
try (ResultSet rs = stmt.executeQuery()) {
Map<String, OncHistoryDetail> oncHistoryMap = new HashMap<>();
while (rs.next()) {
String ddpParticipantId = rs.getString(DBConstants.DDP_PARTICIPANT_ID);
String oncHistoryDetailId = rs.getString(DBConstants.ONC_HISTORY_DETAIL_ID);
TissueSmId tissueSmId = Tissue.getSMIds(rs);
Tissue tissue;
if (tissueSmId != null && tissues.containsKey(tissueSmId.getTissueId())) {
tissue = tissues.get(tissueSmId.getTissueId());
}
else {
tissue = Tissue.getTissue(rs);
}
if (tissueSmId != null) {
tissue.setSmIdBasedOnType(tissueSmId, rs);
}
tissues.put(tissue.getTissueId(), tissue);

Tissue tissue = Tissue.getTissue(rs);
if (!oncHistoryMap.containsKey(oncHistoryDetailId)) {
OncHistoryDetail oncHistoryDetail = getOncHistoryDetail(rs);
oncHistoryMap.put(oncHistoryDetailId, oncHistoryDetail);
}

}
//add tissues to their onc history
for (Tissue tissue : tissues.values()) {
String tissueOncHistoryDetailId = tissue.getOncHistoryDetailId();
OncHistoryDetail oncHistoryDetail = oncHistoryMap.get(tissueOncHistoryDetailId);
oncHistoryDetail.getTissues().add(tissue);
}// add onchistories to their particiapnt
for (OncHistoryDetail oncHistoryDetail : oncHistoryMap.values()) {
//check if oncHistoryDetails is already in map
List<OncHistoryDetail> oncHistoryDataList = new ArrayList<>();
if (oncHistory.containsKey(ddpParticipantId)) {
oncHistoryDataList = oncHistory.get(ddpParticipantId);
String ddpParticipantId = oncHistoryDetail.getDdpParticipantId();
List<OncHistoryDetail> oncHistoryDataList = oncHistory.getOrDefault(ddpParticipantId, new ArrayList<>());
oncHistoryDataList.add(oncHistoryDetail);
oncHistory.put(ddpParticipantId, oncHistoryDataList);
}

} catch (Exception e){
dbVals.resultException = e;
}
}
catch (SQLException ex) {
dbVals.resultException = ex;
}
return dbVals;
});

if (results.resultException != null) {
throw new RuntimeException("Couldn't get list of oncHistories ", results.resultException);
}

logger.info("Got " + oncHistory.size() + " participants oncHistories in DSM DB for " + realm);
return oncHistory;
}

public static Map<String, List<OncHistoryDetail>> getOncHistoryDetails(@NonNull String realm, String queryAddition, List<String> values) {
logger.info("Collection oncHistoryDetail information");
Map<String, List<OncHistoryDetail>> oncHistory = new HashMap<>();
HashMap<String, Tissue> tissues = new HashMap<>();
SimpleResult results = inTransaction((conn) -> {
SimpleResult dbVals = new SimpleResult();
try (PreparedStatement stmt = conn.prepareStatement(DBUtil.getFinalQuery(SQL_SELECT_ONC_HISTORY_DETAIL, queryAddition) + SQL_ORDER_BY)) {
stmt.setString(1, realm);
for (int i = 0; i < values.size(); i++) {
stmt.setString(i + 2, values.get(i));
}
try (ResultSet rs = stmt.executeQuery()) {
Map<String, OncHistoryDetail> oncHistoryMap = new HashMap<>();
while (rs.next()) {
String oncHistoryDetailId = rs.getString(DBConstants.ONC_HISTORY_DETAIL_ID);
TissueSmId tissueSmId = Tissue.getSMIds(rs);
Tissue tissue;
if (tissueSmId != null && tissues.containsKey(tissueSmId.getTissueId())) {
tissue = tissues.get(tissueSmId.getTissueId());
}
else {
oncHistory.put(ddpParticipantId, oncHistoryDataList);
oncHistoryMap = new HashMap<>();
tissue = Tissue.getTissue(rs);
}

OncHistoryDetail oncHistoryDetail = null;
if (oncHistoryMap.containsKey(oncHistoryDetailId)) {
oncHistoryDetail = oncHistoryMap.get(oncHistoryDetailId);
oncHistoryDetail.addTissue(tissue);
if (tissueSmId != null) {
tissue.setSmIdBasedOnType(tissueSmId, rs);
}
else {
oncHistoryDetail = getOncHistoryDetail(rs);
oncHistoryDetail.addTissue(tissue);
oncHistoryDataList.add(oncHistoryDetail);
tissues.put(tissue.getTissueId(), tissue);

if (!oncHistoryMap.containsKey(oncHistoryDetailId)) {
OncHistoryDetail oncHistoryDetail = getOncHistoryDetail(rs);
oncHistoryMap.put(oncHistoryDetailId, oncHistoryDetail);
}
oncHistoryMap.put(oncHistoryDetailId, oncHistoryDetail);

}
//add tissues to their onc history
for (Tissue tissue : tissues.values()) {
String tissueOncHistoryDetailId = tissue.getOncHistoryDetailId();
OncHistoryDetail oncHistoryDetail = oncHistoryMap.get(tissueOncHistoryDetailId);
oncHistoryDetail.getTissues().add(tissue);
}// add onchistories to their particiapnt
for (OncHistoryDetail oncHistoryDetail : oncHistoryMap.values()) {
//check if oncHistoryDetails is already in map
String ddpParticipantId = oncHistoryDetail.getDdpParticipantId();
List<OncHistoryDetail> oncHistoryDataList = oncHistory.getOrDefault(ddpParticipantId, new ArrayList<>());
oncHistoryDataList.add(oncHistoryDetail);
oncHistory.put(ddpParticipantId, oncHistoryDataList);
}

} catch (Exception e){
dbVals.resultException = e;
}
}
catch (SQLException ex) {
Expand Down
Loading