Browse Source

Added convenience method for adding a resource to a xnatObject

Andreas Fetzer 10 years ago
parent
commit
9108f7916c

+ 37 - 0
Libs/XNAT/Core/ctkXnatObject.cpp

@@ -24,6 +24,8 @@
 
 #include "ctkXnatDataModel.h"
 #include "ctkXnatDefaultSchemaTypes.h"
+#include "ctkXnatException.h"
+#include "ctkXnatResource.h"
 #include "ctkXnatResourceFolder.h"
 #include "ctkXnatSession.h"
 
@@ -306,6 +308,41 @@ void ctkXnatObject::save()
 }
 
 //----------------------------------------------------------------------------
+void ctkXnatObject::addResource(QString foldername, QString format,
+                                   QString content, QString tags)
+{
+  if (foldername.size() == 0)
+  {
+    throw ctkXnatException("Error creating resource! Foldername must not be empty!");
+  }
+
+  ctkXnatResourceFolder* resFolder;
+  QList<ctkXnatObject*> children = this->children();
+  for (unsigned int i = 0; i < children.size(); ++i)
+  {
+    resFolder = dynamic_cast<ctkXnatResourceFolder*>(children.at(i));
+    if (resFolder)
+    {
+      break;
+    }
+    else if (i == children.size()-1)
+    {
+      resFolder = new ctkXnatResourceFolder();
+      this->add(resFolder);
+    }
+  }
+
+  ctkXnatResource* resource = new ctkXnatResource();
+  resource->setName(foldername);
+  if (format.size() != 0)
+    resource->setFormat(format);
+  if (content.size() != 0)
+    resource->setContent(content);
+  if (tags.size() != 0)
+    resource->setTags(tags);
+
+  resFolder->add(resource);
+  resource->save();
 }
 
 //----------------------------------------------------------------------------

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

@@ -129,6 +129,9 @@ public:
 
   void download(const QString&);
 
+  /// Creates the object on the XNAT server and sets the new ID.
+  virtual void addResource(QString foldername,
+                           QString format = "", QString content = "", QString tags = "");
 
   //QObject* asyncObject() const;
 

+ 39 - 0
Libs/XNAT/Core/ctkXnatResource.cpp

@@ -24,6 +24,10 @@
 #include "ctkXnatObjectPrivate.h"
 #include "ctkXnatSession.h"
 
+const QString ctkXnatResource::TAGS = "tags";
+const QString ctkXnatResource::FORMAT = "format";
+const QString ctkXnatResource::CONTENT = "content";
+
 const QString ctkXnatResource::ID = "xnat_abstractresource_id";
 //----------------------------------------------------------------------------
 class ctkXnatResourcePrivate : public ctkXnatObjectPrivate
@@ -91,6 +95,41 @@ void ctkXnatResource::setLabel(const QString &label)
 }
 
 //----------------------------------------------------------------------------
+void ctkXnatResource::setFormat(const QString &fileFormat)
+{
+  this->setProperty(FORMAT, fileFormat);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatResource::format() const
+{
+  return this->property(FORMAT);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatResource::setContent(const QString &fileContent)
+{
+  this->setProperty(CONTENT, fileContent);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatResource::content() const
+{
+  return this->property(CONTENT);
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatResource::setTags(const QString &fileTags)
+{
+  this->setProperty(TAGS, fileTags);
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatResource::tags() const
+{
+  return this->property(TAGS);
+}
+//----------------------------------------------------------------------------
 void ctkXnatResource::reset()
 {
   ctkXnatObject::reset();

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

@@ -56,11 +56,26 @@ public:
   /// Sets the label of the object.
   void setLabel(const QString& label);
 
+  void setFormat(const QString& format);
+  QString format() const;
+
+  void setTags(const QString& tags);
+  QString tags() const;
+
+  void setContent(const QString& content);
+  QString content() const;
+
+  void setLocalFilePath(const QString& filepath);
+  QString localFilePath() const;
+
   void reset();
 
   void saveImpl();
 
   static const QString ID;
+  static const QString TAGS;
+  static const QString FORMAT;
+  static const QString CONTENT;
 
 private: