65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
/**
|
|
* Class to define inheritance of load retrieve strategy.
|
|
* The process can be async load (lazy) or sync load
|
|
*
|
|
* There are methods that must be implemented at consumer level
|
|
* To retrieve study call execLoad
|
|
*/
|
|
export default class RetrieveMetadataLoader {
|
|
/**
|
|
* @constructor
|
|
* @param {Object} client The dicomweb-client.
|
|
* @param {Array} studyInstanceUID Study instance ui to be retrieved
|
|
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
|
|
* @param {string} [filters.seriesInstanceUID] - series instance uid to filter results against
|
|
* @param {Object} [sortCriteria] - Custom sort criteria used for series
|
|
* @param {Function} [sortFunction] - Custom sort function for series
|
|
*/
|
|
constructor(
|
|
client,
|
|
studyInstanceUID,
|
|
filters = {},
|
|
sortCriteria = undefined,
|
|
sortFunction = undefined
|
|
) {
|
|
this.client = client;
|
|
this.studyInstanceUID = studyInstanceUID;
|
|
this.filters = filters;
|
|
this.sortCriteria = sortCriteria;
|
|
this.sortFunction = sortFunction;
|
|
}
|
|
|
|
async execLoad() {
|
|
const preLoadData = await this.preLoad();
|
|
const loadData = await this.load(preLoadData);
|
|
const postLoadData = await this.posLoad(loadData);
|
|
return postLoadData;
|
|
}
|
|
|
|
/**
|
|
* It iterates over given loaders running each one. Loaders parameters must be bind when getting it.
|
|
* @param {Array} loaders - array of loader to retrieve data.
|
|
*/
|
|
async runLoaders(loaders) {
|
|
let result;
|
|
for (const loader of loaders) {
|
|
result = await loader();
|
|
if (result && result.length) {
|
|
break; // closes iterator in case data is retrieved successfully
|
|
}
|
|
}
|
|
|
|
if (loaders.next().done && !result) {
|
|
throw new Error('RetrieveMetadataLoader failed');
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
// Methods to be overwrite
|
|
async configLoad() {}
|
|
async preLoad() {}
|
|
async load(preLoadData) {}
|
|
async posLoad(loadData) {}
|
|
}
|