~ubuntu-branches/ubuntu/quantal/ginkgocadx/quantal

« back to all changes in this revision

Viewing changes to src/cadxcore/main/controllers/pacscontroller.cpp

  • Committer: Package Import Robot
  • Author(s): Andreas Tille
  • Date: 2011-11-09 12:29:00 UTC
  • mfrom: (1.1.4)
  • Revision ID: package-import@ubuntu.com-20111109122900-idkd9vvhr31whz8z
Tags: 2.6.0.0~rc-1
* New upstream version
  Closes: #647413
* Rebuild against recent insighttoolkit
  Closes: #648167

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
*  
3
 
*  $Id: pacscontroller.cpp 4103 2011-08-31 06:33:25Z tovar $
 
3
*  $Id: pacscontroller.cpp 4351 2011-10-31 09:15:33Z tovar $
4
4
*  Ginkgo CADx Project
5
5
*
6
6
*  Copyright 2008-10 MetaEmotion S.L. All rights reserved.
615
615
 
616
616
                bool PACSController::ObtenerEstudio(void* connectionKey, const std::string& serverId, const std::string& uidEstudio, const std::string& AccNumber, IModeloDicom* pModelo, GNC::IProxyNotificadorProgreso* pNotificador)
617
617
                {
 
618
                        //ESTO ES PARA QUE FUNCIONE EL PACS DE SIEMENS, VER SI SE PUEDE QUITAR...
 
619
                        ReleaseConnection(connectionKey);
 
620
                        GetConnection(connectionKey);
 
621
 
618
622
                        GTRACE("PACSController::ObtenerEstudio( " << serverId.c_str() << ", " << uidEstudio.c_str() << ", " << uidSerie.c_str());
619
623
 
620
624
                        if (pModelo == NULL) {
644
648
                        e = newDicomElement(DCM_StudyID);
645
649
                        query.insert(e);
646
650
 
647
 
                        e = newDicomElement(DCM_StudyInstanceUID);
648
 
                        if (uidEstudio != "") {                         
649
 
                                e->putString(uidEstudio.c_str());                               
650
 
                        }
651
 
                        query.insert(e);
652
 
 
653
 
                        e = newDicomElement(DCM_AccessionNumber);
654
 
                        if (AccNumber != ""){
655
 
                                e->putString(AccNumber.c_str());                                
656
 
                        }
657
 
                        query.insert(e);
 
651
                        if (!AccNumber.empty()){
 
652
                                e = newDicomElement(DCM_AccessionNumber);
 
653
                                e->putString(AccNumber.c_str());
 
654
                            query.insert(e);
 
655
                        }
658
656
 
659
657
                        std::string localAET = GNC::Entorno::Instance()->GetDicomLocalAET();
660
658
 
661
659
                        DicomServer* server = listaServidores->GetServer(serverId);
662
 
                        if (server->GetRetrieveWithMove()) {
 
660
                        if (server->GetRetrieveSeries()) {
 
661
                                //buscar + descargar series...
 
662
                                //we have to know the series uids and obtain series by series
 
663
                                e = newDicomElement(DCM_QueryRetrieveLevel);
 
664
                                e->putString("SERIES");
 
665
                                query.insert(e);
 
666
 
 
667
                                if (!uidEstudio.empty()) {              
 
668
                                        e = newDicomElement(DCM_StudyInstanceUID);
 
669
                                        e->putString(uidEstudio.c_str());
 
670
                                        query.insert(e);
 
671
                                }
 
672
 
 
673
                                e = newDicomElement(DCM_SeriesInstanceUID);
 
674
                                query.insert(e);
 
675
 
 
676
                                e = newDicomElement(DCM_Modality);
 
677
                                query.insert(e);
 
678
 
 
679
                                std::list<std::string> listOfUIDS;
 
680
                                std::list<std::string> listOfModalities;
 
681
                                {
 
682
                                        NetClient<FindAssociation> f(connectionKey, "C-GET/FIND", pNotificador);
 
683
                                        f.SetMaxResults(-1);
 
684
 
 
685
                                        std::string localAET = GNC::Entorno::Instance()->GetDicomLocalAET();
 
686
 
 
687
                                        DicomServer* server = listaServidores->GetServer(serverId);
 
688
                                        if (server->useTLS) {
 
689
                                                f.SetTLS(server->GetCertificate(), server->GetPrivateKey(), server->GetverifyCredentials());
 
690
                                        }
 
691
                                        if (server->GetPACSUser() != "") {
 
692
                                                f.SetUserPass(server->GetPACSUser(), server->GetPACSPass());
 
693
                                        }
 
694
 
 
695
                                        f.QueryServer(&query, server, pModelo, localAET, CT_None);
 
696
 
 
697
                                        if (f.Stopped()){
 
698
                                                return false;
 
699
                                        }
 
700
                                        DcmStack* stack = f.GetResultStack();
 
701
 
 
702
                                        unsigned int numResults = 0;
 
703
 
 
704
                                        numResults = stack->card();
 
705
                                        
 
706
 
 
707
                                        for (unsigned int i = 0; i < numResults; i++) {
 
708
 
 
709
                                                if (stack->elem(i)->ident() == EVR_dataset) {
 
710
                                                        DcmDataset* dset = dynamic_cast<DcmDataset*>(stack->elem(i));
 
711
                                                        if (dset) {
 
712
                                                                OFString OFSSeriesInstanceUID;
 
713
                                                                OFString OFSeriesModality;
 
714
                                                                if ( dset->findAndGetOFString(DCM_SeriesInstanceUID, OFSSeriesInstanceUID).good() && dset->findAndGetOFString(DCM_Modality, OFSeriesModality).good() )
 
715
                                                                {
 
716
                                                                        std::string seriesInstanceUID(OFSSeriesInstanceUID.c_str());
 
717
                                                                        std::string seriesModality(OFSeriesModality.c_str());
 
718
 
 
719
                                                                        listOfUIDS.push_back(seriesInstanceUID);
 
720
                                                                        listOfModalities.push_back(seriesModality);
 
721
                                                                }
 
722
                                                        }
 
723
 
 
724
                                                }
 
725
                                        }
 
726
                                }
 
727
                                
 
728
                                for (std::list<std::string>::iterator itUIDS = listOfUIDS.begin(), itModalities = listOfModalities.begin();
 
729
                                        itUIDS != listOfUIDS.end(); itUIDS++, itModalities++) 
 
730
                                {
 
731
//ESTO ES PARA QUE FUNCIONE EL PACS DE SIEMENS, VER SI SE PUEDE QUITAR...
 
732
                                        ReleaseConnection(connectionKey);
 
733
                                        GetConnection(connectionKey);
 
734
//
 
735
                                        ObtenerSerie(connectionKey, serverId, (*itUIDS), pModelo, pNotificador, (*itModalities));
 
736
                                }
 
737
 
 
738
                                query.clear();  
 
739
                        } else if (server->GetRetrieveWithMove()) {
663
740
                                e = newDicomElement(DCM_QueryRetrieveLevel);
664
741
                                e->putString("STUDY");
665
742
                                query.insert(e);
 
743
                                
 
744
                                if (!uidEstudio.empty()) {              
 
745
                                        e = newDicomElement(DCM_StudyInstanceUID);
 
746
                                        e->putString(uidEstudio.c_str());
 
747
                                        query.insert(e);
 
748
                                }
666
749
 
667
750
                                int puerto = 11112;
668
751
                                {
698
781
                                //we have to know the series uids and obtain series by series
699
782
                                e = newDicomElement(DCM_QueryRetrieveLevel);
700
783
                                e->putString("SERIES");
701
 
                                query.insert(e);
702
 
 
 
784
                                
 
785
                                //needed to make find
703
786
                                e = newDicomElement(DCM_StudyInstanceUID);
 
787
                                if (uidEstudio.empty()) {
 
788
                                        //throw GIL::DICOM::PACSException(_Std("Invalid study query: No StudyInstanceUID provided"));
 
789
                                }
704
790
                                e->putString(uidEstudio.c_str());
705
791
                                query.insert(e);
706
 
 
 
792
                                
707
793
                                e = newDicomElement(DCM_SeriesInstanceUID);
708
794
                                query.insert(e);
709
795
 
719
805
                                if (server->useTLS) {
720
806
                                        f.SetTLS(server->GetCertificate(), server->GetPrivateKey(), server->GetverifyCredentials());
721
807
                                }
722
 
                                if (server->GetPACSUser() != "") {
 
808
                                if (!server->GetPACSUser().empty()) {
723
809
                                        f.SetUserPass(server->GetPACSUser(), server->GetPACSPass());
724
810
                                }
725
811
 
753
839
                                        }
754
840
                                }
755
841
 
756
 
                                query.clear();                          
 
842
                                query.clear();
757
843
 
758
844
                        }
759
845
 
786
872
                                e = newDicomElement(DCM_QueryRetrieveLevel);
787
873
                                e->putString("SERIES");
788
874
                                query.insert(e);
 
875
                                
 
876
                                e = newDicomElement(DCM_StudyInstanceUID);
 
877
                                query.insert(e);
789
878
 
790
879
                                e = newDicomElement(DCM_SeriesInstanceUID);
791
880
                                e->putString(uidSerie.c_str());
852
941
                        e->putString("SERIES");
853
942
                        query.insert(e);
854
943
 
 
944
                        /* WARNING YOU CANT INSERT EMPTY STUDY INSTANCE UID AT SERIES LEVEL
855
945
                        e = newDicomElement(DCM_StudyInstanceUID);
856
946
                        query.insert(e);
 
947
                        */
857
948
 
858
949
                        e = newDicomElement(DCM_SeriesInstanceUID);
859
950
                        e->putString(uidSerie.c_str());
1290
1381
                }
1291
1382
                //endregion
1292
1383
        };
1293
 
};
 
1384
};
 
 
b'\\ No newline at end of file'