diff --git a/Packages/lesiontracker/client/components/serverInformation/serverInformationForm/serverInformationForm.js b/Packages/worklist/client/components/serverInformation/serverInformationForm/serverInformationForm.js
similarity index 97%
rename from Packages/lesiontracker/client/components/serverInformation/serverInformationForm/serverInformationForm.js
rename to Packages/worklist/client/components/serverInformation/serverInformationForm/serverInformationForm.js
index 746239c0a..0b155ab1d 100644
--- a/Packages/lesiontracker/client/components/serverInformation/serverInformationForm/serverInformationForm.js
+++ b/Packages/worklist/client/components/serverInformation/serverInformationForm/serverInformationForm.js
@@ -1,13 +1,13 @@
import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';
import { Tracker } from 'meteor/tracker';
-import { DICOMWebServer as dicomSchema } from 'meteor/worklist/both/schema';
-import { DIMSEServer as dimseSchema } from 'meteor/worklist/both/schema';
+import { DICOMWebServer as dicomSchema } from 'meteor/worklist/both/schema.js';
+import { DIMSEServer as dimseSchema } from 'meteor/worklist/both/schema.js';
Template.serverInformationForm.onCreated(() => {
const instance = Template.instance();
- instance.api = {
+ instance.data.api = {
save() {
// Stop here if the form validation fails
if (!instance.data.form.validate()) {
diff --git a/Packages/lesiontracker/client/components/serverInformation/serverInformationForm/serverInformationFormField.html b/Packages/worklist/client/components/serverInformation/serverInformationForm/serverInformationFormField.html
similarity index 100%
rename from Packages/lesiontracker/client/components/serverInformation/serverInformationForm/serverInformationFormField.html
rename to Packages/worklist/client/components/serverInformation/serverInformationForm/serverInformationFormField.html
diff --git a/Packages/lesiontracker/client/components/serverInformation/serverInformationList/serverInformationList.html b/Packages/worklist/client/components/serverInformation/serverInformationList/serverInformationList.html
similarity index 100%
rename from Packages/lesiontracker/client/components/serverInformation/serverInformationList/serverInformationList.html
rename to Packages/worklist/client/components/serverInformation/serverInformationList/serverInformationList.html
diff --git a/Packages/worklist/client/components/serverInformation/serverInformationList/serverInformationList.js b/Packages/worklist/client/components/serverInformation/serverInformationList/serverInformationList.js
new file mode 100644
index 000000000..8969d8160
--- /dev/null
+++ b/Packages/worklist/client/components/serverInformation/serverInformationList/serverInformationList.js
@@ -0,0 +1,47 @@
+Template.serverInformationList.onCreated(() => {
+ const instance = Template.instance();
+
+ instance.api = {
+ add: () => instance.data.mode.set('create'),
+ edit(server) {
+ instance.data.currentItem.set(server);
+ instance.data.mode.set('edit');
+ },
+ delete(server) {
+ // TODO: Replace this for confirmation dialog after LT-refactor is merged back to master
+ if (!confirm('Are you sure you want to remove this peer?')) {
+ return;
+ }
+
+ Meteor.call('serverRemove', server._id, error => {
+ // TODO: check for errors: data-write
+ });
+ },
+ use(server) {
+ Meteor.call('serverSetActive', server._id, error => {
+ // TODO: check for errors: data-write
+ });
+ }
+ };
+});
+
+Template.serverInformationList.helpers({
+ isActive: function(server) {
+ const currentServer = CurrentServer.findOne();
+ if (!currentServer) {
+ return;
+ }
+
+ return server._id === currentServer.serverId;
+ },
+ servers: function() {
+ const options = {
+ sort: {
+ origin: -1,
+ type: 1,
+ name: 1
+ }
+ };
+ return Servers.find({}, options).fetch();
+ }
+});
diff --git a/Packages/lesiontracker/client/components/serverInformation/serverInformationModal/serverInformationModal.html b/Packages/worklist/client/components/serverInformation/serverInformationModal/serverInformationModal.html
similarity index 100%
rename from Packages/lesiontracker/client/components/serverInformation/serverInformationModal/serverInformationModal.html
rename to Packages/worklist/client/components/serverInformation/serverInformationModal/serverInformationModal.html
diff --git a/Packages/lesiontracker/client/components/serverInformation/serverInformationModal/serverInformationModal.js b/Packages/worklist/client/components/serverInformation/serverInformationModal/serverInformationModal.js
similarity index 100%
rename from Packages/lesiontracker/client/components/serverInformation/serverInformationModal/serverInformationModal.js
rename to Packages/worklist/client/components/serverInformation/serverInformationModal/serverInformationModal.js
diff --git a/Packages/lesiontracker/client/components/serverInformation/serverInformationModal/serverInformationModal.styl b/Packages/worklist/client/components/serverInformation/serverInformationModal/serverInformationModal.styl
similarity index 100%
rename from Packages/lesiontracker/client/components/serverInformation/serverInformationModal/serverInformationModal.styl
rename to Packages/worklist/client/components/serverInformation/serverInformationModal/serverInformationModal.styl
diff --git a/Packages/worklist/client/lib/switchToTab.js b/Packages/worklist/client/lib/switchToTab.js
index 487fafc47..bed3c31df 100644
--- a/Packages/worklist/client/lib/switchToTab.js
+++ b/Packages/worklist/client/lib/switchToTab.js
@@ -34,6 +34,11 @@ switchToTab = function(contentId) {
var container;
if (contentId === 'worklistTab') {
container = $('.tab-content').find('#worklistTab').get(0);
+
+ if (!container) {
+ return;
+ }
+
var worklistContainer = document.createElement('div');
worklistContainer.classList.add('worklistContainer');
container.appendChild(worklistContainer);
diff --git a/Packages/worklist/client/lib/worklist.js b/Packages/worklist/client/lib/worklist.js
index eee59b45b..3a6b856f8 100644
--- a/Packages/worklist/client/lib/worklist.js
+++ b/Packages/worklist/client/lib/worklist.js
@@ -1,3 +1,6 @@
+import { Meteor } from 'meteor/meteor';
+import { Tracker } from 'meteor/tracker';
+
Worklist = {
functions: {},
callbacks: {}
@@ -10,4 +13,19 @@ function dblClickOnStudy(data) {
// Use the formatPN template helper to clean up the patient name
var title = formatPN(data.patientName);
openNewTab(data.studyInstanceUid, title);
-}
\ No newline at end of file
+}
+
+let currentServerChangeHandlerFirstRun = true;
+const currentServerChangeHandler = () => {
+ if (currentServerChangeHandlerFirstRun) {
+ currentServerChangeHandlerFirstRun = false;
+ return;
+ }
+
+ switchToTab('worklistTab');
+};
+
+CurrentServer.find().observe({
+ added: currentServerChangeHandler,
+ changed: currentServerChangeHandler
+});
diff --git a/Packages/worklist/package.js b/Packages/worklist/package.js
index c6245d51c..f78debf6e 100644
--- a/Packages/worklist/package.js
+++ b/Packages/worklist/package.js
@@ -16,11 +16,12 @@ Package.onUse(function (api) {
api.use('rwatts:uuid');
api.use('silentcicero:jszip');
api.use('aldeed:simple-schema');
+ api.use('accounts-base');
// Note: MomentJS appears to be required for Bootstrap3 Datepicker, but not a dependency for some reason
api.use('momentjs:moment');
- api.use('gilbertwat:bootstrap3-daterangepicker');
+ api.use('gilbertwat:bootstrap3-daterangepicker');
// Our custom packages
api.use('ohif:core');
@@ -39,9 +40,13 @@ Package.onUse(function (api) {
// console for debugging purposes
api.addFiles('log.js');
- api.addFiles('both/collections.js', [ 'client', 'server' ]);
- api.addFiles('both/schema.js', [ 'client', 'server' ]);
-
+ api.addFiles('both/collections.js', ['client', 'server']);
+ api.addFiles('both/schema.js', ['client', 'server']);
+ api.addFiles('both/lib/getCurrentServer.js', ['client', 'server']);
+
+ // Client collections and subscriptions
+ api.addFiles('client/collections/subscriptions.js', 'client');
+
// Components
api.addFiles('client/components/worklist.html', 'client');
api.addFiles('client/components/worklist.js', 'client');
@@ -80,7 +85,24 @@ Package.onUse(function (api) {
api.addFiles('client/components/seriesDetailsTable/seriesDetailsTable.html', 'client');
api.addFiles('client/components/seriesDetailsTable/seriesDetailsTable.styl', 'client');
api.addFiles('client/components/seriesDetailsTable/seriesDetailsTable.js', 'client');
-
+
+ api.addFiles('client/components/serverInformation/serverInformationDicomWeb/serverInformationDicomWeb.html', 'client');
+ api.addFiles('client/components/serverInformation/serverInformationDicomWeb/serverInformationDicomWeb.js', 'client');
+
+ api.addFiles('client/components/serverInformation/serverInformationDimse/serverInformationDimse.html', 'client');
+ api.addFiles('client/components/serverInformation/serverInformationDimse/serverInformationDimse.js', 'client');
+
+ api.addFiles('client/components/serverInformation/serverInformationForm/serverInformationForm.html', 'client');
+ api.addFiles('client/components/serverInformation/serverInformationForm/serverInformationForm.js', 'client');
+ api.addFiles('client/components/serverInformation/serverInformationForm/serverInformationFormField.html', 'client');
+
+ api.addFiles('client/components/serverInformation/serverInformationList/serverInformationList.html', 'client');
+ api.addFiles('client/components/serverInformation/serverInformationList/serverInformationList.js', 'client');
+
+ api.addFiles('client/components/serverInformation/serverInformationModal/serverInformationModal.html', 'client');
+ api.addFiles('client/components/serverInformation/serverInformationModal/serverInformationModal.styl', 'client');
+ api.addFiles('client/components/serverInformation/serverInformationModal/serverInformationModal.js', 'client');
+
// Client-side library functions
api.addFiles('client/lib/getStudyMetadata.js', 'client');
api.addFiles('client/lib/getStudiesMetadata.js', 'client');
@@ -95,6 +117,7 @@ Package.onUse(function (api) {
// Server-side functions
api.addFiles('server/publications.js', 'server');
api.addFiles('server/validateServerConfiguration.js', 'server');
+ api.addFiles('server/servers.js', 'server');
api.addFiles('server/lib/remoteGetValue.js', 'server');
api.addFiles('server/lib/encodeQueryData.js', 'server');
@@ -113,12 +136,20 @@ Package.onUse(function (api) {
api.addFiles('server/services/dimse/instances.js', 'server');
api.addFiles('server/services/dimse/studies.js', 'server');
api.addFiles('server/services/dimse/retrieveMetadata.js', 'server');
+ api.addFiles('server/services/dimse/setup.js', 'server');
// Study, instance, and metadata retrieval from remote PACS via Orthanc as a proxy
api.addFiles('server/services/remote/instances.js', 'server');
api.addFiles('server/services/remote/studies.js', 'server');
api.addFiles('server/services/remote/retrieveMetadata.js', 'server');
+ // Export Servers and CurrentServer Collections
+ api.export('Servers', ['client', 'server']);
+ api.export('CurrentServer', ['client', 'server']);
+
+ // Export shared lib functions
+ api.export('getCurrentServer', ['client', 'server']);
+
api.export('Services', 'server');
// Export Worklist helper functions for usage in Routes
@@ -136,4 +167,4 @@ Package.onUse(function (api) {
api.export('WorklistTabs', 'client');
api.export('WorklistStudies', 'client');
api.export('WorklistSelectedStudies', 'client')
-});
\ No newline at end of file
+});
diff --git a/Packages/worklist/server/methods/getStudyMetadata.js b/Packages/worklist/server/methods/getStudyMetadata.js
index a97f304e0..793c4ae50 100644
--- a/Packages/worklist/server/methods/getStudyMetadata.js
+++ b/Packages/worklist/server/methods/getStudyMetadata.js
@@ -6,16 +6,17 @@ Meteor.methods({
GetStudyMetadata: function(studyInstanceUid) {
log.info('GetStudyMetadata(%s)', studyInstanceUid);
- if (!Meteor.settings.servers.dicomWeb) {
- throw 'No properly configured server was available over DICOMWeb';
+ // Get the server data. This is user-defined in the config.json files or through servers
+ // configuration modal
+ const server = getCurrentServer();
+
+ if (!server) {
+ throw 'No properly configured server was available over DICOMWeb or DIMSE.';
}
- if (Meteor.settings.servers.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
- // Get the server data. This is user-defined in the
- // config.json files used to run the Meteor server
- var server = Meteor.settings.servers.dicomWeb[0];
+ if (server.type === 'dicomWeb') {
return Services.WADO.RetrieveMetadata(server, studyInstanceUid);
- } else if (Meteor.settings.servers.dimse && Meteor.settings.defaultServiceType === 'dimse') {
+ } else if (server.type === 'dimse') {
return Services.DIMSE.RetrieveMetadata(studyInstanceUid);
}
}
diff --git a/Packages/worklist/server/methods/importStudies.js b/Packages/worklist/server/methods/importStudies.js
index 482fb2ec9..b9dd8d413 100644
--- a/Packages/worklist/server/methods/importStudies.js
+++ b/Packages/worklist/server/methods/importStudies.js
@@ -39,7 +39,8 @@ Meteor.methods({
* @returns {boolean}
*/
importSupported: function() {
- if (Meteor.settings.servers.dimse && Meteor.settings.defaultServiceType === 'dimse') {
+ const server = getCurrentServer();
+ if (server && server.type === 'dimse') {
return true;
}
},
@@ -53,13 +54,17 @@ Meteor.methods({
return;
}
- if (Meteor.settings.servers.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
+ const server = getCurrentServer();
+
+ if (!server) {
+ throw 'No properly configured server was available over DICOMWeb or DIMSE.';
+ }
+
+ if (server.type === 'dicomWeb') {
//TODO: Support importing studies into dicomWeb
console.log('Importing studies into dicomWeb is currently not supported.');
- } else if (Meteor.settings.servers.dimse && Meteor.settings.defaultServiceType === 'dimse') {
+ } else if (server.type === 'dimse') {
importStudiesDIMSE(studiesToImport, studyImportStatusId);
- } else {
- throw 'No properly configured server was available over DICOMWeb or DIMSE.';
}
},
/**
diff --git a/Packages/worklist/server/methods/worklistSearch.js b/Packages/worklist/server/methods/worklistSearch.js
index d27d2d3e5..c0b1820b1 100644
--- a/Packages/worklist/server/methods/worklistSearch.js
+++ b/Packages/worklist/server/methods/worklistSearch.js
@@ -1,19 +1,22 @@
Meteor.methods({
/**
* Use the specified filter to conduct a search from the DICOM server
+ *
* @param filter
*/
- WorklistSearch: function(filter) {
- if (Meteor.settings.servers.dicomWeb && Meteor.settings.defaultServiceType === 'dicomWeb') {
- // Get the server data. This is user-defined in the
- // config.json files used to run the Meteor server
- var server = Meteor.settings.servers.dicomWeb[0];
+ WorklistSearch(filter) {
+ // Get the server data. This is user-defined in the config.json files or through servers
+ // configuration modal
+ const server = getCurrentServer();
- return Services.QIDO.Studies(server, filter);
- } else if (Meteor.settings.servers.dimse && Meteor.settings.defaultServiceType === 'dimse') {
- return Services.DIMSE.Studies(filter);
- } else {
+ if (!server) {
throw 'No properly configured server was available over DICOMWeb or DIMSE.';
}
+
+ if (server.type === 'dicomWeb') {
+ return Services.QIDO.Studies(server, filter);
+ } else if (server.type === 'dimse') {
+ return Services.DIMSE.Studies(filter);
+ }
}
});
diff --git a/Packages/worklist/server/publications.js b/Packages/worklist/server/publications.js
index a73779203..3f4c577ed 100644
--- a/Packages/worklist/server/publications.js
+++ b/Packages/worklist/server/publications.js
@@ -1,3 +1,11 @@
Meteor.publish('studyImportStatus', () => {
return StudyImportStatus.find();
-});
\ No newline at end of file
+});
+
+Meteor.publish('servers', () => {
+ return Servers.find();
+});
+
+Meteor.publish('currentServer', () => {
+ return CurrentServer.find();
+});
diff --git a/Packages/lesiontracker/server/servers.js b/Packages/worklist/server/servers.js
similarity index 53%
rename from Packages/lesiontracker/server/servers.js
rename to Packages/worklist/server/servers.js
index 5e10fc48d..9b205d982 100644
--- a/Packages/lesiontracker/server/servers.js
+++ b/Packages/worklist/server/servers.js
@@ -1,7 +1,10 @@
import { Meteor } from 'meteor/meteor';
-import { Accounts } from 'meteor/accounts-base';
Meteor.startup(function() {
+ Servers.remove({
+ origin: 'json'
+ });
+
_.each(Meteor.settings.servers, function(endpoints, serverType) {
_.each(endpoints, function(endpoint) {
var server = _.clone(endpoint);
@@ -10,28 +13,46 @@ Meteor.startup(function() {
Servers.insert(server);
});
});
+
+ ServersControl.resetCurrentServer();
});
class ServersControl {
- static validateUser() {
- if (!Meteor.userId()) {
- throw new Meteor.Error('not-authorized');
- }
- }
-
static writeCallback(error, affected) {
if (error) {
throw new Meteor.Error('data-write', error);
}
}
+ static resetCurrentServer() {
+ const currentServer = CurrentServer.findOne();
+ if (currentServer && Servers.find({ _id: currentServer.serverId }).count()) {
+ return;
+ }
+
+ const newServer = Servers.findOne({
+ origin: 'json',
+ type: Meteor.settings.defaultServiceType || 'dicomWeb'
+ });
+
+ if (newServer) {
+ CurrentServer.remove({});
+ CurrentServer.insert({
+ serverId: newServer._id
+ });
+ }
+ }
+
+ static find(query) {
+ return Servers.find(query).fetch();
+ }
+
static save(serverSettings) {
- this.validateUser();
- var query = {
+ const query = {
_id: serverSettings._id
};
- var options = {
+ const options = {
upsert: true
};
@@ -43,29 +64,28 @@ class ServersControl {
}
static setActive(serverId) {
- this.validateUser();
- var query = {
- _id: Meteor.userId()
- };
- var data = {
- $set: {
- 'profile.activeServer': serverId
- }
- };
- Accounts.users.update(query, data, this.writeCallback);
+ CurrentServer.remove({});
+ CurrentServer.insert({
+ serverId: serverId
+ });
}
static remove(serverId) {
- this.validateUser();
var query = {
_id: serverId
};
- return Servers.remove(query, this.writeCallback);
+
+ const removeStatus = Servers.remove(query, this.writeCallback);
+
+ ServersControl.resetCurrentServer();
+
+ return removeStatus;
}
}
Meteor.methods({
+ serverFind: query => ServersControl.find(query),
serverSave: serverSettings => ServersControl.save(serverSettings),
serverSetActive: serverId => ServersControl.setActive(serverId),
serverRemove: serverId => ServersControl.remove(serverId)
diff --git a/Packages/worklist/server/services/dimse/instances.js b/Packages/worklist/server/services/dimse/instances.js
index 6e222452f..e6017afcc 100755
--- a/Packages/worklist/server/services/dimse/instances.js
+++ b/Packages/worklist/server/services/dimse/instances.js
@@ -1,68 +1,66 @@
-/**
- * Parses data returned from a study search and transforms it into
- * an array of series that are present in the study
- *
- * @param resultData
- * @returns {Array} Series List
- */
-function resultDataToStudyMetadata(resultData) {
- var seriesMap = {};
- var seriesList = [];
-
- resultData.forEach(function(instanceRaw) {
- var instance = instanceRaw.toObject();
- // Use seriesMap to cache series data
- // If the series instance UID has already been used to
- // process series data, continue using that series
- var seriesInstanceUid = instance[0x0020000E];
- var series = seriesMap[seriesInstanceUid];
-
- // If no series data exists in the seriesMap cache variable,
- // process any available series data
- if (!series) {
- series = {
- seriesInstanceUid: seriesInstanceUid,
- seriesNumber: instance[0x00200011],
- instances: []
- };
-
- // Save this data in the seriesMap cache variable
- seriesMap[seriesInstanceUid] = series;
- seriesList.push(series);
- }
-
- // TODO: [custom-servers] Check which peer it should point to
- var server = Meteor.settings.servers.dimse[0].peers[0];
- var host = Meteor.settings.servers.dimse.host,
- port = Meteor.settings.servers.dimse.port;
-
- var serverRoot = host + ':' + port;
-
- var sopInstanceUid = instance[0x00080018];
- var uri = serverRoot + '/studies/' + studyInstanceUid + '/series/' + seriesInstanceUid + '/instances/' + sopInstanceUid + '/frames/1';
-
- // Add this instance to the current series
- series.instances.push({
- sopClassUid: instance[0x00080016],
- sopInstanceUid: sopInstanceUid,
- uri: uri,
- instanceNumber: instance[0x00200013]
- });
- });
- return seriesList;
-}
-
-/**
- * Retrieve a set of instances using a DIMSE call
- * @param studyInstanceUid
- * @returns {{wadoUriRoot: String, studyInstanceUid: String, seriesList: Array}}
- */
-Services.DIMSE.Instances = function(studyInstanceUid) {
- //var url = buildUrl(server, studyInstanceUid);
- var result = DIMSE.retrieveInstances(studyInstanceUid);
-
- return {
- studyInstanceUid: studyInstanceUid,
- seriesList: resultDataToStudyMetadata(result)
- };
-};
+/**
+ * Parses data returned from a study search and transforms it into
+ * an array of series that are present in the study
+ *
+ * @param resultData
+ * @returns {Array} Series List
+ */
+function resultDataToStudyMetadata(resultData) {
+ var seriesMap = {};
+ var seriesList = [];
+
+ resultData.forEach(function(instanceRaw) {
+ var instance = instanceRaw.toObject();
+ // Use seriesMap to cache series data
+ // If the series instance UID has already been used to
+ // process series data, continue using that series
+ var seriesInstanceUid = instance[0x0020000E];
+ var series = seriesMap[seriesInstanceUid];
+
+ // If no series data exists in the seriesMap cache variable,
+ // process any available series data
+ if (!series) {
+ series = {
+ seriesInstanceUid: seriesInstanceUid,
+ seriesNumber: instance[0x00200011],
+ instances: []
+ };
+
+ // Save this data in the seriesMap cache variable
+ seriesMap[seriesInstanceUid] = series;
+ seriesList.push(series);
+ }
+
+ // TODO: Check which peer it should point to
+ var server = getCurrentServer().peers[0];
+
+ var serverRoot = server.host + ':' + server.port;
+
+ var sopInstanceUid = instance[0x00080018];
+ var uri = serverRoot + '/studies/' + studyInstanceUid + '/series/' + seriesInstanceUid + '/instances/' + sopInstanceUid + '/frames/1';
+
+ // Add this instance to the current series
+ series.instances.push({
+ sopClassUid: instance[0x00080016],
+ sopInstanceUid: sopInstanceUid,
+ uri: uri,
+ instanceNumber: instance[0x00200013]
+ });
+ });
+ return seriesList;
+}
+
+/**
+ * Retrieve a set of instances using a DIMSE call
+ * @param studyInstanceUid
+ * @returns {{wadoUriRoot: String, studyInstanceUid: String, seriesList: Array}}
+ */
+Services.DIMSE.Instances = function(studyInstanceUid) {
+ //var url = buildUrl(server, studyInstanceUid);
+ var result = DIMSE.retrieveInstances(studyInstanceUid);
+
+ return {
+ studyInstanceUid: studyInstanceUid,
+ seriesList: resultDataToStudyMetadata(result)
+ };
+};
diff --git a/Packages/worklist/server/services/dimse/retrieveMetadata.js b/Packages/worklist/server/services/dimse/retrieveMetadata.js
index 44fd9c4b8..271c43a85 100755
--- a/Packages/worklist/server/services/dimse/retrieveMetadata.js
+++ b/Packages/worklist/server/services/dimse/retrieveMetadata.js
@@ -110,8 +110,8 @@ function resultDataToStudyMetadata(studyInstanceUid, resultData) {
};
// Retrieve the actual data over WADO-URI
- var server = Meteor.settings.servers.dicomWeb[0];
- instanceSummary.wadouri = WADOProxy.convertURL(server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + "&contentType=application%2Fdicom", server.requestOptions);
+ var server = getCurrentServer();
+ instanceSummary.wadouri = WADOProxy.convertURL(server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + '&contentType=application%2Fdicom', server.requestOptions);
series.instances.push(instanceSummary);
});
@@ -127,8 +127,8 @@ function resultDataToStudyMetadata(studyInstanceUid, resultData) {
* @returns {{seriesList: Array, patientName: *, patientId: *, accessionNumber: *, studyDate: *, modalities: *, studyDescription: *, imageCount: *, studyInstanceUid: *}}
*/
Services.DIMSE.RetrieveMetadata = function(studyInstanceUid) {
- // TODO: Find active server
- const activeServer = Meteor.settings.servers.dimse[0].peers[0];
+ // TODO: Check which peer it should point to
+ const activeServer = getCurrentServer().peers[0];
const supportsInstanceRetrievalByStudyUid = activeServer.supportsInstanceRetrievalByStudyUid;
let results;
diff --git a/Packages/worklist/server/services/dimse/setup.js b/Packages/worklist/server/services/dimse/setup.js
new file mode 100644
index 000000000..3ddbb3a2a
--- /dev/null
+++ b/Packages/worklist/server/services/dimse/setup.js
@@ -0,0 +1,38 @@
+import { Meteor } from 'meteor/meteor';
+
+const setupDIMSE = () => {
+ // Terminate existing DIMSE servers and sockets and clean up the connection object
+ DIMSE.connection.reset();
+
+ // Get the new server configuration
+ const server = getCurrentServer();
+
+ // Stop here if the new server is not of DIMSE type
+ if (server.type !== 'dimse') {
+ return;
+ }
+
+ // Check if peers were defined in the server configuration and throw an error if not
+ const peers = server.peers;
+ if (!peers || !peers.length) {
+ console.error('dimse-config: ' + 'No DIMSE Peers provided.');
+ throw new Meteor.Error('dimse-config', 'No DIMSE Peers provided.');
+ }
+
+ // Add all the DIMSE peers, establishing the connections
+ console.log('Adding DIMSE peers');
+ try {
+ peers.forEach(peer => DIMSE.connection.addPeer(peer));
+ } catch(error) {
+ console.error('dimse-addPeers: ' + error);
+ throw new Meteor.Error('dimse-addPeers', error);
+ }
+};
+
+// Setup the DIMSE connections on startup or when the current server is changed
+Meteor.startup(() => {
+ CurrentServer.find().observe({
+ added: setupDIMSE,
+ changed: setupDIMSE
+ });
+});
diff --git a/config/dcm4cheeDIMSE.json b/config/dcm4cheeDIMSE.json
index abdfea201..e6da512db 100644
--- a/config/dcm4cheeDIMSE.json
+++ b/config/dcm4cheeDIMSE.json
@@ -17,6 +17,7 @@
}],
"dimse": [{
"name": "DCM4CHEE_DIMSE",
+ "wadoUriRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/wado",
"peers": [
{
"host": "localhost",
diff --git a/config/localhostOrthancDIMSE.json b/config/localhostOrthancDIMSE.json
index 60da9211d..1947a0baa 100644
--- a/config/localhostOrthancDIMSE.json
+++ b/config/localhostOrthancDIMSE.json
@@ -18,6 +18,7 @@
],
"dimse": [{
"name": "OrthancDIMSE",
+ "wadoUriRoot" : "http://52.87.58.190:8043/wado",
"peers": [
{
"host" : "localhost",
diff --git a/config/medkenOrthanc.json b/config/medkenOrthanc.json
index a58b94017..034fd605f 100644
--- a/config/medkenOrthanc.json
+++ b/config/medkenOrthanc.json
@@ -17,6 +17,7 @@
],
"dimse" : [{
"name": "ORTHANC_DIMSE",
+ "wadoUriRoot": "http://dicom-orthanc.medken.com/wado",
"peers": [
{
"host": "208.100.41.100",
diff --git a/config/orthancDIMSE.json b/config/orthancDIMSE.json
index 524aea2a7..3f1727c13 100644
--- a/config/orthancDIMSE.json
+++ b/config/orthancDIMSE.json
@@ -18,6 +18,7 @@
],
"dimse": [{
"name": "ORTHANC_DIMSE",
+ "wadoUriRoot": "http://localhost:8042/wado",
"peers": [
{
"host": "localhost",