Przeglądaj źródła

Merge branch 'xnat-assessment-support'

* xnat-assessment-support:
  Use ctkXnatResource for types which directly use xnat:abstractResource.
  Revert "ctkBackTrace: bug fix discovered on MacOSX, the method signature was wrong"
  QDebug header include case-corrected
  FEATURE-ADD: adding all the xnat properties in the description of the ctkXnatObject so that they appear as tooltip in the tree.
  CRASH-FIX: When the http request fails, a ctkException is thrown and never catched at the ctkXnat* level, making the whole application to crash, we need to try-catch every instance of the method httpResults(), it is done here at the Experiment level
  removing unused qdebugs
  removing unused qdebugs
  The Assessor support is working properly, including the download function
  adding some debug information, temporary
  adding the assessor related methods in the session class
  adding the assessor related methods in the session class
  adding assessors in the cmakelists
  removing unused includes
  adding the XSI schema types for assessors
  adding the assessor, assessor folder and assessor resource classes
  ctkBackTrace: bug fix discovered on MacOSX, the method signature was wrong

Conflicts:
	Applications/ctkXnatTreeBrowser/ctkXnatTreeBrowserMainWindow.cpp
Sascha Zelzer 11 lat temu
rodzic
commit
1d7af8dd2b

+ 2 - 2
Libs/XNAT/Core/CMakeLists.txt

@@ -20,11 +20,11 @@ set(KIT_SRCS
   ctkXnatProject.cpp
   ctkXnatProject.cpp
   ctkXnatReconstruction.cpp
   ctkXnatReconstruction.cpp
   ctkXnatReconstructionFolder.cpp
   ctkXnatReconstructionFolder.cpp
-  ctkXnatReconstructionResource.cpp
   ctkXnatResource.cpp
   ctkXnatResource.cpp
   ctkXnatScan.cpp
   ctkXnatScan.cpp
   ctkXnatScanFolder.cpp
   ctkXnatScanFolder.cpp
-  ctkXnatScanResource.cpp
+  ctkXnatAssessor.cpp
+  ctkXnatAssessorFolder.cpp
   ctkXnatSession.cpp
   ctkXnatSession.cpp
   ctkXnatSettings.cpp
   ctkXnatSettings.cpp
   ctkXnatSubject.cpp
   ctkXnatSubject.cpp

+ 15 - 37
Libs/XNAT/Core/ctkXnatReconstructionResource.cpp

@@ -19,81 +19,59 @@
 
 
 =============================================================================*/
 =============================================================================*/
 
 
-#include "ctkXnatReconstructionResource.h"
+#include "ctkXnatAssessor.h"
 
 
 #include "ctkXnatSession.h"
 #include "ctkXnatSession.h"
-#include "ctkXnatFile.h"
+#include "ctkXnatObject.h"
 #include "ctkXnatObjectPrivate.h"
 #include "ctkXnatObjectPrivate.h"
-#include "ctkXnatReconstruction.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-class ctkXnatReconstructionResourcePrivate : public ctkXnatObjectPrivate
+class ctkXnatAssessorPrivate : public ctkXnatObjectPrivate
 {
 {
 public:
 public:
 
 
-  ctkXnatReconstructionResourcePrivate()
+  ctkXnatAssessorPrivate()
   : ctkXnatObjectPrivate()
   : ctkXnatObjectPrivate()
   {
   {
   }
   }
 
 
   void reset()
   void reset()
   {
   {
-//    uri.clear();
+    uri.clear();
   }
   }
 
 
-//  QString uri;
+  QString uri;
 };
 };
 
 
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-ctkXnatReconstructionResource::ctkXnatReconstructionResource(ctkXnatObject* parent, const QString& schemaType)
-: ctkXnatObject(*new ctkXnatReconstructionResourcePrivate(), parent, schemaType)
+ctkXnatAssessor::ctkXnatAssessor(ctkXnatObject* parent, const QString& schemaType)
+: ctkXnatObject(*new ctkXnatAssessorPrivate(), parent, schemaType)
 {
 {
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-ctkXnatReconstructionResource::~ctkXnatReconstructionResource()
+ctkXnatAssessor::~ctkXnatAssessor()
 {
 {
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-QString ctkXnatReconstructionResource::resourceUri() const
+QString ctkXnatAssessor::resourceUri() const
 {
 {
-  return QString("%1/resources/%2").arg(parent()->resourceUri(), this->property("label"));
+  return QString("%1/%2").arg(parent()->resourceUri(), this->id());
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-void ctkXnatReconstructionResource::reset()
+void ctkXnatAssessor::reset()
 {
 {
   ctkXnatObject::reset();
   ctkXnatObject::reset();
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-void ctkXnatReconstructionResource::fetchImpl()
+void ctkXnatAssessor::fetchImpl()
 {
 {
-  QString reconstructionResourceFilesUri = this->resourceUri() + "/files";
-  ctkXnatSession* const session = this->session();
-  QUuid queryId = session->httpGet(reconstructionResourceFilesUri);
-
-  QList<ctkXnatObject*> files = session->httpResults(queryId,
-                                                     ctkXnatDefaultSchemaTypes::XSI_FILE);
-
-  foreach (ctkXnatObject* file, files)
-  {
-    QString label = file->property("Name");
-    if (label.isEmpty())
-    {
-      file->setProperty("ID", label);
-    }
-
-    this->add(file);
-  }
-}
-
-//----------------------------------------------------------------------------
-void ctkXnatReconstructionResource::download(const QString& filename)
-{
-  this->session()->download(this, filename);
+  this->fetchResources();
+  this->fetchResources("/out/resources");
 }
 }

+ 8 - 15
Libs/XNAT/Core/ctkXnatScanResource.h

@@ -19,44 +19,37 @@
 
 
 =============================================================================*/
 =============================================================================*/
 
 
-#ifndef ctkXnatScanResource_h
-#define ctkXnatScanResource_h
+#ifndef ctkXnatAssessor_h
+#define ctkXnatAssessor_h
 
 
 #include "ctkXNATCoreExport.h"
 #include "ctkXNATCoreExport.h"
 
 
 #include "ctkXnatObject.h"
 #include "ctkXnatObject.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
-class ctkXnatConnection;
-class ctkXnatScan;
-class ctkXnatScanResourcePrivate;
+class ctkXnatAssessorPrivate;
 
 
 /**
 /**
  * @ingroup XNAT_Core
  * @ingroup XNAT_Core
  */
  */
-class CTK_XNAT_CORE_EXPORT ctkXnatScanResource : public ctkXnatObject
+class CTK_XNAT_CORE_EXPORT ctkXnatAssessor : public ctkXnatObject
 {
 {
 
 
 public:
 public:
 
 
-  ctkXnatScanResource(ctkXnatObject* parent = 0,
-                      const QString& schemaType = ctkXnatDefaultSchemaTypes::XSI_SCAN_RESOURCE);
+  ctkXnatAssessor(ctkXnatObject* parent = 0, const QString& schemaType = ctkXnatDefaultSchemaTypes::XSI_ASSESSOR);
 
 
-  virtual ~ctkXnatScanResource();
+  virtual ~ctkXnatAssessor();
 
 
-  QString resourceUri() const;
+  virtual QString resourceUri() const;
 
 
   void reset();
   void reset();
 
 
-  void download(const QString& filename);
-
 private:
 private:
 
 
-  friend class qRestResult;
   virtual void fetchImpl();
   virtual void fetchImpl();
 
 
-  Q_DECLARE_PRIVATE(ctkXnatScanResource)
-
+  Q_DECLARE_PRIVATE(ctkXnatAssessor)
 };
 };
 
 
 #endif
 #endif

+ 22 - 33
Libs/XNAT/Core/ctkXnatScanResource.cpp

@@ -19,80 +19,69 @@
 
 
 =============================================================================*/
 =============================================================================*/
 
 
-#include "ctkXnatScanResource.h"
+#include "ctkXnatAssessorFolder.h"
 
 
 #include "ctkXnatSession.h"
 #include "ctkXnatSession.h"
+#include "ctkXnatExperiment.h"
 #include "ctkXnatObjectPrivate.h"
 #include "ctkXnatObjectPrivate.h"
-#include "ctkXnatScan.h"
-#include "ctkXnatFile.h"
+#include "ctkXnatAssessor.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
-
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-class ctkXnatScanResourcePrivate : public ctkXnatObjectPrivate
+class ctkXnatAssessorFolderPrivate : public ctkXnatObjectPrivate
 {
 {
 public:
 public:
 
 
-  ctkXnatScanResourcePrivate()
+  ctkXnatAssessorFolderPrivate()
   : ctkXnatObjectPrivate()
   : ctkXnatObjectPrivate()
   {
   {
   }
   }
 
 
   void reset()
   void reset()
   {
   {
-//    uri.clear();
   }
   }
 
 
-//  QString uri;
 };
 };
 
 
-
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-ctkXnatScanResource::ctkXnatScanResource(ctkXnatObject* parent, const QString& schemaType)
-: ctkXnatObject(*new ctkXnatScanResourcePrivate(), parent, schemaType)
+ctkXnatAssessorFolder::ctkXnatAssessorFolder(ctkXnatObject* parent)
+  : ctkXnatObject(*new ctkXnatAssessorFolderPrivate(), parent, QString::null)
 {
 {
+  
+  this->setProperty("ID", "assessors");
+  this->setProperty("label", "Assessments");
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-ctkXnatScanResource::~ctkXnatScanResource()
+ctkXnatAssessorFolder::~ctkXnatAssessorFolder()
 {
 {
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-QString ctkXnatScanResource::resourceUri() const
+QString ctkXnatAssessorFolder::resourceUri() const
 {
 {
-  return QString("%1/resources/%2").arg(parent()->resourceUri(), this->property("label"));
+  return QString("%1/%2").arg(parent()->resourceUri(), this->id());
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-void ctkXnatScanResource::reset()
+void ctkXnatAssessorFolder::reset()
 {
 {
   ctkXnatObject::reset();
   ctkXnatObject::reset();
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-void ctkXnatScanResource::fetchImpl()
+void ctkXnatAssessorFolder::fetchImpl()
 {
 {
-  QString scanResourceFilesUri = this->resourceUri() + "/files";
+  QString assessorsUri = this->resourceUri();
   ctkXnatSession* const session = this->session();
   ctkXnatSession* const session = this->session();
-  QUuid queryId = session->httpGet(scanResourceFilesUri);
+  QUuid queryId = session->httpGet(assessorsUri);
 
 
-  QList<ctkXnatObject*> files = session->httpResults(queryId,
-                                                     ctkXnatDefaultSchemaTypes::XSI_FILE);
+  QList<ctkXnatObject*> assessors = session->httpResults(queryId,
+                                                     ctkXnatDefaultSchemaTypes::XSI_ASSESSOR);
 
 
-  foreach (ctkXnatObject* file, files)
+  foreach (ctkXnatObject* assessor, assessors)
   {
   {
-    QString label = file->property("Name");
-    if (!label.isEmpty())
-    {
-      file->setProperty("ID", label);
-    }
-    this->add(file);
+    
+    this->add(assessor);
   }
   }
 }
 }
-
-//----------------------------------------------------------------------------
-void ctkXnatScanResource::download(const QString& filename)
-{
-  this->session()->download(this, filename);
-}

+ 7 - 14
Libs/XNAT/Core/ctkXnatReconstructionResource.h

@@ -19,44 +19,37 @@
 
 
 =============================================================================*/
 =============================================================================*/
 
 
-#ifndef ctkXnatReconstructionResource_h
-#define ctkXnatReconstructionResource_h
+#ifndef ctkXnatAssessorFolder_h
+#define ctkXnatAssessorFolder_h
 
 
 #include "ctkXNATCoreExport.h"
 #include "ctkXNATCoreExport.h"
 
 
 #include "ctkXnatObject.h"
 #include "ctkXnatObject.h"
-#include "ctkXnatDefaultSchemaTypes.h"
 
 
-class ctkXnatConnection;
-class ctkXnatReconstructionResourcePrivate;
-class ctkXnatReconstruction;
+class ctkXnatAssessorFolderPrivate;
 
 
 /**
 /**
  * @ingroup XNAT_Core
  * @ingroup XNAT_Core
  */
  */
-class CTK_XNAT_CORE_EXPORT ctkXnatReconstructionResource : public ctkXnatObject
+class CTK_XNAT_CORE_EXPORT ctkXnatAssessorFolder : public ctkXnatObject
 {
 {
 
 
 public:
 public:
 
 
-  ctkXnatReconstructionResource(ctkXnatObject* parent = 0,
-                                const QString& schemaType = ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION_RESOURCE);
+  ctkXnatAssessorFolder(ctkXnatObject* parent = NULL);
 
 
-  virtual ~ctkXnatReconstructionResource();
+  virtual ~ctkXnatAssessorFolder();
 
 
   virtual QString resourceUri() const;
   virtual QString resourceUri() const;
 
 
   void reset();
   void reset();
 
 
-  void download(const QString& filename);
-
 private:
 private:
 
 
   friend class qRestResult;
   friend class qRestResult;
   virtual void fetchImpl();
   virtual void fetchImpl();
 
 
-  Q_DECLARE_PRIVATE(ctkXnatReconstructionResource)
-
+  Q_DECLARE_PRIVATE(ctkXnatAssessorFolder)
 };
 };
 
 
 #endif
 #endif

+ 4 - 5
Libs/XNAT/Core/ctkXnatDefaultSchemaTypes.cpp

@@ -21,12 +21,11 @@
 
 
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
+QString ctkXnatDefaultSchemaTypes::XSI_PROJECT = "xnat:projectData";
+QString ctkXnatDefaultSchemaTypes::XSI_SUBJECT = "xnat:subjectData";
 QString ctkXnatDefaultSchemaTypes::XSI_EXPERIMENT = "xnat:experimentData";
 QString ctkXnatDefaultSchemaTypes::XSI_EXPERIMENT = "xnat:experimentData";
+QString ctkXnatDefaultSchemaTypes::XSI_SCAN = "xnat:imageScanData";
+QString ctkXnatDefaultSchemaTypes::XSI_ASSESSOR = "xnat:imageAssessorData";
 QString ctkXnatDefaultSchemaTypes::XSI_FILE = "xnat:abstractResource";
 QString ctkXnatDefaultSchemaTypes::XSI_FILE = "xnat:abstractResource";
-QString ctkXnatDefaultSchemaTypes::XSI_PROJECT = "xnat:projectData";
 QString ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION = "xnat:reconstructedImageData";
 QString ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION = "xnat:reconstructedImageData";
-QString ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION_RESOURCE = "xnat:reconstructionResource";
-QString ctkXnatDefaultSchemaTypes::XSI_SCAN = "xnat:imageScanData";
-QString ctkXnatDefaultSchemaTypes::XSI_SCAN_RESOURCE = "xnat:scanResource";
-QString ctkXnatDefaultSchemaTypes::XSI_SUBJECT = "xnat:subjectData";
 QString ctkXnatDefaultSchemaTypes::XSI_RESOURCE = "xnat:resource";
 QString ctkXnatDefaultSchemaTypes::XSI_RESOURCE = "xnat:resource";

+ 4 - 5
Libs/XNAT/Core/ctkXnatDefaultSchemaTypes.h

@@ -31,14 +31,13 @@
  */
  */
 struct CTK_XNAT_CORE_EXPORT ctkXnatDefaultSchemaTypes
 struct CTK_XNAT_CORE_EXPORT ctkXnatDefaultSchemaTypes
 {
 {
+  static QString XSI_PROJECT; // = "xnat:projectData"
+  static QString XSI_SUBJECT; // = "xnat:subjectData"
   static QString XSI_EXPERIMENT; // = "xnat:experimentData"
   static QString XSI_EXPERIMENT; // = "xnat:experimentData"
+  static QString XSI_SCAN; // = "xnat:imageScanData"
+  static QString XSI_ASSESSOR; // = "xnat:imageAssessorData"
   static QString XSI_FILE; // = "xnat:abstractResource"
   static QString XSI_FILE; // = "xnat:abstractResource"
-  static QString XSI_PROJECT; // = "xnat:projectData"
   static QString XSI_RECONSTRUCTION; // = "xnat:reconstructedImageData"
   static QString XSI_RECONSTRUCTION; // = "xnat:reconstructedImageData"
-  static QString XSI_RECONSTRUCTION_RESOURCE; // = "xnat:reconstructionResource"
-  static QString XSI_SCAN; // = "xnat:imageScanData"
-  static QString XSI_SCAN_RESOURCE; // = "xnat:scanResource"
-  static QString XSI_SUBJECT; // = "xnat:subjectData"
   static QString XSI_RESOURCE; // = "xnat:resource"
   static QString XSI_RESOURCE; // = "xnat:resource"
 };
 };
 
 

+ 49 - 5
Libs/XNAT/Core/ctkXnatExperiment.cpp

@@ -26,10 +26,14 @@
 #include "ctkXnatSubject.h"
 #include "ctkXnatSubject.h"
 #include "ctkXnatScan.h"
 #include "ctkXnatScan.h"
 #include "ctkXnatReconstruction.h"
 #include "ctkXnatReconstruction.h"
+#include "ctkXnatAssessor.h"
 #include "ctkXnatScanFolder.h"
 #include "ctkXnatScanFolder.h"
 #include "ctkXnatReconstructionFolder.h"
 #include "ctkXnatReconstructionFolder.h"
+#include "ctkXnatAssessorFolder.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
+#include <QDebug>
+
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 class ctkXnatExperimentPrivate : public ctkXnatObjectPrivate
 class ctkXnatExperimentPrivate : public ctkXnatObjectPrivate
 {
 {
@@ -79,8 +83,17 @@ void ctkXnatExperiment::fetchImpl()
   ctkXnatSession* const session = this->session();
   ctkXnatSession* const session = this->session();
   QUuid scansQueryId = session->httpGet(scansUri);
   QUuid scansQueryId = session->httpGet(scansUri);
 
 
-  QList<ctkXnatObject*> scans = session->httpResults(scansQueryId,
-                                                     ctkXnatDefaultSchemaTypes::XSI_SCAN);
+  QList<ctkXnatObject*> scans;
+  
+  try
+  {
+    scans = session->httpResults(scansQueryId,
+				 ctkXnatDefaultSchemaTypes::XSI_SCAN);
+  }
+  catch (const ctkException& e)
+  {
+    qWarning() << QString(e.what());
+  }
 
 
   if (!scans.isEmpty())
   if (!scans.isEmpty())
   {
   {
@@ -91,13 +104,44 @@ void ctkXnatExperiment::fetchImpl()
   QString reconstructionsUri = this->resourceUri() + "/reconstructions";
   QString reconstructionsUri = this->resourceUri() + "/reconstructions";
   QUuid reconstructionsQueryId = session->httpGet(reconstructionsUri);
   QUuid reconstructionsQueryId = session->httpGet(reconstructionsUri);
 
 
-  QList<ctkXnatObject*> reconstructions = session->httpResults(reconstructionsQueryId,
-                                                               ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION);
-
+  QList<ctkXnatObject*> reconstructions;
+  try
+  {
+    reconstructions = session->httpResults(reconstructionsQueryId,
+					   ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION);
+  }
+  catch (const ctkException& e)
+  {
+    qWarning() << QString(e.what());
+  }
+  
   if (!reconstructions.isEmpty())
   if (!reconstructions.isEmpty())
   {
   {
     ctkXnatReconstructionFolder* reconstructionFolder = new ctkXnatReconstructionFolder();
     ctkXnatReconstructionFolder* reconstructionFolder = new ctkXnatReconstructionFolder();
     this->add(reconstructionFolder);
     this->add(reconstructionFolder);
   }
   }
+
+  QString assessorsUri = this->resourceUri() + "/assessors";
+  QUuid assessorsQueryId = session->httpGet(assessorsUri);
+  
+  QList<ctkXnatObject*> assessors;
+  
+  try
+  {
+    assessors = session->httpResults(assessorsQueryId,
+				     ctkXnatDefaultSchemaTypes::XSI_ASSESSOR);
+  }
+  catch (const ctkException& e)
+  {
+    qWarning() << QString(e.what());
+  }
+
+  if (!assessors.isEmpty())
+  {
+    ctkXnatAssessorFolder* assessorFolder = new ctkXnatAssessorFolder(this);
+    this->add(assessorFolder);
+  }
+
   this->fetchResources();
   this->fetchResources();
+
 }
 }

+ 0 - 2
Libs/XNAT/Core/ctkXnatExperiment.h

@@ -27,9 +27,7 @@
 #include "ctkXnatObject.h"
 #include "ctkXnatObject.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
-class ctkXnatConnection;
 class ctkXnatExperimentPrivate;
 class ctkXnatExperimentPrivate;
-class ctkXnatSubject;
 
 
 /**
 /**
  * @ingroup XNAT_Core
  * @ingroup XNAT_Core

+ 0 - 1
Libs/XNAT/Core/ctkXnatListModel.cpp

@@ -26,7 +26,6 @@
 #include "ctkXnatExperiment.h"
 #include "ctkXnatExperiment.h"
 #include "ctkXnatScanFolder.h"
 #include "ctkXnatScanFolder.h"
 #include "ctkXnatScan.h"
 #include "ctkXnatScan.h"
-#include "ctkXnatScanResource.h"
 
 
 #include <iostream>
 #include <iostream>
 #include <typeinfo>
 #include <typeinfo>

+ 6 - 4
Libs/XNAT/Core/ctkXnatObject.cpp

@@ -312,9 +312,9 @@ void ctkXnatObject::save()
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-void ctkXnatObject::fetchResources()
+void ctkXnatObject::fetchResources(const QString& path)
 {
 {
-  QString query = this->resourceUri() + "/resources";
+  QString query = this->resourceUri() + path;
   ctkXnatSession* const session = this->session();
   ctkXnatSession* const session = this->session();
   QUuid queryId = session->httpGet(query);
   QUuid queryId = session->httpGet(query);
 
 
@@ -324,10 +324,12 @@ void ctkXnatObject::fetchResources()
   foreach (ctkXnatObject* resource, resources)
   foreach (ctkXnatObject* resource, resources)
   {
   {
     QString label = resource->property("label");
     QString label = resource->property("label");
-    if (!label.isEmpty())
+    if (label.isEmpty())
     {
     {
-      resource->setProperty("ID", label);
+      label = "NO NAME";
     }
     }
+
+    resource->setProperty("label", label);
     this->add(resource);
     this->add(resource);
   }
   }
 }
 }

+ 3 - 3
Libs/XNAT/Core/ctkXnatObject.h

@@ -126,9 +126,6 @@ public:
   /// Deletes the object on the XNAT server and removes it from its parent.
   /// Deletes the object on the XNAT server and removes it from its parent.
   void erase();
   void erase();
 
 
-  /// Fetches the resources of the object
-  virtual void fetchResources();
-
   virtual void download(const QString&);
   virtual void download(const QString&);
   virtual void upload(const QString&);
   virtual void upload(const QString&);
 
 
@@ -161,6 +158,9 @@ protected:
   /// that stores the current object.
   /// that stores the current object.
   ctkXnatSession* session() const;
   ctkXnatSession* session() const;
 
 
+  /// Fetches the resources of the object
+  virtual void fetchResources(const QString &path = "/resources");
+
   /// The private implementation part of the object.
   /// The private implementation part of the object.
   const QScopedPointer<ctkXnatObjectPrivate> d_ptr;
   const QScopedPointer<ctkXnatObjectPrivate> d_ptr;
 
 

+ 0 - 1
Libs/XNAT/Core/ctkXnatReconstruction.cpp

@@ -24,7 +24,6 @@
 #include "ctkXnatSession.h"
 #include "ctkXnatSession.h"
 #include "ctkXnatObjectPrivate.h"
 #include "ctkXnatObjectPrivate.h"
 #include "ctkXnatReconstructionFolder.h"
 #include "ctkXnatReconstructionFolder.h"
-#include "ctkXnatReconstructionResource.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
 
 

+ 4 - 3
Libs/XNAT/Core/ctkXnatResource.cpp

@@ -51,7 +51,7 @@ ctkXnatResource::~ctkXnatResource()
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 QString ctkXnatResource::resourceUri() const
 QString ctkXnatResource::resourceUri() const
 {
 {
-  return QString("%1/resources/%2").arg(parent()->resourceUri(), this->property("label"));
+  return QString("%1/resources/%2").arg(parent()->resourceUri(), this->property("xnat_abstractresource_id"));
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
@@ -73,10 +73,11 @@ void ctkXnatResource::fetchImpl()
   foreach (ctkXnatObject* file, files)
   foreach (ctkXnatObject* file, files)
   {
   {
     QString label = file->property("Name");
     QString label = file->property("Name");
-    if (!label.isEmpty())
+    if (label.isEmpty())
     {
     {
-      file->setProperty("ID", label);
+      label = "NO NAME";
     }
     }
+    file->setProperty("label", label);
     this->add(file);
     this->add(file);
   }
   }
 }
 }

+ 1 - 18
Libs/XNAT/Core/ctkXnatScan.cpp

@@ -23,12 +23,10 @@
 
 
 #include "ctkXnatSession.h"
 #include "ctkXnatSession.h"
 #include "ctkXnatScanFolder.h"
 #include "ctkXnatScanFolder.h"
-#include "ctkXnatScanResource.h"
 #include "ctkXnatObject.h"
 #include "ctkXnatObject.h"
 #include "ctkXnatObjectPrivate.h"
 #include "ctkXnatObjectPrivate.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
-
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 class ctkXnatScanPrivate : public ctkXnatObjectPrivate
 class ctkXnatScanPrivate : public ctkXnatObjectPrivate
 {
 {
@@ -74,20 +72,5 @@ void ctkXnatScan::reset()
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 void ctkXnatScan::fetchImpl()
 void ctkXnatScan::fetchImpl()
 {
 {
-  QString scanResourcesUri = this->resourceUri() + "/resources";
-  ctkXnatSession* const session = this->session();
-  QUuid queryId = session->httpGet(scanResourcesUri);
-
-  QList<ctkXnatObject*> scanResources = session->httpResults(queryId,
-                                                             ctkXnatDefaultSchemaTypes::XSI_SCAN_RESOURCE);
-
-  foreach (ctkXnatObject* scanResource, scanResources)
-  {
-    QString label = scanResource->property("label");
-    if (!label.isEmpty())
-    {
-      scanResource->setProperty("ID", label);
-    }
-    this->add(scanResource);
-  }
+  this->fetchResources();
 }
 }

+ 6 - 0
Libs/XNAT/Core/ctkXnatScanFolder.cpp

@@ -52,6 +52,7 @@ ctkXnatScanFolder::ctkXnatScanFolder(ctkXnatObject* parent)
   : ctkXnatObject(*new ctkXnatScanFolderPrivate(), parent, QString::null)
   : ctkXnatObject(*new ctkXnatScanFolderPrivate(), parent, QString::null)
 {
 {
   this->setProperty("ID", "scans");
   this->setProperty("ID", "scans");
+  this->setProperty("label", "Scans");
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
@@ -83,6 +84,11 @@ void ctkXnatScanFolder::fetchImpl()
 
 
   foreach (ctkXnatObject* scan, scans)
   foreach (ctkXnatObject* scan, scans)
   {
   {
+    QString series_description = scan->property ("series_description");
+    QString label = scan->property ("label");
+    label = label.isEmpty() ? series_description : label;
+    scan->setProperty ("label", label);
+    
     this->add(scan);
     this->add(scan);
   }
   }
 }
 }

+ 20 - 168
Libs/XNAT/Core/ctkXnatSession.cpp

@@ -29,12 +29,9 @@
 #include "ctkXnatObject.h"
 #include "ctkXnatObject.h"
 #include "ctkXnatProject.h"
 #include "ctkXnatProject.h"
 #include "ctkXnatReconstruction.h"
 #include "ctkXnatReconstruction.h"
-#include "ctkXnatReconstructionFolder.h"
-#include "ctkXnatReconstructionResource.h"
 #include "ctkXnatResource.h"
 #include "ctkXnatResource.h"
 #include "ctkXnatScan.h"
 #include "ctkXnatScan.h"
-#include "ctkXnatScanFolder.h"
-#include "ctkXnatScanResource.h"
+#include "ctkXnatAssessor.h"
 #include "ctkXnatSubject.h"
 #include "ctkXnatSubject.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 #include "ctkXnatDefaultSchemaTypes.h"
 
 
@@ -248,15 +245,15 @@ QList<ctkXnatObject*> ctkXnatSessionPrivate::results(qRestResult* restResult, QS
     if (!customSchemaType.isEmpty())
     if (!customSchemaType.isEmpty())
     {
     {
       typeId = QMetaType::type(qPrintable(customSchemaType));
       typeId = QMetaType::type(qPrintable(customSchemaType));
-      if (!typeId)
-      {
-        qWarning() << QString("No ctkXnatObject sub-class registered for the schema %1. Falling back to the default class.").arg(customSchemaType);
-      }
     }
     }
 
 
     // Fall back. Create the default class according to the default schema type
     // Fall back. Create the default class according to the default schema type
     if (!typeId)
     if (!typeId)
     {
     {
+      if (!customSchemaType.isEmpty())
+      {
+        qWarning() << QString("No ctkXnatObject sub-class registered for the schema %1. Falling back to the default class %2.").arg(customSchemaType).arg(schemaType);
+      }
       typeId = QMetaType::type(qPrintable(schemaType));
       typeId = QMetaType::type(qPrintable(schemaType));
     }
     }
 
 
@@ -280,10 +277,17 @@ QList<ctkXnatObject*> ctkXnatSessionPrivate::results(qRestResult* restResult, QS
 
 
     // Fill in the properties
     // Fill in the properties
     QMapIterator<QString, QVariant> it(propertyMap);
     QMapIterator<QString, QVariant> it(propertyMap);
+    QString description;
+    
     while (it.hasNext())
     while (it.hasNext())
     {
     {
       it.next();
       it.next();
-      object->setProperty(it.key().toLatin1().data(), it.value());
+
+      QString  str = it.key().toLatin1().data();
+      QVariant var = it.value();
+
+      object->setProperty(str, var);
+      description.append (str + QString ("\t::\t") + var.toString() + "\n");
     }
     }
 
 
     QVariant lastModifiedHeader = restResult->rawHeader("Last-Modified");
     QVariant lastModifiedHeader = restResult->rawHeader("Last-Modified");
@@ -297,6 +301,7 @@ QList<ctkXnatObject*> ctkXnatSessionPrivate::results(qRestResult* restResult, QS
       object->setLastModifiedTime(lastModifiedTime);
       object->setLastModifiedTime(lastModifiedTime);
     }
     }
 
 
+    object->setDescription(description);
     results.push_back(object);
     results.push_back(object);
   }
   }
   return results;
   return results;
@@ -317,11 +322,10 @@ ctkXnatSession::ctkXnatSession(const ctkXnatLoginProfile& loginProfile)
   qRegisterMetaType<ctkXnatExperiment>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_EXPERIMENT));
   qRegisterMetaType<ctkXnatExperiment>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_EXPERIMENT));
   qRegisterMetaType<ctkXnatScan>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_SCAN));
   qRegisterMetaType<ctkXnatScan>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_SCAN));
   qRegisterMetaType<ctkXnatReconstruction>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION));
   qRegisterMetaType<ctkXnatReconstruction>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION));
-  qRegisterMetaType<ctkXnatScanResource>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_SCAN_RESOURCE));
-  qRegisterMetaType<ctkXnatFile>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_FILE));
-  qRegisterMetaType<ctkXnatReconstructionResource>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_RECONSTRUCTION_RESOURCE));
   qRegisterMetaType<ctkXnatResource>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_RESOURCE));
   qRegisterMetaType<ctkXnatResource>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_RESOURCE));
-
+  qRegisterMetaType<ctkXnatAssessor>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_ASSESSOR));
+  qRegisterMetaType<ctkXnatFile>(qPrintable(ctkXnatDefaultSchemaTypes::XSI_FILE));
+  
   QString url = d->loginProfile.serverUrl().toString();
   QString url = d->loginProfile.serverUrl().toString();
   d->xnat->setServerUrl(url);
   d->xnat->setServerUrl(url);
 
 
@@ -361,7 +365,7 @@ void ctkXnatSession::open()
   }
   }
 
 
   d->dataModel.reset(new ctkXnatDataModel(this));
   d->dataModel.reset(new ctkXnatDataModel(this));
-  d->dataModel->setProperty("ID", this->url().toString());
+  d->dataModel->setProperty("label", this->url().toString());
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
@@ -585,146 +589,6 @@ void ctkXnatSession::remove(ctkXnatObject* object)
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-//void ctkXnatSession::create(ctkXnatSubject* subject)
-//{
-//  const QString& subjectName = subject->getName();
-//  ctkXnatObject* project = subject->getParent();
-//  const QString& projectName = project->getName();
-
-//  Q_D(ctkXnatSession);
-
-//  QString query = QString("/REST/projects/%1/subjects/%2").arg(projectName, subjectName);
-//  bool success = d->xnat->sync(d->xnat->put(query));
-
-//  if (!success)
-//  {
-//    throw ctkXnatException("Error occurred while creating the subject.");
-//  }
-//}
-
-//----------------------------------------------------------------------------
-//void ctkXnatSession::downloadScanFiles(ctkXnatExperiment* experiment, const QString& fileName)
-//{
-//  const QString& experimentName = experiment->getName();
-//  ctkXnatObject* subject = experiment->getParent();
-//  const QString& subjectName = subject->getName();
-//  ctkXnatObject* project = subject->getParent();
-//  const QString& projectName = project->getName();
-
-//  Q_D(ctkXnatSession);
-
-//  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/scans/ALL/files").arg(projectName, subjectName, experimentName);
-//  qRestAPI::Parameters parameters;
-//  parameters["format"] = "zip";
-//  QUuid queryId = d->xnat->download(fileName, query, parameters);
-//  d->xnat->sync(queryId);
-//}
-
-//----------------------------------------------------------------------------
-//void ctkXnatSession::downloadReconstructionFiles(ctkXnatExperiment* experiment, const QString& fileName)
-//{
-//  const QString& experimentName = experiment->getName();
-//  ctkXnatObject* subject = experiment->getParent();
-//  const QString& subjectName = subject->getName();
-//  ctkXnatObject* project = subject->getParent();
-//  const QString& projectName = project->getName();
-
-//  Q_D(ctkXnatSession);
-
-//  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/reconstructions/ALL/files").arg(projectName, subjectName, experimentName);
-//  qRestAPI::Parameters parameters;
-//  parameters["format"] = "zip";
-//  QUuid queryId = d->xnat->download(fileName, query, parameters);
-//  d->xnat->sync(queryId);
-//}
-
-//----------------------------------------------------------------------------
-//void ctkXnatSession::downloadReconstruction(ctkXnatReconstruction* reconstruction, const QString& fileName)
-//{
-//  const QString& reconstructionName = reconstruction->getName();
-//  ctkXnatObject* experiment = reconstruction->getParent();
-//  const QString& experimentName = experiment->getName();
-//  ctkXnatObject* subject = experiment->getParent();
-//  const QString& subjectName = subject->getName();
-//  ctkXnatObject* project = subject->getParent();
-//  const QString& projectName = project->getName();
-
-//  Q_D(ctkXnatSession);
-
-//  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/reconstructions/%4/ALL/files").arg(projectName, subjectName, experimentName, reconstructionName);
-//  qRestAPI::Parameters parameters;
-//  parameters["format"] = "zip";
-//  QUuid queryId = d->xnat->download(fileName, query, parameters);
-//  d->xnat->sync(queryId);
-//}
-
-//----------------------------------------------------------------------------
-//void ctkXnatSession::downloadReconstructionResourceFiles(ctkXnatReconstructionResource* reconstructionResource, const QString& fileName)
-//{
-//  const QString& reconstructionResourceName = reconstructionResource->getName();
-//  ctkXnatObject* reconstruction = reconstructionResource->getParent();
-//  const QString& reconstructionName = reconstruction->getName();
-//  ctkXnatObject* experiment = reconstruction->getParent()->getParent();
-//  const QString& experimentName = experiment->getName();
-//  ctkXnatObject* subject = experiment->getParent();
-//  const QString& subjectName = subject->getName();
-//  ctkXnatObject* project = subject->getParent();
-//  const QString& projectName = project->getName();
-
-//  Q_D(ctkXnatSession);
-
-//  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/reconstructions/%4/ALL/resources/%5/files").arg(projectName, subjectName, experimentName, reconstructionName, reconstructionResourceName);
-//  qRestAPI::Parameters parameters;
-//  parameters["format"] = "zip";
-//  QUuid queryId = d->xnat->download(fileName, query, parameters);
-//  d->xnat->sync(queryId);
-//}
-
-//----------------------------------------------------------------------------
-//void ctkXnatSession::download(ctkXnatReconstructionResourceFile* reconstructionResourceFile, const QString& fileName)
-//{
-//  const QString& reconstructionResourceFileName = reconstructionResourceFile->getName();
-//  ctkXnatObject* reconstructionResource = reconstructionResourceFile->getParent();
-//  const QString& reconstructionResourceName = reconstructionResource->getName();
-//  ctkXnatObject* reconstruction = reconstructionResource->getParent();
-//  const QString& reconstructionName = reconstruction->getName();
-//  ctkXnatObject* experiment = reconstruction->getParent()->getParent();
-//  const QString& experimentName = experiment->getName();
-//  ctkXnatObject* subject = experiment->getParent();
-//  const QString& subjectName = subject->getName();
-//  ctkXnatObject* project = subject->getParent();
-//  const QString& projectName = project->getName();
-
-//  Q_D(ctkXnatSession);
-
-//  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/reconstructions/%4/resources/%5/files/%6").arg(projectName, subjectName, experimentName, reconstructionName, reconstructionResourceName, reconstructionResourceFileName);
-//  qRestAPI::Parameters parameters;
-//  parameters["format"] = "zip";
-//  QUuid queryId = d->xnat->download(fileName, query, parameters);
-//  d->xnat->sync(queryId);
-//}
-
-//----------------------------------------------------------------------------
-//void ctkXnatSession::download(ctkXnatScan* scan, const QString& fileName)
-//{
-//  const QString& scanName = scan->getName();
-//  ctkXnatObject* experiment = scan->getParent()->getParent();
-//  const QString& experimentName = experiment->getName();
-//  ctkXnatObject* subject = experiment->getParent();
-//  const QString& subjectName = subject->getName();
-//  ctkXnatObject* project = subject->getParent();
-//  const QString& projectName = project->getName();
-
-//  Q_D(ctkXnatSession);
-
-//  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/scans/%4/files").arg(projectName, subjectName, experimentName, scanName);
-//  qRestAPI::Parameters parameters;
-//  parameters["format"] = "zip";
-//  QUuid queryId = d->xnat->download(fileName, query, parameters);
-//  d->xnat->sync(queryId);
-//}
-
-//----------------------------------------------------------------------------
 void ctkXnatSession::download(ctkXnatFile* file, const QString& fileName)
 void ctkXnatSession::download(ctkXnatFile* file, const QString& fileName)
 {
 {
   Q_D(ctkXnatSession);
   Q_D(ctkXnatSession);
@@ -735,23 +599,11 @@ void ctkXnatSession::download(ctkXnatFile* file, const QString& fileName)
 }
 }
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-void ctkXnatSession::download(ctkXnatScanResource* scanResource, const QString& fileName)
-{
-  Q_D(ctkXnatSession);
-
-  QString query = scanResource->resourceUri() + "/files";
-  qRestAPI::Parameters parameters;
-  parameters["format"] = "zip";
-  QUuid queryId = d->xnat->download(fileName, query, parameters);
-  d->xnat->sync(queryId);
-}
-
-//----------------------------------------------------------------------------
-void ctkXnatSession::download(ctkXnatReconstructionResource* reconstructionResource, const QString& fileName)
+void ctkXnatSession::download(ctkXnatResource* resource, const QString& fileName)
 {
 {
   Q_D(ctkXnatSession);
   Q_D(ctkXnatSession);
 
 
-  QString query = reconstructionResource->resourceUri() + "/files";
+  QString query = resource->resourceUri() + "/files";
   qRestAPI::Parameters parameters;
   qRestAPI::Parameters parameters;
   parameters["format"] = "zip";
   parameters["format"] = "zip";
   QUuid queryId = d->xnat->download(fileName, query, parameters);
   QUuid queryId = d->xnat->download(fileName, query, parameters);

+ 2 - 4
Libs/XNAT/Core/ctkXnatSession.h

@@ -39,8 +39,7 @@ class ctkXnatFile;
 class ctkXnatLoginProfile;
 class ctkXnatLoginProfile;
 class ctkXnatDataModel;
 class ctkXnatDataModel;
 class ctkXnatObject;
 class ctkXnatObject;
-class ctkXnatScanResource;
-class ctkXnatReconstructionResource;
+class ctkXnatResource;
 
 
 /**
 /**
  * @ingroup XNAT_Core
  * @ingroup XNAT_Core
@@ -195,8 +194,7 @@ public:
 
 
 //  void download(ctkXnatScan* scan, const QString& zipFileName);
 //  void download(ctkXnatScan* scan, const QString& zipFileName);
 
 
-  void download(ctkXnatScanResource* scanResource, const QString& zipFileName);
-  void download(ctkXnatReconstructionResource* reconstructionResource, const QString& zipFileName);
+  void download(ctkXnatResource* resource, const QString& zipFileName);
 
 
   /**
   /**
    * @brief Sends a http HEAD request to the xnat instance
    * @brief Sends a http HEAD request to the xnat instance

+ 1 - 1
Libs/XNAT/Core/ctkXnatTreeModel.cpp

@@ -76,7 +76,7 @@ QVariant ctkXnatTreeModel::data(const QModelIndex& index, int role) const
     QString displayData = xnatObject->name();
     QString displayData = xnatObject->name();
     if (displayData.isEmpty())
     if (displayData.isEmpty())
     {
     {
-      displayData = xnatObject->id();
+      displayData = xnatObject->property("label");
     }
     }
     return displayData;
     return displayData;
   }
   }