Parcourir la source

Fixed fetching xnatObjects by using the correct properties/fields

Andreas Fetzer il y a 10 ans
Parent
commit
aabe96b671

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

@@ -39,6 +39,7 @@ QString ctkXnatObjectFields::TYPE = "type";
 
 QString ctkXnatObjectFields::ABSTRACT_RESOURCE_ID = "xnat_abstractresource_id";
 
+QString ctkXnatObjectFields::FILE_NAME = "Name";
 QString ctkXnatObjectFields::FILE_TAGS = "file_tags";
 QString ctkXnatObjectFields::FILE_FORMAT = "file_format";
 QString ctkXnatObjectFields::FILE_CONTENT = "file_content";

+ 1 - 0
Libs/XNAT/Core/ctkXnatConstants.h

@@ -55,6 +55,7 @@ struct CTK_XNAT_CORE_EXPORT ctkXnatObjectFields
   static QString ABSTRACT_RESOURCE_ID;
 
   // XnatFile specific
+  static QString FILE_NAME;
   static QString FILE_TAGS;
   static QString FILE_FORMAT;
   static QString FILE_CONTENT;

+ 12 - 0
Libs/XNAT/Core/ctkXnatFile.cpp

@@ -57,6 +57,18 @@ ctkXnatFile::~ctkXnatFile()
 }
 
 //----------------------------------------------------------------------------
+void ctkXnatFile::setName(const QString &name)
+{
+  setProperty(ctkXnatObjectFields::FILE_NAME, name);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatFile::name() const
+{
+  return property(ctkXnatObjectFields::FILE_NAME);
+}
+
+//----------------------------------------------------------------------------
 void ctkXnatFile::setFileFormat(const QString &fileFormat)
 {
   setProperty(ctkXnatObjectFields::FILE_FORMAT, fileFormat);

+ 3 - 0
Libs/XNAT/Core/ctkXnatFile.h

@@ -44,6 +44,9 @@ public:
 
   virtual QString resourceUri() const;
 
+  void setName(const QString &name);
+  QString name() const;
+
   void setFileFormat(const QString& fileFormat);
   QString fileFormat() const;
 

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

@@ -59,10 +59,10 @@ public:
   virtual QString resourceUri() const = 0;
 
   /// Gets the name of the object.
-  QString name() const;
+  virtual QString name() const;
 
   /// Sets the name of the object.
-  void setName(const QString& name);
+  virtual void setName(const QString& name);
 
   /// Gets the description of the object.
   QString description() const;

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

@@ -52,13 +52,7 @@ ctkXnatResource::~ctkXnatResource()
 //----------------------------------------------------------------------------
 QString ctkXnatResource::resourceUri() const
 {
-  return QString("%1/resources/%2").arg(parent()->resourceUri(), this->property(ctkXnatObjectFields::LABEL));
-}
-
-//----------------------------------------------------------------------------
-QString ctkXnatResource::id() const
-{
-  return property(ctkXnatObjectFields::ABSTRACT_RESOURCE_ID);
+  return QString("%1/resources/%2").arg(parent()->resourceUri(), this->id());
 }
 
 //----------------------------------------------------------------------------
@@ -91,12 +85,12 @@ void ctkXnatResource::fetchImpl()
 
   foreach (ctkXnatObject* file, files)
   {
-    QString label = file->property(ctkXnatObjectFields::NAME);
+    QString label = file->name();
     if (label.isEmpty())
     {
       label = "NO NAME";
     }
-    file->setProperty(ctkXnatObjectFields::LABEL, label);
+    file->setProperty(ctkXnatObjectFields::FILE_NAME, label);
     this->add(file);
   }
 }

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

@@ -44,8 +44,6 @@ public:
 
   QString resourceUri() const;
 
-  QString id() const;
-
   QString name() const;
   void setName(const QString &name);
 

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

@@ -52,7 +52,7 @@ public:
 ctkXnatScanFolder::ctkXnatScanFolder(ctkXnatObject* parent)
   : ctkXnatObject(*new ctkXnatScanFolderPrivate(), parent, QString::null)
 {
-  this->setProperty(ctkXnatObjectFields::ID, "scans");
+  this->setId("scans");
   this->setProperty(ctkXnatObjectFields::LABEL, "Scans");
 }
 

+ 12 - 1
Libs/XNAT/Core/ctkXnatSession.cpp

@@ -287,7 +287,18 @@ QList<ctkXnatObject*> ctkXnatSessionPrivate::results(qRestResult* restResult, QS
       QString  str = it.key().toLatin1().data();
       QVariant var = it.value();
 
-      object->setProperty(str, var);
+      // Do not store IDs as properties. IDs are read only and
+      // incase a xnatObject is uploaded, all properties will be uploaded
+      // as well.
+      if (str.compare(ctkXnatObjectFields::ID) == 0 ||
+          str.compare(ctkXnatObjectFields::ABSTRACT_RESOURCE_ID) == 0)
+      {
+        object->setId(var.toString());
+      }
+      else
+      {
+        object->setProperty(str, var);
+      }
       description.append (str + QString ("\t::\t") + var.toString() + "\n");
     }