' + qriObj.description + ' "' +self.QM.name+ '"
';
resultString += '\n'; //BG
resultString += qriObj.description + ' "' + self.QM.name+ '"\n'; //BG
//if there was an error display it.
if((qriObj.statusName == "ERROR") || (qriObj.statusName == "UNAVAILABLE")){
errorObjects.push(qriObj.problem);
self.dispDIV.innerHTML += " -
" + qriObj.problem.summary+ "";
resultString += 'ERROR : ' + qriObj.problem.summary + '\n'; //BG
continue;
}
else if((qriObj.statusName == "PROCESSING")){
self.dispDIV.innerHTML += " -
Still Processing Request";
resultString += 'Still Processing Request : Still Processing Request\n'; //BG
continue;
}
else if(["COMPLETED","FINISHED"].indexOf(qriObj.statusName) < 0){
self.dispDIV.innerHTML += " -
Results not available";
resultString += 'Results not available : Results not available\n'; //BG
continue;
}
self.dispDIV.innerHTML += "
"
+ "Patient Count"
+ ": "
+ getObfuscatedResult(qriObj.setSize, 10)
+ "
";
resultString += 'Patient Count' + getObfuscatedResult(qriObj.setSize, 10) + '\n'; //BG
//grab breakdown data.
brdNodeList = i2b2.h.XPath(qriNode, 'descendant-or-self::breakdown_data/column');
for(brdIdx = 0; brdIdx < brdNodeList.length; brdIdx ++){
//init brd vars.
brdNode = brdNodeList[brdIdx];
brdObj = parseBreakdown(brdNode);
if(brdObj.parentResultType !== breakdownType){
breakdownType = brdObj.parentResultType;
self.dispDIV.innerHTML += "
"
+ getBreakdownTitle(brdObj.parentResultType)
+ ":
";
resultString += '\n'; //BG
resultString += getBreakdownTitle(brdObj.parentResultType) + '\n'; //BG
self.dispDIV.innerHTML += "
";
}
self.dispDIV.innerHTML += "
"
+ brdObj.name
+ ": "
+ getObfuscatedResult(brdObj.value, 10)
+ "
";
resultString += brdObj.name + getObfuscatedResult(brdObj.value, 10) + '\n'; //BG
}
}
i2b2.CRC.ctrlr.currentQueryResults = new i2b2.CRC.ctrlr.QueryResults(resultString);
$hrine.EnhancedError.createErrorDialogue(self.dispDIV, errorObjects);
i2b2.CRC.ctrlr.history.Refresh();
}
catch(err)
{
console.error(err);
}
}
/**
*
* @param qriNode
* @returns {{qiStatusName: string, qiStatusDescription: string, qiSetSize: string, qiDescription: string, qiResultName: string, qiResultDescription: string}}
*/
function parseQueryResultInstance(qriNode){
var qriObj = {
statusName: grabXmlNodeData(qriNode, 'descendant-or-self::query_status_type/name'),
statusDescription: grabXmlNodeData(qriNode, 'descendant-or-self::query_status_type/description'),
description: grabXmlNodeData(qriNode, 'descendant-or-self::description')
};
if(qriObj.statusName == "ERROR"){
qriObj.problem = $hrine.EnhancedError.parseProblem(qriNode);
return qriObj;
}
qriObj.setSize = grabXmlNodeData(qriNode, 'descendant-or-self::set_size');
qriObj.resultName = grabXmlNodeData(qriNode, 'descendant-or-self::query_result_type/name');
qriObj.resultDescription = grabXmlNodeData(qriNode, 'descendant-or-self::query_result_type/description');
return qriObj;
}
/**
*
* @param brdNode
*/
function parseBreakdown(brdNode){
var brdObj = {
name: grabXmlNodeData(brdNode, 'name'),
value: grabXmlNodeData(brdNode, 'value'),
parentResultType: grabXmlNodeData(brdNode, 'parent::breakdown_data/resultType')
}
return brdObj;
}
/**
* Return breakdown title based on breakdown type.
* @param breakdownType
* @returns {*}
*/
function getBreakdownTitle(breakdownType) {
return {
'PATIENT_AGE_COUNT_XML': 'Patient Age Count Breakdown',
'PATIENT_GENDER_COUNT_XML': 'Patient Gender Count Breakdown',
'PATIENT_RACE_COUNT_XML': 'Patient Race Count Breakdown',
'PATIENT_VITALSTATUS_COUNT_XML':'Patient Vital Status Count Breakdown'
}[breakdownType];
};
/**
* Method for hiding the precise value of a query below a certain result.
* @param resultCount - the number of results from a query.
* @param obfuscationSetting - do not reveal this number of results
*/
function getObfuscatedResult(resultCount, obfuscationSetting) {
var resultTitle = " - ",
name = " patients",
- offsetText = " +-3",
+ offsetText = " +-10", // todo fix with SHRINE-1716
isException = i2b2.PM.model.isObfuscated === false;
//default to 10.
obfuscationSetting = (arguments.length > 1) ? arguments[1] : 10;
//if user role is an exception. return result.
if (isException) {
return resultTitle += resultCount + name;
}
resultTitle += ((resultCount >= obfuscationSetting)?
resultCount + offsetText + name: obfuscationSetting + name + " or fewer");
return resultTitle;
}
/**
* Grab data for node, return empty string if none.
* @param node
* @param xPathString
* @returns {string}
*/
function grabXmlNodeData(node, xPathString){
var nodeVal = i2b2.h.XPath(node, xPathString);
return (nodeVal.length)? nodeVal[0].firstChild.nodeValue : '';
}
// switch to status tab
i2b2.CRC.view.status.showDisplay();
// timer and display refresh stuff
private_startTime = new Date();
private_refreshInterrupt = setInterval("i2b2.CRC.ctrlr.currentQueryStatus.refreshStatus()", 100);
// AJAX call
i2b2.CRC.ajax.runQueryInstance_fromQueryDefinition("CRC:QueryTool", this.params, this.callbackQueryDef);
}
return {
name: "",
polling_interval: 1000,
QM: {id:false, status:""},
QI: {id:false, status:""},
QRS:{},
displayDIV: false,
running: false,
started: false,
startQuery: function(queryName, ajaxParams) {
this.name = queryName;
this.params = ajaxParams;
private_startQuery.call(this);
},
cancelQuery: function() {
private_cancelQuery();
},
isQueryRunning: function() {
return private_singleton_isRunning;
},
refreshStatus: function() {
private_refresh_status();
}
};
}();
i2b2.CRC.ctrlr.currentQueryStatus = false;