Преглед на файлове

ctkXnatConnection* moved from ctkXnatObject to ctkXnatServer

Miklos Espak преди 11 години
родител
ревизия
8e472339a7

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

@@ -146,7 +146,6 @@ ctkXnatServer::Pointer ctkXnatConnection::server() const
 void ctkXnatConnection::fetch(const ctkXnatServer::Pointer& server)
 {
   Q_D(ctkXnatConnection);
-  //qDebug() << "ctkXnatConnection::fetch(ctkXnatServer* server)";
 
   QString query("/data/archive/projects");
 

+ 17 - 12
Libs/XNAT/Core/ctkXnatObject.cpp

@@ -22,9 +22,10 @@
 #include "ctkXnatObject.h"
 #include "ctkXnatObjectPrivate.h"
 
+#include "ctkXnatServer.h"
+#include <QVariant>
 #include <QDebug>
 
-
 ctkXnatObject::~ctkXnatObject()
 {
 }
@@ -73,14 +74,11 @@ QList<ctkXnatObject::Pointer> ctkXnatObject::getChildren() const
   return d->children;
 }
 
-void ctkXnatObject::addChild(const ctkXnatObject::Pointer& child)
+void ctkXnatObject::addChild(ctkXnatObject::Pointer& child)
 {
   Q_D(ctkXnatObject);
   d->children.push_back(child);
-  if (child->getConnection() == NULL)
-  {
-    child->d_func()->connection = this->getConnection();
-  }
+  child->d_func()->parent = d->selfPtr;
 }
 
 void ctkXnatObject::reset()
@@ -121,20 +119,27 @@ bool ctkXnatObject::isModifiable() const
   return false;
 }
 
-ctkXnatObject::ctkXnatObject(ctkXnatConnection* connection)
-  : d_ptr(new ctkXnatObjectPrivate(connection))
+ctkXnatObject::ctkXnatObject()
+: d_ptr(new ctkXnatObjectPrivate())
 {
 }
 
-ctkXnatObject::ctkXnatObject(ctkXnatObjectPrivate& dd)
-  : d_ptr(&dd)
+ctkXnatObject::ctkXnatObject(ctkXnatObjectPrivate& d)
+: d_ptr(&d)
 {
 }
 
 ctkXnatConnection* ctkXnatObject::getConnection() const
 {
-  Q_D(const ctkXnatObject);
-  return d->connection;
+  const ctkXnatObject* xnatObject = this;
+  const ctkXnatServer* server;
+  do {
+    xnatObject = xnatObject->getParent().data();
+    server = dynamic_cast<const ctkXnatServer*>(xnatObject);
+  }
+  while (xnatObject && !server);
+
+  return server ? xnatObject->getConnection() : 0;
 }
 
 void ctkXnatObject::setId(const QString& id)

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

@@ -53,7 +53,7 @@ public:
   ctkXnatObject::Pointer getParent() const;
   QList<ctkXnatObject::Pointer> getChildren() const;
 
-  void addChild(const Pointer& child);
+  void addChild(Pointer& child);
 
   virtual void reset();
   void fetch();
@@ -68,10 +68,10 @@ public:
 
 protected:
 
-  ctkXnatObject(ctkXnatConnection* connection);
+  ctkXnatObject();
   ctkXnatObject(ctkXnatObjectPrivate& dd);
 
-  ctkXnatConnection* getConnection() const;
+  virtual ctkXnatConnection* getConnection() const;
 
   void setId(const QString& id);
   void setName(const QString& name);

+ 1 - 2
Libs/XNAT/Core/ctkXnatObjectPrivate.cpp

@@ -23,8 +23,7 @@
 
 #include <QString>
 
-ctkXnatObjectPrivate::ctkXnatObjectPrivate(ctkXnatConnection* connection)
-  : connection(connection)
+ctkXnatObjectPrivate::ctkXnatObjectPrivate()
 {
 }
 

+ 1 - 2
Libs/XNAT/Core/ctkXnatObjectPrivate.h

@@ -37,7 +37,7 @@ public:
   typedef QMap<QString,QString>::Iterator PropertyMapIterator;
   typedef QMap<QString,QString>::ConstIterator PropertyMapConstInterator;
 
-  explicit ctkXnatObjectPrivate(ctkXnatConnection* connection);
+  explicit ctkXnatObjectPrivate();
   virtual ~ctkXnatObjectPrivate();
 
   QWeakPointer<ctkXnatObject> selfPtr;
@@ -50,7 +50,6 @@ private:
   QMap<QString,QString> properties;
 
   QWeakPointer<ctkXnatObject> parent;
-  ctkXnatConnection* connection;
 };
 
 #endif // CTKXNATOBJECTPRIVATE_H

+ 9 - 8
Libs/XNAT/Core/ctkXnatProject.cpp

@@ -28,9 +28,10 @@ class ctkXnatProjectPrivate : public ctkXnatObjectPrivate
 {
 public:
 
-  ctkXnatProjectPrivate(ctkXnatConnection* connection)
-    : ctkXnatObjectPrivate(connection)
-  {}
+  ctkXnatProjectPrivate()
+  : ctkXnatObjectPrivate()
+  {
+  }
 
   void reset()
   {
@@ -46,14 +47,14 @@ public:
   QString uri;
 };
 
-ctkXnatProject::ctkXnatProject(ctkXnatConnection* connection)
-  : ctkXnatObject(*new ctkXnatProjectPrivate(connection))
+ctkXnatProject::ctkXnatProject()
+: ctkXnatObject(*new ctkXnatProjectPrivate())
 {
 }
 
-ctkXnatProject::Pointer ctkXnatProject::Create(ctkXnatConnection* connection)
+ctkXnatProject::Pointer ctkXnatProject::Create()
 {
-  Pointer project(new ctkXnatProject(connection));
+  Pointer project(new ctkXnatProject());
   project->d_func()->selfPtr = project;
   return project;
 }
@@ -120,7 +121,7 @@ void ctkXnatProject::fetchImpl()
 {
   Q_D(ctkXnatProject);
   ctkXnatObject::Pointer self = d->selfPtr;
-  getConnection()->fetch(self.staticCast<ctkXnatProject>());
+  this->getConnection()->fetch(self.staticCast<ctkXnatProject>());
 }
 
 void ctkXnatProject::remove()

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

@@ -37,7 +37,7 @@ public:
   typedef QSharedPointer<ctkXnatProject> Pointer;
   typedef QWeakPointer<ctkXnatProject> WeakPointer;
 
-  static Pointer Create(ctkXnatConnection* connection);
+  static Pointer Create();
 
   virtual ~ctkXnatProject();
 
@@ -61,7 +61,7 @@ private:
 
   friend class qRestResult;
 
-  explicit ctkXnatProject(ctkXnatConnection* connection = NULL);
+  explicit ctkXnatProject();
 
   virtual void fetchImpl();
 

+ 27 - 1
Libs/XNAT/Core/ctkXnatServer.cpp

@@ -26,8 +26,29 @@
 
 #include <QDebug>
 
+class ctkXnatServerPrivate : public ctkXnatObjectPrivate
+{
+  explicit ctkXnatServerPrivate(ctkXnatConnection* connection);
+  virtual ~ctkXnatServerPrivate();
+
+private:
+  friend class ctkXnatServer;
+
+  ctkXnatConnection* connection;
+};
+
+ctkXnatServerPrivate::ctkXnatServerPrivate(ctkXnatConnection* connection)
+: ctkXnatObjectPrivate()
+, connection(connection)
+{
+}
+
+ctkXnatServerPrivate::~ctkXnatServerPrivate()
+{
+}
+
 ctkXnatServer::ctkXnatServer(ctkXnatConnection* connection)
-  : ctkXnatObject(connection)
+: ctkXnatObject(*new ctkXnatServerPrivate(connection))
 {
 }
 
@@ -46,3 +67,8 @@ void ctkXnatServer::fetchImpl()
   return getConnection()->fetch(self.staticCast<ctkXnatServer>());
 }
 
+ctkXnatConnection* ctkXnatServer::getConnection() const
+{
+  Q_D(const ctkXnatServer);
+  return d->connection;
+}

+ 7 - 2
Libs/XNAT/Core/ctkXnatServer.h

@@ -27,6 +27,7 @@
 #include "ctkXnatObject.h"
 
 class ctkXnatConnection;
+class ctkXnatServerPrivate;
 
 class CTK_XNAT_CORE_EXPORT ctkXnatServer : public ctkXnatObject
 {
@@ -38,14 +39,18 @@ public:
 
   static Pointer Create(ctkXnatConnection* connection);
 
+protected:
+
+  virtual ctkXnatConnection* getConnection() const;
+
 private:
 
   ctkXnatServer(ctkXnatConnection* connection);
 
   virtual void fetchImpl();
 
-  Q_DECLARE_PRIVATE(ctkXnatObject)
-
+  Q_DECLARE_PRIVATE(ctkXnatServer)
+  Q_DISABLE_COPY(ctkXnatServer)
 };
 
 #endif

+ 8 - 7
Libs/XNAT/Core/ctkXnatSubject.cpp

@@ -30,9 +30,10 @@ class ctkXnatSubjectPrivate : public ctkXnatObjectPrivate
 {
 public:
 
-  ctkXnatSubjectPrivate(ctkXnatConnection* connection)
-    : ctkXnatObjectPrivate(connection)
-  {}
+  ctkXnatSubjectPrivate()
+  : ctkXnatObjectPrivate()
+  {
+  }
 
   void reset()
   {
@@ -49,8 +50,8 @@ public:
   QList<ctkXnatProject::WeakPointer> projects;
 };
 
-ctkXnatSubject::ctkXnatSubject(ctkXnatConnection* connection)
-: ctkXnatObject(*new ctkXnatSubjectPrivate(connection))
+ctkXnatSubject::ctkXnatSubject()
+: ctkXnatObject(*new ctkXnatSubjectPrivate())
 {
 }
 
@@ -107,9 +108,9 @@ void ctkXnatSubject::fetchImpl()
   getConnection()->fetch(self.staticCast<ctkXnatSubject>());
 }
 
-ctkXnatSubject::Pointer ctkXnatSubject::Create(ctkXnatConnection* connection)
+ctkXnatSubject::Pointer ctkXnatSubject::Create()
 {
-  Pointer subject(new ctkXnatSubject(connection));
+  Pointer subject(new ctkXnatSubject());
   subject->d_func()->selfPtr = subject;
   return subject;
 }

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

@@ -37,7 +37,7 @@ public:
   typedef QSharedPointer<ctkXnatSubject> Pointer;
   typedef QWeakPointer<ctkXnatSubject> WeakPointer;
 
-  static Pointer Create(ctkXnatConnection* connection);
+  static Pointer Create();
 
   virtual ~ctkXnatSubject();
 
@@ -59,7 +59,7 @@ private:
 
   friend class qRestResult;
 
-  explicit ctkXnatSubject(ctkXnatConnection* connection = NULL);
+  explicit ctkXnatSubject();
 
   virtual void fetchImpl();