orthanc proxy
This commit is contained in:
1 parent
e354c6c577
commit
94076f6263
8 files changed
+403
-1
No files matched your search
Executable
+115
@@ -0,0 +1,115 @@
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in new issue
Block a user