Пример #1
0
CONDITION
IAP_QueryToObject(Query * query, DCM_OBJECT ** object, char *SOPClass, int *elementCount)
{
    CONDITION					cond, returnCondition;
    int	        				index;
    long       					flag;
    static char    				queryLevelString[48] = "";	/* Initialize for AIX compiler bug */
    DCM_ELEMENT					queryLevelElement = {DCM_IDQUERYLEVEL, DCM_CS, "", 1, sizeof(queryLevelString), (void *) &queryLevelString[0]};
    static DCM_FLAGGED_ELEMENT 	localList[] = {
										{DCM_IDSOPINSTANCEUID, DCM_UI, "", 1, sizeof(q.Image.ImageUID), (void *) &q.Image.ImageUID[0], DB_K_QIMAGEUID, &q.Image.Query_Flag},
								};

    q = *query;
    *elementCount = 0;

    if (*object == NULL) {
    	cond = DCM_CreateObject(object, 0);
    	if (cond != DCM_NORMAL)	return COND_PushCondition(IAP_OBJECTCREATEFAILED, IAP_Message(IAP_OBJECTCREATEFAILED), "IAP_QueryToObject");
    }

    returnCondition = IAP_NORMAL;
    flag = q.QueryState & (DB_K_LEVELPAT | DB_K_LEVELSTUDY | DB_K_LEVELSERIES | DB_K_LEVELIMAGE);
    if (flag == 0){
    	returnCondition = COND_PushCondition(IAP_INCOMPLETEQUERY, "IAP_QueryToObject");
    }else{
    	for (index = 0; index < DIM_OF(levelMap); index++) {
    		if ((q.QueryState & levelMap[index].flag) != 0) {
    			(void) strcpy(queryLevelString, levelMap[index].queryLevel);
    			queryLevelElement.length = strlen(queryLevelElement.d.string);
    			cond = DCM_ModifyElements(object, &queryLevelElement, 1, NULL, 0, NULL);
    			if (cond != DCM_NORMAL) return cond;
    		}
    	}
    }


    flag = q.QueryState &
	(DB_K_CLASSPAT | DB_K_CLASSSTUDY | DB_K_CLASSPATSTUDY);
    if (flag == 0){
    	returnCondition = COND_PushCondition(IAP_INCOMPLETEQUERY, "");
    }else{
    	for (index = 0; index < DIM_OF(classMap); index++) {
    		if ((q.QueryState & classMap[index].flag) != 0) {
    			(void) strcpy(SOPClass, classMap[index].SOPClass);
    			cond = DCM_NORMAL;
    		}
    	}
    }

    cond = DCM_ModifyElements(object, NULL, 0, list, (int) DIM_OF(list), elementCount);
    if (cond != DCM_NORMAL)	return COND_PushCondition(IAP_OBJECTACCESSFAILED, IAP_Message(IAP_OBJECTACCESSFAILED), "IAP_QueryToObject");

    cond = DCM_ModifyElements(object, NULL, 0, localList, (int) DIM_OF(localList), elementCount);
    if (cond != DCM_NORMAL)	return COND_PushCondition(IAP_OBJECTACCESSFAILED, IAP_Message(IAP_OBJECTACCESSFAILED), "IAP_QueryToObject");

    return returnCondition;
}
Пример #2
0
static void  addString(DCM_OBJECT* obj, DCM_TAG tag, char* s)
{
  DCM_ELEMENT e;
  CONDITION cond;

  if (s == 0)
    return;

  memset(&e, 0, sizeof(e));
  e.tag = tag;

  cond = DCM_LookupElement(&e);
  if (cond != DCM_NORMAL) {
    COND_DumpConditions();
    exit(1);
  }

  e.d.string = s;
  e.length = strlen(s);
  cond = DCM_ModifyElements(&obj, &e, 1, 0, 0, 0);
  if (cond != DCM_NORMAL) {
    COND_DumpConditions();
    exit(1);
  }
}
Пример #3
0
CONDITION
HAP_BuildInterp(DCM_OBJECT ** object,
		HIS_InterpretationLevel * xl, HAP_INTERP_EVENT event)
{

    CONDITION
	cond;
    int
        index,
        x;
    CTNBOOLEAN
	eventFound = FALSE;

    p = *xl;

    if (event != 0) {
	for (index = 0; index < (int) DIM_OF(array) && !eventFound; index++) {
	    if (event == array[index].event) {
		eventFound = TRUE;
		if ((event & HAP_X_VARIABLE_EVENT) != 0) {
		    if ((p.Update_Flag & array[index].required_event_attrib) !=
			array[index].required_event_attrib)
			return HAP_INCOMPLETEEVENT;
		} else {
		    if (p.Update_Flag != array[index].required_event_attrib)
			return HAP_INCOMPLETEEVENT;
		}
	    }
	}

	if (!eventFound)
	    return HAP_ILLEGALEVENT;
    }
    cond = DCM_ModifyElements(object, NULL, 0, list, (int) DIM_OF(list),
			      NULL);
    if (cond != DCM_NORMAL)
	return HAP_ILLEGALOBJECT;

    if (p.Update_Flag & HIS_K_INTRRSEQUENCE) {
	x = i_buildSequence(object, SQ_K_REFRESULTSSOPINSTANCEUID);
	if (x < 0)
	    return 0;		/* needs repair */
    }
    if (p.Update_Flag & HIS_K_INTIAPPSEQUENCE) {
	x = i_buildSequence(object, SQ_K_REQINTERPRETATIONAPPROVER);
	if (x < 0)
	    return 0;		/* needs repair */
    }
    if (p.Update_Flag & HIS_K_INTIDCSEQUENCE) {
	x = i_buildSequence(object, SQ_K_REQDIAGNOSISCODE);
	if (x < 0)
	    return 0;		/* needs repair */
    }
    return HAP_NORMAL;
}
Пример #4
0
CONDITION
DCM_SetFileMeta(DCM_OBJECT ** callerObject, DCM_FILE_META * fileMeta)
{
    CONDITION 		cond;

    meta = *fileMeta;
    cond = DCM_ModifyElements(callerObject, metaRequired, (int) DIM_OF(metaRequired), metaOptional, (int) DIM_OF(metaOptional), NULL);
    if (cond != DCM_NORMAL)	return cond;		/* repair */

    return DCM_NORMAL;
}
Пример #5
0
CONDITION
HAP_BuildResults(DCM_OBJECT ** object,
		 HIS_ResultsLevel * xl, HAP_RESULTS_EVENT event)
{

    CONDITION
	cond;
    int
        index,
        x;
    CTNBOOLEAN
	eventFound = FALSE;

    p = *xl;

    if (event != 0) {
	for (index = 0; index < (int) DIM_OF(array) && !eventFound; index++) {
	    if (event == array[index].event) {
		eventFound = TRUE;
		if ((event & HAP_X_VARIABLE_EVENT) != 0) {
		    if ((p.Update_Flag & array[index].required_event_attrib) !=
			array[index].required_event_attrib)
			return HAP_INCOMPLETEEVENT;
		} else {
		    if (p.Update_Flag != array[index].required_event_attrib)
			return HAP_INCOMPLETEEVENT;
		}
	    }
	}

	if (!eventFound)
	    return HAP_ILLEGALEVENT;
    }
    cond = DCM_ModifyElements(object, NULL, 0, list, (int) DIM_OF(list),
			      NULL);
    if (cond != DCM_NORMAL)
	return HAP_ILLEGALOBJECT;

    if (p.Update_Flag & HIS_K_RESRISEQUENCE) {
	x = r_buildSequence(object, SQ_K_REFINTERPRETATIONSOPINSTANCEUID);
	if (x < 0)
	    return 0;
    }
    if (p.Update_Flag & HIS_K_RESRSSEQUENCE) {
	x = r_buildSequence(object, SQ_K_REFSTUDYSOPINSTANCEUID);
	if (x < 0)
	    return 0;
    }
    return HAP_NORMAL;
}
Пример #6
0
CONDITION
MSGPRV_BuildObject(DCM_OBJECT ** object, DCM_ELEMENT * required, int requiredCount, DCM_FLAGGED_ELEMENT * conditional, int conditionalCount)
{
    int	        	index;
    CONDITION		cond;
    DCM_ELEMENT		e;

    cond = DCM_CreateObject(object);
    if (cond != DCM_NORMAL)	return COND_PushCondition(0, "");	/* repair */

    cond = DCM_ModifyElements(object, required, requiredCount, conditional, conditionalCount, NULL);
    if (cond != DCM_NORMAL)	return COND_PushCondition(0, "");	/* repair */

    return MSG_NORMAL;
}
Пример #7
0
CONDITION
HAP_BuildVisit(DCM_OBJECT ** object,
	       HIS_VisitLevel * xl, HAP_VISIT_EVENT event)
{

    int index,
        x;

    CONDITION
	cond;

    CTNBOOLEAN
	eventFound = FALSE;

    static unsigned long his_flags[] =
    {HIS_K_VISRPSEQUENCE, HIS_K_VISRSSEQUENCE,
    HIS_K_VISADCSEQUENCE, HIS_K_VISDDCSEQUENCE};
    static SQ_TYPE types[] =
    {SQ_K_REFPATIENTSOPINSTANCEUID, SQ_K_REFSTUDYSOPINSTANCEUID,
    SQ_K_ADMITDIAGNOSISCODE, SQ_K_DISCHARGEDIAGNOSISCODE};

    p = *xl;

    if (event != 0) {
	for (index = 0; index < (int) DIM_OF(array) && !eventFound; index++) {
	    if (event == array[index].event) {
		eventFound = TRUE;
		if ((event & HAP_X_VARIABLE_EVENT) != 0) {
		    if ((p.Update_Flag & array[index].required_event_attrib) !=
			array[index].required_event_attrib)
			return HAP_INCOMPLETEEVENT;
		} else {
		    if (p.Update_Flag != array[index].required_event_attrib)
			return HAP_INCOMPLETEEVENT;
		}
	    }
	}

	if (!eventFound)
	    return HAP_ILLEGALEVENT;
    }
    cond = DCM_ModifyElements(object, NULL, 0, list, (int) DIM_OF(list),
			      NULL);
    if (cond != DCM_NORMAL)
	return HAP_ILLEGALOBJECT;

    for (index = 0; index < (int) DIM_OF(his_flags); index++)
	if (p.Update_Flag & his_flags[index]) {
	    x = v_buildSequence(object, types[index]);
	    if (x < 0)
		return 0;	/* needs repair */
	}
/*
    if (p.Update_Flag & HIS_K_VISRPSEQUENCE) {
	x = v_buildSequence(object, SQ_K_REFPATIENTSOPINSTANCEUID);
	if (x < 0)
	    return 0;
    }
    if (p.Update_Flag & HIS_K_VISRSSEQUENCE) {
	x = v_buildSequence(object, SQ_K_REFSTUDYSOPINSTANCEUID);
	if (x < 0)
	    return 0;
    }
*/
    return HAP_NORMAL;
}
Пример #8
0
CONDITION
HAP_QueryToObject(Query * query, DCM_OBJECT ** object, char *SOPClass,
		  int *elementCount)
{
    CONDITION
	cond,
	returnCondition;
    int
        index;
    DCM_ELEMENT
	e;
    long
        flag;
    static char
        queryLevelString[48];
    DCM_ELEMENT
	queryLevelElement =
    {
	DCM_IDQUERYLEVEL, DCM_CS, "", 1,
	    sizeof(queryLevelString), (void *) queryLevelString
    };

    q = *query;
    *elementCount = 0;

    if (*object == NULL) {
	cond = DCM_CreateObject(object);
	if (cond != DCM_NORMAL)
	    return HAP_OBJECTCREATEFAILED;
    }
    returnCondition = HAP_NORMAL;
    flag = q.QueryState &
	(DB_K_LEVELPAT | DB_K_LEVELSTUDY | DB_K_LEVELSERIES | DB_K_LEVELIMAGE);
    if (flag == 0)
	returnCondition = COND_PushCondition(HAP_INCOMPLETEQUERY, "");
    else {
	for (index = 0; index < DIM_OF(levelMap); index++) {
	    if ((q.QueryState & levelMap[index].flag) != 0) {
		(void) strcpy(queryLevelString, levelMap[index].queryLevel);
		queryLevelElement.length = strlen(queryLevelElement.d.string);
		cond = DCM_ModifyElements(object, &queryLevelElement,
					  1, NULL, 0, NULL);
		if (cond != DCM_NORMAL)
		    return cond;
	    }
	}
    }


    flag = q.QueryState &
	(DB_K_CLASSPAT | DB_K_CLASSSTUDY | DB_K_CLASSPATSTUDY);
    if (flag == 0)
	returnCondition = COND_PushCondition(HAP_INCOMPLETEQUERY, "");
    else {
	for (index = 0; index < DIM_OF(classMap); index++) {
	    if ((q.QueryState & classMap[index].flag) != 0) {
		(void) strcpy(SOPClass, classMap[index].SOPClass);
		cond = DCM_NORMAL;
	    }
	}
    }

    for (index = 0; index < (int) DIM_OF(list); index++) {
	flag = *list[index].flagAddress;
	if ((flag & list[index].flag) != 0) {
	    e = list[index].e;
	    e.length = strlen(e.d.string);
	    cond = DCM_AddElement(object, &e);
	    if (cond != DCM_NORMAL)
		return cond;
	    (*elementCount)++;
	}
    }
    return returnCondition;
}