Browse Source

all levels are taken into account now, with the right labels

Nicolas Toussaint 12 years ago
parent
commit
3d513d4d7d

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

@@ -16,8 +16,8 @@ set(KIT_SRCS
   ctkXnatProject.cpp
   ctkXnatScan.cpp
   ctkXnatScanFolder.cpp
-  #ctkXnatScanResource.cpp
-  #ctkXnatScanResourceFile.cpp
+  ctkXnatScanResource.cpp
+  ctkXnatScanResourceFile.cpp
   #ctkXnatReconstruction.cpp
   #ctkXnatReconstructionFolder.cpp
   #ctkXnatReconstructionResource.cpp

+ 48 - 37
Libs/XNAT/Core/ctkXnatConnection.cpp

@@ -170,7 +170,6 @@ void ctkXnatConnection::fetch(const ctkXnatServer::Pointer& server)
 
   foreach (ctkXnatProject* project, projects)
   {
-    qDebug() << "Found project:" << project->getName();
     ctkXnatObject::Pointer ptr(project);
     ptr->d_func()->selfPtr = ptr;
     server->addChild(ptr);
@@ -192,6 +191,9 @@ void ctkXnatConnection::fetch(const ctkXnatProject::Pointer& project)
 
   foreach (ctkXnatSubject* subject, subjects)
   {
+    QString label = subject->getProperty ("label");
+    if (label.size())
+      subject->setProperty ("ID", label);
     ctkXnatObject::Pointer ptr(subject);
     ptr->d_func()->selfPtr = ptr;
     project->addChild(ptr);
@@ -215,6 +217,9 @@ void ctkXnatConnection::fetch(const QSharedPointer<ctkXnatSubject>& subject)
 
   foreach (ctkXnatExperiment* experiment, experiments)
   {
+    QString label = experiment->getProperty ("label");
+    if (label.size())
+      experiment->setProperty ("ID", label);
     ctkXnatObject::Pointer ptr(experiment);
     ptr->d_func()->selfPtr = ptr;
     subject->addChild(ptr);
@@ -243,7 +248,6 @@ void ctkXnatConnection::fetch(const QSharedPointer<ctkXnatExperiment>& experimen
   {
     ctkXnatObject::Pointer ptr = ctkXnatScanFolder::Create();
     ptr->d_func()->selfPtr = ptr;
-    // experiment->addChild("Scan", scanFolder);
     experiment->addChild(ptr);
   }
   
@@ -304,45 +308,52 @@ void ctkXnatConnection::fetch(const QSharedPointer<ctkXnatScan>& scan)
   Q_D(ctkXnatConnection);
   
   QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/scans/%4/resources").arg(projectName, subjectName, experimentName, scanName);
-  // QList<ctkXnatScanResource*> resources = restResult->results<ctkXnatScanResource>();
+  QUuid queryId = d->xnat->get(query);
+  qRestResult* restResult = d->xnat->takeResult(queryId);
+  
+  QList<ctkXnatScanResource*> resources = restResult->results<ctkXnatScanResource>();
   
-  // foreach (resource, resources)
-  // {
-  //   ctkXnatObject::Pointer ptr(resource);
-  //   ptr->d_func()->selfPtr = ptr;
-  //   scan->addChild(ptr);
-  // }
+  foreach (ctkXnatScanResource* resource, resources)
+  {
+    QString label = resource->getProperty ("label");
+    if (label.size())
+      resource->setProperty ("ID", label);
+    ctkXnatObject::Pointer ptr(resource);
+    ptr->d_func()->selfPtr = ptr;
+    scan->addChild(ptr);
+  }
 }
 
-//void ctkXnatConnection::fetch(ctkXnatScanResource* scanResource)
-//{
-//  const QString& resourceName = scanResource->getName();
-//  ctkXnatObject* scan = scanResource->getParent();
-//  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(ctkXnatConnection);
-
-//  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/scans/%4/resources/%5/files").arg(projectName, subjectName, experimentName, scanName, resourceName);
-//  QList<QVariantMap> result;
-//  bool success = d->xnat->sync(d->xnat->get(query), result);
-//  if (!success)
-//  {
-//    throw ctkXnatException("Error occurred while retrieving scan resource file list from XNAT.");
-//  }
+void ctkXnatConnection::fetch(const QSharedPointer<ctkXnatScanResource>& scanResource)
+{
+  const QString& resourceName = scanResource->getProperty ("label");
+  ctkXnatObject::Pointer scan = scanResource->getParent();
+  const QString& scanName = scan->getId();
+  ctkXnatObject::Pointer experiment = scan->getParent()->getParent();
+  const QString& experimentName = experiment->getId();
+  ctkXnatObject::Pointer subject = experiment->getParent();
+  const QString& subjectName = subject->getId();
+  ctkXnatObject::Pointer project = subject->getParent();
+  const QString& projectName = project->getId();
+  
+  Q_D(ctkXnatConnection);
+  
+  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/scans/%4/resources/%5/files").arg(projectName, subjectName, experimentName, scanName, resourceName);
+  QUuid queryId = d->xnat->get(query);
+  qRestResult* restResult = d->xnat->takeResult(queryId);
+  
+  QList<ctkXnatScanResourceFile*> files = restResult->results<ctkXnatScanResourceFile>();
 
-//  foreach (QVariantMap map, result)
-//  {
-//    QString scanResourceFileName = map["Name"].toString();
-//    ctkXnatScanResourceFile* scanResourceFile = new ctkXnatScanResourceFile(scanResource);
-//    scanResource->addChild(scanResourceFileName, scanResourceFile);
-//  }
-//}
+  foreach (ctkXnatScanResourceFile* file, files)
+  {
+    QString label = file->getProperty ("Name");
+    if (label.size())
+      file->setProperty ("ID", label);
+    ctkXnatObject::Pointer ptr(file);
+    ptr->d_func()->selfPtr = ptr;
+    scanResource->addChild(ptr);
+  }
+}
 
 
 

+ 1 - 1
Libs/XNAT/Core/ctkXnatConnection.h

@@ -79,7 +79,7 @@ public:
   void fetch(const QSharedPointer<ctkXnatExperiment>& experiment);
   void fetch(const QSharedPointer<ctkXnatScanFolder>& scanFolder);
   void fetch(const QSharedPointer<ctkXnatScan>& scan);
-//  void fetch(ctkXnatScanResource* scanResource);
+  void fetch(const QSharedPointer<ctkXnatScanResource>& scanResource);
 //  void fetch(ctkXnatReconstructionFolder* reconstructionFolder);
 //  void fetch(ctkXnatReconstruction* reconstruction);
 //  void fetch(ctkXnatReconstructionResource* reconstructionResource);

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

@@ -49,9 +49,9 @@ ctkXnatExperiment::ctkXnatExperiment()
 
 ctkXnatExperiment::Pointer ctkXnatExperiment::Create()
 {
-  Pointer experiment(new ctkXnatExperiment());
-  experiment->d_func()->selfPtr = experiment;
-  return experiment;
+  Pointer ptr(new ctkXnatExperiment());
+  ptr->d_func()->selfPtr = ptr;
+  return ptr;
 }
 
 ctkXnatExperiment::~ctkXnatExperiment()
@@ -72,7 +72,6 @@ void ctkXnatExperiment::setUri(const QString& uri)
 
 void ctkXnatExperiment::reset()
 {
-  Q_D(ctkXnatExperiment);
   ctkXnatObject::reset();
 }
 

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

@@ -60,9 +60,9 @@ public:
   virtual void reset();
   void fetch();
 
-  virtual void download(const QString& zipFilename);
-  virtual void upload(const QString& zipFilename);
-  virtual void add(const QString& name);
+  virtual void download(const QString&);
+  virtual void upload(const QString&);
+  virtual void add(const QString&);
   virtual void remove();
 
   virtual bool isDeletable() const;

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

@@ -113,7 +113,6 @@ void ctkXnatProject::setUri(const QString& uri)
 
 void ctkXnatProject::reset()
 {
-  Q_D(ctkXnatProject);
   ctkXnatObject::reset();
 }
 

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

@@ -23,7 +23,6 @@
 
 #include "ctkXnatConnection.h"
 #include "ctkXnatObjectPrivate.h"
-// #include "ctkXnatScanResource.h"
 
 class ctkXnatScanPrivate : public ctkXnatObjectPrivate
 {
@@ -50,9 +49,9 @@ ctkXnatScan::ctkXnatScan()
 
 ctkXnatScan::Pointer ctkXnatScan::Create()
 {
-  Pointer experiment(new ctkXnatScan());
-  experiment->d_func()->selfPtr = experiment;
-  return experiment;
+  Pointer ptr(new ctkXnatScan());
+  ptr->d_func()->selfPtr = ptr;
+  return ptr;
 }
 
 ctkXnatScan::~ctkXnatScan()

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

@@ -46,14 +46,14 @@ public:
 ctkXnatScanFolder::ctkXnatScanFolder()
 : ctkXnatObject(new ctkXnatScanFolderPrivate())
 {
-  this->setProperty("ID", "Scans");
+  this->setProperty("ID", "scans");
 }
 
 ctkXnatScanFolder::Pointer ctkXnatScanFolder::Create()
 {
-  Pointer experiment(new ctkXnatScanFolder());
-  experiment->d_func()->selfPtr = experiment;
-  return experiment;
+  Pointer ptr(new ctkXnatScanFolder());
+  ptr->d_func()->selfPtr = ptr;
+  return ptr;
 }
 
 ctkXnatScanFolder::~ctkXnatScanFolder()
@@ -74,7 +74,6 @@ void ctkXnatScanFolder::setUri(const QString& uri)
 
 void ctkXnatScanFolder::reset()
 {
-  Q_D(ctkXnatScanFolder);
   ctkXnatObject::reset();
 }
 

+ 36 - 76
Libs/XNAT/Core/ctkXnatScanResource.cpp

@@ -23,113 +23,73 @@
 
 #include "ctkXnatConnection.h"
 #include "ctkXnatScanResourceFile.h"
+#include "ctkXnatObjectPrivate.h"
 
-#include <QDebug>
 
-class ctkXnatScanResourcePrivate
+class ctkXnatScanResourcePrivate : public ctkXnatObjectPrivate
 {
 public:
-  QString resourceId;
-  QString label;
-  QString elementName;
-  QString category;
-  QString categoryId;
-  QString categoryDescription;
-};
-
-ctkXnatScanResource::ctkXnatScanResource(ctkXnatObject* parent)
-: ctkXnatObject(parent)
-, d_ptr(new ctkXnatScanResourcePrivate())
-{
-}
-
-ctkXnatScanResource::~ctkXnatScanResource()
-{
-}
 
-const QString& ctkXnatScanResource::resourceId() const
-{
-  Q_D(const ctkXnatScanResource);
-  return d->resourceId;
-}
-
-void ctkXnatScanResource::setResourceId(const QString& resourceId)
-{
-  Q_D(ctkXnatScanResource);
-  d->resourceId = resourceId;
-}
-
-const QString& ctkXnatScanResource::label() const
-{
-  Q_D(const ctkXnatScanResource);
-  return d->label;
-}
+  ctkXnatScanResourcePrivate()
+  : ctkXnatObjectPrivate()
+  {
+  }
+
+  void reset()
+  {
+    uri.clear();
+  }
+  
+  QString uri;
+};
 
-void ctkXnatScanResource::setLabel(const QString& label)
-{
-  Q_D(ctkXnatScanResource);
-  d->label = label;
-}
 
-const QString& ctkXnatScanResource::elementName() const
+ctkXnatScanResource::ctkXnatScanResource()
+: ctkXnatObject(new ctkXnatScanResourcePrivate())
 {
-  Q_D(const ctkXnatScanResource);
-  return d->elementName;
-}
-
-void ctkXnatScanResource::setElementName(const QString& elementName)
-{
-  Q_D(ctkXnatScanResource);
-  d->elementName = elementName;
 }
 
-const QString& ctkXnatScanResource::category() const
+ctkXnatScanResource::Pointer ctkXnatScanResource::Create()
 {
-  Q_D(const ctkXnatScanResource);
-  return d->category;
+  Pointer ptr(new ctkXnatScanResource());
+  ptr->d_func()->selfPtr = ptr;
+  return ptr;
 }
 
-void ctkXnatScanResource::setCategory(const QString& category)
+ctkXnatScanResource::~ctkXnatScanResource()
 {
-  Q_D(ctkXnatScanResource);
-  d->category = category;
 }
 
-const QString& ctkXnatScanResource::categoryId() const
+const QString& ctkXnatScanResource::uri() const
 {
   Q_D(const ctkXnatScanResource);
-  return d->categoryId;
+  return d->uri;
 }
 
-void ctkXnatScanResource::setCategoryId(const QString& categoryId)
+void ctkXnatScanResource::setUri(const QString& uri)
 {
   Q_D(ctkXnatScanResource);
-  d->categoryId = categoryId;
+  d->uri = uri;
 }
 
-const QString& ctkXnatScanResource::categoryDescription() const
+void ctkXnatScanResource::reset()
 {
-  Q_D(const ctkXnatScanResource);
-  return d->categoryDescription;
+  ctkXnatObject::reset();
 }
 
-void ctkXnatScanResource::setCategoryDescription(const QString& categoryDescription)
+void ctkXnatScanResource::fetchImpl()
 {
   Q_D(ctkXnatScanResource);
-  d->categoryDescription = categoryDescription;
+  ctkXnatObject::Pointer self = d->selfPtr;
+  this->getConnection()->fetch(self.staticCast<ctkXnatScanResource>());
 }
 
-void ctkXnatScanResource::fetch(ctkXnatConnection* connection)
+void ctkXnatScanResource::remove()
 {
-  connection->fetch(this);
+  //connection->remove(this);
 }
 
-void ctkXnatScanResource::download(ctkXnatConnection* connection, const QString& zipFileName)
-{
-  connection->download(this, zipFileName);
-}
-
-bool ctkXnatScanResource::isFile() const
-{
-  return true;
-}
+// void ctkXnatScanResource::download(ctkXnatConnection* connection, const QString& zipFileName)
+// {
+//   connection->download(this, zipFileName);
+// }

+ 19 - 37
Libs/XNAT/Core/ctkXnatScanResource.h

@@ -31,48 +31,30 @@ class ctkXnatScanResourcePrivate;
 
 class CTK_XNAT_CORE_EXPORT ctkXnatScanResource : public ctkXnatObject
 {
-  Q_OBJECT
-
-  Q_PROPERTY(QString xnat_abstractresource_id READ resourceId WRITE setResourceId)
-  Q_PROPERTY(QString label READ label WRITE setLabel)
-  Q_PROPERTY(QString elementName READ elementName WRITE setElementName)
-  Q_PROPERTY(QString category READ category WRITE setCategory)
-  Q_PROPERTY(QString cat_id READ categoryId WRITE setCategoryId)
-  Q_PROPERTY(QString cat_desc READ categoryDescription WRITE setCategoryDescription)
-
+  
 public:
-  explicit ctkXnatScanResource(ctkXnatObject* parent = 0);
-  virtual ~ctkXnatScanResource();
-
-  const QString& resourceId() const;
-  void setResourceId(const QString& resourceId);
-
-  const QString& label() const;
-  void setLabel(const QString& label);
-
-  const QString& elementName() const;
-  void setElementName(const QString& elementName);
-
-  const QString& category() const;
-  void setCategory(const QString& category);
-
-  const QString& categoryId() const;
-  void setCategoryId(const QString& categoryId);
-
-  const QString& categoryDescription() const;
-  void setCategoryDescription(const QString& categoryDescription);
-
-  virtual void fetch(ctkXnatConnection* connection);
-
-  virtual void download(ctkXnatConnection* connection, const QString& zipFilename);
-
-  virtual bool isFile() const;
 
+  typedef QSharedPointer<ctkXnatScanResource> Pointer;
+  typedef QWeakPointer<ctkXnatScanResource> WeakPointer;
+  
+  static Pointer Create();
+  virtual ~ctkXnatScanResource();
+  
+  const QString& uri() const;
+  void setUri(const QString& uri);
+  
+  virtual void reset();
+  virtual void remove();
+  
 private:
-  QScopedPointer<ctkXnatScanResourcePrivate> d_ptr;
-
+  
+  friend class qRestResult;
+  explicit ctkXnatScanResource();
+  virtual void fetchImpl();
+  
   Q_DECLARE_PRIVATE(ctkXnatScanResource);
   Q_DISABLE_COPY(ctkXnatScanResource);
+  
 };
 
 #endif

+ 30 - 95
Libs/XNAT/Core/ctkXnatScanResourceFile.cpp

@@ -22,51 +22,41 @@
 #include "ctkXnatScanResourceFile.h"
 
 #include "ctkXnatConnection.h"
+#include "ctkXnatObjectPrivate.h"
 
-class ctkXnatScanResourceFilePrivate
+
+class ctkXnatScanResourceFilePrivate : public ctkXnatObjectPrivate
 {
 public:
-  QString name;
-  QString size;
-  QString uri;
-  QString collection;
-  QString fileTags;
-  QString fileFormat;
-  QString fileContent;
-  QString categoryId;
-};
 
-ctkXnatScanResourceFile::ctkXnatScanResourceFile(ctkXnatObject* parent)
-: ctkXnatObject(parent)
-{
-}
+  ctkXnatScanResourceFilePrivate()
+  : ctkXnatObjectPrivate()
+  {
+  }
 
-ctkXnatScanResourceFile::~ctkXnatScanResourceFile()
-{
-}
+  void reset()
+  {
+    uri.clear();
+  }
+  
+  QString uri;
+};
 
-const QString& ctkXnatScanResourceFile::name() const
-{
-  Q_D(const ctkXnatScanResourceFile);
-  return d->name;
-}
 
-void ctkXnatScanResourceFile::setName(const QString& name)
+ctkXnatScanResourceFile::ctkXnatScanResourceFile()
+: ctkXnatObject(new ctkXnatScanResourceFilePrivate())
 {
-  Q_D(ctkXnatScanResourceFile);
-  d->name = name;
 }
 
-const QString& ctkXnatScanResourceFile::size() const
+ctkXnatScanResourceFile::Pointer ctkXnatScanResourceFile::Create()
 {
-  Q_D(const ctkXnatScanResourceFile);
-  return d->size;
+  Pointer ptr(new ctkXnatScanResourceFile());
+  ptr->d_func()->selfPtr = ptr;
+  return ptr;
 }
 
-void ctkXnatScanResourceFile::setSize(const QString& size)
+ctkXnatScanResourceFile::~ctkXnatScanResourceFile()
 {
-  Q_D(ctkXnatScanResourceFile);
-  d->size = size;
 }
 
 const QString& ctkXnatScanResourceFile::uri() const
@@ -81,77 +71,22 @@ void ctkXnatScanResourceFile::setUri(const QString& uri)
   d->uri = uri;
 }
 
-const QString& ctkXnatScanResourceFile::collection() const
-{
-  Q_D(const ctkXnatScanResourceFile);
-  return d->collection;
-}
-
-void ctkXnatScanResourceFile::setCollection(const QString& collection)
+void ctkXnatScanResourceFile::reset()
 {
-  Q_D(ctkXnatScanResourceFile);
-  d->collection = collection;
+  ctkXnatObject::reset();
 }
 
-const QString& ctkXnatScanResourceFile::fileTags() const
+void ctkXnatScanResourceFile::fetchImpl()
 {
-  Q_D(const ctkXnatScanResourceFile);
-  return d->fileTags;
-}
 
-void ctkXnatScanResourceFile::setFileTags(const QString& fileTags)
-{
-  Q_D(ctkXnatScanResourceFile);
-  d->fileTags = fileTags;
 }
 
-const QString& ctkXnatScanResourceFile::fileFormat() const
+void ctkXnatScanResourceFile::remove()
 {
-  Q_D(const ctkXnatScanResourceFile);
-  return d->fileFormat;
+  //connection->remove(this);
 }
 
-void ctkXnatScanResourceFile::setFileFormat(const QString& fileFormat)
-{
-  Q_D(ctkXnatScanResourceFile);
-  d->fileFormat = fileFormat;
-}
-
-const QString& ctkXnatScanResourceFile::fileContent() const
-{
-  Q_D(const ctkXnatScanResourceFile);
-  return d->fileContent;
-}
-
-void ctkXnatScanResourceFile::setFileContent(const QString& fileContent)
-{
-  Q_D(ctkXnatScanResourceFile);
-  d->fileContent = fileContent;
-}
-
-const QString& ctkXnatScanResourceFile::categoryId() const
-{
-  Q_D(const ctkXnatScanResourceFile);
-  return d->categoryId;
-}
-
-void ctkXnatScanResourceFile::setCategoryId(const QString& categoryId)
-{
-  Q_D(ctkXnatScanResourceFile);
-  d->categoryId = categoryId;
-}
-
-void ctkXnatScanResourceFile::download(ctkXnatConnection* connection, const QString& fileName)
-{
-  connection->download(this, fileName);
-}
-
-bool ctkXnatScanResourceFile::isFile() const
-{
-  return true;
-}
-
-bool ctkXnatScanResourceFile::isDeletable() const
-{
-  return true;
-}
+// void ctkXnatScanResourceFile::download(ctkXnatConnection* connection, const QString& zipFileName)
+// {
+//   connection->download(this, zipFileName);
+// }

+ 15 - 41
Libs/XNAT/Core/ctkXnatScanResourceFile.h

@@ -31,53 +31,27 @@ class ctkXnatScanResourceFilePrivate;
 
 class CTK_XNAT_CORE_EXPORT ctkXnatScanResourceFile : public ctkXnatObject
 {
-  Q_OBJECT
-
-  Q_PROPERTY(QString Name READ name WRITE setName)
-  Q_PROPERTY(QString Size READ size WRITE setSize)
-  Q_PROPERTY(QString URI READ uri WRITE setUri)
-  Q_PROPERTY(QString collection READ collection WRITE setCollection)
-  Q_PROPERTY(QString file_tags READ fileTags WRITE setFileTags)
-  Q_PROPERTY(QString file_format READ fileFormat WRITE setFileFormat)
-  Q_PROPERTY(QString file_content READ fileContent WRITE setFileContent)
-  Q_PROPERTY(QString cat_ID READ categoryId WRITE setCategoryId)
 
 public:
-  explicit ctkXnatScanResourceFile(ctkXnatObject* parent = 0);
-  virtual ~ctkXnatScanResourceFile();
-
-  const QString& name() const;
-  void setName(const QString& name);
-
-  const QString& size() const;
-  void setSize(const QString& size);
 
+  typedef QSharedPointer<ctkXnatScanResourceFile> Pointer;
+  typedef QWeakPointer<ctkXnatScanResourceFile> WeakPointer;
+  
+  static Pointer Create();
+  virtual ~ctkXnatScanResourceFile();
+  
   const QString& uri() const;
   void setUri(const QString& uri);
-
-  const QString& collection() const;
-  void setCollection(const QString& collection);
-
-  const QString& fileTags() const;
-  void setFileTags(const QString& fileTags);
-
-  const QString& fileFormat() const;
-  void setFileFormat(const QString& fileFormat);
-
-  const QString& fileContent() const;
-  void setFileContent(const QString& fileContent);
-
-  const QString& categoryId() const;
-  void setCategoryId(const QString& categoryId);
-
-  virtual void download(ctkXnatConnection* connection, const QString& zipFilename);
-
-  virtual bool isFile() const;
-  virtual bool isDeletable() const;
-
+  
+  virtual void reset();
+  virtual void remove();
+  
 private:
-  QScopedPointer<ctkXnatScanResourceFilePrivate> d_ptr;
-
+  
+  friend class qRestResult;
+  explicit ctkXnatScanResourceFile();
+  virtual void fetchImpl();
+  
   Q_DECLARE_PRIVATE(ctkXnatScanResourceFile);
   Q_DISABLE_COPY(ctkXnatScanResourceFile);
 };