static CONDITION deleteSCImageRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid) { CONDITION cond; TBL_CRITERIA criteria[2]; if (criteriaType == FIS_K_STUDYCOMPONENT) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuComUID", uid, TBL_STRING, TBL_EQUAL); } else if (criteriaType == FIS_K_SCSERIES) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "SerInsUID", uid, TBL_STRING, TBL_EQUAL); } else if (criteriaType == FIS_K_SCIMAGE) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "SOPInsUID", uid, TBL_STRING, TBL_EQUAL); } else return COND_PushCondition(FIS_COND(FIS_ILLEGALDELETECRITERIA), "study", "(FIS)deleteSCImageRecord"); criteria[1].FieldName = NULL; cond = TBL_Delete(&h->studyComponentImageHandle, criteria); if (cond != TBL_NORMAL) return COND_PushCondition(FIS_COND(FIS_DELETEFAILED), "(FIS)deleteSCImageRecord"); return FIS_NORMAL; }
CONDITION FIS_SelectOne(FIS_HANDLE ** handle, FIS_DATA_TYPE type, FIS_CRITERIA_TYPE criteriaType, const char *criteriaString, long listFlag, void *r) { CONDITION cond = FIS_NORMAL; PRIVATE_HANDLE *h; long count = 0; h = *(PRIVATE_HANDLE **) handle; switch (type) { case FIS_K_PATIENT: cond = 0; break; case FIS_K_VISIT: cond = 0; break; case FIS_K_STUDY: cond = selectStudyRecord(h, criteriaType, criteriaString, listFlag, NULL, (FIS_STUDYRECORD *) r, &count); break; case FIS_K_STUDYCOMPONENT: cond = 0; break; case FIS_K_SCSERIES: cond = 0; break; case FIS_K_SCIMAGE: cond = 0; break; case FIS_K_RESULTS: cond = 0; break; case FIS_K_INTERPRETATION: cond = 0; break; case FIS_K_COMMITSOPREF: cond = 0; break; case FIS_K_STORAGECOMMITREQ: cond = 0; break; } if (cond != FIS_NORMAL) return COND_PushCondition(FIS_COND(FIS_GETFAILED), "FIS_SelectOne"); if (count != 1) return COND_PushCondition(FIS_COND(FIS_SINGLEGETFAILED), criteriaString, "FIS_SelectOne"); return cond; }
static CONDITION deleteInterpretationRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid) { CONDITION cond; TBL_CRITERIA criteria[2]; if (criteriaType == FIS_K_RESULTS) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "ResUID", uid, TBL_STRING, TBL_EQUAL); } else if (criteriaType == FIS_K_INTERPRETATION) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "IntUID", uid, TBL_STRING, TBL_EQUAL); } else return COND_PushCondition(FIS_COND(FIS_ILLEGALDELETECRITERIA), "interpretation", "(FIS)deleteInterpretationRecord"); criteria[1].FieldName = NULL; cond = TBL_Delete(&h->interpretationHandle, criteria); if (cond != TBL_NORMAL) return FIS_DELETEFAILED; return FIS_NORMAL; }
CONDITION FIS_Delete(FIS_HANDLE ** handle, FIS_DATA_TYPE type, FIS_DATA_TYPE criteriaType, char *uid) { CONDITION cond = FIS_NORMAL; PRIVATE_HANDLE * h; if (uid == NULL) return COND_PushCondition(FIS_COND(FIS_NULLSTRING), "UID", "FIS_Delete"); if (uid[0] == '\0') return COND_PushCondition(FIS_COND(FIS_NULLSTRING), "UID", "FIS_Delete"); h = *(PRIVATE_HANDLE **) handle; switch (type) { case FIS_K_PATIENT: cond = deletePatientRecord(h, criteriaType, uid); break; case FIS_K_VISIT: break; case FIS_K_STUDY: cond = deleteStudyRecord(h, criteriaType, uid); break; case FIS_K_STUDYCOMPONENT: cond = deleteStudyComponentRecord(h, criteriaType, uid); break; case FIS_K_SCSERIES: cond = deleteSCSeriesRecord(h, criteriaType, uid); break; case FIS_K_SCIMAGE: cond = deleteSCImageRecord(h, criteriaType, uid); break; case FIS_K_RESULTS: cond = deleteResultsRecord(h, criteriaType, uid); break; case FIS_K_INTERPRETATION: cond = deleteInterpretationRecord(h, criteriaType, uid); break; } if (cond != FIS_NORMAL) return COND_PushCondition(FIS_COND(FIS_DELETEFAILED), "FIS_Get"); else return FIS_NORMAL; }
CONDITION FIS_Get(FIS_HANDLE ** handle, FIS_DATA_TYPE type, FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList) { CONDITION cond = FIS_NORMAL; PRIVATE_HANDLE * h; h = *(PRIVATE_HANDLE **) handle; FIS_ClearList(getList); switch (type) { case FIS_K_PATIENT: cond = getPatientRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_VISIT: cond = getVisitRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_STUDY: cond = getStudyRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_STUDYCOMPONENT: cond = getStudyComponentRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_SCSERIES: cond = getSCSeriesRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_SCIMAGE: cond = getSCImageRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_RESULTS: cond = getResultsRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_INTERPRETATION: cond = getInterpretationRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_STORAGECOMMITREQ: cond = getStorageCommitReq(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; case FIS_K_COMMITSOPREF: cond = getCommitSOPRecord(h, criteriaType, uid, listFlag, getList, NULL, NULL); break; } if (cond != FIS_NORMAL) return COND_PushCondition(FIS_COND(FIS_GETFAILED), "FIS_Get"); return cond; }
static CONDITION deletePatientRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid) { CONDITION cond; TBL_CRITERIA criteria[2]; if (criteriaType == FIS_K_PATIENT) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "PatUID", uid, TBL_STRING, TBL_EQUAL); } else return COND_PushCondition(FIS_COND(FIS_ILLEGALDELETECRITERIA), "patient", "(FIS)deletePatientRecord"); criteria[1].FieldName = NULL; cond = TBL_Delete(&h->patientHandle, criteria); if (cond != TBL_NORMAL) return COND_PushCondition(FIS_COND(FIS_PATIENTDELETEFAILED), "(FIS)deletePatientRecord"); return FIS_NORMAL; }
static CONDITION getSCImageRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList, FIS_SCIMAGERECORD * r, long *count) { CONDITION cond; TBL_CRITERIA criteria[2]; FIS_SCIMAGERECORD *p; static TBL_FIELD fields[] = { {TBL_FIELD_STRING("SOPInsUID", scImage.SOPInsUID)}, {TBL_FIELD_STRING("SerInsUID", scImage.SerInsUID)}, {TBL_FIELD_STRING("StuComUID", scImage.StuComUID)}, {TBL_FIELD_STRING("SOPClaUID", scImage.SOPClaUID)}, {TBL_FIELD_STRING("RetAETit", scImage.RetAETit)}, {TBL_FIELD_STRING("StoMedFilSetID", scImage.StoMedFilSetID)}, {TBL_FIELD_STRING("StoMedFilSetUID", scImage.StoMedFilSetUID)}, {NULL}, }; criteria[0].FieldName = criteria[1].FieldName = NULL; if (uid != NULL) { if (uid[0] != '\0') { if (criteriaType == FIS_K_SCSERIES) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "SerInsUID", uid, TBL_STRING, TBL_EQUAL); } else if (criteriaType == FIS_K_STUDYCOMPONENT) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuComUID", uid, TBL_STRING, TBL_EQUAL); } else { TBL_CRITERIA_LOAD_BYTE(criteria[0], "SOPInsUID", uid, TBL_STRING, TBL_EQUAL); } } } (void) memset(&scImage, 0, sizeof(scImage)); scImage.Type = FIS_K_SCIMAGE; cond = TBL_Select(&h->studyComponentImageHandle, criteria, fields, count, scImageCallback, getList); if (cond != TBL_NORMAL) return COND_PushCondition(FIS_COND(FIS_STUDYGETFAILED), "(FIS)getSCImageRecord"); if (r != NULL) *r = scImage; return FIS_NORMAL; }
CONDITION FIS_DeleteWorkQueueRecord(FIS_HANDLE ** handle, char *taskID) { CONDITION cond; TBL_CRITERIA criteria[2]; PRIVATE_HANDLE *h; h = *(PRIVATE_HANDLE **) handle; TBL_CRITERIA_LOAD_BYTE(criteria[0], "TasID", taskID, TBL_STRING, TBL_EQUAL); criteria[1].FieldName = NULL; cond = TBL_Delete(&h->workQueueHandle, criteria); if (cond != TBL_NORMAL) return COND_PushCondition(FIS_COND(FIS_WORKQUEUERECORDDELETEFAILED), "FIS_DeleteWorkQueueRecord"); return FIS_NORMAL; }
static CONDITION getSCSeriesRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList, FIS_SCSERIESRECORD * r, long *count) { CONDITION cond; TBL_CRITERIA criteria[2]; FIS_SCSERIESRECORD *p; static TBL_FIELD fields[] = { {TBL_FIELD_STRING("SerInsUID", scSeries.SerInsUID)}, {TBL_FIELD_STRING("StuComUID", scSeries.StuComUID)}, {TBL_FIELD_STRING("SerDat", scSeries.SerDat)}, {TBL_FIELD_STRING("SerTim", scSeries.SerTim)}, {TBL_FIELD_STRING("RetAETit", scSeries.RetAETit)}, {TBL_FIELD_STRING("StoMedFilSetID", scSeries.StoMedFilSetID)}, {TBL_FIELD_STRING("StoMedFilSetUID", scSeries.StoMedFilSetUID)}, {NULL}, }; criteria[0].FieldName = criteria[1].FieldName = NULL; if (uid != NULL) { if (uid[0] != '\0') { if (criteriaType == FIS_K_STUDYCOMPONENT) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuComUID", uid, TBL_STRING, TBL_EQUAL); } else { TBL_CRITERIA_LOAD_BYTE(criteria[0], "SerInsUID", uid, TBL_STRING, TBL_EQUAL); } } } (void) memset(&scSeries, 0, sizeof(scSeries)); scSeries.Type = FIS_K_SCSERIES; cond = TBL_Select(&h->studyComponentSeriesHandle, criteria, fields, count, scSeriesCallback, getList); if (cond != TBL_NORMAL) return COND_PushCondition(FIS_COND(FIS_STUDYGETFAILED), "(FIS)getSCSeriesRecord"); if (r != NULL) *r = scSeries; if (listFlag & FIS_K_SCSERIES_IMAGELIST) { if (getList != NULL) { p = LST_Head(&getList); (void) LST_Position(&getList, p); } else p = r; while (p != NULL) { p->ImageList = LST_Create(); cond = getSCImageRecord(h, FIS_K_SCSERIES, p->SerInsUID, 0, p->ImageList, NULL, NULL); if (cond != FIS_NORMAL) return cond; if (getList != NULL) p = LST_Next(&getList); else p = NULL; } } return FIS_NORMAL; }
static CONDITION getStudyComponentRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList, FIS_STUDYCOMPONENTRECORD * r, long *count) { CONDITION cond; TBL_CRITERIA criteria[2]; FIS_STUDYCOMPONENTRECORD *p; static TBL_FIELD fields[] = { {TBL_FIELD_STRING("StuComUID", studyComponent.StuComUID)}, {TBL_FIELD_STRING("StuInsUID", studyComponent.StuInsUID)}, {TBL_FIELD_STRING("Mod", studyComponent.Mod)}, {TBL_FIELD_STRING("StuDes", studyComponent.StuDes)}, {TBL_FIELD_STRING("ProCodVal", studyComponent.ProCodVal)}, {TBL_FIELD_STRING("ProCodSchDes", studyComponent.ProCodSchDes)}, {TBL_FIELD_STRING("ProCodMea", studyComponent.ProCodMea)}, {TBL_FIELD_STRING("StuComStaID", studyComponent.StuComStaID)}, {TBL_FIELD_STRING("StuID", studyComponent.StuID)}, {NULL}, }; criteria[0].FieldName = criteria[1].FieldName = NULL; if (uid != NULL) { if (uid[0] != '\0') { if (criteriaType == FIS_K_STUDY) { TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuInsUID", uid, TBL_STRING, TBL_EQUAL); } else { TBL_CRITERIA_LOAD_BYTE(criteria[0], "StuComUID", uid, TBL_STRING, TBL_EQUAL); } } } (void) memset(&studyComponent, 0, sizeof(studyComponent)); studyComponent.Type = FIS_K_STUDYCOMPONENT; cond = TBL_Select(&h->studyComponentHandle, criteria, fields, count, studyComponentCallback, getList); if (cond != TBL_NORMAL) return COND_PushCondition(FIS_COND(FIS_STUDYGETFAILED), "(FIS)getStudyRecord"); if (r != NULL) *r = studyComponent; if (listFlag & FIS_K_STUDYCOMP_SERIESLIST) { if (getList != NULL) { p = LST_Head(&getList); (void) LST_Position(&getList, p); } else p = r; while (p != NULL) { p->SeriesList = LST_Create(); p->Flag |= FIS_K_STUDYCOMP_SERIESLIST; cond = getSCSeriesRecord(h, FIS_K_STUDYCOMPONENT, p->StuComUID, FIS_K_SCSERIES_IMAGELIST, p->SeriesList, NULL, NULL); if (cond != FIS_NORMAL) return cond; if (getList != NULL) p = LST_Next(&getList); else p = NULL; } } return FIS_NORMAL; }
static CONDITION selectStudyRecord(PRIVATE_HANDLE * h, FIS_CRITERIA_TYPE criteriaType, const char *criteriaString, long listFlag, LST_HEAD * getList, FIS_STUDYRECORD * r, long *count) { CONDITION cond = FIS_NORMAL; TBL_CRITERIA criteria[2]; char localString[1024]; FIS_STUDYRECORD *p; static TBL_FIELD fields[] = { {TBL_FIELD_STRING("PatUID", study.PatUID)}, {TBL_FIELD_STRING("StuInsUID", study.StuInsUID)}, {TBL_FIELD_STRING("VisUID", study.VisUID)}, {TBL_FIELD_STRING("AccNum", study.AccNum)}, {TBL_FIELD_STRING("StuID", study.StuID)}, {"SchStuStaDat", TBL_SIGNED4, sizeof(studyDate), sizeof(studyDate), 0, (void *) &studyDate}, {"SchStuStaTim", TBL_FLOAT4, sizeof(studyTime), sizeof(studyTime), 0, (void *) &studyTime}, {TBL_FIELD_STRING("SchStuLoc", study.SchStuLoc)}, {TBL_FIELD_STRING("ProDes", study.ProDes)}, {TBL_FIELD_STRING("StuStaID", study.StuStaID)}, {NULL}, }; criteria[0].FieldName = criteria[1].FieldName = NULL; strcpy(localString, criteriaString); switch (criteriaType) { case FIS_K_ACCESSION: TBL_CRITERIA_LOAD_BYTE(criteria[0], "AccNum", localString, TBL_STRING, TBL_EQUAL); break; default: cond = 0; /* Repair */ } if (cond != FIS_NORMAL) return cond; (void) memset(&study, 0, sizeof(study)); study.Type = FIS_K_STUDY; cond = TBL_Select(&h->studyHandle, criteria, fields, count, studyCallback, getList); if (cond != TBL_NORMAL) return COND_PushCondition(FIS_COND(FIS_STUDYGETFAILED), "(FIS)getStudyRecord"); if (r != NULL) *r = study; if (listFlag & FIS_K_STU_STUDYCOMPONENTLIST) { if (getList != NULL) { p = LST_Head(&getList); (void) LST_Position(&getList, p); } else p = r; while (p != NULL) { p->StudyComponentList = LST_Create(); p->Flag |= FIS_K_STU_STUDYCOMPONENTLIST; cond = getStudyComponentRecord(h, FIS_K_STUDY, p->StuInsUID, 0, p->StudyComponentList, NULL, NULL); if (cond != FIS_NORMAL) return cond; if (getList != NULL) p = LST_Next(&getList); else p = NULL; } } if (listFlag & FIS_K_STU_RESULTSLIST) { if (getList != NULL) { p = LST_Head(&getList); (void) LST_Position(&getList, p); } else p = r; while (p != NULL) { p->ResultsList = LST_Create(); p->Flag |= FIS_K_STU_RESULTSLIST; cond = getResultsRecord(h, FIS_K_STUDY, p->StuInsUID, 0, p->ResultsList, NULL, NULL); if (cond != FIS_NORMAL) return cond; if (getList != NULL) p = LST_Next(&getList); else p = NULL; } } return FIS_NORMAL; }
CONDITION FIS_GetOne(FIS_HANDLE ** handle, FIS_DATA_TYPE type, FIS_DATA_TYPE criteriaType, const char *uid, long listFlag, void *r) { CONDITION cond = FIS_NORMAL; PRIVATE_HANDLE *h; long count = 0; char localUID[DICOM_UI_LENGTH + 1]; char *uidPtr = NULL; h = *(PRIVATE_HANDLE **) handle; if (uid != NULL) { strcpy(localUID, uid); uidPtr = localUID; } switch (type) { case FIS_K_PATIENT: cond = getPatientRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_PATIENTRECORD *) r, &count); break; case FIS_K_VISIT: cond = getVisitRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_VISITRECORD *) r, &count); break; case FIS_K_STUDY: cond = getStudyRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_STUDYRECORD *) r, &count); break; case FIS_K_STUDYCOMPONENT: cond = getStudyComponentRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_STUDYCOMPONENTRECORD *) r, &count); break; case FIS_K_SCSERIES: cond = getSCSeriesRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_SCSERIESRECORD *) r, &count); break; case FIS_K_SCIMAGE: cond = getSCImageRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_SCIMAGERECORD *) r, &count); break; case FIS_K_RESULTS: cond = getResultsRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_RESULTSRECORD *) r, &count); break; case FIS_K_INTERPRETATION: cond = getInterpretationRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_INTERPRETATIONRECORD *) r, &count); break; case FIS_K_COMMITSOPREF: cond = getCommitSOPRecord(h, criteriaType, uidPtr, listFlag, NULL, (FIS_COMMITSOPREFRECORD *) r, &count); break; case FIS_K_STORAGECOMMITREQ: cond = getStorageCommitReq(h, criteriaType, uidPtr, listFlag, NULL, (FIS_STORAGECOMMITREQRECORD *) r, &count); break; } if (cond != FIS_NORMAL) return COND_PushCondition(FIS_COND(FIS_GETFAILED), "FIS_GetOne"); if (count != 1) return COND_PushCondition(FIS_COND(FIS_SINGLEGETFAILED), localUID, "FIS_GetOne"); return cond; }
static CONDITION getPatientRecord(PRIVATE_HANDLE * h, FIS_DATA_TYPE criteriaType, char *uid, long listFlag, LST_HEAD * getList, FIS_PATIENTRECORD * r, long *count) { CONDITION cond; TBL_CRITERIA criteria[2]; FIS_PATIENTRECORD * p; static TBL_FIELD fields[] = { {"PatID", TBL_STRING, sizeof(patient.PatID), sizeof(patient.PatID), 0, (void *) &patient.PatID[0]}, {"PatUID", TBL_STRING, sizeof(patient.PatUID), sizeof(patient.PatUID), 0, (void *) &patient.PatUID[0]}, {"PatNam", TBL_STRING, sizeof(patient.PatNam), sizeof(patient.PatNam), 0, (void *) &patient.PatNam[0]}, {"PatSex", TBL_STRING, sizeof(patient.PatSex), sizeof(patient.PatSex), 0, (void *) &patient.PatSex[0]}, {"PatBirDat", TBL_SIGNED4, sizeof(patientBD), sizeof(patientBD), 0, (void *) &patientBD}, {NULL}, }; criteria[0].FieldName = criteria[1].FieldName = NULL; if (uid != NULL) { if (uid[0] != '\0') { TBL_CRITERIA_LOAD_BYTE(criteria[0], "PatUID", uid, TBL_STRING, TBL_EQUAL); } } memset(&patient, 0, sizeof(patient)); patient.Type = FIS_K_PATIENT; cond = TBL_Select(&h->patientHandle, criteria, fields, count, patientCallback, getList); if (cond != TBL_NORMAL) return COND_PushCondition(FIS_COND(FIS_PATIENTGETFAILED), "(FIS)getPatientRecord"); if (r != NULL) *r = patient; if (listFlag & FIS_K_PAT_STUDYLIST) { if (getList != NULL) { p = LST_Head(&getList); (void) LST_Position(&getList, p); } else p = r; while (p != NULL) { p->StudyList = LST_Create(); p->Flag |= FIS_K_PAT_STUDYLIST; cond = getStudyRecord(h, FIS_K_PATIENT, p->PatUID, 0, p->StudyList, NULL, NULL); if (cond != FIS_NORMAL) return cond; if (getList != NULL) p = LST_Next(&getList); else p = NULL; } } /* if (listFlag & FIS_K_PAT_VISITLIST) { if (getList != NULL) { p = LST_Head(&getList); (void) LST_Position(&getList, p); } else p = r; while (p != NULL) { p->VisitList = LST_Create(); p->Flag |= FIS_K_PAT_VISITLIST; cond = getVisitRecord(h, FIS_K_PATIENT, p->PatUID, 0, p->VisitList, NULL, NULL); if (cond != FIS_NORMAL) return cond; if (getList != NULL) p = LST_Next(&getList); else p = NULL; } } */ return FIS_NORMAL; }