WIP
This commit is contained in:
parent
b5cd7bb0b7
commit
d5c83bf596
@ -8,9 +8,9 @@ import {
|
|||||||
} from './qido.js';
|
} from './qido.js';
|
||||||
import { dicomMetadataStore, IWebApiDataSource, utils } from '@ohif/core';
|
import { dicomMetadataStore, IWebApiDataSource, utils } from '@ohif/core';
|
||||||
import * as dcmjs from 'dcmjs';
|
import * as dcmjs from 'dcmjs';
|
||||||
import exampleInstances from './exampleInstances.js';
|
import { retrieveStudyMetadata } from './retrieveStudyMetadata.js';
|
||||||
//import { retrieveStudyMetadata } from './retrieveStudyMetadata.js';
|
|
||||||
|
|
||||||
|
const { naturalizeDataset } = dcmjs.data.DicomMetaDictionary;
|
||||||
const { urlUtil } = utils;
|
const { urlUtil } = utils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -96,22 +96,40 @@ function createDicomWebApi(dicomWebConfig) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// const promises = StudyInstanceUIDs.map(StudyInstanceUID =>
|
const storeInstances = instances => {
|
||||||
// retrieveStudyMetadata(
|
const naturalizedInstances = instances.map(naturalizeDataset);
|
||||||
// wadoDicomWebClient,
|
|
||||||
// StudyInstanceUID,
|
dicomMetadataStore.addInstances(naturalizedInstances);
|
||||||
// enableStudyLazyLoad
|
callback(naturalizedInstances);
|
||||||
// )
|
};
|
||||||
// );
|
|
||||||
|
const studyPromises = StudyInstanceUIDs.map(StudyInstanceUID =>
|
||||||
|
retrieveStudyMetadata(
|
||||||
|
wadoDicomWebClient,
|
||||||
|
StudyInstanceUID,
|
||||||
|
enableStudyLazyLoad
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
studyPromises.forEach(studyPromise => {
|
||||||
|
studyPromise.then(seriesPromises => {
|
||||||
|
seriesPromises.forEach(seriesPromise => {
|
||||||
|
seriesPromise.then(instances => {
|
||||||
|
debugger;
|
||||||
|
storeInstances(instances);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// TEMP use dummy data.
|
// TEMP use dummy data.
|
||||||
const { naturalizeDataset } = dcmjs.data.DicomMetaDictionary;
|
//const { naturalizeDataset } = dcmjs.data.DicomMetaDictionary;
|
||||||
const instances = exampleInstances.map(naturalizeDataset);
|
//const instances = exampleInstances.map(naturalizeDataset);
|
||||||
|
|
||||||
// TEMP
|
// TEMP
|
||||||
|
|
||||||
dicomMetadataStore.addInstances(instances);
|
//dicomMetadataStore.addInstances(instances);
|
||||||
callback(instances);
|
//callback(instances);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import RetrieveMetadata from './services/wado/retrieveMetadata.js';
|
import RetrieveMetadata from './wado/retrieveMetadata.js';
|
||||||
|
|
||||||
const moduleName = 'RetrieveStudyMetadata';
|
const moduleName = 'RetrieveStudyMetadata';
|
||||||
// Cache for promises. Prevents unnecessary subsequent calls to the server
|
// Cache for promises. Prevents unnecessary subsequent calls to the server
|
||||||
@ -9,6 +9,8 @@ const StudyMetaDataPromises = new Map();
|
|||||||
*
|
*
|
||||||
* @param {Object} server Object with server configuration parameters
|
* @param {Object} server Object with server configuration parameters
|
||||||
* @param {string} StudyInstanceUID The UID of the Study to be retrieved
|
* @param {string} StudyInstanceUID The UID of the Study to be retrieved
|
||||||
|
* @param {boolean} enabledStudyLazyLoad Whether the study metadata should be loaded asynchronusly.
|
||||||
|
* @param {function} storeInstancesCallback A callback used to store the retrieved instance metadata.
|
||||||
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
|
* @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 {string} [filter.seriesInstanceUID] - series instance uid to filter results against
|
||||||
* @returns {Promise} that will be resolved with the metadata or rejected with the error
|
* @returns {Promise} that will be resolved with the metadata or rejected with the error
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import RetrieveMetadataLoaderSync from './retrieveMetadataLoaderSync';
|
//import RetrieveMetadataLoaderSync from './retrieveMetadataLoaderSync';
|
||||||
import RetrieveMetadataLoaderAsync from './retrieveMetadataLoaderAsync';
|
import RetrieveMetadataLoaderAsync from './retrieveMetadataLoaderAsync';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -17,10 +17,12 @@ async function RetrieveMetadata(
|
|||||||
enableStudyLazyLoad,
|
enableStudyLazyLoad,
|
||||||
filters = {}
|
filters = {}
|
||||||
) {
|
) {
|
||||||
const RetrieveMetadataLoader =
|
// const RetrieveMetadataLoader =
|
||||||
enableStudyLazyLoad !== false
|
// enableStudyLazyLoad !== false
|
||||||
? RetrieveMetadataLoaderAsync
|
// ? RetrieveMetadataLoaderAsync
|
||||||
: RetrieveMetadataLoaderSync;
|
// : RetrieveMetadataLoaderSync;
|
||||||
|
|
||||||
|
const RetrieveMetadataLoader = RetrieveMetadataLoaderAsync;
|
||||||
|
|
||||||
const retrieveMetadataLoader = new RetrieveMetadataLoader(
|
const retrieveMetadataLoader = new RetrieveMetadataLoader(
|
||||||
dicomWebClient,
|
dicomWebClient,
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export default class RetrieveMetadataLoader {
|
|||||||
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against
|
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against
|
||||||
*/
|
*/
|
||||||
constructor(client, studyInstanceUID, filters = {}) {
|
constructor(client, studyInstanceUID, filters = {}) {
|
||||||
this.client = dicomwWebClient;
|
this.client = client;
|
||||||
this.studyInstanceUID = studyInstanceUID;
|
this.studyInstanceUID = studyInstanceUID;
|
||||||
this.filters = filters;
|
this.filters = filters;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import RetrieveMetadataLoader from './retrieveMetadataLoader';
|
import RetrieveMetadataLoader from './retrieveMetadataLoader';
|
||||||
import { sortStudySeries, sortingCriteria } from '../../sortStudy';
|
//import { sortStudySeries, sortingCriteria } from '../../sortStudy';
|
||||||
import getSeriesInfo from '../../getSeriesInfo';
|
import getSeriesInfo from './utils/getSeriesInfo';
|
||||||
import {
|
// import {
|
||||||
createStudyFromSOPInstanceList,
|
// createStudyFromSOPInstanceList,
|
||||||
addInstancesToStudy,
|
// addInstancesToStudy,
|
||||||
} from './studyInstanceHelpers';
|
// } from './studyInstanceHelpers';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map seriesList to an array of seriesInstanceUid
|
* Map seriesList to an array of seriesInstanceUid
|
||||||
@ -15,18 +15,18 @@ function mapStudySeries(seriesList) {
|
|||||||
return seriesList.map(series => getSeriesInfo(series).seriesInstanceUid);
|
return seriesList.map(series => getSeriesInfo(series).seriesInstanceUid);
|
||||||
}
|
}
|
||||||
|
|
||||||
function attachSeriesLoader(server, study, seriesLoader) {
|
// function attachSeriesLoader(server, study, seriesLoader) {
|
||||||
study.seriesLoader = Object.freeze({
|
// study.seriesLoader = Object.freeze({
|
||||||
hasNext() {
|
// hasNext() {
|
||||||
return seriesLoader.hasNext();
|
// return seriesLoader.hasNext();
|
||||||
},
|
// },
|
||||||
async next() {
|
// async next() {
|
||||||
const series = await seriesLoader.next();
|
// const series = await seriesLoader.next();
|
||||||
await addInstancesToStudy(server, study, series.sopInstances);
|
// await addInstancesToStudy(server, study, series.sopInstances);
|
||||||
return study.seriesMap[series.seriesInstanceUID];
|
// return study.seriesMap[series.seriesInstanceUID];
|
||||||
},
|
// },
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an immutable series loader object which loads each series sequentially using the iterator interface
|
* Creates an immutable series loader object which loads each series sequentially using the iterator interface
|
||||||
@ -46,11 +46,11 @@ function makeSeriesAsyncLoader(
|
|||||||
},
|
},
|
||||||
async next() {
|
async next() {
|
||||||
const seriesInstanceUID = seriesInstanceUIDList.shift();
|
const seriesInstanceUID = seriesInstanceUIDList.shift();
|
||||||
const sopInstances = await client.retrieveSeriesMetadata({
|
return client.retrieveSeriesMetadata({
|
||||||
studyInstanceUID,
|
studyInstanceUID,
|
||||||
seriesInstanceUID,
|
seriesInstanceUID,
|
||||||
});
|
});
|
||||||
return { studyInstanceUID, seriesInstanceUID, sopInstances };
|
// return { studyInstanceUID, seriesInstanceUID, sopInstances };
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -90,11 +90,14 @@ export default class RetrieveMetadataLoaderAsync extends RetrieveMetadataLoader
|
|||||||
const preLoaders = this.getPreLoaders();
|
const preLoaders = this.getPreLoaders();
|
||||||
const result = await this.runLoaders(preLoaders);
|
const result = await this.runLoaders(preLoaders);
|
||||||
|
|
||||||
const seriesSorted = sortStudySeries(
|
// const seriesSorted = sortStudySeries(
|
||||||
result,
|
// result,
|
||||||
sortingCriteria.seriesSortCriteria.seriesInfoSortingCriteria
|
// sortingCriteria.seriesSortCriteria.seriesInfoSortingCriteria
|
||||||
);
|
// );
|
||||||
const seriesInstanceUidsMap = mapStudySeries(seriesSorted);
|
|
||||||
|
//const seriesInstanceUidsMap = mapStudySeries(seriesSorted);
|
||||||
|
|
||||||
|
const seriesInstanceUidsMap = mapStudySeries(result);
|
||||||
|
|
||||||
return seriesInstanceUidsMap;
|
return seriesInstanceUidsMap;
|
||||||
}
|
}
|
||||||
@ -108,24 +111,35 @@ export default class RetrieveMetadataLoaderAsync extends RetrieveMetadataLoader
|
|||||||
preLoadData
|
preLoadData
|
||||||
);
|
);
|
||||||
|
|
||||||
const firstSeries = await seriesAsyncLoader.next();
|
// const firstSeries = await seriesAsyncLoader.next();
|
||||||
|
|
||||||
return {
|
// return {
|
||||||
sopInstances: firstSeries.sopInstances,
|
// sopInstances: firstSeries.sopInstances,
|
||||||
asyncLoader: seriesAsyncLoader,
|
// asyncLoader: seriesAsyncLoader,
|
||||||
};
|
// };
|
||||||
}
|
|
||||||
|
|
||||||
async posLoad(loadData) {
|
const promises = [];
|
||||||
const { client } = this;
|
|
||||||
const { sopInstances, asyncLoader } = loadData;
|
|
||||||
|
|
||||||
const study = await createStudyFromSOPInstanceList(server, sopInstances);
|
while (seriesAsyncLoader.hasNext()) {
|
||||||
|
promises.push(seriesAsyncLoader.next());
|
||||||
if (asyncLoader.hasNext()) {
|
|
||||||
attachSeriesLoader(server, study, asyncLoader);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return study;
|
return promises;
|
||||||
|
|
||||||
|
// if (asyncLoader.hasNext()) {
|
||||||
|
}
|
||||||
|
|
||||||
|
async posLoad(promises) {
|
||||||
|
return promises;
|
||||||
|
// const { client } = this;
|
||||||
|
// const { sopInstances, asyncLoader } = loadData;
|
||||||
|
|
||||||
|
// const study = await createStudyFromSOPInstanceList(server, sopInstances);
|
||||||
|
|
||||||
|
// if (asyncLoader.hasNext()) {
|
||||||
|
// attachSeriesLoader(server, study, asyncLoader);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return study;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { api } from 'dicomweb-client';
|
// import { api } from 'dicomweb-client';
|
||||||
import DICOMWeb from '../../../DICOMWeb/';
|
// import DICOMWeb from '../../../DICOMWeb/';
|
||||||
import { createStudyFromSOPInstanceList } from './studyInstanceHelpers';
|
import { createStudyFromSOPInstanceList } from './studyInstanceHelpers';
|
||||||
import RetrieveMetadataLoader from './retrieveMetadataLoader';
|
import RetrieveMetadataLoader from './retrieveMetadataLoader';
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { DICOMWeb } from '@ohif/core';
|
||||||
|
// import isLowPriorityModality from '../utils/isLowPriorityModality';
|
||||||
|
|
||||||
|
const INFO = Symbol('INFO');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an object with processed series information and saves its reference
|
||||||
|
* inside the series object itself.
|
||||||
|
* @param {Object} series The raw series object
|
||||||
|
* @returns {Object} object containing some useful info from given series
|
||||||
|
*/
|
||||||
|
export default function getSeriesInfo(series) {
|
||||||
|
let info = series[INFO];
|
||||||
|
if (!info) {
|
||||||
|
const modality = DICOMWeb.getString(series['00080060'], '').toUpperCase();
|
||||||
|
info = Object.freeze({
|
||||||
|
modality,
|
||||||
|
// isLowPriority: isLowPriorityModality(modality), // TODO -> We should do this in the series list level, not here.
|
||||||
|
seriesInstanceUid: DICOMWeb.getString(series['0020000E']),
|
||||||
|
seriesNumber: DICOMWeb.getNumber(series['00200011'], 0) || 0,
|
||||||
|
});
|
||||||
|
series[INFO] = info;
|
||||||
|
}
|
||||||
|
return info;
|
||||||
|
}
|
||||||
@ -7,8 +7,6 @@ class DisplaySetManager {
|
|||||||
this.extensionManager = extensionManager;
|
this.extensionManager = extensionManager;
|
||||||
this.SOPClassHandlerIds = SOPClassHandlerIds;
|
this.SOPClassHandlerIds = SOPClassHandlerIds;
|
||||||
|
|
||||||
debugger;
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
displaySetInstanceUids,
|
displaySetInstanceUids,
|
||||||
setDisplaySetInstanceUids,
|
setDisplaySetInstanceUids,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user