Просмотр исходного кода

Added new class ctkXnatResourceFolder.

This is neccessary since you want to create resource folders on the server
Andreas Fetzer лет назад: 10
Родитель
Сommit
51cd8da9ba

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

@@ -25,6 +25,7 @@ set(KIT_SRCS
   ctkXnatScanFolder.cpp
   ctkXnatAssessor.cpp
   ctkXnatAssessorFolder.cpp
+  ctkXnatResourceFolder.cpp
   ctkXnatSession.cpp
   ctkXnatSettings.cpp
   ctkXnatSubject.cpp

+ 3 - 18
Libs/XNAT/Core/ctkXnatObject.cpp

@@ -24,6 +24,7 @@
 
 #include "ctkXnatDataModel.h"
 #include "ctkXnatDefaultSchemaTypes.h"
+#include "ctkXnatResourceFolder.h"
 #include "ctkXnatSession.h"
 
 #include <QDateTime>
@@ -355,24 +356,8 @@ void ctkXnatObject::commit ()
 //----------------------------------------------------------------------------
 void ctkXnatObject::fetchResources(const QString& path)
 {
-  QString query = this->resourceUri() + path;
-  ctkXnatSession* const session = this->session();
-  QUuid queryId = session->httpGet(query);
-
-  QList<ctkXnatObject*> resources = session->httpResults(queryId,
-                                                           ctkXnatDefaultSchemaTypes::XSI_RESOURCE);
-
-  foreach (ctkXnatObject* resource, resources)
-  {
-    QString label = resource->name();
-    if (label.isEmpty())
-    {
-      label = "NO NAME";
-    }
-
-    resource->setName(label);
-    this->add(resource);
-  }
+  ctkXnatResourceFolder* resFolder = new ctkXnatResourceFolder();
+  this->add(resFolder);
 }
 
 //----------------------------------------------------------------------------

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

@@ -51,7 +51,7 @@ ctkXnatResource::~ctkXnatResource()
 //----------------------------------------------------------------------------
 QString ctkXnatResource::resourceUri() const
 {
-  return QString("%1/resources/%2").arg(parent()->resourceUri(), this->id());
+  return QString("%1/%2").arg(parent()->resourceUri(), this->id());
 }
 
 //----------------------------------------------------------------------------

+ 101 - 0
Libs/XNAT/Core/ctkXnatResourceFolder.cpp

@@ -0,0 +1,101 @@
+/*=============================================================================
+
+  Library: XNAT/Core
+
+  Copyright (c) University College London,
+    Centre for Medical Image Computing
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+#include "ctkXnatResourceFolder.h"
+
+#include "ctkXnatDefaultSchemaTypes.h"
+#include "ctkXnatObjectPrivate.h"
+#include "ctkXnatResource.h"
+#include "ctkXnatSession.h"
+
+//----------------------------------------------------------------------------
+class ctkXnatResourceFolderPrivate : public ctkXnatObjectPrivate
+{
+public:
+
+  ctkXnatResourceFolderPrivate()
+  : ctkXnatObjectPrivate()
+  {
+  }
+
+  void reset()
+  {
+  }
+
+};
+
+
+//----------------------------------------------------------------------------
+ctkXnatResourceFolder::ctkXnatResourceFolder(ctkXnatObject* parent)
+  : ctkXnatObject(*new ctkXnatResourceFolderPrivate(), parent, QString::null)
+{
+  this->setId("resources");
+  this->setProperty(LABEL, "Resources");
+}
+
+//----------------------------------------------------------------------------
+ctkXnatResourceFolder::~ctkXnatResourceFolder()
+{
+}
+
+//----------------------------------------------------------------------------
+QString ctkXnatResourceFolder::resourceUri() const
+{
+  return QString("%1/%2").arg(parent()->resourceUri(), this->id());
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatResourceFolder::reset()
+{
+  ctkXnatObject::reset();
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatResourceFolder::fetchImpl()
+{
+  QString query = this->resourceUri();
+  ctkXnatSession* const session = this->session();
+  QUuid queryId = session->httpGet(query);
+
+  QList<ctkXnatObject*> resources = session->httpResults(queryId,
+                                                           ctkXnatDefaultSchemaTypes::XSI_RESOURCE);
+
+  foreach (ctkXnatObject* resource, resources)
+  {
+    QString label = resource->name();
+    if (label.isEmpty())
+    {
+      label = "NO NAME";
+    }
+
+    resource->setName(label);
+    this->add(resource);
+  }
+}
+
+//----------------------------------------------------------------------------
+void ctkXnatResourceFolder::downloadImpl(const QString& filename)
+{
+  QString query = this->resourceUri() + "/ALL/files";
+  ctkXnatSession::UrlParameters parameters;
+  parameters["format"] = "zip";
+  this->session()->download(filename, query, parameters);
+}

+ 56 - 0
Libs/XNAT/Core/ctkXnatResourceFolder.h

@@ -0,0 +1,56 @@
+/*=============================================================================
+
+  Library: XNAT/Core
+
+  Copyright (c) University College London,
+    Centre for Medical Image Computing
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+#ifndef ctkXnatResourceFolder_h
+#define ctkXnatResourceFolder_h
+
+#include "ctkXNATCoreExport.h"
+
+#include "ctkXnatObject.h"
+
+class ctkXnatResourceFolderPrivate;
+
+/**
+ * @ingroup XNAT_Core
+ */
+class CTK_XNAT_CORE_EXPORT ctkXnatResourceFolder : public ctkXnatObject
+{
+
+public:
+
+  ctkXnatResourceFolder(ctkXnatObject* parent = NULL);
+
+  virtual ~ctkXnatResourceFolder();
+
+  virtual QString resourceUri() const;
+
+  void reset();
+
+private:
+
+  friend class qRestResult;
+  virtual void fetchImpl();
+  virtual void downloadImpl(const QString&);
+
+  Q_DECLARE_PRIVATE(ctkXnatResourceFolder)
+};
+
+#endif