IDC-1532 multiple series search google (#2026)
* Multiple series search for google cloud adapter.
* Revert IDC config.
* fix: 🐛 Series filtering on multiple series for google
* Revert changes to default config.
* Address reviewers comments.
* Fixed spelling mistakes
This commit is contained in:
1 parent
45ca88f5b8
commit
f38979037d
4 files changed
+91
-8
No files matched your search
@@ -11,9 +11,16 @@ const StudyMetaDataPromises = new Map();
|
||||
* @param {string} StudyInstanceUID The UID of the Study to be retrieved
|
||||
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
|
||||
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against
|
||||
* @param {boolean} [separateSeriesInstanceUIDFilters = false] - If true, split filtered metadata calls into multiple calls,
|
||||
* as some DICOMWeb implementations only support single filters.
|
||||
* @returns {Promise} that will be resolved with the metadata or rejected with the error
|
||||
*/
|
||||
export function retrieveStudyMetadata(server, StudyInstanceUID, filters) {
|
||||
export function retrieveStudyMetadata(
|
||||
server,
|
||||
StudyInstanceUID,
|
||||
filters,
|
||||
separateSeriesInstanceUIDFilters = false
|
||||
) {
|
||||
// @TODO: Whenever a study metadata request has failed, its related promise will be rejected once and for all
|
||||
// and further requests for that metadata will always fail. On failure, we probably need to remove the
|
||||
// corresponding promise from the "StudyMetaDataPromises" map...
|
||||
@@ -33,11 +40,29 @@ export function retrieveStudyMetadata(server, StudyInstanceUID, filters) {
|
||||
}
|
||||
|
||||
// Create a promise to handle the data retrieval
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
RetrieveMetadata(server, StudyInstanceUID, filters).then(function(data) {
|
||||
resolve(data);
|
||||
}, reject);
|
||||
});
|
||||
let promise;
|
||||
|
||||
if (
|
||||
filters &&
|
||||
filters.seriesInstanceUID &&
|
||||
separateSeriesInstanceUIDFilters
|
||||
) {
|
||||
promise = __separateSeriesRequestToAggregatePromiseateSeriesRequestToAggregatePromise(
|
||||
server,
|
||||
StudyInstanceUID,
|
||||
filters
|
||||
);
|
||||
} else {
|
||||
promise = RetrieveMetadata(server, StudyInstanceUID, filters);
|
||||
|
||||
/*
|
||||
promise = new Promise((resolve, reject) => {
|
||||
RetrieveMetadata(server, StudyInstanceUID, filters).then(function(data) {
|
||||
resolve(data);
|
||||
}, reject);
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
// Store the promise in cache
|
||||
StudyMetaDataPromises.set(StudyInstanceUID, promise);
|
||||
@@ -45,6 +70,49 @@ export function retrieveStudyMetadata(server, StudyInstanceUID, filters) {
|
||||
return promise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits up seriesInstanceUID filters to multiple calls for platforms
|
||||
* @param {Object} server Object with server configuration parameters
|
||||
* @param {string} StudyInstanceUID The UID of the Study to be retrieved
|
||||
* @param {Object} filters - Object containing filters to be applied on retrieve metadata process
|
||||
*/
|
||||
function __separateSeriesRequestToAggregatePromiseateSeriesRequestToAggregatePromise(
|
||||
server,
|
||||
StudyInstanceUID,
|
||||
filters
|
||||
) {
|
||||
const { seriesInstanceUID } = filters;
|
||||
const seriesInstanceUIDs = seriesInstanceUID.split(',');
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const promises = [];
|
||||
|
||||
seriesInstanceUIDs.forEach(uid => {
|
||||
const seriesSpecificFilters = Object.assign({}, filters, {
|
||||
seriesInstanceUID: uid,
|
||||
});
|
||||
|
||||
promises.push(
|
||||
RetrieveMetadata(server, StudyInstanceUID, seriesSpecificFilters)
|
||||
);
|
||||
});
|
||||
|
||||
Promise.all(promises).then(results => {
|
||||
const data = results[0];
|
||||
|
||||
let series = [];
|
||||
|
||||
results.forEach(result => {
|
||||
series = [...series, ...result.series];
|
||||
});
|
||||
|
||||
data.series = series;
|
||||
|
||||
resolve(data);
|
||||
}, reject);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the cached study metadata retrieval promise to ensure that the browser will
|
||||
* re-retrieve the study metadata when it is next requested
|
||||
|
||||
Reference in new issue
Block a user