115 lines
3.6 KiB
JavaScript
Executable File
115 lines
3.6 KiB
JavaScript
Executable File
|
|
OrthancRemote.prototype.findStudies = function(modality, params) {
|
|
return this.query(modality, 'Study', params);
|
|
}
|
|
|
|
OrthancRemote.prototype.findSeries = function(modality, studyId, params) {
|
|
params = Object.assign({StudyInstanceUID : studyId || ''}, params);
|
|
|
|
return this.query(modality, 'Series', params);
|
|
}
|
|
|
|
OrthancRemote.prototype.findInstances = function(modality, studyId, seriesId, params) {
|
|
params = Object.assign({StudyInstanceUID : studyId || '', SeriesInstanceUID : seriesId || ''}, params);
|
|
|
|
return this.query(modality, 'Instance', params);
|
|
}
|
|
|
|
OrthancRemote.prototype.query = function(modality, level, params) {
|
|
var url = this.root + '/modalities/' + modality + '/query',
|
|
postData = {Level : level, Query : params || {}};
|
|
|
|
var result = HTTP.call('POST', url, {content : JSON.stringify(postData)});
|
|
return this.getAnswersFromQuery(result.data['ID']);
|
|
}
|
|
|
|
OrthancRemote.prototype.getAnswersFromQuery = function(id) {
|
|
var url = this.root + '/queries/' + id + '/answers',
|
|
result = HTTP.call('GET', url);
|
|
|
|
var resultCount = result.data.length, answers = [], i = 0;
|
|
while (i < resultCount) {
|
|
var contentUrl = this.root + '/queries/' + id + '/answers/' + result.data[i] + '/content';
|
|
//fetch the result
|
|
var contentResult = HTTP.call('GET', contentUrl);
|
|
answers.push(contentResult.data);
|
|
i++;
|
|
}
|
|
return {
|
|
query : id,
|
|
length : resultCount,
|
|
results : answers
|
|
};
|
|
}
|
|
|
|
OrthancRemote.prototype.retrieveAnswer = function(query, index) {
|
|
var retrieveUrl = this.root + '/queries/' + query + '/answers/' + index + '/retrieve';
|
|
|
|
var result = HTTP.call('POST', retrieveUrl, {content : this.localAE});
|
|
|
|
return result.data;
|
|
}
|
|
|
|
OrthancRemote.prototype.retrieveStudy = function(modality, studyInstanceUID) {
|
|
var id = this.findStudyID(studyInstanceUID);
|
|
if (id === null) {
|
|
//retrieve the study
|
|
console.log('RetrieveStudy', studyInstanceUID);
|
|
var result = this.findStudies(modality, {"StudyInstanceUID" : studyInstanceUID});
|
|
if (result.results.length < 1) {
|
|
throw new Meteor.Error(404, "No such study");
|
|
}
|
|
|
|
this.retrieveAnswer(result.query, 0);
|
|
//check again
|
|
id = this.findStudyID(studyInstanceUID);
|
|
if (id === null) {
|
|
throw new Meteor.Error(500, "Failed to retrieve remote study");
|
|
}
|
|
}
|
|
return id;
|
|
}
|
|
|
|
OrthancRemote.prototype.retrieveMetadata = function(modality, studyInstanceUID) {
|
|
var studyId = this.retrieveStudy(modality, studyInstanceUID),
|
|
instances = this.getInstancesByStudy(studyId);
|
|
|
|
var results = [], length = instances.length;
|
|
for (var i = 0;i < length;i++) {
|
|
var instanceId = instances[i].ID, metadata = this.getInstanceMetadata(instanceId);
|
|
metadata['xxxx,0001'] = {Value : instanceId};
|
|
|
|
results.push(metadata);
|
|
}
|
|
|
|
return results;
|
|
}
|
|
|
|
OrthancRemote.prototype.getInstancesByStudy = function(studyId) {
|
|
var url = this.root + '/studies/' + studyId + '/instances';
|
|
|
|
var result = this._getCall(url);
|
|
return result;
|
|
}
|
|
|
|
OrthancRemote.prototype.getInstanceMetadata = function(instanceId) {
|
|
var url = this.root + '/instances/' + instanceId + '/tags';
|
|
|
|
return this._getCall(url);
|
|
}
|
|
|
|
OrthancRemote.prototype.findStudyID = function(uid) {
|
|
var url = this.root + '/tools/lookup';
|
|
|
|
var result = HTTP.call('POST', url, {content : uid}), len = result.data.length;
|
|
for (var i = 0;i < len;i++) {
|
|
if (result.data[i].Type == 'Study') {
|
|
return result.data[i].ID;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
OrthancRemote.prototype._getCall = function(url) {
|
|
return HTTP.call('GET', url).data;
|
|
} |