# HG changeset patch # User Sebastien Jodogne # Date 1399468948 -7200 # Node ID 557575fd93e9a0a36010c563f3cf746e48f9b093 # Parent 56a813a4714d7d2e9571d4b4f219327b69c70bd3 refactoring diff -r 56a813a4714d -r 557575fd93e9 CMakeLists.txt --- a/CMakeLists.txt Wed May 07 13:23:08 2014 +0200 +++ b/CMakeLists.txt Wed May 07 15:22:28 2014 +0200 @@ -205,6 +205,7 @@ OrthancServer/DicomProtocol/DicomFindAnswers.cpp OrthancServer/DicomProtocol/DicomServer.cpp OrthancServer/DicomProtocol/DicomUserConnection.cpp + OrthancServer/DicomProtocol/RemoteModalityParameters.cpp OrthancServer/DicomProtocol/ReusableDicomUserConnection.cpp OrthancServer/DicomModification.cpp OrthancServer/FromDcmtkBridge.cpp diff -r 56a813a4714d -r 557575fd93e9 OrthancServer/DicomProtocol/RemoteModalityParameters.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OrthancServer/DicomProtocol/RemoteModalityParameters.cpp Wed May 07 15:22:28 2014 +0200 @@ -0,0 +1,57 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2014 Medical Physics Department, CHU of Liege, + * Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * In addition, as a special exception, the copyright holders of this + * program give permission to link the code of its release with the + * OpenSSL project's "OpenSSL" library (or with modified versions of it + * that use the same license as the "OpenSSL" library), and distribute + * the linked executables. You must obey the GNU General Public License + * in all respects for all of the code used other than "OpenSSL". If you + * modify file(s) with this exception, you may extend this exception to + * your version of the file(s), but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files + * in the program, then also delete it here. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + **/ + + +#include "RemoteModalityParameters.h" + +#include "../../Core/OrthancException.h" + +namespace Orthanc +{ + RemoteModalityParameters::RemoteModalityParameters() + { + name_ = ""; + aet_ = "ORTHANC"; + host_ = "localhost"; + port_ = 104; + manufacturer_ = ModalityManufacturer_Generic; + } + + void RemoteModalityParameters::SetPort(int port) + { + if (port <= 0 || port >= 65535) + { + throw OrthancException(ErrorCode_ParameterOutOfRange); + } + + port_ = port; + } +} diff -r 56a813a4714d -r 557575fd93e9 OrthancServer/DicomProtocol/RemoteModalityParameters.h --- a/OrthancServer/DicomProtocol/RemoteModalityParameters.h Wed May 07 13:23:08 2014 +0200 +++ b/OrthancServer/DicomProtocol/RemoteModalityParameters.h Wed May 07 15:22:28 2014 +0200 @@ -43,50 +43,23 @@ // TODO Use the flyweight pattern for this class private: - std::string symbolicName_; - std::string aet_; - std::string host_; - int port_; - ModalityManufacturer manufacturer_; + std::string name_; + std::string aet_; + std::string host_; + int port_; + ModalityManufacturer manufacturer_; public: - RemoteModalityParameters() : - symbolicName_(""), - aet_(""), - host_(""), - port_(104), - manufacturer_(ModalityManufacturer_Generic) + RemoteModalityParameters(); + + const std::string& GetName() const { + return name_; } - RemoteModalityParameters(const std::string& symbolic, - const std::string& aet, - const std::string& host, - int port, - ModalityManufacturer manufacturer) : - symbolicName_(symbolic), - aet_(aet), - host_(host), - port_(port), - manufacturer_(manufacturer) + void SetName(const std::string& name) { - } - - RemoteModalityParameters(const std::string& aet, - const std::string& host, - int port, - ModalityManufacturer manufacturer) : - symbolicName_(""), - aet_(aet), - host_(host), - port_(port), - manufacturer_(manufacturer) - { - } - - const std::string& GetSymbolicName() const - { - return symbolicName_; + name_ = name; } const std::string& GetApplicationEntityTitle() const @@ -94,19 +67,41 @@ return aet_; } + void SetApplicationEntityTitle(const std::string& aet) + { + aet_ = aet; + } + const std::string& GetHost() const { return host_; } + void SetHost(const std::string& host) + { + host_ = host; + } + int GetPort() const { return port_; } + void SetPort(int port); + ModalityManufacturer GetManufacturer() const { return manufacturer_; } + + void SetManufacturer(ModalityManufacturer manufacturer) + { + manufacturer_ = manufacturer; + } + + void SetManufacturer(const std::string& manufacturer) + { + manufacturer_ = StringToModalityManufacturer(manufacturer); + } }; } diff -r 56a813a4714d -r 557575fd93e9 OrthancServer/OrthancFindRequestHandler.cpp --- a/OrthancServer/OrthancFindRequestHandler.cpp Wed May 07 13:23:08 2014 +0200 +++ b/OrthancServer/OrthancFindRequestHandler.cpp Wed May 07 15:22:28 2014 +0200 @@ -451,13 +451,14 @@ ModalityManufacturer manufacturer; { - std::string symbolicName, address; - int port; + RemoteModalityParameters modality; - if (!LookupDicomModalityUsingAETitle(callingAETitle, symbolicName, address, port, manufacturer)) + if (!LookupDicomModalityUsingAETitle(modality, callingAETitle)) { throw OrthancException("Unknown modality"); } + + manufacturer = modality.GetManufacturer(); } diff -r 56a813a4714d -r 557575fd93e9 OrthancServer/OrthancInitialization.cpp --- a/OrthancServer/OrthancInitialization.cpp Wed May 07 13:23:08 2014 +0200 +++ b/OrthancServer/OrthancInitialization.cpp Wed May 07 15:22:28 2014 +0200 @@ -50,6 +50,7 @@ static std::auto_ptr configuration_; static boost::filesystem::path defaultDirectory_; + static void ReadGlobalConfiguration(const char* configurationFile) { configuration_.reset(new Json::Value); @@ -242,11 +243,8 @@ - void GetDicomModalityUsingSymbolicName(const std::string& name, - std::string& aet, - std::string& address, - int& port, - ModalityManufacturer& manufacturer) + void GetDicomModalityUsingSymbolicName(RemoteModalityParameters& modality, + const std::string& name) { boost::mutex::scoped_lock lock(globalMutex_); @@ -265,19 +263,19 @@ try { - aet = modalities[name].get(0u, "").asString(); - address = modalities[name].get(1u, "").asString(); + modality.SetApplicationEntityTitle(modalities[name].get(0u, "").asString()); + modality.SetHost(modalities[name].get(1u, "").asString()); const Json::Value& portValue = modalities[name].get(2u, ""); try { - port = portValue.asInt(); + modality.SetPort(portValue.asInt()); } catch (std::runtime_error /* error inside JsonCpp */) { try { - port = boost::lexical_cast(portValue.asString()); + modality.SetPort(boost::lexical_cast(portValue.asString())); } catch (boost::bad_lexical_cast) { @@ -287,11 +285,11 @@ if (modalities[name].size() == 4) { - manufacturer = StringToModalityManufacturer(modalities[name].get(3u, "").asString()); + modality.SetManufacturer(modalities[name].get(3u, "").asString()); } else { - manufacturer = ModalityManufacturer_Generic; + modality.SetManufacturer(ModalityManufacturer_Generic); } } catch (OrthancException& e) @@ -304,10 +302,8 @@ - void GetOrthancPeer(const std::string& name, - std::string& url, - std::string& username, - std::string& password) + void GetOrthancPeer(OrthancPeerParameters& peer, + const std::string& name) { boost::mutex::scoped_lock lock(globalMutex_); @@ -325,19 +321,21 @@ throw OrthancException(ErrorCode_BadFileFormat); } + std::string url; + try { url = modalities[name].get(0u, "").asString(); if (modalities[name].size() == 1) { - username = ""; - password = ""; + peer.SetUsername(""); + peer.SetPassword(""); } else if (modalities[name].size() == 3) { - username = modalities[name].get(1u, "").asString(); - password = modalities[name].get(2u, "").asString(); + peer.SetUsername(modalities[name].get(1u, "").asString()); + peer.SetPassword(modalities[name].get(2u, "").asString()); } else { @@ -353,6 +351,8 @@ { url += '/'; } + + peer.SetUrl(url); } catch (OrthancException& e) { @@ -527,11 +527,8 @@ } - bool LookupDicomModalityUsingAETitle(const std::string& aet, - std::string& symbolicName, - std::string& address, - int& port, - ModalityManufacturer& manufacturer) + bool LookupDicomModalityUsingAETitle(RemoteModalityParameters& modality, + const std::string& aet) { std::set modalities; GetListOfDicomModalities(modalities); @@ -541,10 +538,9 @@ { try { - std::string thisAet; - GetDicomModalityUsingSymbolicName(*it, thisAet, address, port, manufacturer); + GetDicomModalityUsingSymbolicName(modality, *it); - if (IsSameAETitle(aet, thisAet)) + if (IsSameAETitle(aet, modality.GetApplicationEntityTitle())) { return true; } @@ -560,35 +556,27 @@ bool IsKnownAETitle(const std::string& aet) { - std::string symbolicName, address; - int port; - ModalityManufacturer manufacturer; - - return LookupDicomModalityUsingAETitle(aet, symbolicName, address, port, manufacturer); + RemoteModalityParameters modality; + return LookupDicomModalityUsingAETitle(modality, aet); } RemoteModalityParameters GetModalityUsingSymbolicName(const std::string& name) { - std::string aet, address; - int port; - ModalityManufacturer manufacturer; + RemoteModalityParameters modality; + GetDicomModalityUsingSymbolicName(modality, name); - GetDicomModalityUsingSymbolicName(name, aet, address, port, manufacturer); - - return RemoteModalityParameters(name, aet, address, port, manufacturer); + return modality; } RemoteModalityParameters GetModalityUsingAet(const std::string& aet) { - std::string name, address; - int port; - ModalityManufacturer manufacturer; + RemoteModalityParameters modality; - if (LookupDicomModalityUsingAETitle(aet, name, address, port, manufacturer)) + if (LookupDicomModalityUsingAETitle(modality, aet)) { - return RemoteModalityParameters(name, aet, address, port, manufacturer); + return modality; } else { diff -r 56a813a4714d -r 557575fd93e9 OrthancServer/OrthancInitialization.h --- a/OrthancServer/OrthancInitialization.h Wed May 07 13:23:08 2014 +0200 +++ b/OrthancServer/OrthancInitialization.h Wed May 07 15:22:28 2014 +0200 @@ -42,6 +42,61 @@ namespace Orthanc { + class OrthancPeerParameters + { + private: + std::string name_; + std::string url_; + std::string username_; + std::string password_; + + public: + OrthancPeerParameters() : url_("http://localhost:8042/") + { + } + + const std::string& GetName() const + { + return name_; + } + + void SetName(const std::string& name) + { + name_ = name; + } + + const std::string& GetUrl() const + { + return url_; + } + + void SetUrl(const std::string& url) + { + url_ = url; + } + + const std::string& GetUsername() const + { + return username_; + } + + void SetUsername(const std::string& username) + { + username_ = username; + } + + const std::string& GetPassword() const + { + return password_; + } + + void SetPassword(const std::string& password) + { + password_ = password; + } + }; + + void OrthancInitialize(const char* configurationFile = NULL); void OrthancFinalize(); @@ -55,22 +110,14 @@ bool GetGlobalBoolParameter(const std::string& parameter, bool defaultValue); - void GetDicomModalityUsingSymbolicName(const std::string& name, - std::string& aet, - std::string& address, - int& port, - ModalityManufacturer& manufacturer); + void GetDicomModalityUsingSymbolicName(RemoteModalityParameters& modality, + const std::string& name); - bool LookupDicomModalityUsingAETitle(const std::string& aet, - std::string& symbolicName, - std::string& address, - int& port, - ModalityManufacturer& manufacturer); + bool LookupDicomModalityUsingAETitle(RemoteModalityParameters& modality, + const std::string& aet); - void GetOrthancPeer(const std::string& name, - std::string& url, - std::string& username, - std::string& password); + void GetOrthancPeer(OrthancPeerParameters& peer, + const std::string& name); void GetListOfDicomModalities(std::set& target); diff -r 56a813a4714d -r 557575fd93e9 OrthancServer/OrthancRestApi/OrthancRestModalities.cpp --- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Wed May 07 13:23:08 2014 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Wed May 07 15:22:28 2014 +0200 @@ -385,17 +385,19 @@ return; } - std::string url, username, password; - GetOrthancPeer(remote, url, username, password); + OrthancPeerParameters peer; + GetOrthancPeer(peer, remote); // Configure the HTTP client HttpClient client; - if (username.size() != 0 && password.size() != 0) + if (peer.GetUsername().size() != 0 && + peer.GetPassword().size() != 0) { - client.SetCredentials(username.c_str(), password.c_str()); + client.SetCredentials(peer.GetUsername().c_str(), + peer.GetPassword().c_str()); } - client.SetUrl(url + "instances"); + client.SetUrl(peer.GetUrl() + "instances"); client.SetMethod(HttpMethod_Post); // Loop over the instances that are to be sent diff -r 56a813a4714d -r 557575fd93e9 Resources/Samples/WebApplications/DrawingDicomizer/orthanc.js --- a/Resources/Samples/WebApplications/DrawingDicomizer/orthanc.js Wed May 07 13:23:08 2014 +0200 +++ b/Resources/Samples/WebApplications/DrawingDicomizer/orthanc.js Wed May 07 15:22:28 2014 +0200 @@ -39,7 +39,7 @@ } }) .success(function( msg ) { - alert('The image has been dicomized! ' + msg); + alert('Your drawing has been dicomized!\n\n' + msg); }); return false;