diff --git a/Modules/CppRestSdk/src/mitkRESTClientMicroService.cpp b/Modules/CppRestSdk/src/mitkRESTClientMicroService.cpp index c678de2062..709c09a38c 100644 --- a/Modules/CppRestSdk/src/mitkRESTClientMicroService.cpp +++ b/Modules/CppRestSdk/src/mitkRESTClientMicroService.cpp @@ -1,86 +1,133 @@ #include "mitkRESTClientMicroService.h" #include "mitkRESTUtil.h" #include mitk::RESTClientMicroService::RESTClientMicroService() {} mitk::RESTClientMicroService::~RESTClientMicroService() {} pplx::task mitk::RESTClientMicroService::Get(web::uri uri) { MitkClient *client = new MitkClient(uri); MITK_INFO << "Calling GET with " << utility::conversions::to_utf8string(uri.path()) << " on client " << mitk::RESTUtil::convertToUtf8(uri.authority().to_string()); MitkRequest getRequest(MitkRESTMethods::GET); - // getRequest.set_request_uri(uri); return client->request(getRequest).then([=](pplx::task responseTask) { - MitkResponse response = responseTask.get(); - auto status = response.status_code(); - MITK_INFO << " status: " << status; + try + { + MitkResponse response = responseTask.get(); + auto status = response.status_code(); + MITK_INFO << " status: " << status; - if (status != MitkRestStatusCodes::OK) + if (status != MitkRestStatusCodes::OK) + { + mitkThrow() << "response was not OK"; + } + try + { + utility::string_t requestContentType = response.headers().content_type(); + if (requestContentType != L"application/json") + { + response.headers().set_content_type(L"application/json"); + } + return response.extract_json().get(); + } + catch (...) + { + mitkThrow() << "extracting json went wrong"; + } + } + catch (...) { - mitkThrow() << "response was not OK"; + mitkThrow() << "getting response went wrong"; } - - return response.extract_json().get(); }); - // answer.wait(); - // return answer.get(); } pplx::task mitk::RESTClientMicroService::PUT(web::uri uri, web::json::value content) { MitkClient *client = new MitkClient(uri); MITK_INFO << "Calling PUT with " << utility::conversions::to_utf8string(uri.path()) << " on client " << mitk::RESTUtil::convertToUtf8(uri.authority().to_string()); MitkRequest putRequest(MitkRESTMethods::PUT); putRequest.set_body(content); return client->request(putRequest).then([=](pplx::task responseTask) { try { MitkResponse response = responseTask.get(); auto status = response.status_code(); MITK_INFO << " status: " << status; if (status != MitkRestStatusCodes::OK) { mitkThrow() << "response was not OK"; } - return response.extract_json().get(); + try + { + utility::string_t requestContentType = response.headers().content_type(); + if (requestContentType != L"application/json") + { + response.headers().set_content_type(L"application/json"); + } + return response.extract_json().get(); + } + catch (...) + { + mitkThrow() << "extracting json went wrong"; + } } catch (...) { + mitkThrow() << "getting response went wrong"; } }); } pplx::task mitk::RESTClientMicroService::POST(web::uri uri, web::json::value content) { MitkClient *client = new MitkClient(uri); MITK_INFO << "Calling POST with " << utility::conversions::to_utf8string(uri.path()) << " on client " << mitk::RESTUtil::convertToUtf8(uri.authority().to_string()); MitkRequest postRequest(MitkRESTMethods::POST); if (content != NULL) { postRequest.set_body(content); } return client->request(postRequest).then([=](pplx::task responseTask) { - MitkResponse response = responseTask.get(); - auto status = response.status_code(); - MITK_INFO << " status: " << status; + try + { + MitkResponse response = responseTask.get(); + auto status = response.status_code(); + MITK_INFO << " status: " << status; - if (status != MitkRestStatusCodes::Created) + if (status != MitkRestStatusCodes::Created) + { + mitkThrow() << "response was not Created"; + } + + try + { + utility::string_t requestContentType = response.headers().content_type(); + if (requestContentType != L"application/json") + { + response.headers().set_content_type(L"application/json"); + } + return response.extract_json().get(); + } + catch (...) + { + mitkThrow() << "extracting json went wrong"; + } + } + catch(...) { - mitkThrow() << "response was not Created"; + mitkThrow() << "getting response went wrong"; } - - return response.extract_json().get(); }); } diff --git a/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.cpp b/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.cpp index a1ad2ee048..a77cd8a3f7 100644 --- a/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.cpp +++ b/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.cpp @@ -1,188 +1,220 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkClientView.h" #include #include "cpprest/json.h" -#include #include #include #include #include #include #include const std::string QmitkClientView::VIEW_ID = "org.mitk.views.clientview"; QmitkClientView::QmitkClientView() : m_Ui(new Ui::QmitkClientView) { - mitk::ForceLinkage(); } QmitkClientView::~QmitkClientView() { delete m_Ui; } void QmitkClientView::CreateQtPartControl(QWidget *parent) { m_Ui->setupUi(parent); - connect(m_Ui->getPushButton, &QPushButton::clicked, this, &QmitkClientView::OnGetButtonClicked); + connect(m_Ui->getMultiplePushButton, &QPushButton::clicked, this, &QmitkClientView::OnGetMultipleButtonClicked); + connect(m_Ui->getSinglePushButton, &QPushButton::clicked, this, &QmitkClientView::OnGetSingleButtonClicked); connect(m_Ui->putPushButton, &QPushButton::clicked, this, &QmitkClientView::OnPutButtonClicked); connect(m_Ui->postPushButton, &QPushButton::clicked, this, &QmitkClientView::OnPostButtonClicked); connect(this, &QmitkClientView::UpdateProgressBar, this, &QmitkClientView::OnUpdateProgressBar); connect(this, SIGNAL(UpdateLabel(QString)), this, SLOT(OnUpdateLabel(QString))); m_Ui->progressBar->setValue(0); } void QmitkClientView::OnUpdateProgressBar() { m_Ui->progressBar->setValue(m_Ui->progressBar->value() + 5); } void QmitkClientView::OnUpdateLabel(QString text) { m_Ui->responseLabel->setText(text); } void QmitkClientView::SetFocus() {} -void QmitkClientView::OnGetButtonClicked() +void QmitkClientView::OnGetMultipleButtonClicked() { m_Ui->progressBar->setValue(0); - m_Ui->getPushButton->setDisabled(true); + m_Ui->getMultiplePushButton->setDisabled(true); us::ModuleContext *context = us::ModuleRegistry::GetModule(1)->GetModuleContext(); auto managerRef = context->GetServiceReference(); if (managerRef) { auto managerService = context->GetService(managerRef); if (managerService) { std::vector> tasks; for (int i = 0; i < 20; i++) { - pplx::task singleTask = managerService->SendRequest(L"https://jsonplaceholder.typicode.com/photos") + pplx::task singleTask = managerService->SendRequest(L"http://193.174.48.78:8090/dcm4chee-arc/aets/DCM4CHEE/rs/studies/1.2.840.113654.2.70.1.97144850941324808603541273584489321943/series/1.2.840.113654.2.70.1.15771179684190906938515254678965278540/instances") .then([=](pplx::task resultTask) { try { resultTask.get(); emit UpdateProgressBar(); } catch (const mitk::Exception &exception) { MITK_ERROR << exception.what(); return; } }); tasks.push_back(singleTask); } auto joinTask = pplx::when_all(begin(tasks), end(tasks)); joinTask.then([=](pplx::task resultTask) { try { resultTask.get(); emit UpdateLabel("All tasks finished"); } catch (const mitk::Exception &exception) { MITK_ERROR << exception.what(); return; } }); m_Ui->responseLabel->setText("Waiting for change"); } } - m_Ui->getPushButton->setEnabled(true); + m_Ui->getMultiplePushButton->setEnabled(true); +} + +void QmitkClientView::OnGetSingleButtonClicked() +{ + m_Ui->putPushButton->setDisabled(true); + us::ModuleContext *context = us::ModuleRegistry::GetModule(1)->GetModuleContext(); + + auto managerRef = context->GetServiceReference(); + if (managerRef) + { + auto managerService = context->GetService(managerRef); + if (managerService) + { + managerService + ->SendRequest(L"http://193.174.48.78:8090/dcm4chee-arc/aets/DCM4CHEE/rs/studies/1.2.840.113654.2.70.1.97144850941324808603541273584489321943/series/1.2.840.113654.2.70.1.15771179684190906938515254678965278540/instances") + .then([=](pplx::task resultTask) { + try + { + web::json::value result = resultTask.get(); + utility::string_t stringT = result.to_string(); + std::string stringStd(stringT.begin(), stringT.end()); + QString stringQ = QString::fromStdString(stringStd); + emit UpdateLabel(stringQ); + } + catch (const mitk::Exception &exception) + { + MITK_ERROR << exception.what(); + return; + } + }); + } + } + m_Ui->putPushButton->setEnabled(true); } void QmitkClientView::OnPutButtonClicked() { m_Ui->putPushButton->setDisabled(true); us::ModuleContext *context = us::ModuleRegistry::GetModule(1)->GetModuleContext(); auto managerRef = context->GetServiceReference(); if (managerRef) { auto managerService = context->GetService(managerRef); if (managerService) { web::json::value data; data[L"userId"] = web::json::value(1); data[L"id"] = web::json::value(1); data[L"title"] = web::json::value(U("this is a changed title")); data[L"body"] = web::json::value(U("and the body is changed as well")); managerService->SendRequest( L"https://jsonplaceholder.typicode.com/posts/1", mitk::IRESTManager::RequestType::put, data) .then([=](pplx::task resultTask) { try { web::json::value result = resultTask.get(); utility::string_t stringT = result.to_string(); std::string stringStd(stringT.begin(), stringT.end()); QString stringQ = QString::fromStdString(stringStd); emit UpdateLabel(stringQ); } catch (const mitk::Exception &exception) { MITK_ERROR << exception.what(); return; } }); } } m_Ui->putPushButton->setEnabled(true); } void QmitkClientView::OnPostButtonClicked() { m_Ui->postPushButton->setDisabled(true); us::ModuleContext *context = us::ModuleRegistry::GetModule(1)->GetModuleContext(); auto managerRef = context->GetServiceReference(); if (managerRef) { auto managerService = context->GetService(managerRef); if (managerService) { web::json::value data; data[L"userId"] = web::json::value(1); data[L"title"] = web::json::value(U("this is a new title")); data[L"body"] = web::json::value(U("this is a new body")); managerService ->SendRequest(L"https://jsonplaceholder.typicode.com/posts", mitk::IRESTManager::RequestType::post, data) .then([=](pplx::task resultTask) { try { web::json::value result = resultTask.get(); utility::string_t stringT = result.to_string(); std::string stringStd(stringT.begin(), stringT.end()); QString stringQ = QString::fromStdString(stringStd); emit UpdateLabel(stringQ); } catch (const mitk::Exception &exception) { MITK_ERROR << exception.what(); return; } }); } } m_Ui->postPushButton->setEnabled(true); } diff --git a/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.h b/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.h index 09d9d60b62..254e6db88f 100644 --- a/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.h +++ b/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.h @@ -1,62 +1,63 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef QmitkClientView_h #define QmitkClientView_h #include #include "cpprest/uri.h" #include #include #include namespace Ui { class QmitkClientView; } namespace mitk { class RESTManager; } class QmitkClientView : public QmitkAbstractView { Q_OBJECT public: static const std::string VIEW_ID; QmitkClientView(); ~QmitkClientView() override; void CreateQtPartControl(QWidget *parent) override; signals: void UpdateProgressBar(); void UpdateLabel(QString); private slots: - void OnGetButtonClicked(); + void OnGetMultipleButtonClicked(); + void OnGetSingleButtonClicked(); void OnPutButtonClicked(); void OnPostButtonClicked(); void OnUpdateProgressBar(); void OnUpdateLabel(QString text); private: void SetFocus() override; Ui::QmitkClientView *m_Ui; }; #endif diff --git a/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.ui b/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.ui index 7b3fa5cdfb..9c969fd671 100644 --- a/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.ui +++ b/Plugins/org.mitk.gui.qt.client/src/internal/QmitkClientView.ui @@ -1,79 +1,86 @@ QmitkClientView 0 0 253 206 Client View - + - GET + GET (single tasks) + + + + + + + GET (multiple tasks) PUT POST 24 This label changes after request true Qt::Vertical QSizePolicy::Expanding 20 220 diff --git a/Plugins/org.mitk.gui.qt.thread/src/internal/QmitkThreadView.cpp b/Plugins/org.mitk.gui.qt.thread/src/internal/QmitkThreadView.cpp index 9018601208..1845b1c9c5 100644 --- a/Plugins/org.mitk.gui.qt.thread/src/internal/QmitkThreadView.cpp +++ b/Plugins/org.mitk.gui.qt.thread/src/internal/QmitkThreadView.cpp @@ -1,148 +1,146 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkThreadView.h" #include #include -#include #include #include #include #include #include const std::string QmitkThreadView::VIEW_ID = "org.mitk.views.threadview"; QmitkThreadView::QmitkThreadView() : m_Ui(new Ui::QmitkThreadView) { - mitk::ForceLinkage(); } web::json::value QmitkThreadView::Notify(web::json::value data) { MITK_INFO << "Observer: Data in observer"; return data.at(U("key 1")); } QmitkThreadView::~QmitkThreadView() { delete m_Ui; } void QmitkThreadView::CreateQtPartControl(QWidget* parent) { m_Ui->setupUi(parent); connect(m_Ui->stopAllPushButton, &QPushButton::clicked, this, &QmitkThreadView::OnStopAllButtonClicked); connect(m_Ui->testListenCheckBox, &QCheckBox::clicked, this, &QmitkThreadView::OnTestListenCheckBoxClicked); connect(m_Ui->exampleListenCheckBox, &QCheckBox::clicked, this, &QmitkThreadView::OnExampleListenCheckBoxClicked); connect(m_Ui->port8090CheckBox, &QCheckBox::clicked, this, &QmitkThreadView::OnPort8090ListenCheckBoxClicked); connect(m_Ui->stopAllPushButton, &QPushButton::clicked, this, &QmitkThreadView::OnStopAllButtonClicked); } void QmitkThreadView::SetFocus() { } void QmitkThreadView::StartListening(web::uri uri) { us::ModuleContext *context = us::ModuleRegistry::GetModule(1)->GetModuleContext(); auto managerRef = context->GetServiceReference(); if (managerRef) { auto managerService = context->GetService(managerRef); if (managerService) { managerService->ReceiveRequest(uri, this); } } } void QmitkThreadView::StopListening(web::uri uri) { us::ModuleContext *context = us::ModuleRegistry::GetModule(1)->GetModuleContext(); auto managerRef = context->GetServiceReference(); if (managerRef) { auto managerService = context->GetService(managerRef); if (managerService) { managerService->HandleDeleteObserver(this,uri); } } } void QmitkThreadView::OnStopAllButtonClicked() { us::ModuleContext *context = us::ModuleRegistry::GetModule(1)->GetModuleContext(); auto managerRef = context->GetServiceReference(); if (managerRef) { auto managerService = context->GetService(managerRef); if (managerService) { managerService->HandleDeleteObserver(this); } } m_Ui->testListenCheckBox->setChecked(false); m_Ui->exampleListenCheckBox->setChecked(false); m_Ui->port8090CheckBox->setChecked(false); } void QmitkThreadView::OnTestListenCheckBoxClicked() { if (m_Ui->testListenCheckBox->isChecked()) { StartListening(L"http://localhost:8080/test"); } else { StopListening(L"http://localhost:8080/test"); } } void QmitkThreadView::OnExampleListenCheckBoxClicked() { if (m_Ui->exampleListenCheckBox->isChecked()) { StartListening(L"http://localhost:8080/example"); } else { StopListening(L"http://localhost:8080/example"); } } void QmitkThreadView::OnPort8090ListenCheckBoxClicked() { if (m_Ui->port8090CheckBox->isChecked()) { StartListening(L"http://localhost:8090"); } else { StopListening(L"http://localhost:8090"); } }