Browse Source

make the experiment level available in the new API

Nicolas Toussaint 12 years ago
parent
commit
d4dc66b6cf

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

@@ -10,7 +10,7 @@ set(KIT_SRCS
   ctkXnatConnection.cpp
   ctkXnatConnectionFactory.cpp
   ctkXnatException.cpp
-  #ctkXnatExperiment.cpp
+  ctkXnatExperiment.cpp
   ctkXnatObject.cpp
   ctkXnatObjectPrivate.cpp
   ctkXnatProject.cpp

+ 26 - 14
Libs/XNAT/Core/ctkXnatConnection.cpp

@@ -210,25 +210,35 @@ void ctkXnatConnection::fetch(const QSharedPointer<ctkXnatSubject>& subject)
   QString query = QString("/REST/projects/%1/subjects/%2/experiments").arg(projectName, subjectName);
   QUuid queryId = d->xnat->get(query);
   qRestResult* restResult = d->xnat->takeResult(queryId);
-  //QList<ctkXnatExperiment*> experiments = restResult->results<ctkXnatExperiment>();
 
-  //foreach (ctkXnatExperiment* experiment, experiments)
-  //{
-  //  subject->addChild(experiment->id(), experiment);
-  //}
+  QList<ctkXnatExperiment*> experiments = restResult->results<ctkXnatExperiment>();
+
+  foreach (ctkXnatExperiment* experiment, experiments)
+  {
+    ctkXnatObject::Pointer ptr(experiment);
+    ptr->d_func()->selfPtr = ptr;
+    subject->addChild(ptr);
+  }
 
   delete restResult;
 }
 
-//void ctkXnatConnection::fetch(ctkXnatExperiment* experiment)
-//{
-//  const QString& experimentName = experiment->getName();
-//  ctkXnatObject* subject = experiment->getParent();
-//  const QString& subjectName = subject->getName();
-//  ctkXnatObject* project = subject->getParent();
-//  const QString& projectName = project->getName();
+void ctkXnatConnection::fetch(const QSharedPointer<ctkXnatExperiment>& experiment)
+{
+  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").arg(projectName, subjectName, experimentName);
+  QUuid queryId = d->xnat->get(query);
+  qRestResult* restResult = d->xnat->takeResult(queryId);
+
+//  QList<ctkXnatExperiment*> scans = restResult->results<ctkXnatScan>();
 
-//  Q_D(ctkXnatConnection);
 
 //  QString query = QString("/REST/projects/%1/subjects/%2/experiments/%3/scans").arg(projectName, subjectName, experimentName);
 //  QList<QVariantMap> result;
@@ -260,7 +270,9 @@ void ctkXnatConnection::fetch(const QSharedPointer<ctkXnatSubject>& subject)
 //    ctkXnatReconstructionFolder* reconstructionFolder = new ctkXnatReconstructionFolder(experiment);
 //    experiment->addChild("Reconstruction", reconstructionFolder);
 //  }
-//}
+
+
+}
 
 //void ctkXnatConnection::fetch(ctkXnatScanFolder* scanFolder)
 //{

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

@@ -76,7 +76,7 @@ public:
   void fetch(const QSharedPointer<ctkXnatServer>& server);
   void fetch(const QSharedPointer<ctkXnatProject>& project);
   void fetch(const QSharedPointer<ctkXnatSubject>& subject);
-//  void fetch(ctkXnatExperiment* experiment);
+  void fetch(const QSharedPointer<ctkXnatExperiment>& experiment);
 //  void fetch(ctkXnatScanFolder* scanFolder);
 //  void fetch(ctkXnatScan* scan);
 //  void fetch(ctkXnatScanResource* scanResource);

+ 29 - 119
Libs/XNAT/Core/ctkXnatExperiment.cpp

@@ -22,99 +22,40 @@
 #include "ctkXnatExperiment.h"
 
 #include "ctkXnatConnection.h"
+#include "ctkXnatObjectPrivate.h"
 
-class ctkXnatExperimentPrivate
+class ctkXnatExperimentPrivate : public ctkXnatObjectPrivate
 {
 public:
-  QString id;
-  QString project;
-  QString date;
-  QString xsiType;
-  QString label;
-  QString insertDate;
-  QString uri;
-};
-
-ctkXnatExperiment::ctkXnatExperiment(ctkXnatObject* parent)
-: ctkXnatObject(parent)
-, d_ptr(new ctkXnatExperimentPrivate())
-{
-}
-
-ctkXnatExperiment::~ctkXnatExperiment()
-{
-}
-
-const QString& ctkXnatExperiment::id() const
-{
-  Q_D(const ctkXnatExperiment);
-  return d->id;
-}
-
-void ctkXnatExperiment::setId(const QString& id)
-{
-  Q_D(ctkXnatExperiment);
-  d->id = id;
-}
-
-const QString& ctkXnatExperiment::project() const
-{
-  Q_D(const ctkXnatExperiment);
-  return d->project;
-}
-
-void ctkXnatExperiment::setProject(const QString& project)
-{
-  Q_D(ctkXnatExperiment);
-  d->project = project;
-}
-
-const QString& ctkXnatExperiment::date() const
-{
-  Q_D(const ctkXnatExperiment);
-  return d->date;
-}
 
-void ctkXnatExperiment::setDate(const QString& date)
-{
-  Q_D(ctkXnatExperiment);
-  d->date = date;
-}
-
-const QString& ctkXnatExperiment::xsiType() const
-{
-  Q_D(const ctkXnatExperiment);
-  return d->xsiType;
-}
+  ctkXnatExperimentPrivate()
+  : ctkXnatObjectPrivate()
+  {
+  }
 
-void ctkXnatExperiment::setXsiType(const QString& xsiType)
-{
-  Q_D(ctkXnatExperiment);
-  d->xsiType = xsiType;
-}
+  void reset()
+  {
+    uri.clear();
+  }
+  
+  QString uri;
+};
 
-const QString& ctkXnatExperiment::label() const
-{
-  Q_D(const ctkXnatExperiment);
-  return d->label;
-}
 
-void ctkXnatExperiment::setLabel(const QString& label)
+ctkXnatExperiment::ctkXnatExperiment()
+: ctkXnatObject(new ctkXnatExperimentPrivate())
 {
-  Q_D(ctkXnatExperiment);
-  d->label = label;
 }
 
-const QString& ctkXnatExperiment::insertDate() const
+ctkXnatExperiment::Pointer ctkXnatExperiment::Create()
 {
-  Q_D(const ctkXnatExperiment);
-  return d->insertDate;
+  Pointer experiment(new ctkXnatExperiment());
+  experiment->d_func()->selfPtr = experiment;
+  return experiment;
 }
 
-void ctkXnatExperiment::setInsertDate(const QString& insertDate)
+ctkXnatExperiment::~ctkXnatExperiment()
 {
-  Q_D(ctkXnatExperiment);
-  d->insertDate = insertDate;
 }
 
 const QString& ctkXnatExperiment::uri() const
@@ -129,51 +70,20 @@ void ctkXnatExperiment::setUri(const QString& uri)
   d->uri = uri;
 }
 
-bool ctkXnatExperiment::holdsFiles() const
+void ctkXnatExperiment::reset()
 {
-  return true;
-}
-
-void ctkXnatExperiment::fetch(ctkXnatConnection* connection)
-{
-  connection->fetch(this);
-}
-
-bool ctkXnatExperiment::isModifiable(int parentIndex) const
-{
-  ctkXnatObject* child = getChildren()[parentIndex];
-  if (child == 0)
-  {
-    return false;
-  }
-  return child->isModifiable();
-}
-
-void ctkXnatExperiment::add(ctkXnatConnection* connection, const QString& reconstruction)
-{
-  connection->addReconstruction(this, reconstruction);
-}
-
-QString ctkXnatExperiment::getModifiableChildKind() const
-{
-  return "reconstruction";
+  Q_D(ctkXnatExperiment);
+  ctkXnatObject::reset();
 }
 
-QString ctkXnatExperiment::getModifiableParentName() const
+void ctkXnatExperiment::fetchImpl()
 {
-  return getName();
+  Q_D(ctkXnatExperiment);
+  ctkXnatObject::Pointer self = d->selfPtr;
+  this->getConnection()->fetch(self.staticCast<ctkXnatExperiment>());
 }
 
-bool ctkXnatExperiment::isModifiable() const
+void ctkXnatExperiment::remove()
 {
-  int childNumber = getChildren().size();
-  for (int i = 0; i < childNumber; i++)
-  {
-    if (childName(i) == QString("Reconstruction"))
-    {
-      return false;
-    }
-  }
-
-  return true;
+  //connection->remove(this);
 }

+ 12 - 38
Libs/XNAT/Core/ctkXnatExperiment.h

@@ -27,61 +27,35 @@
 #include "ctkXnatObject.h"
 
 class ctkXnatConnection;
-
 class ctkXnatExperimentPrivate;
 
+
 class CTK_XNAT_CORE_EXPORT ctkXnatExperiment : public ctkXnatObject
 {
-  Q_OBJECT
-
-  Q_PROPERTY(QString ID READ id WRITE setId)
-  // FIXME encode colons and slashes to valid characters for C++ identifiers
-//  Q_PROPERTY(QString xnat:subjectassessordata/id READ id WRITE setId)
-  Q_PROPERTY(QString project READ project WRITE setProject)
-  Q_PROPERTY(QString date READ date WRITE setDate)
-  Q_PROPERTY(QString xsiType READ xsiType WRITE setXsiType)
-  Q_PROPERTY(QString label READ label WRITE setLabel)
-  Q_PROPERTY(QString insert_date READ insertDate WRITE setInsertDate)
-  Q_PROPERTY(QString URI READ uri WRITE setUri)
 
 public:
-  explicit ctkXnatExperiment(ctkXnatObject* parent = 0);
-  virtual ~ctkXnatExperiment();
 
-  const QString& id() const;
-  void setId(const QString& id);
+  typedef QSharedPointer<ctkXnatExperiment> Pointer;
+  typedef QWeakPointer<ctkXnatExperiment> WeakPointer;
+  
+  static Pointer Create();
+  virtual ~ctkXnatExperiment();
 
   const QString& project() const;
   void setProject(const QString& project);
 
-  const QString& date() const;
-  void setDate(const QString& date);
-
-  const QString& xsiType() const;
-  void setXsiType(const QString& xsiType);
-
-  const QString& label() const;
-  void setLabel(const QString& label);
-
-  const QString& insertDate() const;
-  void setInsertDate(const QString& insertDate);
-
   const QString& uri() const;
   void setUri(const QString& uri);
 
-  virtual void fetch(ctkXnatConnection* connection);
-
-  void add(ctkXnatConnection* connection, const QString& reconstruction);
-  QString getModifiableChildKind() const;
-  QString getModifiableParentName() const;
-  bool isModifiable() const;
-
-  virtual bool holdsFiles() const;
-  virtual bool isModifiable(int parentIndex) const;
+  virtual void reset();
+  virtual void remove();
 
 private:
-  QScopedPointer<ctkXnatExperimentPrivate> d_ptr;
 
+  friend class qRestResult;
+  explicit ctkXnatExperiment();
+  virtual void fetchImpl();
+  
   Q_DECLARE_PRIVATE(ctkXnatExperiment);
   Q_DISABLE_COPY(ctkXnatExperiment);
 };

+ 0 - 10
Libs/XNAT/Core/ctkXnatScan.h

@@ -31,16 +31,6 @@ class ctkXnatScanPrivate;
 
 class CTK_XNAT_CORE_EXPORT ctkXnatScan : public ctkXnatObject
 {
-  Q_OBJECT
-
-  Q_PROPERTY(QString xnat_imagescandata_id READ imageScanId WRITE setImageScanId)
-  Q_PROPERTY(QString ID READ id WRITE setId)
-  Q_PROPERTY(QString type READ type WRITE setType)
-  Q_PROPERTY(QString quality READ quality WRITE setQuality)
-  Q_PROPERTY(QString xsiType READ xsiType WRITE setXsiType)
-  Q_PROPERTY(QString note READ note WRITE setNote)
-  Q_PROPERTY(QString series_description READ seriesDescription WRITE setSeriesDescription)
-  Q_PROPERTY(QString URI READ uri WRITE setUri)
 
 public:
   explicit ctkXnatScan(ctkXnatObject* parent = 0);