| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 | 
							- /*=============================================================================
 
-   Library: CTK
 
-   Copyright (c) German Cancer Research Center,
 
-     Division of Medical and Biological Informatics
 
-   Licensed under the Apache License, Version 2.0 (the "License");
 
-   you may not use this file except in compliance with the License.
 
-   You may obtain a copy of the License at
 
-     http://www.apache.org/licenses/LICENSE-2.0
 
-   Unless required by applicable law or agreed to in writing, software
 
-   distributed under the License is distributed on an "AS IS" BASIS,
 
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-   See the License for the specific language governing permissions and
 
-   limitations under the License.
 
- =============================================================================*/
 
- // CTK includes
 
- #include "ctkDicomAvailableDataHelper.h"
 
- #include "ctkDicomAvailableDataHelper.h"
 
- #include "ctkDicomObjectLocatorCache.h"
 
- #include <ctkDICOMDataset.h>
 
- // DCMTK includes
 
- #include <dcmtk/dcmdata/dcdeftag.h>
 
- namespace ctkDicomAvailableDataHelper {
 
- //------------------------------------------------------------------------------
 
- class ctkDicomAvailableDataAccessorPrivate
 
- {
 
- //  Q_DECLARE_PUBLIC(ctkDicomAvailableDataAccessor);
 
- protected:
 
-   
 
- public:
 
-   ctkDicomAvailableDataAccessorPrivate(ctkDicomAppHosting::AvailableData& availableData) : 
 
-       m_AvailableData(availableData) { };
 
-   ctkDicomAppHosting::AvailableData& m_AvailableData;
 
- };
 
- //----------------------------------------------------------------------------
 
- ctkDicomAvailableDataAccessor::ctkDicomAvailableDataAccessor(ctkDicomAppHosting::AvailableData& ad)
 
-   : d_ptr(new ctkDicomAvailableDataAccessorPrivate(ad))
 
- {
 
- }
 
- ctkDicomAvailableDataAccessor::~ctkDicomAvailableDataAccessor() {};
 
- //----------------------------------------------------------------------------
 
- ctkDicomAppHosting::Patient* ctkDicomAvailableDataAccessor::getPatient(const ctkDicomAppHosting::Patient& patient) const
 
- {
 
-   const Q_D(ctkDicomAvailableDataAccessor);
 
-   ctkDicomAppHosting::AvailableData & ad(d->m_AvailableData);
 
-   for (QList<ctkDicomAppHosting::Patient>::Iterator pit = ad.patients.begin();
 
-     pit < ad.patients.end(); pit++)
 
-     {
 
-       if(pit->id==patient.id)
 
-         return &(*pit);
 
-     }
 
-   return NULL;
 
- }
 
- //----------------------------------------------------------------------------
 
- ctkDicomAppHosting::Study* ctkDicomAvailableDataAccessor::getStudy(const QString& studyUID) const
 
- {
 
-   const Q_D(ctkDicomAvailableDataAccessor);
 
-   ctkDicomAppHosting::AvailableData & ad(d->m_AvailableData);
 
-   for (QList<ctkDicomAppHosting::Patient>::Iterator pit = ad.patients.begin();
 
-     pit < ad.patients.end(); pit++)
 
-     {
 
-     for (QList<ctkDicomAppHosting::Study>::Iterator sit = pit->studies.begin();
 
-       sit < pit->studies.end(); sit++)
 
-       {
 
-           if(sit->studyUID==studyUID)
 
-             return &(*sit);
 
-       }
 
-     }
 
-   return NULL;
 
- }
 
- //----------------------------------------------------------------------------
 
- ctkDicomAppHosting::Series* ctkDicomAvailableDataAccessor::getSeries(const QString& seriesUID) const
 
- {
 
-   const Q_D(ctkDicomAvailableDataAccessor);
 
-   ctkDicomAppHosting::AvailableData & ad(d->m_AvailableData);
 
-   for (QList<ctkDicomAppHosting::Patient>::Iterator pit = ad.patients.begin();
 
-     pit < ad.patients.end(); pit++)
 
-     {
 
-     for (QList<ctkDicomAppHosting::Study>::Iterator sit = pit->studies.begin();
 
-       sit < pit->studies.end(); sit++)
 
-       {
 
-       for (QList<ctkDicomAppHosting::Series>::Iterator seit = sit->series.begin();
 
-         seit < sit->series.end(); seit++)
 
-         {
 
-           if(seit->seriesUID==seriesUID)
 
-             return &(*seit);
 
-         }
 
-       }
 
-     }
 
-   return NULL;
 
- }
 
- //----------------------------------------------------------------------------
 
- void ctkDicomAvailableDataAccessor::find(const ctkDicomAppHosting::Patient& patient, 
 
-                                          const QString& studyUID, 
 
-                                          const QString& seriesUID,
 
-                                          ctkDicomAppHosting::Patient*& patientResult, 
 
-                                          ctkDicomAppHosting::Study*& studyResult, 
 
-                                          ctkDicomAppHosting::Series*& seriesResult) const
 
- {
 
-   const Q_D(ctkDicomAvailableDataAccessor);
 
-   ctkDicomAppHosting::AvailableData & ad(d->m_AvailableData);
 
-   patientResult=NULL;
 
-   studyResult=NULL;
 
-   seriesResult=NULL;
 
-   for (QList<ctkDicomAppHosting::Patient>::Iterator pit = ad.patients.begin();
 
-     pit < ad.patients.end(); pit++)
 
-     {
 
-     if(pit->id==patient.id)
 
-       {
 
-       patientResult = &(*pit);
 
-       for (QList<ctkDicomAppHosting::Study>::Iterator sit = pit->studies.begin();
 
-         sit < pit->studies.end(); sit++)
 
-         {
 
-         if(sit->studyUID==studyUID)
 
-           {
 
-           studyResult = &(*sit);
 
-           for (QList<ctkDicomAppHosting::Series>::Iterator seit = sit->series.begin();
 
-             seit < sit->series.end(); seit++)
 
-             {
 
-             if(seit->seriesUID==seriesUID)
 
-               {
 
-               seriesResult=&(*seit);
 
-               return;
 
-               }
 
-             }
 
-             return;
 
-           }
 
-         }
 
-       return;
 
-       }
 
-     }
 
- }
 
- //----------------------------------------------------------------------------
 
- bool addToAvailableData(ctkDicomAppHosting::AvailableData& data, 
 
-                         ctkDicomObjectLocatorCache* objectLocatorCache, 
 
-                         const ctkDICOMDataset& dataset, 
 
-                         long length, 
 
-                         long offset, 
 
-                         const QString& uri)
 
- {
 
-   if(objectLocatorCache == NULL)
 
-     return false;
 
-   ctkDicomAppHosting::ObjectDescriptor objectDescriptor;
 
-   ctkDicomAppHosting::Study study;
 
-   ctkDicomAppHosting::Series series;
 
-   ctkDicomAppHosting::Patient patient;
 
-   patient.name = dataset.GetElementAsString(DCM_PatientName);
 
- qDebug()<<"Patient:  " << patient.name;
 
-   patient.id = dataset.GetElementAsString(DCM_PatientID);
 
-   patient.assigningAuthority = dataset.GetElementAsString(DCM_IssuerOfPatientID);
 
-   patient.sex = dataset.GetElementAsString(DCM_PatientSex);
 
-   patient.birthDate = dataset.GetElementAsString(DCM_PatientBirthDate);
 
-   study.studyUID = dataset.GetElementAsString(DCM_StudyInstanceUID);
 
-   series.seriesUID = dataset.GetElementAsString(DCM_SeriesInstanceUID);
 
-   QString uuid = QUuid::createUuid().toString();
 
-   objectDescriptor.descriptorUUID = uuid;
 
-   objectDescriptor.mimeType = "application/dicom";
 
-   objectDescriptor.classUID = dataset.GetElementAsString(DCM_SOPClassUID);
 
-   objectDescriptor.transferSyntaxUID = dataset.GetElementAsString(DCM_TransferSyntaxUID);
 
-   objectDescriptor.modality = dataset.GetElementAsString(DCM_Modality);
 
-   
 
-   ctkDicomAppHosting::Patient* ppatient;
 
-   ctkDicomAppHosting::Study* pstudy;
 
-   ctkDicomAppHosting::Series* pseries;
 
-   
 
-   ctkDicomAvailableDataAccessor(data).find(patient, study.studyUID, series.seriesUID,
 
-     ppatient, pstudy, pseries);
 
-   if(pseries==NULL)
 
-   {
 
-     series.objectDescriptors.append(objectDescriptor);
 
-     if(pstudy==NULL)
 
-     {
 
-       study.series.append(series);
 
-       if(ppatient==NULL)
 
-       {
 
-         patient.studies.append(study);
 
-         data.patients.append(patient);
 
-       }
 
-       else
 
-       {
 
-         ppatient->studies.append(study);
 
-       }
 
-     }
 
-     else
 
-     {
 
-       pstudy->series.append(series);
 
-     }
 
-   }
 
-   else
 
-   {
 
-     pseries->objectDescriptors.append(objectDescriptor);
 
-   }
 
-   ctkDicomAppHosting::ObjectLocator locator;
 
-   locator.locator = objectDescriptor.descriptorUUID;
 
-   locator.source = objectDescriptor.descriptorUUID;
 
-   locator.offset = offset;
 
-   locator.length = length;
 
-   locator.transferSyntax = objectDescriptor.transferSyntaxUID;
 
-   locator.URI = uri;
 
-   objectLocatorCache->insert(objectDescriptor.descriptorUUID, locator);
 
-   return true;
 
- }
 
- //----------------------------------------------------------------------------
 
- bool addToAvailableData(ctkDicomAppHosting::AvailableData& data,
 
-                         ctkDicomObjectLocatorCache* objectLocatorCache, 
 
-                         const QString& filename)
 
- {
 
-   QFileInfo fileinfo(filename);
 
-   qDebug() << filename << " " << fileinfo.exists();
 
-   ctkDICOMDataset ctkdataset;
 
-   ctkdataset.InitializeFromFile(filename, EXS_Unknown, EGL_noChange, 400);
 
-   QString uri("file:/");
 
-   uri.append(fileinfo.absoluteFilePath());
 
-   return addToAvailableData(data, objectLocatorCache, ctkdataset, fileinfo.size(), 0, uri);
 
- }
 
- }
 
 
  |