3
* $Id: comandopacs.cpp $
6
* Copyright 2008-12 MetaEmotion S.L. All rights reserved.
7
* http://ginkgo-cadx.com
9
* This file is licensed under LGPL v3 license.
10
* See License.txt for details
13
//#define _GINKGO_TRACE
19
#include <api/globals.h>
20
#include <api/ientorno.h>
22
#include <api/controllers/icontroladorlog.h>
23
#include <main/controllers/commandcontroller.h>
24
#include <api/controllers/ieventscontroller.h>
25
#include <api/controllers/icontroladorpermisos.h>
27
#include <eventos/mensajes.h>
29
#include <main/controllers/dcmtk/dicomservers.h>
31
#include "pacsdownloadcommand.h"
32
#include "comandoincluirhistorial.h"
33
#include "linkhistorycommand.h"
36
#define IDC_PACS_BUSCAR 61
37
#define IDC_PACS_DESCARGAR 62
38
#define IDC_PACS_SUBIR 64
40
#define ID_REFRESCO_PROGRESO 1
44
// Singleton de persistencia
48
PACSDownloadCommandParams::PACSDownloadCommandParams(const std::string& serverSeleccionado, const GIL::DICOM::DicomDataset& base, bool link) :
53
m_pModelo = GNC::GCS::Ptr<IModeloDicom>(new IModeloDicom());
55
if(serverSeleccionado == "") {
56
//usaremos el primer servidor (por defecto)
57
if(!DicomServerList::Instance()->Empty()) {
58
m_serverSeleccionado = DicomServerList::Instance()->GetDefaultServer()->ID;
60
throw GIL::DICOM::PACSException(_Std("There is not any Remote PACS configured"));
63
m_serverSeleccionado = serverSeleccionado;
69
PACSDownloadCommandParams::~PACSDownloadCommandParams()
73
PACSDownloadCommand::PACSDownloadCommand(PACSDownloadCommandParams* pParams) : IComando(pParams)
75
m_pPACSParams = pParams;
76
SetId(IDC_PACS_DESCARGAR);
77
EsperaA(IDC_PACS_DESCARGAR);
78
#if !defined(PARALLEL)
79
EsperaA(IDC_PACS_BUSCAR);
80
EsperaA(IDC_PACS_DESCARGAR);
81
EsperaA(IDC_PACS_SUBIR);
85
void PACSDownloadCommand::Execute()
87
std::string tarea= _Std("Downloading files ...");
88
if (!NotificarProgreso(0.0f,tarea)) {
92
GIL::DICOM::IPACSController* pCI = NULL;
95
pCI = GNC::GCS::IEntorno::Instance()->GetPACSController();
96
pCI->GetConnection(this);
97
pCI->QueryRetrieve(this, m_pPACSParams->m_serverSeleccionado, m_pPACSParams->m_pModelo, m_pPACSParams->m_base, this, m_pPACSParams->m_link);
99
catch (GinkgoNoServerFoundException& ) {
100
m_pPACSParams->m_error= _Std("Server ID not found. ID = ") + m_pPACSParams->m_serverSeleccionado;
101
m_pPACSParams->m_pModelo->Error = true;
103
catch (GIL::DICOM::PACSException& ex) {
104
m_pPACSParams->m_error = (const std::string)ex;
105
m_pPACSParams->m_pModelo->Error = true;
107
catch (std::exception& ex) {
108
m_pPACSParams->m_error= ex.what();
109
m_pPACSParams->m_pModelo->Error = true;
113
m_pPACSParams->m_error= _Std("Internal Error");
114
m_pPACSParams->m_pModelo->Error = true;
117
pCI->ReleaseConnection(this);
119
GTRACE(m_pPACSParams->m_pModelo);
120
NotificarProgreso(1.0f,tarea);
123
void PACSDownloadCommand::Update()
125
if (EstaAbortado()) {
130
if(!m_pPACSParams->m_error.empty()){
131
LOG_ERROR("C-MOVE/C-GET", "Error Downloading study: " << m_pPACSParams->m_error);
132
GNC::GCS::IEventsController::Instance()->ProcesarEvento(new GNC::GCS::Events::EventoMensajes(NULL, _Std("Error downloading study: ") + "\n" + m_pPACSParams->m_error, GNC::GCS::Events::EventoMensajes::PopUpMessage,false, GNC::GCS::Events::EventoMensajes::Error));
136
if (!m_pPACSParams->m_link)
137
{//move downloaded images to history
138
std::list<std::string> rutas;
139
std::string rutaImagen;
140
if (m_pPACSParams->m_pModelo.IsValid()) {
141
//listamos las imagenes que nos hemos bajado
142
for (IModeloDicom::ListaPacientesType::const_iterator it = m_pPACSParams->m_pModelo->ListaPacientes().begin(); it != m_pPACSParams->m_pModelo->ListaPacientes().end(); ++it) {
143
const IModeloPaciente& p = *it;
144
for (IModeloPaciente::ListaEstudiosType::const_iterator it2 = p.ListaEstudios().begin(); it2 != p.ListaEstudios().end(); ++it2) {
145
const IModeloEstudio& e = *it2;
146
for (IModeloEstudio::ListaSeriesType::const_iterator it3 = e.ListaSeries().begin(); it3 != e.ListaSeries().end(); ++it3) {
147
const IModeloSerie& s = *it3;
148
for (IModeloSerie::ListaImagenesType::const_iterator it4 = s.ListaImagenes().begin(); it4 != s.ListaImagenes().end(); ++it4) {
149
const IModeloImagen& im = *it4;
150
rutas.push_back(im.GetPathImagen());
157
//si ha descargado algo...
162
//se lanza un evento para incluir las imagenes en el historial
163
GADAPI::ComandoIncluirHistorial::ComandoIncluirHistorialParams* pParams = new GADAPI::ComandoIncluirHistorial::ComandoIncluirHistorialParams(rutas, true, GNC::GCS::IHistoryController::TAA_MOVE);
164
GADAPI::ComandoIncluirHistorial::ComandoIncluirHistorial * pCmd = new GADAPI::ComandoIncluirHistorial::ComandoIncluirHistorial(pParams);
165
GNC::GCS::ICommandController::Instance()->ProcessAsync(_Std("Including files..."), pCmd, NULL);
170
GADAPI::LinkHistoryCommand::LinkHistoryCommandParams* pParams = new GADAPI::LinkHistoryCommand::LinkHistoryCommandParams(m_pPACSParams->m_pModelo);
171
GADAPI::LinkHistoryCommand::LinkHistoryCommand * pCmd = new GADAPI::LinkHistoryCommand::LinkHistoryCommand(pParams);
172
GNC::GCS::ICommandController::Instance()->ProcessAsync(_Std("Including files..."), pCmd, NULL);
179
bool PACSDownloadCommand::NotificarProgreso(float progresoNormalizado,const std::string &texto) {
184
return IComando::NotificarProgreso(progresoNormalizado, texto);
187
void PACSDownloadCommand::LiberarRecursos()