Sfoglia il codice sorgente

Added ctkDicomAvailableDataAccessor

Ivo Wolf 14 anni fa
parent
commit
514c3e2989

+ 116 - 0
Plugins/org.commontk.dah.core/ctkDicomAppHostingTypesHelper.cpp

@@ -591,3 +591,119 @@ QList<ctkDicomAppHosting::ObjectLocator> ctkDicomSoapArrayOfObjectLocators::getA
   return list;
 }
 
+//------------------------------------------------------------------------------
+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;
+      }
+    }
+}

+ 28 - 0
Plugins/org.commontk.dah.core/ctkDicomAppHostingTypesHelper.h

@@ -173,4 +173,32 @@ struct org_commontk_dah_core_EXPORT ctkDicomSoapArrayOfObjectLocators : public Q
   static QList<ctkDicomAppHosting::ObjectLocator> getArray(const QtSoapType& array);
 };
 
+//----------------------------------------------------------------------------
+class ctkDicomAvailableDataAccessorPrivate;
+class org_commontk_dah_core_EXPORT ctkDicomAvailableDataAccessor : public QObject
+{
+public:
+  ctkDicomAvailableDataAccessor(ctkDicomAppHosting::AvailableData& ad);
+  virtual ~ctkDicomAvailableDataAccessor();
+
+  ctkDicomAppHosting::Patient* ctkDicomAvailableDataAccessor::getPatient(const ctkDicomAppHosting::Patient& patient) const;
+
+  ctkDicomAppHosting::Study* getStudy(const QString& studyUID) const;
+
+  ctkDicomAppHosting::Series* getSeries(const QString& seriesUID) const;
+
+  void ctkDicomAvailableDataAccessor::find(const ctkDicomAppHosting::Patient& patient, 
+                                         const QString& studyUID, 
+                                         const QString& seriesUID,
+                                         ctkDicomAppHosting::Patient*& patientResult, 
+                                         ctkDicomAppHosting::Study*& studyResult, 
+                                         ctkDicomAppHosting::Series*& seriesResult) const;
+
+protected:
+  QScopedPointer<ctkDicomAvailableDataAccessorPrivate> d_ptr;
+
+private:
+  Q_DECLARE_PRIVATE(ctkDicomAvailableDataAccessor);
+};
+
 #endif // CTKDICOMAPPHOSTINGTYPESHELPER_H